[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"newsletter-posts-all":3,"newsletter-post-virtual-threads-spring":18770},[4,221,438,702,909,1052,1157,1375,1550,1851,2038,2215,2520,2776,2971,3339,3497,3694,3885,4058,4265,4503,4679,4808,4943,5076,5433,5674,5892,6074,6250,6569,6780,7011,7165,7409,7583,7980,8144,8270,8349,8591,8821,8966,9074,9328,9463,9643,9923,10094,10229,10373,10528,10674,10820,11016,11142,11351,11507,11727,11854,11991,12045,12184,12350,12527,12778,12977,13179,13301,13497,13708,13901,14035,14196,14345,14699,14885,15077,15196,15480,15642,15819,16231,16433,16618,17017,17173,17512,17648,17810,17999,18149,18345,18598,18770,18970,19176,19364,19556,19733,19975,20173,20368,20580,20793,21013,21168,21431,21649,21941,22342,22715,23144,23579,24105,24475,24833,25164,25431,25760,26144,26458,26730,27025,27305,27519,27825,28067,28297,28521,28710,28806,29103,29428,29616,30250,30453,30772,31084,31411,32370,32725,33010,33329,33561,33813,33978,34149,34412,34677,34958,35257,35540,35800,36040,36271,36513,36719,37022,37197,37431,37702,37987,38213,38422,38688,38947,39153,39468,39803,40048,40233,40438,40696,40862,41089,41284],{"_id":5,"path":6,"title":7,"description":8,"meta":9,"body":12},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow.md","\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow","Embabel 1.0 Goes GA, Spring AI 2.0 Tool-Calling, and My Content Workflow","Embabel hits 1.0, building Claude's 'Calling tool...' UI with Spring AI 2.0, what that docker-compose.yml in every Java repo actually does, and a podcast surprise.",{"slug":10,"date":11},"embabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow","2026-07-27",{"type":13,"value":14,"toc":199},"minimark",[15,19,27,32,37,40,43,46,50,54,57,60,63,67,71,77,80,83,90,94,104,108,111,120,124,128,131,134,137,141,145,148,151,155,158,165,169,173,176,185],[16,17,18],"p",{},"Happy Monday. Hard to believe July is almost over.",[16,20,21,22],{},"I'm still working hard on my content creation pipeline. It's a work in progress, and I don't think it will ever really be done. Every time I revisit a phase of the process, I try to improve one piece of it. If you want to see how the whole thing fits together, I wrote it all up here: ",[23,24,26],"a",{"href":25},"\u002Fblog\u002Fcontent-creation-workflow","https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fcontent-creation-workflow",[28,29,31],"h2",{"id":30},"videos","Videos",[33,34,36],"h3",{"id":35},"build-claudes-calling-tool-ui-with-spring-ai-20","Build Claude's \"Calling Tool...\" UI with Spring AI 2.0",[16,38,39],{},"You've seen it in Claude and other AI apps: that little \"Calling tool...\" message that pops up while the model does its thing. In this video I show you how to build that same experience with Spring AI 2.0.",[16,41,42],{},"We watch the new tool-calling loop run live. I walk through streaming tool-call events through the ToolCallingAdvisor so your UI can react as things happen. That's what makes the difference between a spinner and an interface that actually tells the user what's going on.",[16,44,45],{},"I also cover how to take manual control when you need it. The automatic loop is great for most cases, but sometimes you want to step in. If you're building anything with agents on the JVM, this one is worth your time.",[47,48],"you-tube",{"id":49},"g6IhOsFKM7c",[33,51,53],{"id":52},"clone-run-done-what-that-docker-composeyml-in-every-java-repo-actually-does","Clone. Run. Done. What That docker-compose.yml in Every Java Repo Actually Does",[16,55,56],{},"Here's the dream. You clone a Java project and it just runs. No onboarding doc, no \"go install Postgres first\" step, no wiki page from three years ago. That's what the compose file in the repo is really doing for you.",[16,58,59],{},"There are two sides to Docker, and this video covers the one nobody explains well. You run your dependencies (Postgres, Redis, whatever) in containers, while your app keeps running normally on your machine. Once you get this pattern, spinning up a new project stops being a chore.",[47,61],{"id":62},"0LNVXHKKJb8",[28,64,66],{"id":65},"blog-posts","Blog Posts",[33,68,70],{"id":69},"embabel-10-is-here-ai-agent-framework-for-java-goes-ga","Embabel 1.0 Is Here: AI Agent Framework for Java Goes GA",[16,72,73],{},[74,75],"img",{"alt":70,"src":76},"\u002Fimages\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-ga.jpg",[16,78,79],{},"If you've been waiting for a stable release before you took agentic AI on the JVM seriously, the wait is over. Embabel just hit 1.0.0. Rod Johnson announced the GA release of his AI agent framework for the JVM, thanking the contributors who got it across the finish line.",[16,81,82],{},"I've been hands-on with Embabel for a while now, so I used this milestone to break down why it matters. The post explains what an AI agent actually is (goals, tools, planning, and a feedback loop, not just a single LLM call), what changed on the road to 1.0, and how you can get started today. If the word \"agent\" still feels fuzzy to you, start here.",[16,84,85,86],{},"Read the full post: ",[23,87,89],{"href":88},"\u002Fblog\u002Fembabel-1-0-ga","https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fembabel-1-0-ga",[28,91,93],{"id":92},"spring-office-hours","Spring Office Hours",[16,95,96,97,103],{},"We didn't publish a new episode this week, but we are working on some new episodes. As always check the ",[23,98,102],{"href":99,"rel":100},"https:\u002F\u002Fspringofficehours.io\u002Fschedule",[101],"nofollow","schedule"," for upcoming shows.",[28,105,107],{"id":106},"podcast-appearances","Podcast Appearances",[16,109,110],{},"Last week I was in the car driving and I pulled up my podcast player to find something to listen to. I was scrolling along and I saw that the Inside Java Podcast was talking about Spring AI. I thought to myself I wonder who is talking about that. I would love to be a guest on that podcast. I play the episode and to my surprise it was me 🤣",[16,112,113,114,119],{},"I joined Lize Raes on the ",[23,115,118],{"href":116,"rel":117},"https:\u002F\u002Finside.java\u002F2026\u002F07\u002F23\u002Fpodcast-063\u002F",[101],"Inside Java Podcast"," for episode 63 to talk about Spring AI 2.0. This episode was recorded at JavaOne back in March and we got to record it in a fancy studio. We got into deterministic agents, MCP servers and skills, prompt engineering, and why Java is such a good fit for enterprise AI. If you want the bigger picture on where Spring AI is headed, give it a listen.",[28,121,123],{"id":122},"upcoming-speaking-engagements","Upcoming Speaking Engagements",[33,125,127],{"id":126},"portland-java-user-group","Portland Java User Group",[16,129,130],{},"August 25, 2026 in Portland, OR",[16,132,133],{},"I'm giving my talk \"AI for Java Developers.\" AI is everywhere right now, and this session bridges the gap between traditional Java development and AI. I explain the core ideas of AI, machine learning, and deep learning using concepts Java developers already know, then show how your existing skills carry over.",[16,135,136],{},"We work through hands-on examples: natural language processing, chatbots, recommendation systems, and sentiment analysis in Java systems. You'll leave with a solid foundation to start adding these features to your own work.",[28,138,140],{"id":139},"in-the-news","In the News",[33,142,144],{"id":143},"why-ai-wont-replace-great-java-developers-josh-long-the-marco-show","Why AI Won't Replace Great Java Developers - Josh Long | The Marco Show",[16,146,147],{},"Josh Long sat down on The Marco Show to make the case that AI isn't coming for great Java developers. It's a good watch if you've had that nagging worry in the back of your head lately.",[47,149],{"id":150},"_ftzJ33mCTI",[33,152,154],{"id":153},"were-launching-buzz","We're launching Buzz!",[16,156,157],{},"Jack announced Buzz, a new native workspace built for teams of humans and agents working together.",[16,159,160,164],{},[161,162,163],"strong",{},"Dan's Thoughts:"," A new native workspace for human + agent teams. We keep seeing tools reshape themselves around agents instead of bolting agents onto old workflows. Worth keeping an eye on.",[166,167],"tweet-embed",{"id":168},"2079605800998146171",[28,170,172],{"id":171},"until-next-week","Until Next Week",[16,174,175],{},"That's it for this week. If there's a topic you want me to cover, or a question about Spring AI, Embabel, or Docker Compose in your projects, just hit reply. I read everything.",[16,177,178,179,184],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any questions for me or topics you would like me to cover please feel free to reply to this email or reach out to me on ",[23,180,183],{"href":181,"rel":182},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega",[101],"Twitter",".",[16,186,187,188,191,192,194],{},"Happy Coding,",[189,190],"br",{},"\nDan Vega",[189,193],{},[23,195,198],{"href":196,"rel":197},"https:\u002F\u002Fwww.danvega.dev\u002F",[101],"https:\u002F\u002Fwww.danvega.dev",{"title":200,"searchDepth":201,"depth":201,"links":202},"",2,[203,208,211,212,213,216,220],{"id":30,"depth":201,"text":31,"children":204},[205,207],{"id":35,"depth":206,"text":36},3,{"id":52,"depth":206,"text":53},{"id":65,"depth":201,"text":66,"children":209},[210],{"id":69,"depth":206,"text":70},{"id":92,"depth":201,"text":93},{"id":106,"depth":201,"text":107},{"id":122,"depth":201,"text":123,"children":214},[215],{"id":126,"depth":206,"text":127},{"id":139,"depth":201,"text":140,"children":217},[218,219],{"id":143,"depth":206,"text":144},{"id":153,"depth":206,"text":154},{"id":171,"depth":201,"text":172},{"_id":222,"path":223,"title":224,"description":225,"meta":226,"body":229},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F20\u002Fsmarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary.md","\u002Fnewsletter\u002F2026\u002F07\u002F20\u002Fsmarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary","Smarter AI Agents, Spring Boot 4.1 with Phil Webb, and the Java Documentary","Taming tool overload in Spring AI, Spring Boot 4.1 straight from the source with Phil Webb, self-correcting structured output, and the Java documentary.",{"slug":227,"date":228},"smarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary","2026-07-20",{"type":13,"value":230,"toc":423},[231,234,237,245,250,253,257,261,264,267,270,273,277,280,283,287,290,293,296,300,309,312,314,317,326,329,338,341,345,348,357,365,367,371,374,377,382,386,389,392,395,398,401,404,406,409,414],[16,232,233],{},"Hey friends",[16,235,236],{},"Big couple of weeks. I shipped a bunch of videos, most of them digging into Spring AI tooling, and I finally sat down to fix up some things that have been bugging me for a while.",[16,238,239,240,244],{},"The website got the most attention. There's a new ",[23,241,243],{"href":242},"\u002Fpodcasts","podcasts page"," that pulls episodes straight from the RSS feeds for Spring Office Hours and Fundamentals of Software Engineering, plus my guest appearances on other shows. The Fundamentals of Software Engineering book page got a refresh for the release. I rebuilt the about page, turned my Spring Boot 4 post into a proper hub for everything Boot 4, and rolled the terminal look across the whole site, right down to the new blog post covers. Along the way I squashed a bunch of little bugs that have been hiding in there for months: broken cover images, weird tag rendering, social share cards that ignored the post cover.",[16,246,247,248],{},"While I was at it, I mapped out my entire content creation process. It turns out there are ten stages between \"I have an idea\" and a video that's published, repurposed, and promoted. Writing it all down made the bottlenecks obvious, and it showed me exactly where AI could take work off my plate. If you're curious how I actually put this stuff together, I wrote the whole thing up here: ",[23,249,26],{"href":25},[16,251,252],{},"Let's get into it.",[28,254,256],{"id":255},"videos-this-week","Videos This Week",[33,258,260],{"id":259},"spring-ai-tool-search","Spring AI Tool Search",[16,262,263],{},"As your AI agents connect to more services like Slack, GitHub, Jira, and MCP servers, your tool libraries grow fast. A typical multi-server setup can pull in 50+ tools and burn through 55,000+ tokens before the conversation even starts. That's expensive and slow.",[16,265,266],{},"There's another problem too. Tool selection accuracy drops off a cliff once the model has to pick between 30+ similarly-named tools. It starts guessing, and guessing is not what you want in production.",[16,268,269],{},"This video walks through how tool search solves both problems by only surfacing the tools that matter for a given request. If you're building anything with agents right now, start here.",[47,271],{"id":272},"VG00DildlvY",[33,274,276],{"id":275},"spring-ai-tool-search-advisors","Spring AI Tool Search Advisors",[16,278,279],{},"This one builds on the tool search idea and shows you how to wire it up with advisors. If you've watched the first video and want to see how this fits into a real request pipeline, this is your next stop.",[47,281],{"id":282},"WNJFR-_N9bc",[33,284,286],{"id":285},"self-correcting-structured-output","Self Correcting Structured Output",[16,288,289],{},"Getting structured output from an LLM is great until the model hands you back something that doesn't match your schema. This video covers a pattern where the model checks its own work and fixes the output before it gets to your code.",[16,291,292],{},"If you've ever parsed a response and had it blow up on a missing field, you'll want to see this approach.",[47,294],{"id":295},"vxOeeNyOtZY",[33,297,299],{"id":298},"uish-introduction","ui.sh Introduction",[16,301,302,303,308],{},"A quick intro to ",[23,304,307],{"href":305,"rel":306},"https:\u002F\u002Fui.sh",[101],"ui.sh"," and what it brings to the table. Short and to the point, worth a look if you want to see what it's about.",[47,310],{"id":311},"-B7uyMp54S4",[28,313,93],{"id":92},[16,315,316],{},"Two episodes went out over the last couple of weeks and both are worth your time.",[16,318,319,320,325],{},"First up, ",[23,321,324],{"href":322,"rel":323},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F7b0e4e93",[101],"S5E17 - Spring Boot 4.1 with Phil Webb",". Phil joined us to talk through what's coming in Spring Boot 4.1. Any time Phil is on the show you know we're getting the details straight from the source.",[47,327],{"id":328},"4MYFKQkvwNw",[16,330,331,332,337],{},"Then we did ",[23,333,336],{"href":334,"rel":335},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F15c533f2",[101],"S5E18: The Latest from OpenAI, Anthropic and Spring AI 2.0",". We caught up on everything moving in the AI space and dug into what Spring AI 2.0 means for Java developers building AI features.",[47,339],{"id":340},"MHsJMlq3wSI",[28,342,344],{"id":343},"fundamentals-of-software-engineering","Fundamentals of Software Engineering",[16,346,347],{},"Two more episodes dropped on the podcast side.",[16,349,350,351,356],{},"In ",[23,352,355],{"href":353,"rel":354},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F6d675095",[101],"E09 - Effective Remote Work Tips and Why AI Doom Trolling Is a Choice",", we shared some practical advice on making remote work actually work, and got into why all the AI doom talk is a choice you don't have to make.",[16,358,350,359,364],{},[23,360,363],{"href":361,"rel":362},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002Fdaff9573",[101],"E10 - Context Engineering Is Just Data Fundamentals in Disguise",", we made the case that context engineering isn't some brand new discipline. It's the same data fundamentals you already know, wearing a new hat. If you've been feeling behind on the AI hype cycle, this one should make you feel a lot better.",[28,366,140],{"id":139},[33,368,370],{"id":369},"the-java-documentary-has-been-released","The Java Documentary has been released",[16,372,373],{},"The cult.repo team dropped their Java documentary, and it's a great watch for anyone who cares about the language and its history.",[47,375],{"id":376},"ZqGSg4b_cZA",[16,378,379,381],{},[161,380,163],{}," This was another amazing documentary by the cult.repo team. I loved every minute of it.",[28,383,385],{"id":384},"tweets","Tweets",[16,387,388],{},"My take on why Java is a real option for building AI into applications:",[166,390],{"id":391},"2077411020901875832",[16,393,394],{},"Some behind the scenes on organizing and refining my skills setup:",[166,396],{"id":397},"2078126210178007531",[16,399,400],{},"How I used Claude to handle about 70% of the editing on my latest video, including some custom motion graphics skills:",[166,402],{"id":403},"2078122342417392090",[28,405,172],{"id":171},[16,407,408],{},"That's it for this edition. If there's a topic you want me to cover or a question you've been sitting on, just hit reply. I read everything.",[16,410,178,411,184],{},[23,412,183],{"href":181,"rel":413},[101],[16,415,187,416,191,418,420],{},[189,417],{},[189,419],{},[23,421,198],{"href":196,"rel":422},[101],{"title":200,"searchDepth":201,"depth":201,"links":424},[425,431,432,433,436,437],{"id":255,"depth":201,"text":256,"children":426},[427,428,429,430],{"id":259,"depth":206,"text":260},{"id":275,"depth":206,"text":276},{"id":285,"depth":206,"text":286},{"id":298,"depth":206,"text":299},{"id":92,"depth":201,"text":93},{"id":343,"depth":201,"text":344},{"id":139,"depth":201,"text":140,"children":434},[435],{"id":369,"depth":206,"text":370},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":439,"path":440,"title":441,"description":442,"meta":443,"body":446},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F06\u002Fseven-videos-two-very-busy-weeks-of-spring-boot-4-1.md","\u002Fnewsletter\u002F2026\u002F07\u002F06\u002Fseven-videos-two-very-busy-weeks-of-spring-boot-4-1","Seven Videos, Two Very Busy Weeks of Spring Boot 4.1","Two busy weeks of content covering Spring Boot 4.1: gRPC support, lazy JDBC connections, the new @RedisListener, SSRF protection, type-safe property paths, and more.",{"slug":444,"date":445},"seven-videos-two-very-busy-weeks-of-spring-boot-4-1","2026-07-06",{"type":13,"value":447,"toc":684},[448,451,454,458,462,465,473,476,480,487,490,493,496,500,506,509,512,516,523,534,537,541,544,547,550,554,557,560,563,567,577,590,593,595,598,607,614,616,619,626,628,632,635,642,647,651,654,660,665,667,670,675],[16,449,450],{},"Happy Monday, friends!",[16,452,453],{},"I hope you had a great weekend. The past couple of weeks was an absolute blur of content creation. I published seven videos, and almost all of them cover new features in Spring Boot 4.1. I've been deep in the Spring Boot 4.1 release and there's so much good stuff to talk about. From gRPC support to lazy JDBC connections to a brand new Redis annotation, this release is packed. Let me catch you up on everything.",[28,455,457],{"id":456},"video-recaps","Video Recaps",[33,459,461],{"id":460},"getting-started-with-spring-grpc-in-spring-boot-41","Getting Started with Spring gRPC in Spring Boot 4.1",[16,463,464],{},"gRPC in Java used to mean dealing with proto files, code generation, build plugins, server wiring, and client channels. A lot of ceremony before you could even get a \"hello world\" running. Spring Boot 4.1 changes that story. If you can build a REST app, you already know the patterns.",[16,466,467,468,472],{},"In this video I walk through the new Spring gRPC support that ships with Spring Boot 4.1. You'll define a contract, drop in a ",[469,470,471],"code",{},"@GrpcService"," annotation, and you're off to the races. It's the same developer experience you're used to with Spring, now applied to gRPC.",[47,474],{"id":475},"MPHuBNqbYPM",[33,477,479],{"id":478},"lazy-jdbc-connections-in-spring-boot-41-performance-win","Lazy JDBC Connections in Spring Boot 4.1 (Performance Win)",[16,481,482,483,486],{},"One property change took connection hold time from 2 seconds down to 15 milliseconds. That's not a typo. The new ",[469,484,485],{},"spring.datasource.connection-fetch=lazy"," property in Spring Boot 4.1 is a real performance win that you need to know about.",[16,488,489],{},"I built a complete demo application with Spring Data JDBC, Postgres, Docker Compose, and Spring Boot Actuator to measure the real-world difference between eager and lazy connection fetching. Your transactional methods currently grab a connection the moment they open, even when they never run a query. A cache hit, an early return, a slow API call before the save: that connection just sits idle. Lazy mode fixes this.",[16,491,492],{},"This one really resonated on Twitter too, with over 8,000 impressions. It's a small change with a big impact.",[47,494],{"id":495},"lsaBN1U2EB8",[33,497,499],{"id":498},"spring-boot-41-block-ssrf-attacks-with-inetaddressfilter","Spring Boot 4.1: Block SSRF Attacks with InetAddressFilter",[16,501,502,503,184],{},"Did you know that a simple URL preview endpoint could expose your internal secrets to attackers? SSRF (Server-Side Request Forgery) attacks are a real threat, and Spring Boot 4.1 now gives you built-in protection with the new ",[469,504,505],{},"InetAddressFilter",[16,507,508],{},"In this tutorial I build a real-world example from scratch: a URL preview endpoint that's vulnerable to SSRF, and then fix it with just one configuration bean. If you're building any application that makes outbound HTTP calls based on user input, this video is for you.",[47,510],{"id":511},"PDbBG_GrcwU",[33,513,515],{"id":514},"spring-boot-41-the-new-redislistener-simplifies-everything","Spring Boot 4.1: The New @RedisListener Simplifies Everything",[16,517,518,519,522],{},"If you've ever wired up Redis Pub\u002FSub in Spring, you know the pain. Message listener containers, listener adapters, raw byte array payloads. It was a lot of boilerplate for something that should be simple. Spring Boot 4.1 fixes this with the new ",[469,520,521],{},"@RedisListener"," annotation.",[16,524,525,526,529,530,533],{},"I build a simple order publishing and subscribing system from scratch, comparing the old boilerplate approach with the new annotation-driven style. It brings Redis Pub\u002FSub in line with ",[469,527,528],{},"@KafkaListener"," and ",[469,531,532],{},"@RabbitListener",", which is exactly where it should be.",[47,535],{"id":536},"lMbgBYlUtfc",[33,538,540],{"id":539},"spring-boot-41-type-safe-property-paths-in-spring-data","Spring Boot 4.1: Type-Safe Property Paths in Spring Data",[16,542,543],{},"Your Spring Data code compiles, the IDE is happy, and tests pass. Then in production, a user sorts a column and everything blows up. Sound familiar? This is the \"stringly typed\" problem, and Spring Boot 4.1 introduces type-safe property paths to eliminate this entire class of runtime bugs.",[16,545,546],{},"In this video I show how stringly typed property references cause hidden runtime errors and how the new type-safe API in Spring Data Commons catches these mistakes at compile time. This is one of those features that makes you wonder how we lived without it.",[47,548],{"id":549},"qBC-TrIzsPg",[33,551,553],{"id":552},"spring-ai-xs-new-mcp-servers","Spring AI + X's New MCP Servers",[16,555,556],{},"X (formerly Twitter) just dropped MCP servers for both the X API and their developer documentation, and they work with any MCP-compatible AI tool. I wanted to see what they could do, so I built a Spring AI client that connects to both servers.",[16,558,559],{},"We start by reviewing the official announcement and documentation, then plug the docs server into Claude AI for a quick test. Then we build a full Spring Boot 4.1 + Spring AI 2.0 application that talks to both MCP servers. If you're interested in how MCP is expanding across the ecosystem, this is a great example of what's possible.",[47,561],{"id":562},"j4chxGtqkY8",[33,564,566],{"id":565},"chatclient-vs-chatmodel-which-spring-ai-api-should-you-use","ChatClient vs ChatModel: Which Spring AI API Should You Use?",[16,568,569,570,529,573,576],{},"Spring AI gives you two ways to talk to an LLM: ",[469,571,572],{},"ChatClient",[469,574,575],{},"ChatModel",". Picking the wrong one can cost you time and flexibility. In this video I break down both APIs so you know exactly when to reach for each one.",[16,578,579,580,582,583,586,587,589],{},"We explore the high-level ",[469,581,572],{},", which is a fluent, builder-style API similar to ",[469,584,585],{},"RestClient",", and the low-level ",[469,588,575],{}," interface that it's built on. You'll see both in action with hands-on code demos using OpenAI, including how to get metadata, token usage, and multiple responses. If you're building with Spring AI, this is the conceptual foundation you need.",[47,591],{"id":592},"IdIDI71sGZM",[28,594,93],{"id":92},[16,596,597],{},"We didn't have an episode last week, but this week we have a big one. Phil Webb is joining us to talk about Spring Boot 4.1. If you don't know Phil, he's been one of the key people behind Spring Boot from the beginning. There's nobody better to walk through what's new in this release and the thinking behind the decisions.",[16,599,600,601,606],{},"Tune in and bring your questions: ",[23,602,605],{"href":603,"rel":604},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=4MYFKQkvwNw",[101],"S5E17: Spring Boot 4.1 with Phil Webb"," on July 6th.",[16,608,609,610,184],{},"You can check the full schedule at ",[23,611,613],{"href":99,"rel":612},[101],"springofficehours.io\u002Fschedule",[28,615,344],{"id":343},[16,617,618],{},"Nate and I dig into the growing tension between open source maintainers and AI-generated contributions, from maintainers banning AI PRs to the trouble AI has with actually deleting code. We also get into the Silicon Valley pricing playbook and what happens to your workflows once AI tooling stops being cheap.",[16,620,621,622],{},"Listen here: ",[23,623,624],{"href":624,"rel":625},"https:\u002F\u002Ffundamentalsofswe.com\u002Fpodcast\u002Fopen-source-ai-tooling-and-the-coming-token-crisis-with-dan-vega-and-nate-schutta",[101],[28,627,140],{"id":139},[33,629,631],{"id":630},"spacex-to-acquire-cursor","SpaceX to Acquire Cursor",[16,633,634],{},"SpaceX is acquiring Cursor for $60 billion in stock, just days after Cursor's blockbuster IPO. This is one of the biggest moves we've seen in the developer tools space in a long time.",[16,636,637],{},[23,638,641],{"href":639,"rel":640},"https:\u002F\u002Ftechcrunch.com\u002F2026\u002F06\u002F16\u002Fspacex-to-acquire-cursor-for-60b-in-stock-days-after-blockbuster-ipo",[101],"Read more",[16,643,644,646],{},[161,645,163],{}," This is a huge deal that brings xAI directly into the agentic coding race. Elon now has an AI model (Grok), a coding IDE (Cursor), and the infrastructure to run it all. Whether you love it or hate it, this acquisition puts xAI in direct competition with Microsoft\u002FGitHub Copilot, Google, and Anthropic in the developer tools space. Keep an eye on this one.",[33,648,650],{"id":649},"fable-is-back","Fable is Back!",[16,652,653],{},"Anthropic has restored access to Fable 5, one of its most advanced AI models, after the U.S. export controls that forced a mid-June suspension were lifted on June 30. Fable 5 shares the same underlying model as Mythos 5 but ships with additional safeguards for general use.",[16,655,656],{},[23,657,641],{"href":658,"rel":659},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fredeploying-fable-5",[101],[16,661,662,664],{},[161,663,163],{}," I'm really looking forward to digging into this. Fable has been an interesting model from Anthropic, and I'm curious to see what new capabilities this version brings. If you haven't tried it yet, now's a good time to check it out.",[28,666,172],{"id":171},[16,668,669],{},"That's a wrap for this week. Seven videos is a lot, and I appreciate every one of you who watches, comments, and shares them. If there's a Spring Boot 4.1 feature you want me to cover next, or any topic you'd like to see on the channel, just hit reply and let me know. I read every response.",[16,671,178,672,184],{},[23,673,183],{"href":181,"rel":674},[101],[16,676,187,677,191,679,681],{},[189,678],{},[189,680],{},[23,682,198],{"href":196,"rel":683},[101],{"title":200,"searchDepth":201,"depth":201,"links":685},[686,695,696,697,701],{"id":456,"depth":201,"text":457,"children":687},[688,689,690,691,692,693,694],{"id":460,"depth":206,"text":461},{"id":478,"depth":206,"text":479},{"id":498,"depth":206,"text":499},{"id":514,"depth":206,"text":515},{"id":539,"depth":206,"text":540},{"id":552,"depth":206,"text":553},{"id":565,"depth":206,"text":566},{"id":92,"depth":201,"text":93},{"id":343,"depth":201,"text":344},{"id":139,"depth":201,"text":140,"children":698},[699,700],{"id":630,"depth":206,"text":631},{"id":649,"depth":206,"text":650},{"id":171,"depth":201,"text":172},{"_id":703,"path":704,"title":705,"description":706,"meta":707,"body":710},"newsletter\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Fspring-modulith-florida-jugs-and-a-korean-book-launch.md","\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Fspring-modulith-florida-jugs-and-a-korean-book-launch","Spring Modulith, Florida JUGs, and a Korean Book Launch","A recap of my Florida Java User Group trip, the Korean edition of our book, Spring Boot 4.1, Spring AI 2.0, and new videos on Spring Modulith durable events and Kafka.",{"slug":708,"date":709},"spring-modulith-florida-jugs-and-a-korean-book-launch","2026-06-15",{"type":13,"value":711,"toc":893},[712,714,717,723,726,730,743,747,758,760,764,767,770,773,776,780,783,786,789,793,796,799,802,804,813,828,830,834,842,852,856,865,870,874,877,879,884],[16,713,450],{},[16,715,716],{},"My apologies for missing a few editions of the newsletter, but I have been pretty busy lately. Last week I took a trip down to Florida to visit a customer and got to spend some time with the Tampa Java User Group and the Orlando Java User Group. All of the presentations went really well. The energy in those rooms reminded me why I love this community so much. There's something special about standing in front of a group of developers who are genuinely curious and want to learn. If you were at any of these events, thank you for showing up and asking great questions. I'll include some photos below.",[16,718,719],{},[74,720],{"alt":721,"src":722},"Tampa and Orlando Java User Groups","\u002Fimages\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Ftampa_orlando.jpg",[16,724,725],{},"I also have some really cool personal news to share, a major AI update, and of course new content. Let's get into it.",[28,727,729],{"id":728},"korean-edition-of-our-book","Korean Edition of Our Book",[16,731,732,733,737,738,184],{},"This one means a lot to me. Our book, ",[734,735,736],"em",{},"The Fundamentals of Software Engineering",", was translated into Korean! We wrote a special foreword for this edition, and I finally got my hands on a physical copy. Seeing your work translated into another language so that a whole new audience of developers can read it is honestly one of the most rewarding things I've experienced as an author. If you're interested, you can check it out ",[23,739,742],{"href":740,"rel":741},"https:\u002F\u002Fwww.onlybook.co.kr\u002Fentry\u002Fsoftware-engineer",[101],"here",[28,744,746],{"id":745},"fable-5-from-anthropic","Fable 5 from Anthropic",[16,748,749,750,753,754,184],{},"Anthropic released Fable 5, and I had some time to play around with it before... well, before the government stepped in and it got pulled. While I had access, I have to say it was probably the best coding model I've ever used. The code generation was sharp, the context handling was impressive, and it just ",[734,751,752],{},"got"," what I was trying to build in a way other models haven't. Unfortunate timing on the takedown. You can read more about what happened ",[23,755,742],{"href":756,"rel":757},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Ffable-mythos-access",[101],[28,759,457],{"id":456},[33,761,763],{"id":762},"spring-modulith-durable-events","Spring Modulith Durable Events",[16,765,766],{},"If you've been building event-driven systems in Spring, you've probably reached for a message broker like RabbitMQ or Kafka. But what if I told you that you don't always need one? Spring Modulith has a built-in durable event registry that persists events directly to your database. This means you get reliable, transactional event publishing without spinning up additional infrastructure.",[16,768,769],{},"In this video, I walk through how the durable event registry works, how to set it up, and when it makes sense to use it instead of a full message broker. The key idea is that your application events get stored in a database table as part of your existing transaction. A background process then picks them up and dispatches them to listeners. If something fails, the event is still there, waiting to be processed.",[16,771,772],{},"This is a really practical pattern for a lot of applications that need reliability but don't need the complexity of a distributed messaging system. If you're working with Spring Modulith or thinking about modular monoliths, this one's for you.",[47,774],{"id":775},"KLX9ulb2AfM",[33,777,779],{"id":778},"spring-boot-kafka","Spring Boot + Kafka",[16,781,782],{},"If you've been meaning to get started with Apache Kafka in a Spring Boot application, this is the video for you. I cover the basics of setting up a Kafka producer and consumer in Spring Boot, including the configuration, the message serialization, and the common gotchas that trip people up the first time around.",[16,784,785],{},"Kafka is one of those technologies that sounds intimidating until you actually wire it up, and Spring Boot makes the initial setup surprisingly straightforward. I kept this one practical and focused so you can follow along and have something running by the end.",[47,787],{"id":788},"5XW3f_39ipY",[33,790,792],{"id":791},"how-to-externalize-events-in-spring-modulith-with-kafka","How to Externalize Events in Spring Modulith with Kafka",[16,794,795],{},"This video is a natural follow-up to the durable events video. Once you understand how Spring Modulith handles events internally, the next question is: what if you need those events to leave your application? What if another service needs to react to them?",[16,797,798],{},"That's where event externalization comes in. Spring Modulith lets you route internal application events to an external message broker like Kafka without coupling your domain logic to Kafka's APIs. In this tutorial, I show you how to configure event externalization with Kafka, how to control which events get published externally, and how the whole thing ties together with the modulith architecture. If you watched the durable events video, consider this the second chapter.",[47,800],{"id":801},"8sJIWwc7Jss",[28,803,93],{"id":92},[16,805,806,807,812],{},"We recently published ",[23,808,811],{"href":809,"rel":810},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=zm_EmvdKwYA",[101],"S5E15: Upgrading Spring and OSS Security",". We dug into some important topics around keeping your Spring applications secure and what upgrading looks like when you're dealing with open source dependencies. Good conversation, and one that's relevant to pretty much everyone running Spring in production.",[16,814,815,816,821,822,827],{},"On S5E16, DaShaun and I talked about the ",[23,817,820],{"href":818,"rel":819},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=hCe50NpXt8s",[101],"May Release Train Shift and What's Coming in Spring Boot 4.1",". There's been a shift in the release train that we want to break down, plus we'll preview some of the new features landing in Spring Boot 4.1. Tune in live on ",[23,823,826],{"href":824,"rel":825},"https:\u002F\u002Fspringofficehours.io",[101],"springofficehours.io"," if you want to ask questions in real time.",[28,829,140],{"id":139},[33,831,833],{"id":832},"spring-boot-41-released","Spring Boot 4.1 Released",[16,835,836,837,184],{},"Spring Boot 4.1 is here, and it's packed with some great additions. You can read the full announcement on the ",[23,838,841],{"href":839,"rel":840},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F06\u002F10\u002Fspring-boot-4",[101],"Spring blog",[16,843,844,846,847,184],{},[161,845,163],{}," One feature that caught my eye right away is the built-in Server-Side Request Forgery (SSRF) protection for HTTP clients. This is the kind of security improvement that makes a real difference because it's baked into the framework rather than something you have to remember to implement yourself. I already put together a small, self-contained demo showing how it works. You can check it out on ",[23,848,851],{"href":849,"rel":850},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-boot-ssrf-demo",[101],"GitHub",[33,853,855],{"id":854},"spring-ai-20-released","Spring AI 2.0 Released",[16,857,858,859,864],{},"Spring AI has officially hit 2.0! This is a major milestone for the project. Check out the ",[23,860,863],{"href":861,"rel":862},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F06\u002F12\u002Fspring-ai-2-0-0-GA-available-now",[101],"announcement post"," for all the details.",[16,866,867,869],{},[161,868,163],{}," I've been following Spring AI since the early days, and seeing it reach a 2.0 GA release is a big deal. If you're a Spring developer looking to integrate AI capabilities into your applications, this is the framework to use. Expect more content from me on this very soon.",[28,871,873],{"id":872},"the-road-to-100k","The Road to 100K",[16,875,876],{},"One more thing: the march to 100K YouTube subscribers is officially on. This has been a goal of mine for as long as I can remember, and we're getting close. Thank you to every single one of you who watches, subscribes, and shares the videos. It means more than you know.",[28,878,172],{"id":171},[16,880,178,881,184],{},[23,882,183],{"href":181,"rel":883},[101],[16,885,187,886,191,888,890],{},[189,887],{},[189,889],{},[23,891,198],{"href":196,"rel":892},[101],{"title":200,"searchDepth":201,"depth":201,"links":894},[895,896,897,902,903,907,908],{"id":728,"depth":201,"text":729},{"id":745,"depth":201,"text":746},{"id":456,"depth":201,"text":457,"children":898},[899,900,901],{"id":762,"depth":206,"text":763},{"id":778,"depth":206,"text":779},{"id":791,"depth":206,"text":792},{"id":92,"depth":201,"text":93},{"id":139,"depth":201,"text":140,"children":904},[905,906],{"id":832,"depth":206,"text":833},{"id":854,"depth":206,"text":855},{"id":872,"depth":201,"text":873},{"id":171,"depth":201,"text":172},{"_id":910,"path":911,"title":912,"description":913,"meta":914,"body":917},"newsletter\u002Fnewsletter\u002F2026\u002F05\u002F11\u002Fthe-spring-documentary-montreal-adventures-and-building-better-monoliths.md","\u002Fnewsletter\u002F2026\u002F05\u002F11\u002Fthe-spring-documentary-montreal-adventures-and-building-better-monoliths","The Spring Documentary, Montreal Adventures and Building Better Monoliths","Recapping the Spring One Tour in Montreal, the new Spring Documentary from CultRepo, an introduction to Spring Modulith, and recent podcast episodes from Spring Office Hours and Fundamentals of Software Engineering.",{"slug":915,"date":916},"the-spring-documentary-montreal-adventures-and-building-better-monoliths","2026-05-11T12:00:00.000Z",{"type":13,"value":918,"toc":1043},[919,922,925,929,932,935,937,941,944,947,950,961,965,968,971,975,985,995,1008,1026,1029,1034],[16,920,921],{},"Happy Monday and welcome to another edition of the newsletter. The last few weeks have been a whirlwind. I was up in Montreal with Josh, DaShaun, and Adib for the Spring One Tour, and it was an incredible time. I got to deliver a 4-hour workshop on Spring AI (yes, four hours, and honestly I could have kept going) and gave a talk on what's new in Spring Boot 4. There's something special about getting some of the team together in person and spending time with the community. There are just some things Zoom calls can't replace, and the energy and attention you get from an audience is one of them. If you were there, it was great meeting you!",[16,923,924],{},"Back at home, I've been heads-down on Spring Modulith content, a topic that clearly resonated with a lot of you based on the response I got on social media. Let's get into it.",[28,926,928],{"id":927},"spring-documentary","Spring Documentary",[16,930,931],{},"The Spring Documentary is now live, and wow was it amazing. The folks at CultRepo do an amazing job with their documentaries, and this one really hit home. It was great seeing the history of Spring through the lens of the people that helped shape this amazing framework, ecosystem, and community.",[47,933],{"id":934},"0Gb1z-2SjHY",[28,936,457],{"id":456},[33,938,940],{"id":939},"introduction-to-spring-modulith","Introduction to Spring Modulith",[16,942,943],{},"If you've ever started with a clean, well-organized monolith only to watch it slowly devolve into a big ball of mud, this one's for you. In this video, I walk through Spring Modulith from the ground up: what it is, why it exists, and how it helps you build domain-driven modules inside a single Spring Boot application.",[16,945,946],{},"The walkthrough is hands-on. I built a repo where each Git branch represents a step in the journey from a traditional monolith to a modular monolith with decoupled, durable events. You'll see how Spring Modulith enforces module boundaries, verifies your architecture with tests, and lets you publish application events that can survive restarts.",[47,948],{"id":949},"xHlDyKVyvig",[16,951,952,953,960],{},"This was one of my most popular tweets this week, and for good reason. Modular monoliths hit that sweet spot where you get the simplicity of a single deployment with the structure you'd expect from a well-designed system. If you're not ready for microservices (or you've realized you never needed them), Spring Modulith is worth your time. Speaking of which, ",[161,954,955],{},[23,956,959],{"href":957,"rel":958},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F04\u002F24\u002Fspring-modulith-2-1-rc1-2-0-6-and-1-4-11-released",[101],"Spring Modulith 2.1 RC1, 2.0.6, and 1.4.11 were just released",", so the project continues to move forward at a great pace.",[28,962,964],{"id":963},"devnexus-2026-fundamentals-of-software-engineering-in-the-age-of-ai-nathaniel-schutta-dan-vega","DevNexus 2026 - Fundamentals of Software Engineering in the Age of AI - Nathaniel Schutta & Dan Vega",[16,966,967],{},"The recording from our talk at DevNexus is now available. We like to think of this as a mini therapy session on where we are in our industry right now. If you need a quick pep talk, check out the video below. Sit back, take a deep breath, and relax — everything is going to be okay!",[47,969],{"id":970},"_MMQt78D0AM",[28,972,974],{"id":973},"podcasts","Podcasts",[16,976,977,978,984],{},"We had a couple of great episodes on Spring Office Hours over the past few weeks. First, we published our ",[161,979,980],{},[23,981,983],{"href":99,"rel":982},[101],"Community Potluck (S05E13)"," on April 21st, which is always a fun format where we dig into questions and topics from the community.",[16,986,987,988,994],{},"Then on May 4th, we had ",[161,989,990],{},[23,991,993],{"href":99,"rel":992},[101],"Simon Martinelli on the show (S5E14)"," to talk about Spec Driven Development. Simon had a lot of practical insight into designing your API contract first and letting that drive your implementation. It's an approach that pairs really well with how I think about building Spring Boot applications.",[16,996,997,998,1001,1002],{},"This week, DaShaun and I are recording ",[161,999,1000],{},"S5E16: Upgrading Spring and OSS Security",". This is a topic that affects every single one of us. Whether you're trying to get off an older version of Spring Boot or you're thinking about the security of the open-source dependencies in your project, we'll be digging into all of it. ",[161,1003,1004],{},[23,1005,1007],{"href":809,"rel":1006},[101],"Tune in live or catch the replay here.",[16,1009,1010,1011,1013,1014,1021,1022,1025],{},"On the podcast front, I also published two new episodes of ",[161,1012,344],{}," with Nate Schutta. The first, ",[161,1015,1016],{},[23,1017,1020],{"href":1018,"rel":1019},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_MMQt78D0AM",[101],"Why Software Engineering Fundamentals Matter More in the Age of AI",", tackles something I feel strongly about: as AI tools write more code for us, understanding the fundamentals becomes more important, not less. The second episode, ",[161,1023,1024],{},"Why We Hate Legacy Code (and How to Work With It Anyway)",", is a conversation I think every developer can relate to. We've all inherited that codebase. The question is what you do next.",[28,1027,1028],{"id":171},"UNTIL NEXT WEEK",[16,1030,178,1031,184],{},[23,1032,183],{"href":181,"rel":1033},[101],[16,1035,187,1036,191,1038,1040],{},[189,1037],{},[189,1039],{},[23,1041,198],{"href":196,"rel":1042},[101],{"title":200,"searchDepth":201,"depth":201,"links":1044},[1045,1046,1049,1050,1051],{"id":927,"depth":201,"text":928},{"id":456,"depth":201,"text":457,"children":1047},[1048],{"id":939,"depth":206,"text":940},{"id":963,"depth":201,"text":964},{"id":973,"depth":201,"text":974},{"id":171,"depth":201,"text":1028},{"_id":1053,"path":1054,"title":1055,"description":1056,"meta":1057,"body":1060},"newsletter\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Fback-from-austin-and-supercharging-ai-agents-with-embabel.md","\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Fback-from-austin-and-supercharging-ai-agents-with-embabel","Back from Austin and Supercharging AI Agents with Embabel","Recapping the Arc of AI conference in Austin, a new video on supercharging AI agents with Embabel tools and MCP servers, and what's coming up on Spring Office Hours.",{"slug":1058,"date":1059},"back-from-austin-and-supercharging-ai-agents-with-embabel","2026-04-20T00:00:00.000Z",{"type":13,"value":1061,"toc":1148},[1062,1065,1068,1074,1076,1080,1083,1086,1089,1092,1094,1097,1100,1111,1115,1123,1126,1128,1131,1134,1136,1139],[16,1063,1064],{},"Happy Monday, friends! I hope you all had a great week. I just got back from the Arc of AI conference in Austin, TX, and it was a blast. There's something about getting out of your normal routine and connecting with other developers in person that recharges the batteries. I got to have some great conversations about where Spring and AI agents are heading, and it was cool to see how many folks in the community are already building with these tools.",[16,1066,1067],{},"Nate (my friend and co-author) gave an 8-hour workshop on where the fundamentals of software engineering fit in the age of AI. It was a great group of attendees who brought some great energy and a bunch of insightful questions throughout the day.",[16,1069,1070],{},[74,1071],{"alt":1072,"src":1073},"Arc of AI conference in Austin","\u002Fimages\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Farcofai.jpeg",[28,1075,457],{"id":456},[33,1077,1079],{"id":1078},"embabel-mcp-tools","Embabel MCP + Tools",[16,1081,1082],{},"I put together a video showing how to supercharge your AI agents with tools and MCP servers in Embabel. If you haven't been following along, Embabel is a really interesting framework for building AI agents, and one of the things that makes agents truly useful is giving them access to tools and external services through the Model Context Protocol (MCP).",[16,1084,1085],{},"In this video, I walk through the full setup from scratch. You'll see how to wire up tools that your agents can call, how to connect MCP servers so your agents can interact with external systems, and how it all fits together in a clean, Spring-friendly way. If you're building AI agents in the Java ecosystem and want to go beyond simple prompt-and-response workflows, this one's for you.",[16,1087,1088],{},"The response on this one has been great. It's clear that a lot of you are ready to move past the \"hello world\" phase of AI agents and start building something real. Give it a watch and let me know what you think.",[47,1090],{"id":1091},"2mGr7kdstJs",[28,1093,93],{"id":92},[16,1095,1096],{},"In the latest episode of Spring Office Hours, we had Arun Gupta join us for a conversation about developer soft skills (S5E12). This is a topic that doesn't get enough attention in our world. We spend so much time talking about frameworks and libraries, but the skills that often make the biggest difference in your career are communication, collaboration, and knowing how to navigate a team. Arun brought some really practical advice from his years of experience. Definitely worth a listen if you missed it.",[16,1098,1099],{},"This coming week is a potluck episode (S5E13) where DaShaun and I answer your questions. These are some of my favorite episodes because we never know what's coming. Send us your questions!",[16,1101,1102,1103,1106,1107,1110],{},"Looking ahead, we've got an incredible lineup. On April 27th, Rod Johnson is joining us to talk about Spring and Embabel (S5E14). Yes, ",[734,1104,1105],{},"that"," Rod Johnson. And on May 4th, Simon Martinelli stops by to discuss spec-driven development (S5E15). Check out the full schedule at ",[23,1108,613],{"href":99,"rel":1109},[101]," and make sure you're subscribed so you don't miss these.",[28,1112,1114],{"id":1113},"can-you-trust-ai-generated-code-it-depends-on-what-you-already-know","Can You Trust AI-Generated Code? It Depends on What You Already Know",[16,1116,1117,1122],{},[23,1118,1121],{"href":1119,"rel":1120},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fcan-you-trust-ai-generated-code",[101],"This article"," over at ByteSized AI digs into a question a lot of us are wrestling with: how much should you trust the code that AI generates for you? The short answer is that it really depends on your existing knowledge of the domain.",[16,1124,1125],{},"It's something I've been thinking about a lot as I use AI coding agents more and more. When I ask AI about a framework I've never used, it feels like magic. Everything looks great and I'm flying. But when I ask it about Spring code I've been writing for years, I catch mistakes on every line. That's Gell-Mann amnesia in action: we trust the AI's output in areas we can't verify while knowing it's unreliable in areas we can. This is exactly why the fundamentals matter more now, not less. AI is an incredible tool, but you need enough knowledge to know when it's wrong. If you're leaning on AI-generated code in areas you don't understand, you're building on a foundation you can't inspect. Give it a read and let me know if your experience lines up with mine.",[28,1127,385],{"id":384},[16,1129,1130],{},"The trailer for the upcoming Spring Documentary is out, and wow, is it good. I'm not going to lie, I almost cried watching this!",[166,1132],{"id":1133},"2044820683692101741",[28,1135,172],{"id":171},[16,1137,1138],{},"That's all I've got for this week. If you have questions about Embabel, Spring AI, or anything else I covered, just hit reply. I read every response, and it helps me figure out what to cover next. Have a great week, and I'll talk to you next Monday!",[16,1140,187,1141,191,1143,1145],{},[189,1142],{},[189,1144],{},[23,1146,198],{"href":196,"rel":1147},[101],{"title":200,"searchDepth":201,"depth":201,"links":1149},[1150,1153,1154,1155,1156],{"id":456,"depth":201,"text":457,"children":1151},[1152],{"id":1078,"depth":206,"text":1079},{"id":92,"depth":201,"text":93},{"id":1113,"depth":201,"text":1114},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":1158,"path":1159,"title":1160,"description":1161,"meta":1162,"body":1165},"newsletter\u002Fnewsletter\u002F2026\u002F04\u002F06\u002Fnew-gear-new-course-and-a-whole-lot-of-content.md","\u002Fnewsletter\u002F2026\u002F04\u002F06\u002Fnew-gear-new-course-and-a-whole-lot-of-content","New Gear, New Course, and a Whole Lot of Content","Last week everything just clicked. A new audio interface, a new microphone, a full 10-video GraphQL course, and several standalone videos — let's get into it.",{"slug":1163,"date":1164},"new-gear-new-course-and-a-whole-lot-of-content","2026-04-06T00:00:00.000Z",{"type":13,"value":1166,"toc":1359},[1167,1170,1172,1176,1179,1182,1185,1189,1200,1203,1206,1210,1213,1216,1219,1223,1226,1241,1243,1252,1261,1263,1270,1286,1289,1291,1295,1302,1307,1311,1320,1325,1329,1338,1343,1345,1350],[16,1168,1169],{},"Happy Monday, friends! I hope you had a great weekend. Last week was one of those weeks where everything just clicked. I got a new audio interface and microphone, and I couldn't wait to put them to work. The result? A bunch of new videos, including a full 10-video course on GraphQL for Java developers that I planned, recorded, edited, and published in about 6 hours. I'm still riding that wave of productivity. On top of the course, I put out a few standalone videos that I think you're really going to enjoy. Let's get into it.",[28,1171,457],{"id":456},[33,1173,1175],{"id":1174},"excalidraw-mcp-server","Excalidraw MCP Server",[16,1177,1178],{},"If you've been following along with anything MCP-related, you know I'm all in on exploring what these servers can do. In this video, I walk through an MCP server that streams hand-drawn Excalidraw diagrams with smooth viewport camera control and interactive fullscreen editing.",[16,1180,1181],{},"What makes this one cool is the combination of the hand-drawn aesthetic that Excalidraw is known for with the power of an MCP server driving the whole thing. If you've ever wanted to generate diagrams from your AI workflows and have them look like something a human actually sketched on a whiteboard, this is it.",[47,1183],{"id":1184},"dbT5wN4XRGc",[33,1186,1188],{"id":1187},"spring-build-me-a-coding-agent","Spring, Build Me a Coding Agent",[16,1190,1191,1192,1195,1196,1199],{},"This one got a lot of attention on Twitter, and for good reason. Spring AI now has Claude Code-inspired agent skills, and in this video I show it building a ",[469,1193,1194],{},"HelloWorld"," ",[469,1197,1198],{},"RestController"," from a single prompt. We're at a point where you can describe what you want and watch Spring AI act as a coding agent to make it happen.",[16,1201,1202],{},"I think this is a really important video for anyone trying to understand where AI-assisted development is heading, especially in the Spring ecosystem. It's not about replacing developers — it's about understanding these tools so you can use them effectively. It's also not just about building a coding agent. You can use this same approach and the tools available to build your own agents for almost any scenario.",[47,1204],{"id":1205},"P8s65qu-LZI",[33,1207,1209],{"id":1208},"embabel-first-look","Embabel First Look",[16,1211,1212],{},"Embabel has been on my radar for a while, and I finally got hands on with it. First impressions: it's really good. In this video I take you through my initial exploration of the framework and show you what it can do.",[16,1214,1215],{},"If you haven't heard of Embabel yet, this is a great starting point. I break down the core concepts and walk through some real examples so you can decide if it's something worth adding to your toolkit.",[47,1217],{"id":1218},"G5VDQCZu6t0",[33,1220,1222],{"id":1221},"graphql-for-java-developers-full-course","GraphQL for Java Developers (Full Course)",[16,1224,1225],{},"I mentioned this at the top, but I want to make sure you don't miss it. I published a 10-video course called \"GraphQL for Java Developers\" on YouTube. This is a free, structured course that takes you from zero to productive with GraphQL in a Java\u002FSpring context.",[16,1227,1228,1229,1234,1235,1240],{},"If you've been curious about GraphQL but haven't found the right on-ramp from the Java side, this is for you. I cover the fundamentals, schema design, queries, mutations, and more. You can find the ",[23,1230,1233],{"href":1231,"rel":1232},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLZV0a2jwt22u5DEFwYSzOM7mg6AjL90hw",[101],"full playlist here"," and I also wrote a ",[23,1236,1239],{"href":1237,"rel":1238},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fgetting-started-with-graphql-for-java-developers",[101],"companion blog post"," if you prefer reading through the concepts first.",[28,1242,93],{"id":92},[16,1244,1245,1246,1251],{},"Last week, DaShaun and I sat down with Daniel Garnier-Moiroux to talk about ",[23,1247,1250],{"href":1248,"rel":1249},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e11-testing-spring-boot-applications-with-daniel-garnier-moiroux",[101],"testing Spring Boot applications",". That was a really fun conversation. Testing is one of those topics that everyone agrees is important, but the practical \"how do I actually do this well in Spring Boot?\" part trips people up. Daniel had some great insights, and I think you'll get a lot out of that episode if you haven't watched it yet. He is also writing a book on the subject, so it was great hearing about his process and how the book is going.",[16,1253,1254,1255,1260],{},"This week, we talk with Arun Gupta on ",[23,1256,1259],{"href":1257,"rel":1258},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vY2FlLTZXqg",[101],"developer soft skills",". Arun is a DevRel and Java legend who's worked at Sun, Oracle, Intel, AWS, and Apple. We talked about a topic that doesn't get enough airtime: how communication, empathy, and what Arun calls \"force multiplying\" through non-technical skills can make or break your career. If you've ever felt like your technical skills are strong but you're not advancing the way you'd like, this episode is for you.",[28,1262,123],{"id":122},[16,1264,1265,1266,1269],{},"I'll be at ",[161,1267,1268],{},"Arc of AI"," in Austin, TX from April 13–16, and I'm giving two talks:",[1271,1272,1273,1280],"ul",{},[1274,1275,1276,1279],"li",{},[161,1277,1278],{},"Building and Securing MCP Servers in Java",": Java developers face a real challenge when it comes to securely connecting AI models with enterprise data and tools. MCP is transforming how AI applications interact with external systems, and in this session I'll cover the building blocks and show you how to build, secure, and test your MCP servers.",[1274,1281,1282,1285],{},[161,1283,1284],{},"Fundamentals of Software Engineering in the Age of AI",": There's been a lot of noise about AI replacing developers. Not so fast. In this talk, I'll make the case that agentic coding assistants make the fundamentals more important, not less. If you want to use these tools effectively, you still need to master the craft.",[16,1287,1288],{},"If you're going to be in Austin, come say hi!",[28,1290,140],{"id":139},[33,1292,1294],{"id":1293},"gemma-4-goes-open-source","Gemma 4 Goes Open Source",[16,1296,1297,1298,184],{},"Google DeepMind released Gemma 4 under the Apache license. You can read more about it ",[23,1299,742],{"href":1300,"rel":1301},"https:\u002F\u002Fx.com\u002FGoogleDeepMind\u002Fstatus\u002F2039735446628925907",[101],[16,1303,1304,1306],{},[161,1305,163],{}," This is a big deal. Having a model of this caliber available under the Apache license means Java developers and enterprises can run it wherever they want without licensing headaches. I can't wait to try this out, especially in combination with Spring AI.",[33,1308,1310],{"id":1309},"spring-ai-200-m4-released","Spring AI 2.0.0 M4 Released",[16,1312,1313,1314,1319],{},"The fourth milestone release of Spring AI 2.0.0 is ",[23,1315,1318],{"href":1316,"rel":1317},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F03\u002F26\u002Fspring-ai-2-0-0-M4-and-1-1-4-and-1-0-5-available",[101],"now available",". Alongside it, maintenance releases 1.1.4 and 1.0.5 also dropped.",[16,1321,1322,1324],{},[161,1323,163],{}," Spring AI is moving fast, and each milestone gets us closer to a stable 2.0 release. If you're building AI-powered applications with Spring, now is a great time to start experimenting with the 2.0 milestones. The improvements in each release have been significant, and the video I published this week on building a coding agent with Spring AI shows just how capable this framework is becoming.",[33,1326,1328],{"id":1327},"ai4jvm-java-meets-artificial-intelligence","AI4JVM: Java Meets Artificial Intelligence",[16,1330,1331,1332,1337],{},"A new community resource has launched at ",[23,1333,1336],{"href":1334,"rel":1335},"https:\u002F\u002Fai4jvm.com",[101],"ai4jvm.com",", focused on the intersection of Java and AI.",[16,1339,1340,1342],{},[161,1341,163],{}," I love seeing dedicated resources pop up around Java and AI. The JVM ecosystem has so much to offer in the AI space, and having a central place for the community to learn and share is great. Definitely worth bookmarking.",[28,1344,1028],{"id":171},[16,1346,178,1347,184],{},[23,1348,183],{"href":181,"rel":1349},[101],[16,1351,187,1352,191,1354,1356],{},[189,1353],{},[189,1355],{},[23,1357,198],{"href":196,"rel":1358},[101],{"title":200,"searchDepth":201,"depth":201,"links":1360},[1361,1367,1368,1369,1374],{"id":456,"depth":201,"text":457,"children":1362},[1363,1364,1365,1366],{"id":1174,"depth":206,"text":1175},{"id":1187,"depth":206,"text":1188},{"id":1208,"depth":206,"text":1209},{"id":1221,"depth":206,"text":1222},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1370},[1371,1372,1373],{"id":1293,"depth":206,"text":1294},{"id":1309,"depth":206,"text":1310},{"id":1327,"depth":206,"text":1328},{"id":171,"depth":201,"text":1028},{"_id":1376,"path":1377,"title":1378,"description":1379,"meta":1380,"body":1383},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F30\u002Fdeep-research-agents.md","\u002Fnewsletter\u002F2026\u002F03\u002F30\u002Fdeep-research-agents","Deep Research Agents, RestClient Error Handling, and the Fundamentals That Still Matter","A packed week: three new videos on RestClient error handling, Spring AI deep research agents, and Java lazy constants, plus Spring Office Hours and upcoming talks at Arc of AI.",{"slug":1381,"date":1382},"deep-research-agents","2026-03-30T00:00:00.000Z",{"type":13,"value":1384,"toc":1535},[1385,1388,1390,1394,1400,1406,1412,1415,1419,1422,1425,1428,1431,1435,1438,1445,1448,1450,1458,1461,1464,1466,1472,1484,1486,1488,1496,1502,1505,1508,1510,1513,1516,1519,1522,1524,1529],[16,1386,1387],{},"Happy Monday, friends! Last week was a packed week. I published three new videos, had some great conversations on Spring Office Hours, and spent a lot of time thinking about how AI is changing the way we build software (and what it isn't changing). Let's get into it.",[28,1389,457],{"id":456},[33,1391,1393],{"id":1392},"getting-started-with-error-handling-in-the-restclient","Getting Started with Error Handling in the RestClient",[16,1395,1396,1397,1399],{},"If you're using Spring's ",[469,1398,585],{},", you've probably noticed it throws exceptions on HTTP errors by default. That's fine for quick prototypes, but in production you need a real strategy for handling 4xx and 5xx responses gracefully.",[16,1401,1402,1403,1405],{},"In this video, I walk through the different approaches to error handling with the ",[469,1404,585],{},". We look at how to use status handlers to intercept error responses before they become exceptions, and how to build a clean, consistent pattern for dealing with failures across your application.",[16,1407,1408,1409,1411],{},"This is one of those topics that sounds simple but trips people up in practice. If you've ever wondered what the \"right\" way to handle errors with ",[469,1410,585],{}," is, this one's for you:",[47,1413],{"id":1414},"MuYzEZk6-zI",[33,1416,1418],{"id":1417},"spring-ai-deep-research-agent","Spring AI Deep Research Agent",[16,1420,1421],{},"I built a Deep Research Agent with Spring AI that can search the web, synthesize findings, and generate reports. This was a really fun one to put together.",[16,1423,1424],{},"The idea is straightforward: give an AI agent the ability to do real research by searching the web, reading through results, and pulling together a coherent summary. Think of it as automating the kind of deep dive you'd normally spend hours doing manually. The agent uses Spring AI's tool calling capabilities to orchestrate the whole workflow.",[16,1426,1427],{},"If you're interested in building agentic applications with Spring AI, this is a solid example of what's possible right now:",[47,1429],{"id":1430},"_amdeuCM-aY",[33,1432,1434],{"id":1433},"lazy-constants","Lazy Constants",[16,1436,1437],{},"Java keeps getting better, and lazy constants are a great example of a small but meaningful improvement. This new API introduces objects that hold unmodifiable data but defer initialization until the value is actually needed.",[16,1439,1440,1441,1444],{},"If you've ever written your own lazy initialization pattern with ",[469,1442,1443],{},"volatile"," fields and double-checked locking, you know how easy it is to get wrong. Lazy constants give you a clean, built-in way to handle this. I walk through the API and show you how to use it in practice.",[47,1446],{"id":1447},"VoB2voChQzA",[28,1449,93],{"id":92},[16,1451,1452,1453,184],{},"Last week on Spring Office Hours, DaShaun and I had Billy Korando on to talk about JDK 26. There's a lot coming in this release and Billy gave us a great rundown of the features developers should be paying attention to. If you missed it, definitely go back and ",[23,1454,1457],{"href":1455,"rel":1456},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e10-whats-new-in-jdk-26-with-billy-korando",[101],"check that one out",[16,1459,1460],{},"This week we had Daniel Garnier-Moiroux join us to talk about testing Spring Boot applications. Testing is one of those areas where everyone agrees it's important, but the practical \"how\" can get murky fast, especially with Spring's application context, slices, and mocking strategies. Daniel brought a ton of practical insight to the conversation:",[47,1462],{"id":1463},"C2B85YUmoR0",[28,1465,123],{"id":122},[16,1467,1468,1469,1471],{},"I'm heading to ",[161,1470,1268],{}," in Austin, TX from April 13-16, and I'm giving two talks:",[1271,1473,1474,1479],{},[1274,1475,1476,1478],{},[161,1477,1278],{},": The Model Context Protocol is quickly becoming the standard for how AI applications connect to external systems. I'll cover the building blocks of MCP and show you how to build, secure, and test your MCP servers in Java.",[1274,1480,1481,1483],{},[161,1482,1284],{},": This one is close to my heart. Agentic coding assistants are changing workflows, but the fundamentals of software engineering aren't going anywhere. I'll make the case for why mastering the craft matters more than ever.",[16,1485,1288],{},[28,1487,140],{"id":139},[33,1489,1491,1495],{"id":1490},"devolution-podcast",[1492,1493,1494],"span",{},"Dev","olution Podcast",[16,1497,1498,1499,1501],{},"I joined my good friend Nicky Pike on his ",[1492,1500,1494],{},"olution podcast for a conversation about the book and all things AI:",[47,1503],{"id":1504},"QKuZMV6A1SA",[16,1506,1507],{},"Nicky is one of those people who asks genuinely thoughtful questions, so this ended up being a really fun conversation. We talked about the book, where AI fits into a developer's daily workflow, and what I think the next couple of years look like for our industry. If you're a podcast listener, give this one a shot.",[33,1509,385],{"id":384},[16,1511,1512],{},"I got some new toys last week and hopefully this leads to higher quality videos and podcasts!",[166,1514],{"id":1515},"2037633787132068314",[16,1517,1518],{},"Vibe Coding isn't a magic fix.",[166,1520],{"id":1521},"2036433319596790211",[28,1523,1028],{"id":171},[16,1525,178,1526,184],{},[23,1527,183],{"href":181,"rel":1528},[101],[16,1530,1531,1532],{},"Happy Coding,\nDan Vega\n",[23,1533,198],{"href":196,"rel":1534},[101],{"title":200,"searchDepth":201,"depth":201,"links":1536},[1537,1542,1543,1544,1549],{"id":456,"depth":201,"text":457,"children":1538},[1539,1540,1541],{"id":1392,"depth":206,"text":1393},{"id":1417,"depth":206,"text":1418},{"id":1433,"depth":206,"text":1434},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1545},[1546,1548],{"id":1490,"depth":206,"text":1547},"Devolution Podcast",{"id":384,"depth":206,"text":385},{"id":171,"depth":201,"text":1028},{"_id":1551,"path":1552,"title":1553,"description":1554,"meta":1555,"body":1558},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone-recap.md","\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone-recap","JavaOne Recap and JDK 26 has been released","A recap of JavaOne 2026 in Redwood Shores, highlights from the JDK 26 release including 10 new JEPs, and the latest news in the Spring and Java ecosystem.",{"slug":1556,"date":1557},"javaone-recap","2026-03-23T00:00:00.000Z",{"type":13,"value":1559,"toc":1836},[1560,1562,1565,1567,1570,1576,1579,1587,1595,1599,1608,1612,1712,1715,1725,1731,1734,1737,1739,1742,1745,1747,1751,1763,1765,1767,1771,1780,1785,1789,1796,1801,1805,1812,1817,1820,1822,1827],[16,1561,450],{},[16,1563,1564],{},"The last couple of weeks have been a whirlwind. I was down at JavaOne soaking in all the energy around the Java community, and then JDK 26 dropped. If you follow me on Twitter, you probably saw me posting about both of those things nonstop. It's a great time to be a Java developer, and I've got a lot to cover in this edition of the newsletter.",[16,1566,252],{},[28,1568,1569],{"id":1556},"JavaOne Recap",[16,1571,1572],{},[74,1573],{"alt":1574,"src":1575},"JavaOne 2026","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone.jpeg",[16,1577,1578],{},"Last week I was in Redwood Shores, right outside of San Francisco for JavaOne. If you're a Java developer and haven't had the chance to attend this conference, you need to add it to your bucket list. Being in the same rooms as the people who work on Java is both exciting and inspiring.",[16,1580,1581,1582,1586],{},"I gave a couple of talks and I think they were both pretty well received. The first was on getting started with MCP as a Java developer. We talked about the foundational components of MCP servers and even went through an example of how to build your first one. The slides can be found ",[23,1583,742],{"href":1584,"rel":1585},"https:\u002F\u002Fwww.danvega.dev\u002Fspeaking\u002Fjavaone-2026-building-securing-mcp-servers-java",[101]," and this talk was recorded so I will be sure to share it out when it's available.",[16,1588,1589,1590,1594],{},"My second talk was based on the book Nate and I wrote, The Fundamentals of Software Engineering. We have been pitching this as \"in the age of AI.\" While I keep hearing folks say the fundamentals don't matter any longer, we are taking the opposite stance. I like to say these are mini therapy sessions to talk about where we are with AI and where we might be heading. The slides can be found ",[23,1591,742],{"href":1592,"rel":1593},"https:\u002F\u002Fwww.danvega.dev\u002Fspeaking\u002Fjavaone-2026-fundamentals-software-engineering-ai",[101]," and this talk was also recorded so I will let you know when it's available.",[28,1596,1598],{"id":1597},"jdk-26","JDK 26",[16,1600,1601,1602,1607],{},"JDK 25 shipped an impressive 25 JEPs, so of course the running joke was whether 26 was going to ship 26. 🤣 They couldn't keep up that pace, so ",[23,1603,1606],{"href":1604,"rel":1605},"https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F26\u002F",[101],"JDK 26 ships 10 JEPs",". Nothing in this release is going to be buzzworthy, but a couple of things stand out to me. We are making our first steps towards Integrity by Default with JEP 500, HTTP\u002F3 support, and Structured Concurrency goes into its sixth preview. I'm really hoping Structured Concurrency goes final later this year and wraps up Project Loom, which has been a huge impact to the Java ecosystem.",[28,1609,1611],{"id":1610},"features","Features",[1613,1614,1615,1628],"table",{},[1616,1617,1618],"thead",{},[1619,1620,1621,1625],"tr",{},[1622,1623,1624],"th",{},"JEP",[1622,1626,1627],{},"Title",[1629,1630,1631,1640,1648,1656,1664,1672,1680,1688,1696,1704],"tbody",{},[1619,1632,1633,1637],{},[1634,1635,1636],"td",{},"500",[1634,1638,1639],{},"Prepare to Make Final Mean Final",[1619,1641,1642,1645],{},[1634,1643,1644],{},"504",[1634,1646,1647],{},"Remove the Applet API",[1619,1649,1650,1653],{},[1634,1651,1652],{},"516",[1634,1654,1655],{},"Ahead-of-Time Object Caching with Any GC",[1619,1657,1658,1661],{},[1634,1659,1660],{},"517",[1634,1662,1663],{},"HTTP\u002F3 for the HTTP Client API",[1619,1665,1666,1669],{},[1634,1667,1668],{},"522",[1634,1670,1671],{},"G1 GC: Improve Throughput by Reducing Synchronization",[1619,1673,1674,1677],{},[1634,1675,1676],{},"524",[1634,1678,1679],{},"PEM Encodings of Cryptographic Objects (Second Preview)",[1619,1681,1682,1685],{},[1634,1683,1684],{},"525",[1634,1686,1687],{},"Structured Concurrency (Sixth Preview)",[1619,1689,1690,1693],{},[1634,1691,1692],{},"526",[1634,1694,1695],{},"Lazy Constants (Second Preview)",[1619,1697,1698,1701],{},[1634,1699,1700],{},"529",[1634,1702,1703],{},"Vector API (Eleventh Incubator)",[1619,1705,1706,1709],{},[1634,1707,1708],{},"530",[1634,1710,1711],{},"Primitive Types in Patterns, instanceof, and switch (Fourth Preview)",[33,1713,1639],{"id":1714},"prepare-to-make-final-mean-final",[16,1716,1717,1718,1721,1722,1724],{},"A feature in JDK 26 that caught my eye is that ",[469,1719,1720],{},"final"," fields are getting ready to actually be final. For years, developers have been able to use reflection to modify ",[469,1723,1720],{}," fields at runtime. It was one of those things everyone kind of knew about but nobody felt great about. Well, that loophole is closing.",[16,1726,1727,1728,1730],{},"In this video, I walk through what this change looks like in practice, why the Java team is making this move, and what it means for your existing codebases. If you have libraries or legacy code that rely on reflection hacks to modify ",[469,1729,1720],{}," fields, you'll want to understand the migration path sooner rather than later.",[16,1732,1733],{},"This one clearly resonated with the community. The tweet about it pulled in over 7,500 impressions, so I know a lot of you are paying attention to this. Check out the full video and let me know if you have questions about how this affects your projects.",[47,1735],{"id":1736},"j-y0m6j6TBc",[33,1738,93],{"id":92},[16,1740,1741],{},"Speaking of JDK 26, you're not going to want to miss a special Spring Office Hours this week as we sit down with Oracle Developer Advocate Billy Korando. We will talk about the release, JavaOne, and whatever else pops up during the live stream.",[47,1743],{"id":1744},"yCFkB9jhh94",[28,1746,123],{"id":122},[16,1748,1265,1749,1269],{},[161,1750,1268],{},[1271,1752,1753,1758],{},[1274,1754,1755,1757],{},[161,1756,1278],{},": The Model Context Protocol is quickly becoming the standard for how AI applications interact with external systems. I'll cover the building blocks of MCP and show you how to build, secure, and test your MCP servers in Java. If you're thinking about connecting AI models to your enterprise data and tools, this one's for you.",[1274,1759,1760,1762],{},[161,1761,1284],{},": Agentic coding assistants are everywhere and some people are saying software engineering is over. I don't buy it. In this talk, I'll make the case for why mastering the fundamentals of the craft matters more than ever, even as AI tools reshape our workflows.",[16,1764,1288],{},[28,1766,140],{"id":139},[33,1768,1770],{"id":1769},"spring-ai-20-m3-now-available","Spring AI 2.0 M3 Now Available",[16,1772,1773,1774,1779],{},"The Spring AI team released Milestone 3 of Spring AI 2.0. You can read the full details on the ",[23,1775,1778],{"href":1776,"rel":1777},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F03\u002F17\u002Fspring-ai-2-0-0-M3-and-1-1-3-and-1-0-4-available",[101],"Spring Blog",". Speaking of the Spring Blog, have you seen the new layout? It looks fantastic.",[16,1781,1782,1784],{},[161,1783,163],{}," The Spring AI project continues to move fast. If you're building AI-powered applications on Spring, keep an eye on the 2.0 milestones. Each release is bringing the framework closer to a really polished developer experience for AI integration.",[33,1786,1788],{"id":1787},"ai-is-hurting-developer-learning","AI Is Hurting Developer Learning",[16,1790,1791,1792,184],{},"A new piece on Bytesized AI digs into research showing that AI tools are actually hurting how developers learn. You can read it ",[23,1793,742],{"href":1794,"rel":1795},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fai-is-hurting-developer-learning-and-the-research-proves-it",[101],[16,1797,1798,1800],{},[161,1799,163],{}," I actually wrote this one for my Bytesized AI newsletter. The research is pretty clear: when developers lean on AI tools too heavily, especially early in their learning journey, they're not building the mental models they need. It ties directly into why I'm giving that \"Fundamentals of Software Engineering\" talk at Arc of AI. The tools are powerful, but you still need to understand what's happening under the hood.",[33,1802,1804],{"id":1803},"stop-letting-ai-build-out-horizontally","Stop Letting AI Build Out Horizontally",[16,1806,1807,1808,184],{},"Another piece from Bytesized AI about why you should stop letting AI expand your codebase in every direction at once. Read it ",[23,1809,742],{"href":1810,"rel":1811},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fstop-letting-ai-build-horizontally",[101],[16,1813,1814,1816],{},[161,1815,163],{}," The idea behind this comes from the concept of tracer bullets in The Pragmatic Programmer. Instead of letting AI scaffold out a wide, shallow codebase, you're better off building thin vertical slices that work end to end. It gives you a working path through your system that you can validate and build on. It's a much better way to use AI as a coding partner.",[166,1818],{"id":1819},"2033603791933870361",[28,1821,1028],{"id":171},[16,1823,178,1824,184],{},[23,1825,183],{"href":181,"rel":1826},[101],[16,1828,187,1829,191,1831,1833],{},[189,1830],{},[189,1832],{},[23,1834,198],{"href":196,"rel":1835},[101],{"title":200,"searchDepth":201,"depth":201,"links":1837},[1838,1839,1840,1844,1845,1850],{"id":1556,"depth":201,"text":1569},{"id":1597,"depth":201,"text":1598},{"id":1610,"depth":201,"text":1611,"children":1841},[1842,1843],{"id":1714,"depth":206,"text":1639},{"id":92,"depth":206,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1846},[1847,1848,1849],{"id":1769,"depth":206,"text":1770},{"id":1787,"depth":206,"text":1788},{"id":1803,"depth":206,"text":1804},{"id":171,"depth":201,"text":1028},{"_id":1852,"path":1853,"title":1854,"description":1855,"meta":1856,"body":1859},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fthe-road-show-confoo-devnexus-and-on-to-javaone.md","\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fthe-road-show-confoo-devnexus-and-on-to-javaone","The Road Show: ConFoo, DevNexus, and On to JavaOne","Back-to-back conference trips to ConFoo and DevNexus kept me busy, and I'm finally home to fill you in on everything — plus what's coming at JavaOne.",{"slug":1857,"date":1858},"the-road-show-confoo-devnexus-and-on-to-javaone","2026-03-09T00:00:00.000Z",{"type":13,"value":1860,"toc":2025},[1861,1864,1872,1881,1885,1889,1892,1898,1904,1907,1911,1914,1920,1923,1929,1932,1938,1941,1943,1946,1949,1951,1957,1962,1968,1971,1973,1977,1986,1991,1995,2004,2009,2011,2016],[16,1862,1863],{},"Hey friends, it's been a couple of weeks since my last newsletter, and I owe you an update. The reason for the silence? I've been on the road. Back-to-back conference trips to ConFoo and DevNexus kept me busy, and I'm finally home, catching my breath, and ready to fill you in on everything. No new videos this week, but I've got plenty to share about the conference experience and what's coming next.",[16,1865,1866,1867,184],{},"I was a guest on The Ready, Test Go Podcast a couple of months ago, and I was excited to see that this episode was published. It was really fun talking with David about all things Cleveland, AI, Java, and more. If you want to watch the video version or find out more about the episode, you can ",[23,1868,1871],{"href":1869,"rel":1870},"https:\u002F\u002Fwww.applause.com\u002Fresources\u002Fpodcasts\u002Fep-38-craft-of-engineering-age-of-vibe-coding\u002F",[101],"go here",[16,1873,1874,1875,1880],{},"I mentioned this in a previous newsletter, but I recently ",[23,1876,1879],{"href":1877,"rel":1878},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-initializr-tui",[101],"built a terminal UI"," for scaffolding Spring Boot projects. This was powered by the Spring Initializr and built with TamboUI, a declarative Java TUI framework. It has been a lot of fun not only to build, but I use it every single day. I was excited to check this morning and find out it already has 114 stars!",[28,1882,1884],{"id":1883},"conference-season","Conference Season",[33,1886,1888],{"id":1887},"confoo","ConFoo",[16,1890,1891],{},"I had a great time at ConFoo up in Montreal. If you've never been, it's a multi-technology conference that draws a really diverse crowd of developers. What I love about ConFoo is that you end up in conversations with people who work in completely different ecosystems, and you always walk away with fresh perspectives. I gave my talks, had some fantastic hallway conversations, and got to connect with developers I've only ever interacted with online. Montreal in winter is cold, but the conference energy more than makes up for it.",[16,1893,1894],{},[74,1895],{"alt":1896,"src":1897},"ConFoo - Spring AI talk","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fconfoo_spring_ai.jpeg",[16,1899,1900],{},[74,1901],{"alt":1902,"src":1903},"ConFoo - Spring Boot 4 talk","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fconfoo_spring_boot_4.jpeg",[16,1905,1906],{},"One thing ConFoo does about as well as any conference I've ever been to is getting speakers feedback on their sessions really fast. I like this because while I'm in the moment, it's nice to hear what people thought of the session.",[33,1908,1910],{"id":1909},"devnexus","DevNexus",[16,1912,1913],{},"Right on the heels of ConFoo, I headed to DevNexus in Atlanta. DevNexus is one of the largest Java conferences in North America, and the Java community always shows up strong. The talks were excellent, the conversations were even better, and it was awesome to see so many familiar faces from the Spring community. If you were there and we got to chat, thanks for saying hello. These in-person events remind me why I love this community so much.",[16,1915,1916],{},[74,1917],{"alt":1918,"src":1919},"DevNexus - Nate and Glenn","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fdevnexus_nate_glenn.jpeg",[16,1921,1922],{},"My friend Nate Schutta and I did an 8-hour workshop on The Fundamentals of Software Engineering in the Age of AI. I thought it was awesome and it ended up being a nice little therapy session for all of us. I think we all need some time to talk and process what's going on in our industry right now. We also did a 1-hour version of this and were amazed to see that it turned out to be standing room only.",[16,1924,1925],{},[74,1926],{"alt":1927,"src":1928},"DevNexus - Standing room only","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fdevnexus_sro.jpg",[16,1930,1931],{},"We also had a book signing at the VMware Tanzu Booth, which was a lot of fun. We ended up giving away about 30 books and I want to thank everyone who made this possible.",[16,1933,1934],{},[74,1935],{"alt":1936,"src":1937},"Book signing at the VMware Tanzu Booth","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fbook_signing.jpeg",[16,1939,1940],{},"Being at two conferences in quick succession is tiring, but it's the kind of tired where you come home full of ideas and motivation. I've got a bunch of content ideas from questions people asked me at both events, so stay tuned for those in the coming weeks.",[28,1942,93],{"id":92},[16,1944,1945],{},"Before I hit the road, we recorded a DevNexus preview episode with Glenn Renfro on Spring Office Hours. If you missed it, you can catch the replay below. Glenn is always a great guest, and we talked about what to expect at DevNexus and some of the Spring-related sessions on the schedule. Now that DevNexus is behind us, I'm looking forward to doing a recap soon.",[47,1947],{"id":1948},"iIJFgihuMi4",[28,1950,123],{"id":122},[16,1952,1953,1954,1956],{},"The conference train doesn't stop. Next week I'm heading to San Francisco for ",[161,1955,1574],{}," (March 17-19), and I'm giving two talks:",[16,1958,1959,1961],{},[161,1960,1284],{},": Agentic coding assistants and AI chat interfaces are changing how we work, and some people are saying software engineering is dead. I don't buy it. In this talk, I'll make the case that the fundamentals of our craft matter more than ever. AI tools can boost productivity, but you still need to understand what you're building and why.",[16,1963,1964,1967],{},[161,1965,1966],{},"Building and Securing MCP Servers for Java Developers",": The Model Context Protocol is quickly becoming the standard for how AI applications connect with external systems and data. In this session, I'll walk through the building blocks of MCP and show you how to build, secure, and test MCP servers in Java. If you're thinking about how AI fits into your enterprise architecture, this one's for you.",[16,1969,1970],{},"If you're going to be at JavaOne, come find me and say hi. I'd love to meet you in person.",[28,1972,140],{"id":139},[33,1974,1976],{"id":1975},"introducing-gpt-54","Introducing GPT-5.4",[16,1978,1979,1980,1985],{},"OpenAI released ",[23,1981,1984],{"href":1982,"rel":1983},"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-gpt-5-4\u002F",[101],"GPT-5.4",", the latest in the GPT-5 family of models.",[16,1987,1988,1990],{},[161,1989,163],{}," The GPT-5 models are really good. I haven't pushed this one enough to notice a major difference yet, but initial impressions are positive. I'll report back once I've spent more time with it in my day-to-day workflows.",[33,1992,1994],{"id":1993},"notebooklm-adds-video-overviews","NotebookLM Adds Video Overviews",[16,1996,1997,1998,2003],{},"Google's ",[23,1999,2002],{"href":2000,"rel":2001},"https:\u002F\u002Fnotebooklm.google\u002F",[101],"NotebookLM"," now supports video overviews, expanding beyond its popular audio summary feature.",[16,2005,2006,2008],{},[161,2007,163],{}," I'm a huge fan of NotebookLM and I'm looking forward to giving this a try. The audio overviews were already a game-changer for digesting long documents and research. Adding video takes it to another level. Have you used it yet? I'd love to hear what you think.",[28,2010,1028],{"id":171},[16,2012,178,2013,184],{},[23,2014,183],{"href":181,"rel":2015},[101],[16,2017,187,2018,191,2020,2022],{},[189,2019],{},[189,2021],{},[23,2023,198],{"href":196,"rel":2024},[101],{"title":200,"searchDepth":201,"depth":201,"links":2026},[2027,2031,2032,2033,2037],{"id":1883,"depth":201,"text":1884,"children":2028},[2029,2030],{"id":1887,"depth":206,"text":1888},{"id":1909,"depth":206,"text":1910},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":2034},[2035,2036],{"id":1975,"depth":206,"text":1976},{"id":1993,"depth":206,"text":1994},{"id":171,"depth":201,"text":1028},{"_id":2039,"path":2040,"title":2041,"description":2042,"meta":2043,"body":2046},"newsletter\u002Fnewsletter\u002F2026\u002F02\u002F22\u002Fhappy-birthday-claude-spring-tui-and-conference-season-is-here.md","\u002Fnewsletter\u002F2026\u002F02\u002F22\u002Fhappy-birthday-claude-spring-tui-and-conference-season-is-here","Happy Birthday Claude, Spring TUI and Conference Season is here","Claude Code turns one, building a Spring Initializr TUI with TamboUI, and a packed conference season ahead with ConFoo, DevNexus, and JavaOne.",{"slug":2044,"date":2045},"happy-birthday-claude-spring-tui-and-conference-season-is-here","2026-02-22T08:00:00.000Z",{"type":13,"value":2047,"toc":2204},[2048,2051,2054,2057,2060,2064,2069,2072,2075,2079,2092,2099,2102,2104,2107,2112,2115,2122,2124,2127,2131,2145,2149,2169,2173,2185,2188,2190,2195],[16,2049,2050],{},"Happy Monday friends and welcome to another edition of the newsletter. This was a quieter week on the content front. Last week I traveled to Dallas to visit a customer and it was a quick trip but a really good one. I have been heads-down prepping for what's shaping up to be a packed conference season.",[16,2052,2053],{},"ConFoo in Montreal is just days away, DevNexus is right around the corner after that, and then JavaOne in March. Arc of AI is now on the schedule as well and I'm really looking forward to that one. I've been polishing slides, tweaking demos, and making sure my live coding sessions don't blow up on stage (no promises).",[16,2055,2056],{},"While I do understand some of the anxiety around where we will be as software engineers, I also believe that it is an exciting time to be a developer. I don't think I have ever enjoyed building as much as I do right now. It's a great time to be a Java and Spring developer, and last week my friend and colleague Michael Coté created a video on why he thinks it's a great time to be a Spring dev.",[47,2058],{"id":2059},"_kGX3nFfeAw",[28,2061,2063],{"id":2062},"happy-birthday-claude-code","Happy Birthday Claude Code",[16,2065,2066],{},[74,2067],{"alt":2063,"src":2068},"\u002Fimages\u002Fnewsletter\u002F2026\u002F02\u002F22\u002Fclaude-code-bday.png",[16,2070,2071],{},"Claude Code celebrated its first birthday 🥳 over the weekend. It's crazy because I'm heading to ConFoo this week and I will never forget last year's event. I had some time in between talks so I decided to check out this new tool called Claude Code. I probably blew through $20 in credits over a few days but I was amazed at how good it was and how far we had come from generating text in a chat assistant.",[16,2073,2074],{},"It is a little hard to believe just how good this tool and the Anthropic models have gotten in just a year's time, but here we are. I'm excited to see how much more progress we make in the next year!",[28,2076,2078],{"id":2077},"spring-tui","Spring TUI",[16,2080,2081,2082,2085,2086,2091],{},"While I was in Dallas last week I saw this tweet ",[166,2083],{"id":2084},"2024079126261342353"," announcing TamboUI. This is a framework for building terminal user interfaces (TUI) in Java. My mind immediately went to what problems I can solve with this. I thought about my current workflow of bootstrapping a Spring Boot project using ",[23,2087,2090],{"href":2088,"rel":2089},"https:\u002F\u002Fstart.spring.io",[101],"start.spring.io",". When I'm done I download it, unzip it and open it up in my terminal. From there I run Claude Code and I begin building.",[16,2093,2094,2095,2098],{},"I thought if I could build a Spring Initializr TUI I should be able to improve my workflow and that is exactly what I did. I spent some time on the plane iterating on a plan and by the time I got home I had a PRD to work from. That night and the following morning I was able to knock out an MVP of the ",[23,2096,2078],{"href":1877,"rel":2097},[101],". If you find it useful give it a star on GitHub and if you want to learn more check out the video below.",[47,2100],{"id":2101},"J9C2MiQTIYs",[28,2103,93],{"id":92},[16,2105,2106],{},"DaShaun and I don't have a new episode from last week to share, but we've got a great one coming up this Monday!",[16,2108,2109],{},[161,2110,2111],{},"This Week: S5E07 - Copilot CLI and Java SDK with Bruno Borges",[16,2113,2114],{},"On Monday, February 23 at 1:00 PM ET, we're sitting down with Bruno Borges, Principal Product Manager at Microsoft. We'll be diving into the GitHub Copilot CLI and the new Copilot Java SDK, looking at how these tools are turning the terminal into a seriously powerful environment for Spring developers. If you're curious about the next generation of AI-assisted development tooling, you won't want to miss this one.",[16,2116,2117],{},[23,2118,2121],{"href":2119,"rel":2120},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0ghwKO8TUEY",[101],"Tune in live on YouTube",[28,2123,123],{"id":122},[16,2125,2126],{},"I've got a busy stretch of conferences coming up over the next few weeks. Here's where you can find me:",[33,2128,2130],{"id":2129},"confoo-2026-montreal-canada-february-25-27","ConFoo 2026 - Montreal, Canada (February 25-27)",[1271,2132,2133,2139],{},[1274,2134,2135,2138],{},[161,2136,2137],{},"What's New in Spring Boot 4",": A deep dive into the next major release of Spring Boot, covering HTTP interfaces, JSpecify null safety, Jackson 3 integration, and built-in resilience patterns, all with live coding demos.",[1274,2140,2141,2144],{},[161,2142,2143],{},"Introduction to Spring AI",": A practical introduction to bringing generative AI into your Java applications. We'll build chatbots, implement RAG, and explore MCP for AI orchestration.",[33,2146,2148],{"id":2147},"devnexus-2026-atlanta-ga-march-4-6","DevNexus 2026 - Atlanta, GA (March 4-6)",[1271,2150,2151,2157,2163],{},[1274,2152,2153,2156],{},[161,2154,2155],{},"Fundamentals of Software Engineering in the Age of AI (Workshop)",": A hands-on workshop on March 4 where we dig into why mastering the fundamentals still matters even as AI tools reshape our workflows.",[1274,2158,2159,2162],{},[161,2160,2161],{},"Fundamentals of Software Engineering in the Age of AI (Talk)",": The conference talk version covering the same theme: AI tools can boost productivity, but developers still need to master the craft.",[1274,2164,2165,2168],{},[161,2166,2167],{},"Integrating LLMs in Java: A Practical Guide to Model Context Protocol",": Live coding session where we build custom MCP servers in Java and connect them to Claude Desktop and other AI tools.",[33,2170,2172],{"id":2171},"javaone-2026-san-francisco-ca-march-17-19","JavaOne 2026 - San Francisco, CA (March 17-19)",[1271,2174,2175,2180],{},[1274,2176,2177,2179],{},[161,2178,1284],{},": Bringing this talk to the JavaOne stage.",[1274,2181,2182,2184],{},[161,2183,1966],{},": Learn the building blocks of MCP and how to build, secure, and test your MCP servers in Java.",[16,2186,2187],{},"If you're attending any of these, please come say hi! I love meeting people in person.",[28,2189,1028],{"id":171},[16,2191,178,2192,184],{},[23,2193,183],{"href":181,"rel":2194},[101],[16,2196,187,2197,191,2199,2201],{},[189,2198],{},[189,2200],{},[23,2202,198],{"href":196,"rel":2203},[101],{"title":200,"searchDepth":201,"depth":201,"links":2205},[2206,2207,2208,2209,2214],{"id":2062,"depth":201,"text":2063},{"id":2077,"depth":201,"text":2078},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123,"children":2210},[2211,2212,2213],{"id":2129,"depth":206,"text":2130},{"id":2147,"depth":206,"text":2148},{"id":2171,"depth":206,"text":2172},{"id":171,"depth":201,"text":1028},{"_id":2216,"path":2217,"title":2218,"description":2219,"meta":2220,"body":2223},"newsletter\u002Fnewsletter\u002F2026\u002F02\u002F16\u002Fcode-is-changing-are-we.md","\u002Fnewsletter\u002F2026\u002F02\u002F16\u002Fcode-is-changing-are-we","Code Is Changing. Are We?","Programming is changing and I'm not sure everyone understands the scale. Thoughts on AI, new YouTube videos on Spring REST Client, Prompt Caching, and RestClient.Builder, plus Spring Office Hours and upcoming conferences.",{"slug":2221,"date":2222},"code-is-changing-are-we","2026-02-16T08:00:00.000Z",{"type":13,"value":2224,"toc":2505},[2225,2228,2237,2252,2255,2258,2261,2265,2269,2272,2275,2278,2282,2285,2288,2291,2295,2305,2308,2311,2313,2316,2331,2346,2361,2364,2366,2377,2380,2389,2391,2394,2400,2412,2418,2430,2435,2447,2450,2452,2456,2470,2475,2479,2488,2491,2494,2496,2501],[16,2226,2227],{},"Happy Monday, friends! What a busy week last week was for me. I had three videos go out, two Spring Office Hours episodes dropped, A Fundamentals Podcast, and I somehow found time to nerd out on Excalidraw + MCP (more on that later). With ConFoo, DevNexus, and JavaOne right around the corner, I'm also deep in talk prep mode. Let's get into it.",[16,2229,2230,2231,2236],{},"I sent out this ",[23,2232,2235],{"href":2233,"rel":2234},"https:\u002F\u002Fx.com\u002Ftherealdanvega\u002Fstatus\u002F2022348943581921353",[101],"tweet"," last week because I have been having these thoughts lately, and I figured it was time to share them. If you didn't see it, here is the basic premise:",[2238,2239,2240,2243,2246,2249],"blockquote",{},[16,2241,2242],{},"I get the sense most developers don't fully grasp where we are with AI. Sure, most know things are changing, but I don't think they understand the scale.",[16,2244,2245],{},"Some still see it as a helpful tool at best. Others dismiss it as a parlor trick. I'm deep in the weeds pushing these tools as hard as I can, and I'm still in a bit of a shock phase. Combined with the realization that this is the worst it will ever be.",[16,2247,2248],{},"About a year ago I was pushing Claude Code and thought it was amazing. Looking back? That version wasn't even close to where we are today. Where will we be in a year?",[16,2250,2251],{},"I still believe talented engineers will adapt. But if I'm being honest, I'm worried about the industry as a whole. Not in a doom and gloom way, but in a \"we need to be having more real conversations about this\" kind of way. It's something I think about a lot.",[16,2253,2254],{},"Programming is changing, and I'm not sure everyone understands the scale. I don't want this to come off as doom and gloom because that is not my view. I do, however, think we need to be out there pushing these tools to see what they are capable of. The physical act of writing code has never defined us as programmers. It might have been a part, but as you know, so much more goes into our roles.",[16,2256,2257],{},"Peter Steinberger, the creator of OpenClaw, which has taken the internet by storm, recently shared his thoughts on this very topic. I really enjoyed how well thought out and articulate his answer was. If you haven't had a chance to see this clip, give it a watch. I really resonated with this.",[47,2259],{"id":2260},"ecBrO3GXdZ8",[28,2262,2264],{"id":2263},"videos-i-published-last-week","Videos I Published Last Week",[33,2266,2268],{"id":2267},"rest-client-and-service-discovery","REST Client and Service Discovery",[16,2270,2271],{},"If you're building microservices with Spring, you've probably dealt with the pain of hardcoding service URLs or juggling configuration across environments. In this video, I walk through how to use Spring's RestClient alongside service discovery so your services can find each other without all that manual wiring.",[16,2273,2274],{},"We look at how service discovery works with the RestClient, and I show you how clean the code can be when you let Spring handle the lookup for you. If you're still passing around URLs in properties files, this one's for you.",[47,2276],{"id":2277},"s9yyxyvYuq4",[33,2279,2281],{"id":2280},"spring-ai-prompt-caching","Spring AI Prompt Caching",[16,2283,2284],{},"This video tackles a problem that comes up fast when you start building real applications with Spring AI: cost and latency from repeated prompts. Prompt caching lets you avoid sending the same context to a model over and over, which saves you both time and money.",[16,2286,2287],{},"I walk through how prompt caching works in Spring AI, when you should use it, and how to set it up in your own projects. If you're building anything with RAG or long system prompts, caching can make a real difference in how your app performs. This is one of those features that's easy to overlook but pays off immediately.",[47,2289],{"id":2290},"eYb7BKW4QcU",[33,2292,2294],{"id":2293},"spring-boot-restclientbuilder-explained-builder-pattern","Spring Boot RestClient.Builder Explained (Builder Pattern)",[16,2296,2297,2298,2300,2301,2304],{},"This one came straight from a question on Spring Office Hours. Someone asked when they should use RestTemplate vs RestTemplate.Builder, and I figured it was worth answering with the more modern RestClient instead. The builder pattern shows up everywhere in Spring, and understanding when to use ",[469,2299,585],{}," directly vs ",[469,2302,2303],{},"RestClient.Builder"," matters.",[16,2306,2307],{},"I break down the builder pattern itself, show you how Spring Boot auto-configures the builder for you, and explain why you'd want to customize it. If you've ever wondered why Spring gives you both a ready-made client and a builder, this video clears it up. It's a short one but covers a concept that comes up constantly.",[47,2309],{"id":2310},"aocKQ2-U3wU",[28,2312,93],{"id":92},[16,2314,2315],{},"We had a double-header last week on Spring Office Hours, and both episodes were great.",[16,2317,2318,2319,2322,2323,2330],{},"On Monday, DaShaun and I sat down with ",[161,2320,2321],{},"James Ward"," for ",[23,2324,2327],{"href":2325,"rel":2326},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e05-spring-and-aws-with-james-ward",[101],[161,2328,2329],{},"S5E05: Spring and AWS",". We dug into what it looks like to run Spring applications on AWS today, the different deployment options, and some of the patterns James has seen work well at scale.",[16,2332,2333,2334,2337,2338,2345],{},"Then on Wednesday, we had ",[161,2335,2336],{},"Juergen Hoeller"," on for ",[23,2339,2342],{"href":2340,"rel":2341},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e06-spring-framework-7-with-juergen-hoeller",[101],[161,2343,2344],{},"S5E06: Spring Framework 7",". Getting to talk with Juergen about what's coming in Spring Framework 7 is always a treat. He's the person who knows the framework better than anyone, and hearing the vision straight from him is something you don't want to miss.",[16,2347,2348,2349,2352,2353,2356,2357,2360],{},"We're taking this week off for Presidents' Day, but we'll be back on ",[161,2350,2351],{},"February 23rd"," with ",[161,2354,2355],{},"S5E07: Copilot CLI and Java SDK"," featuring ",[161,2358,2359],{},"Bruno Borges",". That's going to be a fun one. You can catch it live here:",[47,2362],{"id":2363},"0ghwKO8TUEY",[28,2365,344],{"id":343},[16,2367,2368,2369,1195,2371,2376],{},"We released a new episode of ",[161,2370,344],{},[23,2372,2375],{"href":2373,"rel":2374},"https:\u002F\u002Ffundamentalsofswe.com\u002Fpodcast",[101],"podcast"," last week. Nate Schutta and I talked about exploring career paths for software engineers, which is a topic I care a lot about. If you're thinking about where your career is headed, give it a watch or listen.",[47,2378],{"id":2379},"z41y8S81ARE",[16,2381,2382,2383,2388],{},"Speaking of Fundamentals of Software Engineering, the ",[23,2384,2387],{"href":2385,"rel":2386},"https:\u002F\u002Fwww.amazon.com\u002FFundamentals-Software-Engineering-Coder-Engineer\u002Fdp\u002FB0FY23758S\u002F",[101],"audiobook"," is now live! While Nate and I did not narrate this book, I had a chance to listen to some of it and I really enjoyed it.",[28,2390,123],{"id":122},[16,2392,2393],{},"I've got a packed schedule over the next few weeks. Here's where you can find me:",[16,2395,2396,2399],{},[161,2397,2398],{},"ConFoo 2026"," (February 25-27, Montreal, Canada)",[1271,2401,2402,2407],{},[1274,2403,2404,2406],{},[161,2405,2143],{},": Building chatbots, implementing RAG, and using MCP for AI orchestration, all from your Java stack.",[1274,2408,2409,2411],{},[161,2410,2137],{},": Live coding through HTTP interfaces, JSpecify null safety, Jackson 3 integration, and the built-in resilience patterns shipping in Boot 4.",[16,2413,2414,2417],{},[161,2415,2416],{},"DevNexus 2026"," (March 4-6, Atlanta, GA)",[1271,2419,2420,2425],{},[1274,2421,2422,2424],{},[161,2423,1284],{}," (talk + workshop): Why the fundamentals matter more than ever, even with agentic coding assistants changing the workflow.",[1274,2426,2427,2429],{},[161,2428,2167],{},": Live coding MCP servers in Java and connecting them to Claude Desktop and other AI tools.",[16,2431,2432,2434],{},[161,2433,1574],{}," (March 17-19, San Francisco, CA)",[1271,2436,2437,2442],{},[1274,2438,2439,2441],{},[161,2440,1966],{},": The building blocks of MCP and how to build, secure, and test your servers.",[1274,2443,2444,2446],{},[161,2445,1284],{},": Same talk, bigger stage. Still just as important.",[16,2448,2449],{},"If you're going to any of these, come say hi. I always love meeting newsletter readers in person.",[28,2451,140],{"id":139},[33,2453,2455],{"id":2454},"openclaw-openai-and-the-future","OpenClaw, OpenAI, and the Future",[16,2457,2458,2459,2464,2465,184],{},"Peter Steinberger wrote a thoughtful ",[23,2460,2463],{"href":2461,"rel":2462},"https:\u002F\u002Fsteipete.me\u002Fposts\u002F2026\u002Fopenclaw",[101],"post"," about OpenClaw and where it's headed. And then the big news: Peter is ",[23,2466,2469],{"href":2467,"rel":2468},"https:\u002F\u002Fx.com\u002Fsama\u002Fstatus\u002F2023150230905159801",[101],"joining OpenAI",[16,2471,2472,2474],{},[161,2473,163],{}," Peter seems like a great guy, and I'm happy for him. He admitted he wanted to join a big company and keep OpenClaw open source. Hopefully he has some more resources at his disposal now. It'll be interesting to see how this plays out for the project.",[33,2476,2478],{"id":2477},"excalidraw-mcp","Excalidraw MCP",[16,2480,2481,2482,2487],{},"The ",[23,2483,2486],{"href":2484,"rel":2485},"https:\u002F\u002Fgithub.com\u002Fexcalidraw\u002Fexcalidraw-mcp",[101],"Excalidraw MCP server"," is now available, and if you saw my tweet this week, you know I'm all in on this. You give Claude a prompt describing a diagram, and it generates beautiful Excalidraw diagrams in seconds. No dragging boxes, no fiddling with arrows. Just describe what you want and watch it appear.",[16,2489,2490],{},"This is one of those MCP integrations that instantly clicks. If you create architecture diagrams, sequence diagrams, or any kind of visual for your team, go try this right now.",[166,2492],{"id":2493},"2021779252543463815",[28,2495,1028],{"id":171},[16,2497,178,2498,184],{},[23,2499,183],{"href":181,"rel":2500},[101],[16,2502,187,2503,191],{},[189,2504],{},{"title":200,"searchDepth":201,"depth":201,"links":2506},[2507,2512,2513,2514,2515,2519],{"id":2263,"depth":201,"text":2264,"children":2508},[2509,2510,2511],{"id":2267,"depth":206,"text":2268},{"id":2280,"depth":206,"text":2281},{"id":2293,"depth":206,"text":2294},{"id":92,"depth":201,"text":93},{"id":343,"depth":201,"text":344},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":2516},[2517,2518],{"id":2454,"depth":206,"text":2455},{"id":2477,"depth":206,"text":2478},{"id":171,"depth":201,"text":1028},{"_id":2521,"path":2522,"title":2523,"description":2524,"meta":2525,"body":2528},"newsletter\u002Fnewsletter\u002F2026\u002F02\u002F09\u002Fai-agents-are-cooking.md","\u002Fnewsletter\u002F2026\u002F02\u002F09\u002Fai-agents-are-cooking","AI Agents Are Cooking and I'm Here for It","A look at the latest AI coding tools from OpenAI and Anthropic, plus Spring Office Hours with Christian Tzolov, upcoming speaking engagements, and more.",{"slug":2526,"date":2527},"ai-agents-are-cooking","2026-02-09T08:00:00.000Z",{"type":13,"value":2529,"toc":2760},[2530,2533,2536,2542,2545,2549,2552,2556,2559,2562,2565,2569,2572,2575,2578,2582,2585,2588,2591,2593,2602,2605,2621,2623,2626,2635,2647,2656,2673,2676,2678,2682,2690,2695,2699,2708,2713,2717,2725,2730,2732,2735,2738,2741,2744,2746,2751],[16,2531,2532],{},"Happy Monday and welcome to another edition of the newsletter. Congratulations to the Seattle Seahawks for winning the Super Bowl. As a Cleveland Browns fan, I hope to see one of those in my lifetime.",[16,2534,2535],{},"I spent some time last week working on my new project ContentOS (working name), which is an application to track all of the content I am working on. I think one of the really amazing sides to all of these tools that we have been given is the ability to build out projects that I would not have had the bandwidth for in the past. The fun part about this is that it doesn't need to be super polished or work for every single use case because I am just building it for me.",[16,2537,2538],{},[74,2539],{"alt":2540,"src":2541},"ContentOS","\u002Fimages\u002Fnewsletter\u002F2026\u002F02\u002F09\u002Fcontentos.png",[16,2543,2544],{},"What a week for AI coding tools. I spent most of my time this week exploring the latest releases from OpenAI and Anthropic, and I have thoughts. Lots of thoughts. I also got to catch up with my buddy Ralph and watch him do what he does best: build fun things with Java. Let's get into it.",[28,2546,2548],{"id":2547},"this-weeks-videos","This Week's Videos",[16,2550,2551],{},"You won't notice it in all the videos I worked on last week, but I had a bit of an aha moment when it comes to recording and editing videos for my YouTube channel. I had a good conversation about camera setups and color grading, and I think I have dialed in a really good process. Let me know if you can spot which one of these is not like the others 😉",[33,2553,2555],{"id":2554},"codex-first-look","Codex First Look",[16,2557,2558],{},"OpenAI finally gave us access to Codex, and I had to take it for a spin. In this video, I walk through my initial impressions of what it can do, how it compares to other AI coding assistants, and where I think it fits into a developer's workflow.",[16,2560,2561],{},"I ran it through several Spring Boot scenarios to see how it handles real-world Java development. Some things impressed me, some things didn't. If you're trying to decide whether to add another AI tool to your toolkit, this should help you figure out if Codex is worth your time.",[47,2563],{"id":2564},"Q44TPEtNcNo",[33,2566,2568],{"id":2567},"ralph-loop-vending-machine","Ralph Loop Vending Machine",[16,2570,2571],{},"Ralph is back! If you haven't seen Ralph's content before, you're in for a treat. In this episode, he builds a vending machine in Java and walks through his thought process every step of the way.",[16,2573,2574],{},"What I love about Ralph's approach is how he makes Java fundamentals feel approachable. This isn't about fancy frameworks or complex architectures. It's just solid Java programming, explained clearly. Perfect for developers who want to sharpen their core skills or newer devs looking to learn from someone who genuinely enjoys teaching.",[47,2576],{"id":2577},"CV97l0GkPHo",[33,2579,2581],{"id":2580},"claude-code-tasks-stop-babysitting-your-ai-agent","Claude Code Tasks: Stop Babysitting Your AI Agent",[16,2583,2584],{},"I've been using Claude Code's task feature heavily, and it's changed how I approach certain types of work. In this video, I show you how to set up tasks, when to use them, and most importantly, when to step back and let the agent do its thing.",[16,2586,2587],{},"The key insight here is knowing when to give detailed instructions versus when to provide a goal and let Claude figure out the path. I share some patterns that have worked well for me and a few that definitely didn't.",[47,2589],{"id":2590},"NAWKFRaR0Sk",[28,2592,93],{"id":92},[16,2594,2595,2596,2601],{},"Last week on Spring Office Hours, DaShaun and I had Christian Tzolov on to talk about ",[23,2597,2600],{"href":2598,"rel":2599},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e04-spring-ai-agentic-patterns-with-christian-tzolov",[101],"agentic patterns in Spring AI",". This was a great conversation about how to build AI applications that can reason, plan, and execute multi-step tasks. If you're thinking about adding AI capabilities to your Spring applications, this episode covers the patterns you need to know.",[16,2603,2604],{},"Coming up this week, we've got two fantastic episodes. On February 9th, James Ward joins us to discuss Spring and AWS, covering everything from deployment strategies to cloud-native patterns. Then on February 11th, we have the one and only Jürgen Hoeller to talk about... well, Spring. When the project lead of the Spring Framework shows up, you tune in.",[1271,2606,2607,2614],{},[1274,2608,2609],{},[23,2610,2613],{"href":2611,"rel":2612},"https:\u002F\u002Fwww.youtube.com\u002Flive\u002FhlUC8DF8iFg",[101],"Spring and AWS with James Ward (Feb 9)",[1274,2615,2616],{},[23,2617,2620],{"href":2618,"rel":2619},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bMlal_ZmnNo",[101],"Jürgen Hoeller (Feb 11)",[28,2622,123],{"id":122},[16,2624,2625],{},"I've got some travel coming up! Here's where you can catch me in person:",[16,2627,2628,2634],{},[23,2629,2632],{"href":2630,"rel":2631},"https:\u002F\u002Fconfoo.ca\u002Fen\u002F2026",[101],[161,2633,2398],{}," | February 25-27 | Montreal, Canada",[1271,2636,2637,2642],{},[1274,2638,2639,2641],{},[734,2640,2137],{},": Your comprehensive guide to the next major release. We'll cover HTTP interfaces, JSpecify null safety, Jackson 3 integration, and built-in resilience patterns through live coding demos.",[1274,2643,2644,2646],{},[734,2645,2143],{},": Learn to build chatbots, implement RAG for enhanced context, and use MCP for AI orchestration. We'll write model-agnostic code that works with cloud and local LLMs.",[16,2648,2649,2655],{},[23,2650,2653],{"href":2651,"rel":2652},"https:\u002F\u002Fdevnexus.com\u002F",[101],[161,2654,2416],{}," | March 4-6 | Atlanta, GA",[1271,2657,2658,2663,2668],{},[1274,2659,2660,2662],{},[734,2661,2155],{},": A hands-on workshop on March 4th about navigating development in an AI-augmented landscape. The rumors of our demise are greatly exaggerated!",[1274,2664,2665,2667],{},[734,2666,1284],{},": The conference talk version covering how to use AI tools effectively while mastering the software craft.",[1274,2669,2670,2672],{},[734,2671,2167],{},": Live coding demos showing how to connect Java applications to Claude Desktop and other AI tools while maintaining control over your data.",[16,2674,2675],{},"If you're attending either of these, come say hi!",[28,2677,140],{"id":139},[33,2679,2681],{"id":2680},"claude-opus-46","Claude Opus 4.6",[16,2683,2684,2685,2689],{},"Anthropic released ",[23,2686,2681],{"href":2687,"rel":2688},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fclaude-opus-4-6",[101]," this week with improvements across the board.",[16,2691,2692,2694],{},[161,2693,163],{}," Better? I guess we'll see. I've been running it through my usual tests, and the results are... mixed. Some things feel sharper, others feel about the same. I'll report back once I've had more time with it.",[33,2696,2698],{"id":2697},"claude-code-agent-teams","Claude Code Agent Teams",[16,2700,2701,2702,2707],{},"Anthropic also announced ",[23,2703,2706],{"href":2704,"rel":2705},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fagent-teams",[101],"Agent Teams"," for Claude Code, allowing multiple agents to collaborate on tasks.",[16,2709,2710,2712],{},[161,2711,163],{}," This is a really interesting feature. The idea of having specialized agents that can hand off work to each other opens up some compelling workflows. I'm already thinking about how this could work for larger refactoring projects where you want one agent focused on tests and another on implementation.",[33,2714,2716],{"id":2715},"gpt-53-codex","GPT 5.3 Codex",[16,2718,2719,2720,184],{},"OpenAI dropped ",[23,2721,2724],{"href":2722,"rel":2723},"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-gpt-5-3-codex\u002F",[101],"GPT 5.3 with Codex integration",[16,2726,2727,2729],{},[161,2728,163],{}," The combination of this and Codex has me using it more than I expected. Codex has some amazing new features like threads, and when you pair this with the new model and improved speed of OpenAI's models, this is a big win!",[28,2731,385],{"id":384},[16,2733,2734],{},"I finally got around to upgrading to macOS Tahoe, and I really like it so far!",[166,2736],{"id":2737},"2019040778853728724",[16,2739,2740],{},"The one-year anniversary of the term \"Vibe Coding.\"",[166,2742],{"id":2743},"2018338818559004739",[28,2745,1028],{"id":171},[16,2747,178,2748,184],{},[23,2749,183],{"href":181,"rel":2750},[101],[16,2752,187,2753,191,2755,2757],{},[189,2754],{},[189,2756],{},[23,2758,198],{"href":196,"rel":2759},[101],{"title":200,"searchDepth":201,"depth":201,"links":2761},[2762,2767,2768,2769,2774,2775],{"id":2547,"depth":201,"text":2548,"children":2763},[2764,2765,2766],{"id":2554,"depth":206,"text":2555},{"id":2567,"depth":206,"text":2568},{"id":2580,"depth":206,"text":2581},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":2770},[2771,2772,2773],{"id":2680,"depth":206,"text":2681},{"id":2697,"depth":206,"text":2698},{"id":2715,"depth":206,"text":2716},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":1028},{"_id":2777,"path":2778,"title":2779,"description":2780,"meta":2781,"body":2784},"newsletter\u002Fnewsletter\u002F2026\u002F02\u002F02\u002Fvibe-coding-claude-code-field-of-dreams.md","\u002Fnewsletter\u002F2026\u002F02\u002F02\u002Fvibe-coding-claude-code-field-of-dreams","Vibe Coding, Claude Code and the Field of Dreams Problem","Happy Monday and welcome to another edition of the newsletter. We made it to February, the shortest month on the calendar, so why does it always feel like the longest?",{"slug":2782,"date":2783},"vibe-coding-claude-code-field-of-dreams","2026-02-02T08:00:00.000Z",{"type":13,"value":2785,"toc":2964},[2786,2789,2792,2795,2798,2802,2805,2808,2814,2817,2834,2837,2840,2844,2853,2856,2859,2862,2865,2868,2871,2874,2881,2885,2890,2893,2896,2904,2907,2930,2933,2937,2945,2948,2950,2955],[16,2787,2788],{},"Happy Monday and welcome to another edition of the newsletter. We made it to February, the shortest month on the calendar, so why does it always feel like the longest? I'm over the cold and snow. I'm ready for spring 🍃",[16,2790,2791],{},"Now that we're in February, we're a little over a month away from DevNexus. If you haven't registered for the conference, you should. This is one of the best Java conferences around, and the location in Atlanta is awesome.",[16,2793,2794],{},"I'll be giving an 8-hour workshop with my friend and co-author Nate Schutta. We'll be discussing the fundamentals of software engineering in the age of AI. If you can't catch the workshop, we're giving a shortened 1-hour version of the talk during the main conference. I'll also be giving a talk on MCP, which I'm really looking forward to. All that and some really exciting things I just can't talk about yet. I hope you'll join me in Atlanta.",[16,2796,2797],{},"In this edition, I want to focus on Vibe Coding. I'll talk about an application I've been building, the tools I use, and I'll address an issue with vibe coding I've seen lately.",[28,2799,2801],{"id":2800},"vibe-coding","Vibe Coding",[16,2803,2804],{},"I'm not a huge fan of the term \"Vibe Coding\"—I much prefer \"Context Engineering.\" That said, I'm increasingly impressed with what today's tools and models can do. Something shifted in late December 2025, though I can't quite pinpoint what.",[16,2806,2807],{},"These tools have opened doors to projects I wouldn't have considered before. I create a lot of content—videos, articles, blog posts, podcasts, newsletters—and need to manage it all. I've been using Notion, which I love, but it lacks automation control. When a video is completed, I want transcription to run automatically. When a video is published, I want AI to generate social media posts across multiple platforms. This didn't exist, so I decided to build it myself.",[16,2809,2810],{},[74,2811],{"alt":2812,"src":2813},"Content OS","\u002Fimages\u002Fnewsletter\u002F2026\u002F02\u002F02\u002Fcontent_os_dark.png",[16,2815,2816],{},"I'm calling it Content OS (for now), and I'd say it's about 75% of the features I want for an MVP. There are already projects in there, and a couple of those videos might come out this week. The stack I'm using:",[1271,2818,2819,2822,2825,2828,2831],{},[1274,2820,2821],{},"Spring Boot 4",[1274,2823,2824],{},"Spring AI 2",[1274,2826,2827],{},"Spring Security 7",[1274,2829,2830],{},"Java Template Engine",[1274,2832,2833],{},"Tailwind CSS",[16,2835,2836],{},"It's not that I couldn't have built something like this in the past—it really comes down to whether I want to prioritize this over other work. The amount of time it would have taken me to get this off the ground is probably 10x what I have spent so far. So to justify this in the past, I might have considered whether I can make money off of this. Now that hasn't even crossed my mind. I am building this for me, so I am putting in the features I want, not the ones I think would sell.",[16,2838,2839],{},"It's honestly been surprising, fun, and a little bit scary if I'm being honest.",[28,2841,2843],{"id":2842},"speaking-of-vibe-coding","Speaking of Vibe Coding",[16,2845,2846,2847,2852],{},"I got back to writing for ",[23,2848,2851],{"href":2849,"rel":2850},"https:\u002F\u002Fwww.bytesizedai.dev\u002F",[101],"Bytesized AI"," last week, and this one has been on my mind for a while.",[16,2854,2855],{},"I've been thinking about all those \"I cloned a $5M SaaS in 20 minutes\" posts. I use AI tools every day and they've changed how I work. But the narrative has shifted from \"AI helps you build faster\" to \"AI eliminates the need to know what you're doing.\"",[16,2857,2858],{},"That second part isn't true.",[16,2860,2861],{},"When you clone that app over lunch, you're cloning a screenshot. You're not getting years of customer feedback, edge cases discovered through real usage, compliance certifications, or the reputation that makes enterprises sign contracts.",[16,2863,2864],{},"Building the product is often the easy part. Finding customers, getting them to pay, keeping them around? That's the hard work. And these tools don't help with any of that.",[16,2866,2867],{},"I'm not against using AI to build software. It's great for prototyping, learning new frameworks, and getting past the blank page. But that's maybe 5% of the journey. The other 95% is talking to customers, iterating based on real usage, and doing the unglamorous work that doesn't make for viral posts.",[16,2869,2870],{},"The developers who thrive won't be the ones cloning screens the fastest. They'll be the ones spending less time on implementation and more time building something people actually want.",[16,2872,2873],{},"Vibe code your prototype. Then do the real work.",[16,2875,2876],{},[23,2877,2880],{"href":2878,"rel":2879},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fvibe-coding-and-the-field-of-dreams-problem",[101],"Read the full Article",[28,2882,2884],{"id":2883},"claude-code","Claude Code",[16,2886,2887],{},[74,2888],{"alt":2884,"src":2889},"\u002Fimages\u002Fnewsletter\u002F2026\u002F02\u002F02\u002Fclaude_code_adventure_game.png",[16,2891,2892],{},"Claude Code and Opus 4.5 have been my daily drivers for a while now. I'm honestly blown away by what they can do and the little nuances they get right. I want to explore other tools like Codex and Gemini CLI, but I just haven't had the time.",[16,2894,2895],{},"I compare Claude Code a lot to Notion, a tool I use for managing everything in my life. Notion is a great tool, but it's also a blank canvas when you start—sometimes you're not sure how to begin. Claude Code is similar, and I heard its creator, Boris Cherny, describe it as a choose-your-own-adventure game.",[16,2897,2898,2899,184],{},"There's a lot to learn when it comes to Claude Code, but the easiest thing you can do is just get started. Play around with the settings to get it working to your liking and spend some time going through the ",[23,2900,2903],{"href":2901,"rel":2902},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Foverview",[101],"wonderful documentation",[16,2905,2906],{},"Since we last spoke, I created some videos on Claude Code that you might find useful. I also have a playlist on my YouTube channel if you're interested in learning more. If you have something specific you'd like me to cover, feel free to reach out. Just start using Claude Code to tackle something small and progress from there. I promise you'll have an aha moment where things go from coding assistant to full-blown agent.",[1271,2908,2909,2916,2923],{},[1274,2910,2911],{},[23,2912,2915],{"href":2913,"rel":2914},"https:\u002F\u002Fyoutu.be\u002FAc0FMtVYKkA",[101],"Claude Code: Accessing Multiple Directories",[1274,2917,2918],{},[23,2919,2922],{"href":2920,"rel":2921},"https:\u002F\u002Fyoutu.be\u002FitS3f1Y52t0",[101],"Claude Code just fixed MCP's biggest problem",[1274,2924,2925],{},[23,2926,2929],{"href":2927,"rel":2928},"https:\u002F\u002Fyoutu.be\u002FpbbWEce72xg",[101],"Claude Code on the Go",[16,2931,2932],{},"Speaking of Claude Code, there are some rumors floating around that we might get Opus 5.0 this week. If that is true and it's better than 4.5, we are in for one awesome model!",[28,2934,2936],{"id":2935},"java-champions-conference","Java Champions Conference",[16,2938,2939,2940,184],{},"The Java Champions Conference recently took place, and I had the honor and privilege of being a first-time speaker. My session was on Building and Securing MCP Servers, and I was really happy with how it turned out. I also want to give a huge shoutout to everyone who put together this conference, helped moderate it, and to all of the amazing speakers. I'm not sure you'll find a better collection of speakers and topics than you will here. Also, you can watch all of the recordings for free on the ",[23,2941,2944],{"href":2942,"rel":2943},"https:\u002F\u002Fwww.youtube.com\u002F@JChampionsConf",[101],"YouTube channel",[47,2946],{"id":2947},"i20pZ_LGUfk",[28,2949,172],{"id":171},[16,2951,178,2952,184],{},[23,2953,183],{"href":181,"rel":2954},[101],[16,2956,187,2957,191,2959,2961],{},[189,2958],{},[189,2960],{},[23,2962,198],{"href":196,"rel":2963},[101],{"title":200,"searchDepth":201,"depth":201,"links":2965},[2966,2967,2968,2969,2970],{"id":2800,"depth":201,"text":2801},{"id":2842,"depth":201,"text":2843},{"id":2883,"depth":201,"text":2884},{"id":2935,"depth":201,"text":2936},{"id":171,"depth":201,"text":172},{"_id":2972,"path":2973,"title":2974,"description":2975,"meta":2976,"body":2979},"newsletter\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fcodemash-2026.md","\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fcodemash-2026","CodeMash 2026, New Spring Office Hours Website and AI Tutorials","Happy Monday and welcome to another edition of the newsletter. I love when the new year begins because it means I can start attending the conferences I look forward to every year.",{"slug":2977,"date":2978},"codemash-2026","2026-01-19T08:00:00.000Z",{"type":13,"value":2980,"toc":3328},[2981,2984,2993,2998,3007,3011,3020,3023,3029,3038,3044,3047,3053,3055,3064,3067,3070,3076,3079,3088,3091,3095,3098,3102,3109,3112,3118,3124,3130,3136,3144,3147,3151,3158,3161,3171,3174,3238,3245,3257,3261,3264,3271,3282,3289,3292,3295,3299,3302,3308,3310,3315,3324],[16,2982,2983],{},"Happy Monday and welcome to another edition of the newsletter. I love when the new year begins because it means I can start attending the conferences I look forward to every year. I had the honor of speaking at CodeMash 2026 last week and I'll tell you more about that in a bit.",[16,2985,2986,2987,2992],{},"This week, I'm speaking at a conference I've never attended before, and I'm super excited. I'll be presenting at the Java Champions Conference on Thursday, January 22 at 12 PM EDT. This free online conference features Java Champions as speakers. If you haven't ",[23,2988,2991],{"href":2989,"rel":2990},"https:\u002F\u002Fjchampionsconf.com\u002F",[101],"registered for free",", do so now. I hope to see you in my session.",[16,2994,2995],{},[74,2996],{"alt":2936,"src":2997},"\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fjava-champions-conference.png",[16,2999,3000,3001,3006],{},"I was preparing for CodeMash last week and didn't send out an update, so we have a lot to cover. A huge shoutout to IntelliJ IDEA, which turns ",[23,3002,3005],{"href":3003,"rel":3004},"https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Fintellij-idea-25\u002F",[101],"25 this week",". I've personally paid for an IntelliJ subscription for as long as I can remember. It's one of those tools I couldn't imagine not having in my tool belt.",[28,3008,3010],{"id":3009},"codemash-2026-recap","CodeMash 2026 Recap",[16,3012,3013,3014,3019],{},"As I mentioned earlier, I love going to CodeMash and I'm lucky to have made the trip five times before. Did you know that next year will be the 20th CodeMash? They also ",[23,3015,3018],{"href":3016,"rel":3017},"https:\u002F\u002Fcodemash.org\u002Fannouncing-codemash-east\u002F",[101],"announced"," during the conference that there will be a new CodeMash East in Spotsylvania, Virginia later this year.",[16,3021,3022],{},"This year I had a precompiler (workshop) on Tuesday, so I made the one-hour drive up Monday night. My four-hour workshop ran from 8 AM to 12 PM, and I was really looking forward to it. I had around 50 attendees in a fairly large room. They tried putting me at a podium, but I quickly moved some tables around. When I give a longer workshop with lots of live coding, it's much easier sitting down. Everyone seemed to enjoy the workshop. I had great questions and feedback, and I had a lot of fun putting it on.",[16,3024,3025],{},[74,3026],{"alt":3027,"src":3028},"Precompiler Workshop","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fprecompiler.jpeg",[16,3030,3031,3032,3037],{},"My second talk was on Friday with my good friend Nate Schutta, centered on our new ",[23,3033,3036],{"href":3034,"rel":3035},"https:\u002F\u002Ffundamentalsofswe.com\u002F",[101],"book",". The talk was titled \"The Fundamentals of Software Engineering in the Age of AI.\" We had standing room only, an amazing crowd. We discussed where the fundamentals stand for software engineers working with AI tools. Distilling the book down to one hour is challenging, but I think we did a solid job at a high level, and the room really enjoyed it.",[16,3039,3040],{},[74,3041],{"alt":3042,"src":3043},"Fundamentals of Software Engineering Talk","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Ffose_age_of_ai.jpeg",[16,3045,3046],{},"And of course the best part of CodeMash is getting to see friends. Had a nice dinner with fellow Java Champions Chris Judd and Nate Schutta.",[16,3048,3049],{},[74,3050],{"alt":3051,"src":3052},"Dinner with Chris and Nate","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fchris_nate.jpeg",[28,3054,93],{"id":92},[16,3056,3057,3058,3063],{},"We recently kicked off Season 5 of Spring Office Hours. If you aren't aware, this is a live stream and podcast my friend DaShaun and I host weekly. This is our chance to try and get the community caught up on everything happening in the world of Spring. Up until now the website ",[23,3059,3062],{"href":3060,"rel":3061},"http:\u002F\u002Fwww.springofficehours.io",[101],"www.springofficehours.io"," was hosted on Transistor which is the platform I use to publish our podcast.",[16,3065,3066],{},"This worked but I wanted a little more control over the website and what we could do with it. I had a couple of requirements that I needed to work with. First, I needed to pull in the podcast episodes dynamically so I didn't have to update it in multiple places. We also use Notion for tracking shows, getting questions and feedback, and more, so I needed to integrate with the Notion API.",[16,3068,3069],{},"I had some time over the weekend while playing the role of a professional Uber driver for my children's athletic endeavors. I decided to sit down and \"vibe code\" a new website and I think it turned out pretty well.",[16,3071,3072],{},[74,3073],{"alt":3074,"src":3075},"Spring Office Hours Website","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fspring-office-hours-website.png",[16,3077,3078],{},"We live in interesting times with LLMs and all of these really good coding agents. It's so good that at times I have to remind myself that this is the worst it's going to be. With that said, I still believe these tools are best at amplifying your existing skills. I have built a number of \"marketing\" websites before so I had a plan going into this.",[16,3080,3081,3082,3087],{},"I knew the tech stack I wanted to use which included Vue, Nuxt, and Tailwind. This is my go-to stack for building frontend applications. I'm sure some of you are wondering why not use Spring for this? I'm obviously a huge fan of Spring but I'm also a fan of the right tool for the right job. When it comes to building frontend sites that will use a mix of static and dynamic content, I find it enjoyable to work with. In fact, my ",[23,3083,3086],{"href":3084,"rel":3085},"http:\u002F\u002Fwww.danvega.dev",[101],"personal site"," is built on the same stack allowing me to write my newsletter and blog posts using Markdown.",[16,3089,3090],{},"I could probably talk about the process a lot more in detail but I will leave that for another day. I ended up putting together a Claude Code skill for building a Product Requirements Document (PRD) and using the Ralph Wiggum Loop to build out each of the features I was looking to implement. This worked for most of the features and then I took it the rest of the way (last 20%) with Claude Code myself. I think it ended up taking me 3-4 hours which is amazing. This is something I could have done on my own but my frontend skills aren't that great so it probably would have taken me a week to come up with something that I was happy with.",[28,3092,3094],{"id":3093},"new-ai-youtube-tutorials","New AI YouTube Tutorials",[16,3096,3097],{},"I spent the last couple of months focused on Spring Framework 7 and Spring Boot 4 and rightfully so, there was a lot to talk about. I feel like I have fallen behind on some of the cool things happening in both the AI and Spring AI spaces. I took the opportunity to start recording some videos and getting caught up. There is a lot more to do and I hope to knock some of those items off my backlog this week.",[33,3099,3101],{"id":3100},"spring-ai-20-m1","Spring AI 2.0 M1",[16,3103,3104,3105,3108],{},"Spring AI 2.0 Milestone 1 has arrived, and the headline feature is ",[161,3106,3107],{},"Spring Boot 4 and Spring Framework 7 support",". If you've been waiting to use Spring AI with the latest Spring stack, now's your chance.",[16,3110,3111],{},"This release packs 25 enhancements, 7 bug fixes, and 32 documentation improvements. Here are the highlights I cover in the video:",[16,3113,3114,3117],{},[161,3115,3116],{},"Redis Chat Memory"," — A new Redis-based chat memory implementation lets you persist conversations across server restarts. No more losing context when your app cycles.",[16,3119,3120,3123],{},[161,3121,3122],{},"Anthropic Citations & Skills API"," — You can now enable citations to track which parts of your documents the model referenced. The Skills API is particularly cool—it lets you generate downloadable PDFs, Word docs, and Excel files directly through the Anthropic integration.",[16,3125,3126,3129],{},[161,3127,3128],{},"Google GenAI & Gemini Enhancements"," — Added ThinkingLevel support in ThinkingConfig for Gemini models, giving you fine-grained control over reasoning depth. The Google GenAI SDK has been updated to 1.30.0, and Vertex AI Gemini now includes safety ratings in response metadata. Big thanks to Dan Dobrin from Google for his contributions here.",[16,3131,3132,3135],{},[161,3133,3134],{},"Official OpenAI Java SDK"," — Spring AI now integrates the official OpenAI SDK, giving you access to the Responses API (with built-in web search), Azure OpenAI, and GitHub models. The default model is now GPT-5 Mini.",[16,3137,3138,3139],{},"I've put together a GitHub repo with working examples for all of these features: ",[23,3140,3143],{"href":3141,"rel":3142},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fhello-spring-ai-2",[101],"github.com\u002Fdanvega\u002Fhello-spring-ai-2",[47,3145],{"id":3146},"daPwd4DnEfA",[33,3148,3150],{"id":3149},"spring-ai-native-structured-output","Spring AI Native Structured Output",[16,3152,3153,3154,3157],{},"Structured output isn't new in Spring AI—we've been using the ",[469,3155,3156],{},".entity()"," method to get typed responses instead of raw strings. But here's what's been happening under the hood: Spring AI generates a JSON schema from your type and appends formatting instructions directly to your prompt, asking the LLM to respond in that format.",[16,3159,3160],{},"It works most of the time, but \"most of the time\" isn't good enough for production apps.",[16,3162,3163,3166,3167,3170],{},[161,3164,3165],{},"Enter Native Structured Output."," Many LLMs now support structured output at the API level. Instead of hoping the model follows your formatting instructions, you send the schema directly to the API—and the model ",[734,3168,3169],{},"guarantees"," conformance.",[16,3172,3173],{},"Enabling it is one line:",[3175,3176,3180],"pre",{"className":3177,"code":3178,"language":3179,"meta":200,"style":200},"language-java shiki shiki-themes github-light github-dark github-light","ChatClient.builder(chatModel)\n    .defaultAdvisors(advisor -> advisor.enableStructuredOutput(true))\n    .build();\n","java",[469,3181,3182,3197,3228],{"__ignoreMap":200},[1492,3183,3186,3190,3194],{"class":3184,"line":3185},"line",1,[1492,3187,3189],{"class":3188},"s-uPX","ChatClient.",[1492,3191,3193],{"class":3192},"sZnax","builder",[1492,3195,3196],{"class":3188},"(chatModel)\n",[1492,3198,3199,3202,3205,3208,3212,3215,3218,3221,3225],{"class":3184,"line":201},[1492,3200,3201],{"class":3188},"    .",[1492,3203,3204],{"class":3192},"defaultAdvisors",[1492,3206,3207],{"class":3188},"(advisor ",[1492,3209,3211],{"class":3210},"sibLe","->",[1492,3213,3214],{"class":3188}," advisor.",[1492,3216,3217],{"class":3192},"enableStructuredOutput",[1492,3219,3220],{"class":3188},"(",[1492,3222,3224],{"class":3223},"sECI1","true",[1492,3226,3227],{"class":3188},"))\n",[1492,3229,3230,3232,3235],{"class":3184,"line":206},[1492,3231,3201],{"class":3188},[1492,3233,3234],{"class":3192},"build",[1492,3236,3237],{"class":3188},"();\n",[16,3239,3240,3241,3244],{},"I also cover how to inspect what's actually being sent to the LLM using the new ",[469,3242,3243],{},"SimpleLoggerAdvisor",". Set your logging level to debug and you'll see the full request—including that JSON schema generation.",[16,3246,3247,3250,3251,3256],{},[161,3248,3249],{},"Important:"," Native structured output only works with supported models (OpenAI GPT-4o+, Anthropic Claude, and others). Check the ",[23,3252,3255],{"href":3253,"rel":3254},"https:\u002F\u002Fdocs.spring.io\u002Fspring-ai\u002Freference\u002Fapi\u002Fstructured-output.html",[101],"Spring AI docs"," for the current list.",[33,3258,3260],{"id":3259},"model-context-protocol-mcp-elicitations","Model Context Protocol (MCP) Elicitations",[16,3262,3263],{},"MCP tools are great for retrieving context and performing actions. But what happens when a user says \"order me a coffee\" without specifying the size, type, or milk preference? Before elicitations, this would just fail.",[16,3265,3266,3267,3270],{},"Now, the MCP specification provides a ",[161,3268,3269],{},"standardized way for servers to request additional information from users"," mid-interaction.",[16,3272,3273,3274,3277,3278,3281],{},"Elicitations support two modes: ",[161,3275,3276],{},"form mode"," for structured data with JSON schema validation, and ",[161,3279,3280],{},"URL mode"," for directing users to external URLs for sensitive interactions.",[16,3283,3284,3285,3288],{},"In the video, I build a coffee shop MCP server that triggers an elicitation when a customer orders coffee without all the details. On the client side, Spring AI's ",[469,3286,3287],{},"@McpElicitation"," annotation handles these requests and prompts the user for the missing fields.",[16,3290,3291],{},"This is one of those features where just knowing it exists is half the battle. When you need more user input mid-interaction, elicitations are the answer.",[47,3293],{"id":3294},"JrAllAJf7L4",[28,3296,3298],{"id":3297},"thank-you-john","Thank You, John",[16,3300,3301],{},"Last but not least, I want to say thank you to my friend and mentor John Kim. He was instrumental early on in my career and I sent him a signed copy of my new book. He posted this on LinkedIn and it made me smile ❤️",[16,3303,3304],{},[74,3305],{"alt":3306,"src":3307},"John Kim LinkedIn Post","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F19\u002Fjohn-kim-linkedin.png",[28,3309,172],{"id":171},[16,3311,178,3312,184],{},[23,3313,183],{"href":181,"rel":3314},[101],[16,3316,187,3317,191,3319,3321],{},[189,3318],{},[189,3320],{},[23,3322,198],{"href":196,"rel":3323},[101],[3325,3326,3327],"style",{},"html pre.shiki code .s-uPX, html code.shiki .s-uPX{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#24292E}html pre.shiki code .sZnax, html code.shiki .sZnax{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#6F42C1}html pre.shiki code .sibLe, html code.shiki .sibLe{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#D73A49}html pre.shiki code .sECI1, html code.shiki .sECI1{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":200,"searchDepth":201,"depth":201,"links":3329},[3330,3331,3332,3337,3338],{"id":3009,"depth":201,"text":3010},{"id":92,"depth":201,"text":93},{"id":3093,"depth":201,"text":3094,"children":3333},[3334,3335,3336],{"id":3100,"depth":206,"text":3101},{"id":3149,"depth":206,"text":3150},{"id":3259,"depth":206,"text":3260},{"id":3297,"depth":201,"text":3298},{"id":171,"depth":201,"text":172},{"_id":3340,"path":3341,"title":3342,"description":3343,"meta":3344,"body":3347},"newsletter\u002Fnewsletter\u002F2026\u002F01\u002F05\u002Fhappy-new-year-2026.md","\u002Fnewsletter\u002F2026\u002F01\u002F05\u002Fhappy-new-year-2026","Happy New Year 🎉 2026 Goals and Predictions","Happy Monday and welcome to another edition of the newsletter. I want to wish you all a happy new year. I hope for happiness, health, and success for you and your family in 2026.",{"slug":3345,"date":3346},"happy-new-year-2026","2026-01-05T08:00:00.000Z",{"type":13,"value":3348,"toc":3487},[3349,3352,3356,3359,3365,3377,3383,3387,3390,3393,3397,3406,3413,3420,3423,3432,3435,3438,3440,3448,3451,3465,3471,3473,3478],[16,3350,3351],{},"Happy Monday and welcome to another edition of the newsletter. I want to wish you all a happy new year. I hope for happiness, health, and success for you and your family in 2026. I'm fresh off some much-needed relaxing in the sun and ready to tackle the new year. I want to tell you a little bit about my goals and what I'll be focused on at the start of the year.",[28,3353,3355],{"id":3354},"_2026-goals-predictions","2026 Goals & Predictions",[16,3357,3358],{},"My biggest goals for the new year are staying consistent and creating systems to achieve what I set out to do. One thing I've learned over the years is that you can't accomplish big goals overnight. Consistency is the key, and if you show up regularly, you can accomplish anything. I'm also going to focus on delegating and building systems to support my goals.",[16,3360,3361,3364],{},[161,3362,3363],{},"YouTube",": I've always wanted to hit 100k subscribers on my YouTube channel. I'm proud of what I've built and don't take any metrics for granted, but this is the milestone I want to reach, and 2026 is the year it's going to happen. I also want to focus more on general Java content, so stay tuned for that.",[16,3366,3367,3370,3371,3376],{},[161,3368,3369],{},"Writing",": I love to write. I wrote a book last year, but that's a different kind of writing. I want to write more for myself. I need to figure out a cadence, but my goal is to write at least once a week across my newsletter, articles here, and my other newsletter ",[23,3372,3375],{"href":3373,"rel":3374},"https:\u002F\u002Fbytesizedai.dev",[101],"bytesizedai.dev",", which didn't get the attention it deserved.",[16,3378,3379,3382],{},[161,3380,3381],{},"Speaking",": I love traveling to conferences, speaking, and connecting with the community. I'm hoping to attend and speak at 10+ conferences this year and give over 25 talks, including internal ones. I'd also love to attend a couple of conferences I've never been to, so I'll be submitting CFPs to a few new ones this year.",[33,3384,3386],{"id":3385},"java-spring-ai-predictions","Java, Spring & AI Predictions",[16,3388,3389],{},"If you want to learn about what's happening in the world of Java, Spring, and AI in 2026, check out the first episode of season 5 of the Spring Office Hours Podcast. Hard to believe we've made it to season 5, but here we are!",[47,3391],{"id":3392},"bNp2FZR9YlI",[28,3394,3396],{"id":3395},"what-im-focused-on","What I'm Focused On",[16,3398,3399,3400,3405],{},"This week I am preparing for a workshop and talk at ",[23,3401,3404],{"href":3402,"rel":3403},"https:\u002F\u002Fcodemash.org\u002F",[101],"CodeMash"," which is happening next week. I will be there all week, so if you are going to be there, please reach out and let's connect. I will have a bunch of books that we can sign, and I'm excited to hand those out.",[16,3407,3408,3409,3412],{},"I'm excited that I will be presenting at the ",[23,3410,2936],{"href":2989,"rel":3411},[101]," later this month. This conference is free and online and packed with amazing speakers. I will be talking about building and securing MCP servers in Java with Spring AI.",[16,3414,3415,3416,3419],{},"Next month I will be traveling to the great city of Montreal, Canada for ",[23,3417,1888],{"href":2630,"rel":3418},[101],". I will be giving 2 talks there, one on Spring AI and the other on what's new in Spring Boot 4. I love this conference for the sessions, the people, and the food!",[33,3421,2821],{"id":3422},"spring-boot-4",[16,3424,3425,3426,3431],{},"I've been focused on Spring Boot 4 for the last couple of months and will continue this work in the new year. If you missed any of my content, I have a ",[23,3427,3430],{"href":3428,"rel":3429},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLZV0a2jwt22v874ngZcWw3umP2yfsV9sK",[101],"playlist on YouTube"," covering Spring Boot 4.",[16,3433,3434],{},"In one of those videos (linked below), I built a Spring Boot REST API quickly in response to a comment I received on Twitter. While we built out the REST API fast, I hinted that I wanted to create an entire course on getting started with Spring Boot 4, and the feedback was amazing. I'm going to start putting that course together this month.",[47,3436],{"id":3437},"klnxzL8oQdM",[28,3439,344],{"id":343},[16,3441,3442,3443,3447],{},"If you haven't been opening up my emails, I have a new book out, but it doesn't stop there. Nate and I created a new ",[23,3444,3446],{"href":3034,"rel":3445},[101],"landing page"," for the book and the podcast we launched. We have recorded 4 episodes so far, and we have been having a lot of fun with it. In the latest episode, we tackle the question on every developer's mind these days: \"Will AI replace Software Developers?\"",[47,3449],{"id":3450},"VGq5JjQmrXc",[16,3452,3453,3454,3459,3460,3464],{},"I'm also grateful for this 5-star review we got on the ",[23,3455,3458],{"href":3456,"rel":3457},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Ffundamentals-of-software\u002F9781098143220\u002F",[101],"O'Reilly Platform",". If you have something nice to say about the book or the podcast, I am looking for quotes I can put on the ",[23,3461,3463],{"href":3034,"rel":3462},[101],"home page",". Feel free to reach out, and I will get it posted.",[16,3466,3467],{},[74,3468],{"alt":3469,"src":3470},"O'Reilly 5-Star Review","\u002Fimages\u002Fnewsletter\u002F2026\u002F01\u002F05\u002F5_star_review.png",[28,3472,172],{"id":171},[16,3474,178,3475,184],{},[23,3476,183],{"href":181,"rel":3477},[101],[16,3479,187,3480,191,3482,3484],{},[189,3481],{},[189,3483],{},[23,3485,198],{"href":196,"rel":3486},[101],{"title":200,"searchDepth":201,"depth":201,"links":3488},[3489,3492,3495,3496],{"id":3354,"depth":201,"text":3355,"children":3490},[3491],{"id":3385,"depth":206,"text":3386},{"id":3395,"depth":201,"text":3396,"children":3493},[3494],{"id":3422,"depth":206,"text":2821},{"id":343,"depth":201,"text":344},{"id":171,"depth":201,"text":172},{"_id":3498,"path":3499,"title":3500,"description":3501,"meta":3502,"body":3505},"newsletter\u002Fnewsletter\u002F2025\u002F12\u002F15\u002Fspring-boot-4-new-videos-and-course.md","\u002Fnewsletter\u002F2025\u002F12\u002F15\u002Fspring-boot-4-new-videos-and-course","Modularizing Spring Boot, MockMvcTester vs RestTestClient and Spring Boot 4 Course Coming Soon!","Happy Monday and welcome to another edition of the newsletter. It's hard to believe we are halfway through December and Christmas is right around the corner.",{"slug":3503,"date":3504},"spring-boot-4-new-videos-and-course","2025-12-15T08:00:00.000Z",{"type":13,"value":3506,"toc":3687},[3507,3510,3519,3523,3526,3529,3534,3545,3550,3564,3567,3574,3577,3580,3584,3587,3590,3593,3599,3609,3618,3620,3623,3626,3629,3633,3636,3639,3645,3648,3654,3656,3659,3662,3665,3668,3671,3673,3678],[16,3508,3509],{},"Happy Monday and welcome to another edition of the newsletter. It's hard to believe we are halfway through December,\nand Christmas is right around the corner. At this point I'm just trying to get things wrapped up for the year.\nThis means that I want to get out any videos I had on the schedule for December. I'm continuing to learn about all the\nnew things in Spring Boot 4 and I love to share what I learn.",[16,3511,3512,3513,3518],{},"I'm also preparing for conference and customer talks next year. I'm excited to announce that I will be speaking at\nthe Java Champions conference next year which will be online for free. This will be my first Java Champions conference,\nand it's an honor to be in a lineup of so many amazing presenters and contributors to the Java ecosystem. If you're\ninterested in checking out where I will be next you can check out the ",[23,3514,3517],{"href":3515,"rel":3516},"https:\u002F\u002Fwww.danvega.dev\u002Fspeaking",[101],"speaking page"," on my website.",[28,3520,3522],{"id":3521},"mockmvctester-vs-resttestclient","MockMvcTester vs RestTestClient",[16,3524,3525],{},"When writing tests for controllers in Spring Boot 4, you now have two excellent options: MockMvcTester and RestTestClient. I was a bit confused about when to reach for one over the other, so I asked the Spring team directly.",[16,3527,3528],{},"The bottom line: both (can) use mock infrastructure under the hood (RestTestClient actually wraps MockMVC), so it largely comes down to personal preference. That said, here are some guidelines.",[16,3530,3531],{},[161,3532,3533],{},"Reach for MockMvcTester when you need:",[1271,3535,3536,3539,3542],{},[1274,3537,3538],{},"Server-side inspection like handlers and exceptions",[1274,3540,3541],{},"Multi-file upload testing (not yet supported in RestTestClient)",[1274,3543,3544],{},"Fluent JSON path assertions with chaining",[16,3546,3547],{},[161,3548,3549],{},"Reach for RestTestClient when you want:",[1271,3551,3552,3555,3558,3561],{},[1274,3553,3554],{},"One API for both mock and real server testing",[1274,3556,3557],{},"Response deserialization to typed objects or lists",[1274,3559,3560],{},"Familiarity with WebTestClient (similar API)",[1274,3562,3563],{},"Non-JSON deserialization (XML, Protobuf, etc.)",[16,3565,3566],{},"Both support AssertJ-style assertions, which makes tests clean and readable. I'm a fan of RestTestClient because it gives me one consistent testing infrastructure, but you really can't go wrong with either.",[16,3568,3569,3570,3573],{},"Also worth noting: you can now use ",[469,3571,3572],{},"@AutoConfigureRestTestClient"," to automatically wire things up instead of manually binding to the controller or MockMVC environment.",[16,3575,3576],{},"You can check out the video below.",[47,3578],{"id":3579},"xWcqvrpj2PM",[28,3581,3583],{"id":3582},"modularizing-spring-boot","Modularizing Spring Boot",[16,3585,3586],{},"If you've upgraded to Spring Boot 4 and found that something that \"just worked\" before is now broken, you're not alone, and modularization is likely the culprit.",[16,3588,3589],{},"In Spring Boot 3.x, all auto-configuration lived in a single jar that started at 185KB and ballooned to over 2MB. The Spring Boot team finally split this into smaller, focused modules.",[16,3591,3592],{},"Here's what changed: In 3.x, having a dependency on your classpath was often enough, the giant auto-configure jar handled the rest. In 4.0, auto-configuration code has been separated into dedicated modules. If that module isn't on your classpath, the feature won't auto-configure.",[16,3594,3595,3598],{},[161,3596,3597],{},"The fix:"," Look for the appropriate starter dependency. For example, raw dependencies like H2 or REST clients now have dedicated starters that bundle both the library and its auto-configuration module.",[16,3600,3601,3604,3605,3608],{},[161,3602,3603],{},"Need an escape hatch?"," Add ",[469,3606,3607],{},"spring-boot-autoconfigure-classic"," to restore the old behavior while you migrate incrementally.",[16,3610,3611,3612,3617],{},"Check the ",[23,3613,3616],{"href":3614,"rel":3615},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-4.0-Migration-Guide",[101],"Spring Boot 4 migration guide"," for a full list of the new modular starters—it should be your first stop when troubleshooting upgrade issues.",[16,3619,3576],{},[47,3621],{"id":3622},"kTLuhE7_jGU",[16,3624,3625],{},"I also built out some graphics for this to include in some presentations I'm working on.",[166,3627],{"id":3628},"1999150035611644088",[28,3630,3632],{"id":3631},"spring-boot-4-crud-api","Spring Boot 4 CRUD API",[16,3634,3635],{},"I was having a conversation with a couple of folks on Twitter and they asked why is it so much easier to create APIs in other languages and frameworks compared to Spring Boot. I actually think it's really easy to do this in Spring but of course I have the perspective of being a long time user and teacher of the framework.",[16,3637,3638],{},"I think part of this is you need to step back and move away from the parlor tricks of creating a blog in 5 minutes. While those demos were fun they were never really meant for production. I was already planning on building a Spring Boot 4 course for the new year but I thought this might be a good opportunity to work on just the API portion. I think we can build this out in 2 steps, first build something out as fast as we can to show just how easy it is:",[16,3640,3641],{},[74,3642],{"alt":3643,"src":3644},"Spring Boot 4 Course Outline - Quick Start","\u002Fimages\u002Fnewsletter\u002F2025\u002F12\u002F15\u002Fcrud_api_01.png",[16,3646,3647],{},"After we show just how easy it is to get up and running I will expand on that and build something that is a little bit more production ready.",[16,3649,3650],{},[74,3651],{"alt":3652,"src":3653},"Spring Boot 4 Course Outline - Production Ready","\u002Fimages\u002Fnewsletter\u002F2025\u002F12\u002F15\u002Fcrud_api_02.png",[28,3655,385],{"id":384},[16,3657,3658],{},"I believe this is the tweet that got the conversation started about building APIs in Java \u002F Spring 🤣",[166,3660],{"id":3661},"1998585764209205311",[16,3663,3664],{},"We are looking for reviews, feedback and quotes for the book. If you want to send me a quote I can get it added to the home page.",[166,3666],{"id":3667},"1999122458616455280",[166,3669],{"id":3670},"1998749543437828269",[28,3672,1028],{"id":171},[16,3674,178,3675,184],{},[23,3676,183],{"href":181,"rel":3677},[101],[16,3679,187,3680,191,3682,3684],{},[189,3681],{},[189,3683],{},[23,3685,198],{"href":196,"rel":3686},[101],{"title":200,"searchDepth":201,"depth":201,"links":3688},[3689,3690,3691,3692,3693],{"id":3521,"depth":201,"text":3522},{"id":3582,"depth":201,"text":3583},{"id":3631,"depth":201,"text":3632},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":1028},{"_id":3695,"path":3696,"title":3697,"description":3698,"meta":3699,"body":3701},"newsletter\u002Fnewsletter\u002F2025\u002F12\u002F09\u002Ffundamentals-of-software-engineering.md","\u002Fnewsletter\u002F2025\u002F12\u002F09\u002Ffundamentals-of-software-engineering","The Fundamentals of Software Engineering is now Available!","Today my new book, The Fundamentals of Software Engineering, is available to order on Amazon. Learn about who this book is for, what's inside, and how you can get it for free.",{"slug":343,"date":3700},"2025-12-09T08:00:00.000Z",{"type":13,"value":3702,"toc":3876},[3703,3712,3714,3717,3720,3723,3727,3730,3733,3737,3740,3743,3748,3759,3764,3775,3780,3794,3799,3816,3820,3829,3835,3844,3847,3851,3854,3857,3860,3862,3867],[16,3704,3705,3706,3711],{},"Happy Monday and welcome to another edition of the newsletter. I pushed my newsletter back a day this week because today is a very special day. Today my new book, The Fundamentals of SWE is ",[23,3707,3710],{"href":3708,"rel":3709},"https:\u002F\u002Fwww.amazon.com\u002FFundamentals-Software-Engineering-Coder-Engineer\u002Fdp\u002F109814323X\u002F",[101],"available to order on Amazon",". I know I have talked to you about the book before but I don't think I have done a deep dive here so that is my plan for this edition of the newsletter.",[28,3713,344],{"id":343},[16,3715,3716],{},"I have wanted to write a book for as long as I can remember. I had offers to write a couple of different books for various publishers. I've known for a while that if I was going to write a book, I wanted it to be an O'Reilly book. I have long admired their standards and quality. One day in March 2024, I tweeted out some goals for the year, and my friend Nate Schutta replied that if I wanted to write a book, he could make that happen.",[166,3718],{"id":3719},"1773519129841975678",[16,3721,3722],{},"He was looking for a co-author for a new project he was working on. After a quick call with him I knew this was the project for me. I wasn't quite sure how I would find the time for this juggling a full-time job and family but I knew that this was the one. Nothing worth doing ever comes easy though and if you don't have patience don't sign up for this.",[33,3724,3726],{"id":3725},"who-this-book-is-for","Who This Book Is For",[16,3728,3729],{},"This book is specifically designed for new software engineers. Our goal is to show you the bigger picture of what it takes to become a true software engineer, beyond \"just coding,\" and what it takes to advance your career.",[16,3731,3732],{},"But the fundamentals that we'll discuss in this book aren't just for beginners. Experienced engineers can also benefit from mastering these essential skills, especially if they're looking to move up and take on more senior roles. Building a strong skill set is what will unlock opportunities for more responsibilities and promotion.",[33,3734,3736],{"id":3735},"what-is-in-this-book","What Is in This Book",[16,3738,3739],{},"The book is broken into four sections. Part 1 begins with the core skills you need to be a successful software engineer. Part 2 explores the various technical practices you will encounter on projects, while Part 3 dives into the nuances of designing and building software. Part 4 focuses on your career growth and steps you can follow to take control of your journey.",[16,3741,3742],{},"Here's what you'll find in this book:",[16,3744,3745],{},[161,3746,3747],{},"Part 1: Core Skills",[1271,3749,3750,3753,3756],{},[1274,3751,3752],{},"Chapter 1, \"Programmer to Engineer\", discusses the varied paths to becoming a software engineer and emphasizes the importance of foundational skills.",[1274,3754,3755],{},"Chapter 2, \"Reading Code\", is about how software engineers spend more time reading code than writing it. It provides strategies for navigating unfamiliar code.",[1274,3757,3758],{},"Chapter 3, \"Writing Code\", is all about the importance of writing code that is readable and maintainable. In essence, it illustrates why it's more important to write for the developer than the computer.",[16,3760,3761],{},[161,3762,3763],{},"Part 2: Technical Practices",[1271,3765,3766,3769,3772],{},[1274,3767,3768],{},"Chapter 4, \"Modeling\", dives into the role of software modeling, aka the box-and-line diagrams you have encountered (or will encounter) on many projects, as a crucial aspect of communication among software engineers.",[1274,3770,3771],{},"Chapter 5, \"Automated Testing\", covers the benefits of automated testing for code quality and developer confidence.",[1274,3773,3774],{},"Chapter 6, \"Exploring and Modifying Unfamiliar Systems\", highlights strategies for effectively working with existing codebases. Whether you're joining a new team or maintaining a legacy system, these skills will help you confidently contribute to any codebase.",[16,3776,3777],{},[161,3778,3779],{},"Part 3: Application Development and Design",[1271,3781,3782,3785,3788,3791],{},[1274,3783,3784],{},"Chapter 7, \"User Interface Design\", is an overview of user interface design. It explains why understanding the user and applying design principles will help ensure that your software meets your users' needs.",[1274,3786,3787],{},"Chapter 8, \"Working with Data\", is all about working with data, something nearly every software application does in some manner. It covers the essential skills you need to know to make informed decisions about data in your applications.",[1274,3789,3790],{},"Chapter 9, \"Software Architecture\", explores the complexities of software architecture, giving you some insights into the architectural trade-offs involved in every software project.",[1274,3792,3793],{},"Chapter 10, \"To Production\", talks about taking code to production. It discusses the unpredictability of real users and environments, and outlines strategies for building production-ready code.",[16,3795,3796],{},[161,3797,3798],{},"Part 4: Professional Development and Growth",[1271,3800,3801,3804,3807,3810,3813],{},[1274,3802,3803],{},"Chapter 11, \"Powering Up Your Productivity\", returns to your day-to-day work and the importance of building your personal toolkit.",[1274,3805,3806],{},"Chapter 12, \"Learning to Learn\", covers the importance of continuous learning. The chapter offers strategies for keeping up with an ever-changing field.",[1274,3808,3809],{},"Chapter 13, \"Mastering Soft Skills in the Tech World\", dives into the importance of soft skills to your career. It discusses collaborative communication, influence, and stakeholder management.",[1274,3811,3812],{},"Chapter 14, \"Career Management\", focuses on planning and navigating your software engineering career. It discusses finding what you're passionate about, exploring career paths, and being deliberate with skill acquisition. It also covers building a professional network, acing interviews, and creating a work-life balance.",[1274,3814,3815],{},"Chapter 15, \"The AI-Powered Software Engineer\", touches on one of the most disruptive topics in the software space today: AI.",[28,3817,3819],{"id":3818},"fundamentals-website","Fundamentals Website",[16,3821,3822,3823,3828],{},"If you want to learn more about the book, the authors, our new podcast, and more, you can check out ",[23,3824,3827],{"href":3825,"rel":3826},"http:\u002F\u002Ffundamentalsofswe.com",[101],"fundamentalsofswe.com",". Episode 01 of the podcast has been added to the site and you can get it on all the major podcast platforms.",[16,3830,3831],{},[74,3832],{"alt":3833,"src":3834},"Fundamentals of Software Engineering Website","\u002Fimages\u002Fnewsletter\u002F2025\u002F12\u002F09\u002Ffose_apple.png",[16,3836,3837,3838,3843],{},"We would love your support by subscribing to the new ",[23,3839,3842],{"href":3840,"rel":3841},"https:\u002F\u002Fwww.youtube.com\u002F@FundamentalsofSWE",[101],"YouTube Channel",". You can check out the video version of the first episode below 👇🏻",[47,3845],{"id":3846},"zVcNC8nrqZ4",[28,3848,3850],{"id":3849},"get-the-book-for-free","Get the Book for FREE",[16,3852,3853],{},"I decided to sit down and record the video version of this. If you want to learn how you can get a free 30-day trial from O'Reilly to read my book (and others) for free, go give the video a watch 👇🏻",[47,3855],{"id":3856},"C7hPLFUaSZA",[16,3858,3859],{},"You might not know this, but you don't get rich writing tech books. That's not why I took on this project. I remember clearly how hard it was when I was learning to code, how overwhelmed I felt at times. I do what I do because I love helping people. I appreciate all your kind words on social media and in my inbox, but I believe I'm the lucky one. Thank you for your continued support, friends!",[28,3861,1028],{"id":171},[16,3863,178,3864,184],{},[23,3865,183],{"href":181,"rel":3866},[101],[16,3868,187,3869,191,3871,3873],{},[189,3870],{},[189,3872],{},[23,3874,198],{"href":196,"rel":3875},[101],{"title":200,"searchDepth":201,"depth":201,"links":3877},[3878,3882,3883,3884],{"id":343,"depth":201,"text":344,"children":3879},[3880,3881],{"id":3725,"depth":206,"text":3726},{"id":3735,"depth":206,"text":3736},{"id":3818,"depth":201,"text":3819},{"id":3849,"depth":201,"text":3850},{"id":171,"depth":201,"text":1028},{"_id":3886,"path":3887,"title":3888,"description":3889,"meta":3890,"body":3893},"newsletter\u002Fnewsletter\u002F2025\u002F11\u002F24\u002Fspring-boot-4-qcon-san-francisco.md","\u002Fnewsletter\u002F2025\u002F11\u002F24\u002Fspring-boot-4-qcon-san-francisco","Spring Boot 4 is Here and My Trip to QCon San Francisco","Spring Boot 4 was released last week with significant improvements across developer experience, performance, and production-readiness. Plus, my recap from QCon San Francisco 2025 where I delivered two half-day workshops.",{"slug":3891,"date":3892},"spring-boot-4-qcon-san-francisco","2025-11-24T08:00:00.000Z",{"type":13,"value":3894,"toc":4053},[3895,3898,3904,3907,3913,3916,3922,3930,3934,3937,3942,4008,4011,4021,4028,4030,4033,4036,4038,4044],[16,3896,3897],{},"Happy Monday and welcome to another edition of the newsletter. Spring Boot 4 was released last week, and I will fill you in on the details. Last week I was in San Francisco for QCon 2025, and even though it was a short trip, I had a blast.",[16,3899,3900],{},[74,3901],{"alt":3902,"src":3903},"Dan Vega at QCon San Francisco","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F24\u002Fqcon_01.jpeg",[16,3905,3906],{},"This was my first time attending a QCon conference, and I was really excited to be there. Unfortunately, I didn't get to attend the conference because I didn't get in until Wednesday evening, but I heard great things about it, and I'm looking forward to watching some of the recordings. On Thursday I had two half-day workshops, and I was excited and prepared for what would be an amazing day.",[16,3908,3909],{},[74,3910],{"alt":3911,"src":3912},"Workshop setup at QCon","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F24\u002Fqcon_02.jpeg",[16,3914,3915],{},"In the first workshop, I taught Java developers how to integrate AI into their applications using Spring AI. This was a lot of fun but also really hard to do in a half-day workshop. We did some live coding together, but due to time I had to show off a lot of examples so that we could make it through a lot of material. I also ran into an interesting problem that I need to find a better solution to. I created an OpenAI API key that I could share with the class so that attendees didn't have to sign up for their own. I was going to put this on a workshop page on my website behind a secured page. That page didn't have the API key hardcoded on it; instead, I pulled it from an environment variable. When I added the environment variable to my hosting provider, OpenAI immediately detected this and disabled the key. I ended up just creating a QR code that attendees could scan at the beginning of the session and then somehow get that over to their laptop. If anyone has ideas on a better way of sharing secrets like this, please let me know.",[16,3917,3918],{},[74,3919],{"alt":3920,"src":3921},"Spring AI Workshop at QCon","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F24\u002Fqcon_03.jpeg",[16,3923,3924,3925,3929],{},"In the second workshop, my friend Nate Schutta and I presented on \"The Fundamentals of Software Engineering in the Age of AI.\" This was based on our latest book that you can learn more about ",[23,3926,742],{"href":3927,"rel":3928},"https:\u002F\u002Fwww.danvega.dev\u002Fbooks\u002Ffundamentals-of-software-engineering",[101],". The workshop was sold out, and it was a blast. We had a great crowd with a lot of really good discussions and questions. Looking forward to giving this a bunch of times in the new year.",[28,3931,3933],{"id":3932},"spring-framework-7-and-spring-boot-4-are-here","Spring Framework 7 and Spring Boot 4 are Here! 🚀",[16,3935,3936],{},"The latest major releases of Spring Framework 7 and Spring Boot 4 bring significant improvements across three core themes: developer experience, performance, and production-readiness.",[16,3938,3939],{},[161,3940,3941],{},"10 Features I Cover in This Guide:",[3943,3944,3945,3951,3960,3966,3972,3978,3984,3990,3996,4002],"ol",{},[1274,3946,3947,3950],{},[161,3948,3949],{},"Null Safety with JSpecify"," - Compile-time null checking to catch NPEs before runtime",[1274,3952,3953,3956,3957],{},[161,3954,3955],{},"HTTP Interface Clients"," - Zero-configuration HTTP clients with ",[469,3958,3959],{},"@ImportHttpServices",[1274,3961,3962,3965],{},[161,3963,3964],{},"Programmatic Bean Registration"," - Modern, AOT-compatible API for dynamic bean creation",[1274,3967,3968,3971],{},[161,3969,3970],{},"API Versioning"," - First-class support using media type parameters",[1274,3973,3974,3977],{},[161,3975,3976],{},"JMS Client API"," - Fluent messaging API for Apache ActiveMQ Artemis",[1274,3979,3980,3983],{},[161,3981,3982],{},"Built-in Resilience"," - Enterprise-grade patterns without external libraries",[1274,3985,3986,3989],{},[161,3987,3988],{},"Jackson 3 Support"," - Improved defaults and immutable configuration model",[1274,3991,3992,3995],{},[161,3993,3994],{},"REST Test Client"," - One consistent API for all test types",[1274,3997,3998,4001],{},[161,3999,4000],{},"Spring Data AOT"," - 50-70% faster startup with compile-time query generation",[1274,4003,4004,4007],{},[161,4005,4006],{},"OpenTelemetry Integration"," - Official, production-ready observability support",[16,4009,4010],{},"The message is clear: less boilerplate, faster applications, and better defaults out of the box. These releases eliminate code we've written countless times while delivering dramatic performance improvements through features like Spring Data AOT and continued GraalVM optimizations.",[16,4012,4013,4016],{},[161,4014,4015],{},"Read the full article with detailed code examples and resources:",[23,4017,4020],{"href":4018,"rel":4019},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-4-is-here",[101],"What's New in Spring Framework 7 and Spring Boot 4",[16,4022,4023,4024,4027],{},"Ready to try it? Head to ",[23,4025,2090],{"href":2088,"rel":4026},[101],", select Spring Boot 4.0, and start exploring these exciting new features!",[28,4029,385],{"id":384},[16,4031,4032],{},"Thanks to DaShaun for holding down the fort while I was out of town and hosting this awesome Spring Boot 4 Release Party 🎉",[166,4034],{"id":4035},"1991597469004960124",[28,4037,172],{"id":171},[16,4039,4040,4041,184],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any questions for me or topics you would like me to cover, please feel free to reply to this email or reach out to me on ",[23,4042,183],{"href":181,"rel":4043},[101],[16,4045,187,4046,191,4048,4050],{},[189,4047],{},[189,4049],{},[23,4051,198],{"href":198,"rel":4052},[101],{"title":200,"searchDepth":201,"depth":201,"links":4054},[4055,4056,4057],{"id":3932,"depth":201,"text":3933},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":4059,"path":4060,"title":4061,"description":4062,"meta":4063,"body":4066},"newsletter\u002Fnewsletter\u002F2025\u002F11\u002F10\u002Fspring-ai-rc1-spring-boot-4-graphql.md","\u002Fnewsletter\u002F2025\u002F11\u002F10\u002Fspring-ai-rc1-spring-boot-4-graphql","Spring AI 1.1.0 RC1, Spring Boot 4 is Almost Here and Building a GraphQL API in 20 Minutes","Spring AI 1.1.0 RC1 is available with MCP client support, Spring Boot 4 brings null safety and simplified HTTP interfaces, plus my SpringOne GraphQL talk recording.",{"slug":4064,"date":4065},"spring-ai-rc1-spring-boot-4-graphql","2025-11-10",{"type":13,"value":4067,"toc":4252},[4068,4071,4079,4082,4097,4101,4110,4114,4117,4126,4129,4132,4136,4139,4142,4145,4149,4157,4160,4164,4175,4184,4187,4191,4206,4214,4217,4221,4224,4227,4230,4233,4236,4238,4243],[16,4069,4070],{},"Happy Monday and welcome to another edition of the newsletter. The days are shorter now and as I write this on a Sunday afternoon there is a good chance that we are going to get some snow tomorrow. I'm just not ready for this so I am going to focus on some positive things here.",[16,4072,4073,4074,4078],{},"If you have been actually reading these newsletters (Thank You 🙏🏻) you know I just finished up my first book. The ",[23,4075,4077],{"href":3456,"rel":4076},[101],"online version"," has been updated to the final version and is now available to read. If you end up reading it please consider giving a review online and letting us know what you think. If you enjoyed it please let me know and I can include your review on the website I am building out for the book and podcast.",[16,4080,4081],{},"I'm going to be traveling the next 2 weeks for customer visits and conferences. There is a government shutdown that might put a wrench in those plans so I hope they can get this straightened out quickly. I feel awful for all of those hard working government employees who are working for free during this shutdown and enabling us to travel. Please be kind to them over the next however many weeks, it's probably not easy for them.",[16,4083,4084,4085,4090,4091,4096],{},"In 2 weeks I will be in San Francisco for QCon and I couldn't be more excited to speak and attend my very first QCon. I will be giving 2 workshops on Thursday, November 20th. The first one will be an introduction to ",[23,4086,4089],{"href":4087,"rel":4088},"https:\u002F\u002Fqconsf.com\u002Ftraining\u002Fnov2025\u002Fbuilding-intelligent-java-applications-developers-workshop",[101],"AI for Java Developers",". The second one will be based on the book and I get to share the stage with my good friend Nate Schutta. We will be discussing ",[23,4092,4095],{"href":4093,"rel":4094},"https:\u002F\u002Fqconsf.com\u002Ftraining\u002Fnov2025\u002Fsold-out-fundamentals-software-engineering-age-ai",[101],"The Fundamentals of Software Engineering in the age of AI",". I hope to see some of you there and even if you're not joining our workshops please introduce yourself and say hi 👋🏻",[28,4098,4100],{"id":4099},"spring-ai-110-rc1-available-now","Spring AI 1.1.0 RC1 Available Now",[16,4102,4103,4104,4109],{},"The Spring AI team has been turning out some amazing features in 1.1.0 and now ",[23,4105,4108],{"href":4106,"rel":4107},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F11\u002F08\u002Fspring-ai-1-1-0-RC1-available-now",[101],"RC1 is available"," which means we are getting close to a release. I said from the beginning of this release that it really started to feel like a 2.0 release with how many new features were shipping and the large number of bug fixes they addressed.",[33,4111,4113],{"id":4112},"mcp-clients-with-spring-ai","MCP Clients with Spring AI",[16,4115,4116],{},"Last week I published a new video on building MCP Clients with Spring AI. I think you have all probably heard of MCP Servers at this point but why would you need a client? Yes you can consume your MCP Server using your favorite clients like Claude Desktop, Claude Code, Visual Studio Code, Cursor and more. But what if you wanted to build an application using Spring AI and you wanted to bring in support for one or more MCP Servers?",[16,4118,4119,4120,4125],{},"In this video, I demonstrate how to build MCP (Model Context Protocol) clients using Spring AI to augment large language models with custom context and capabilities. Starting with Spring AI 1.1.0 milestone 3's simplified approach, I walk through creating a Spring Boot application that integrates my \"",[23,4121,4124],{"href":4122,"rel":4123},"https:\u002F\u002Fwww.danvega.dev\u002Fmcp",[101],"Dan Vega as a Service","\" MCP server. This practical example provides access to my YouTube videos, blog posts, and other content that LLMs aren't trained on. The tutorial covers configuring the MCP client with streamable HTTP connections, setting up tool callbacks, and integrating these tools with the chat client to answer domain-specific questions.",[16,4127,4128],{},"You'll learn how to stitch together multiple MCP servers to build powerful AI applications while maintaining model agnosticism, meaning the same code works whether you're using OpenAI, Anthropic, or Google Gemini. The complete example shows how MCP servers solve the context limitation problem in LLMs by providing a reusable, packageable way to add specialized knowledge to any AI application.",[47,4130],{"id":4131},"TSFkdlreRMQ",[33,4133,4135],{"id":4134},"securing-mcp-servers","Securing MCP Servers",[16,4137,4138],{},"Speaking of MCP servers, I'm not sure if I shared this video I made a couple of weeks ago on securing them with Spring Security. After my conversation with Daniel Garnier-Moiroux about the security implications of exposing MCP servers, I realized we needed a way to protect these endpoints from unauthorized access. The video demonstrates how to add authentication and authorization to MCP servers using Spring Security's built-in features. I walk through configuring basic authentication, setting up OAuth2 support, and implementing role-based access control for different MCP tools.",[16,4140,4141],{},"You'll learn how to secure remote MCP server deployments using the Streamable HTTP Transport. The tutorial also covers best practices for managing API keys and tokens when your MCP server needs to access external services. The example shows how to build production-ready MCP servers that maintain the flexibility of the protocol while ensuring your data and tools remain protected from unauthorized use.",[47,4143],{"id":4144},"Xiw4bMD3SOg",[28,4146,4148],{"id":4147},"spring-boot-4-is-almost-here","Spring Boot 4 is Almost Here!",[16,4150,4151,4152,4156],{},"I can't believe how close we are to the release of Spring Framework 7 and Spring Boot 4. I have spent a lot of time lately learning about some of the new features by getting my hands dirty and writing some code. I have to say there are a number of features that I didn't think were a big deal and now they are some of my favorites. Last week on ",[23,4153,93],{"href":4154,"rel":4155},"https:\u002F\u002Fwww.springofficehours.io\u002F",[101]," DaShaun and I talked about Spring Boot 4 at a high level and what we are excited about.",[47,4158],{"id":4159},"imaP2ctZg5Q",[33,4161,4163],{"id":4162},"null-safety-with-jspecify-and-nullaway","Null Safety with JSpecify and NullAway",[16,4165,4166,4167,4170,4171,4174],{},"Spring Boot 4 introduces explicit null safety using JSpecify annotations, turning Java's implicit nullability problem into a compile-time solution. Instead of guessing whether methods can return null (and risking those dreaded NullPointerExceptions in production), you now declare nullability explicitly in your type signatures. By adding ",[469,4168,4169],{},"@NullMarked"," at the package level, everything becomes non-null by default, then you use ",[469,4172,4173],{},"@Nullable"," only where nulls are actually allowed, like optional fields or methods that might not find results.",[16,4176,4177,4178,4183],{},"This approach works beautifully with collections and arrays too, letting you specify that while the collection itself is non-null, its elements might be nullable. The real win here is confidence: your IDE catches potential null issues during development, not after deployment. Check out ",[23,4179,4182],{"href":4180,"rel":4181},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-4-null-safety",[101],"my blog post"," which includes a walkthrough of this feature and the source code for the Coffee Shop example I used in the tutorial.",[47,4185],{"id":4186},"QlGnaRoujL8",[33,4188,4190],{"id":4189},"creating-rest-clients-in-spring-boot-4","Creating REST Clients in Spring Boot 4",[16,4192,4193,4194,4197,4198,4201,4202,4205],{},"Spring Boot 4 streamlines HTTP interfaces by eliminating the proxy factory boilerplate required in version 3. Instead of manually creating RestClient adapters and HTTP service proxy factories for each service integration, you now simply annotate a configuration class with ",[469,4195,4196],{},"@ImportHttpService(ToDoService.class)"," and Spring handles the rest. Your service interface stays clean, just method signatures with ",[469,4199,4200],{},"@GetExchange",", ",[469,4203,4204],{},"@PostExchange",", and other HTTP annotations that Spring automatically implements using RestClient under the hood.",[16,4207,4208,4209,4213],{},"The real win comes when you're integrating multiple services: group them by package, apply default headers or security across all of them, and configure everything in one place without drowning in bean definitions. While one service integration wasn't painful before, managing ten or twenty would quickly become a maintenance nightmare. Now it's just a matter of listing your interfaces in the import annotation. Check out the complete example with JSONPlaceholder integration on ",[23,4210,851],{"href":4211,"rel":4212},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fsb4-http-interfaces",[101],", and explore the Spring docs for advanced configuration options like service grouping and custom interceptors.",[47,4215],{"id":4216},"TEd5e4Thu7M",[28,4218,4220],{"id":4219},"beyond-rest-crafting-a-modern-graphql-api-live","Beyond REST: Crafting a Modern GraphQL API Live",[16,4222,4223],{},"I realized this week that I haven't shared out the recording from my talk at SpringOne on GraphQL. This one was a lot of fun and quite the challenge. I was given 20 minutes and needed to build a GraphQL API live. I thought for how much I had to pack in such a short amount of time that it turned out well.",[47,4225],{"id":4226},"bXxpIDh-SgM",[28,4228,4229],{"id":384},"TWEETS",[16,4231,4232],{},"I'm a big fan of custom slash commands in Claude Code.",[166,4234],{"id":4235},"1986906652964950106",[28,4237,1028],{"id":171},[16,4239,178,4240,184],{},[23,4241,183],{"href":181,"rel":4242},[101],[16,4244,187,4245,191,4247,4249],{},[189,4246],{},[189,4248],{},[23,4250,198],{"href":196,"rel":4251},[101],{"title":200,"searchDepth":201,"depth":201,"links":4253},[4254,4258,4262,4263,4264],{"id":4099,"depth":201,"text":4100,"children":4255},[4256,4257],{"id":4112,"depth":206,"text":4113},{"id":4134,"depth":206,"text":4135},{"id":4147,"depth":201,"text":4148,"children":4259},[4260,4261],{"id":4162,"depth":206,"text":4163},{"id":4189,"depth":206,"text":4190},{"id":4219,"depth":201,"text":4220},{"id":384,"depth":201,"text":4229},{"id":171,"depth":201,"text":1028},{"_id":4266,"path":4267,"title":4268,"description":4269,"meta":4270,"body":4273},"newsletter\u002Fnewsletter\u002F2025\u002F11\u002F03\u002Fspring-boot-4-fose-podcast.md","\u002Fnewsletter\u002F2025\u002F11\u002F03\u002Fspring-boot-4-fose-podcast","Fundamentals of Software Engineering Podcast and Spring Boot 4 is arriving this month!","Announcing the Fundamentals of Software Engineering Podcast and diving into Spring Boot 4's exciting new features including Bean Registrar, API Versioning, and more.",{"slug":4271,"date":4272},"spring-boot-4-fose-podcast","2025-11-03",{"type":13,"value":4274,"toc":4492},[4275,4278,4284,4287,4290,4298,4301,4304,4308,4311,4314,4320,4328,4331,4337,4340,4343,4375,4378,4381,4384,4388,4395,4399,4414,4418,4448,4454,4459,4462,4464,4467,4470,4473,4476,4478,4483],[16,4276,4277],{},"Happy Monday and welcome to another edition of the newsletter! I hope you all had a wonderful Halloween. We were lucky to get some decent weather here, and the kids had a blast getting more candy than they will ever eat. I also tested out a Halloween AI photo generator that would take a picture of you and spookify it. I thought it did a good job of making me a Spooky Spring Developer Advocate 🤣",[16,4279,4280],{},[74,4281],{"alt":4282,"src":4283},"Spooky Dan","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F03\u002Fspooky-dan.png",[16,4285,4286],{},"Daylight Saving Time happened this weekend and sunset is now 5:20 PM in my area. I just don't understand how anyone can think this is a good idea. I'm not sure how I am going to make it through the next 4 months, but I will do my best 🤷🏻‍♂️ The best part about the calendar switching over to November is that we get a new version of Spring Boot. That's right, Spring Boot 4 and Spring Framework 7 will be released later this month!",[16,4288,4289],{},"Last week, something incredible landed in my inbox, possibly the best email I've ever received. It started like this:",[2238,4291,4292,4295],{},[16,4293,4294],{},"Hi Dan and Nate,",[16,4296,4297],{},"Congratulations! Your book went to print today, and we've now completed production.",[16,4299,4300],{},"After all the hard work the entire team put into this, I can't believe this is finally happening. I'm told that the ebook versions will start appearing this week, and the print versions are probably 3-4 weeks out.",[16,4302,4303],{},"In this week's edition of the newsletter, I want to talk to you about a podcast I'm recording soon and more on Spring Boot 4.",[28,4305,4307],{"id":4306},"fundamentals-of-software-engineering-podcast","Fundamentals of Software Engineering Podcast",[16,4309,4310],{},"The book was a lot of fun to write, and we had a specific goal in mind. We were going to cover a lot of topics at a high level and leave you with resources to go deeper and learn more if you wanted to.",[16,4312,4313],{},"I'm excited to announce that as a companion to this book, Nate and I have decided to start a podcast. This will give us a chance to go deeper and have discussions around some of the things we talked about in the book and, more importantly, topics that we just couldn't cover in the book.",[16,4315,4316],{},[74,4317],{"alt":4318,"src":4319},"FOSE Social Media Icon","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F03\u002Ffose_social_media_icon.jpg",[16,4321,4322,4323,4327],{},"I'm putting the final touches on the website and should be able to share it with you next week. In the meantime, if you want to be the first to know when the first episode drops, subscribe to the ",[23,4324,2944],{"href":4325,"rel":4326},"https:\u002F\u002Fwww.youtube.com\u002F@FundamentalsSWE",[101],". This is going to be a blast—we even have an editor on board to help us look and sound professional, which I'm really excited about.",[28,4329,4330],{"id":4147},"Spring Boot 4 is almost here!",[16,4332,4333],{},[74,4334],{"alt":4335,"src":4336},"Excited GIF","\u002Fimages\u002Fnewsletter\u002F2025\u002F11\u002F03\u002Fexcited.gif",[16,4338,4339],{},"As I mentioned in the opening, one of the good things about the calendar moving over to November is knowing that we get a new release of Spring Boot. This isn't just a new release though—this is now the next major generation of the framework and a new major release.",[16,4341,4342],{},"I have spent a lot of time lately diving into the new features, and I'm pretty excited about what is coming. These are the features that I have been diving into. I have written demos for most of these and already recorded tutorials for most of these. I will spend some time editing these this week, and you should start to see them being published soon.",[1271,4344,4345,4347,4353,4359,4366,4369,4372],{},[1274,4346,4163],{},[1274,4348,4349],{},[23,4350,3970],{"href":4351,"rel":4352},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-4-api-versioning",[101],[1274,4354,4355],{},[23,4356,3964],{"href":4357,"rel":4358},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fprogrammatic-bean-registration",[101],[1274,4360,4361],{},[23,4362,4365],{"href":4363,"rel":4364},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-framework-7-rest-test-client",[101],"RestTestClient",[1274,4367,4368],{},"Jackson 3",[1274,4370,4371],{},"JMS Client",[1274,4373,4374],{},"HTTP Interfaces",[16,4376,4377],{},"What are your favorite features planned for Spring Framework 7 and Spring Boot 4? If you want to make sure I record a tutorial for a specific feature, let me know by replying to this email or letting me know on social media.",[28,4379,3964],{"id":4380},"programmatic-bean-registration",[16,4382,4383],{},"Last week, I explored a new feature coming in Spring Framework 7 and Spring Boot 4 this November: the Bean Registrar interface. This feature transforms how we handle programmatic bean registration, making it cleaner and more intuitive than before.",[33,4385,4387],{"id":4386},"the-problem-it-solves","The Problem It Solves",[16,4389,4390,4391,4394],{},"We've all been there: needing to register beans dynamically based on environment properties, creating multiple beans in a loop, or handling complex conditional logic that ",[469,4392,4393],{},"@Conditional"," annotations just can't handle elegantly. Until now, we've had to resort to verbose post-processors or convoluted bean methods. It worked, but it wasn't pretty.",[33,4396,4398],{"id":4397},"enter-the-bean-registrar","Enter the Bean Registrar",[16,4400,4401,4402,4405,4406,4409,4410,4413],{},"The new ",[469,4403,4404],{},"BeanRegistrar"," interface provides first-class support for programmatic bean registration. In the demo, I showed how to create a message service system that dynamically registers either an Email or SMS service based on application properties. The beauty is in its simplicity. You get direct access to both the ",[469,4407,4408],{},"BeanRegistry"," and the ",[469,4411,4412],{},"Environment",", allowing you to make intelligent registration decisions at runtime.",[33,4415,4417],{"id":4416},"key-takeaways","Key Takeaways",[1271,4419,4420,4426,4432,4438],{},[1274,4421,4422,4425],{},[161,4423,4424],{},"Performance Wins",": Only load the beans you actually need based on configuration",[1274,4427,4428,4431],{},[161,4429,4430],{},"Cleaner Code",": No more jumping through hoops with post-processors",[1274,4433,4434,4437],{},[161,4435,4436],{},"Flexibility",": Perfect for scenarios requiring dynamic bean registration",[1274,4439,4440,4443,4444,4447],{},[161,4441,4442],{},"Compatibility",": ",[469,4445,4446],{},"@Bean"," annotation isn't going anywhere. This complements it for specific use cases",[16,4449,4450,4451,4453],{},"The Bean Registrar represents Spring's commitment to providing elegant solutions for real-world problems. While ",[469,4452,4446],{}," will still handle 90%+ of your use cases, when you need that extra control, the Bean Registrar delivers.",[16,4455,4456],{},[734,4457,4458],{},"Note: If you're trying this with Spring Boot 4.0.0-M3, don't worry if IntelliJ shows autowiring warnings. The IDE just hasn't caught up with Spring Framework 7's new features yet!",[47,4460],{"id":4461},"yh760wTFL_4",[28,4463,4229],{"id":384},[16,4465,4466],{},"You can now select properties or YAML configuration right from the Spring Initializr.",[166,4468],{"id":4469},"1984345881936601564",[16,4471,4472],{},"I found an awesome graphic designer to help me out with my thumbnails. The best part is he is also a Java & Spring Developer.",[166,4474],{"id":4475},"1983875461668090181",[28,4477,1028],{"id":171},[16,4479,4040,4480,184],{},[23,4481,183],{"href":181,"rel":4482},[101],[16,4484,187,4485,191,4487,4489],{},[189,4486],{},[189,4488],{},[23,4490,198],{"href":196,"rel":4491},[101],{"title":200,"searchDepth":201,"depth":201,"links":4493},[4494,4495,4496,4501,4502],{"id":4306,"depth":201,"text":4307},{"id":4147,"depth":201,"text":4330},{"id":4380,"depth":201,"text":3964,"children":4497},[4498,4499,4500],{"id":4386,"depth":206,"text":4387},{"id":4397,"depth":206,"text":4398},{"id":4416,"depth":206,"text":4417},{"id":384,"depth":201,"text":4229},{"id":171,"depth":201,"text":1028},{"_id":4504,"path":4505,"title":4506,"description":4507,"meta":4508,"body":4511},"newsletter\u002Fnewsletter\u002F2025\u002F10\u002F27\u002Ffundamentalsofswe-update.md","\u002Fnewsletter\u002F2025\u002F10\u002F27\u002Ffundamentalsofswe-update","Fundamentals of Software Engineering, new YouTube videos and Securing MCP Servers","Updates on the Fundamentals of Software Engineering book going to print, launching a podcast, publishing 5 YouTube videos in 5 days, and a deep dive into securing MCP servers with Spring Security.",{"slug":4509,"date":4510},"fundamentalsofswe-update","2025-10-27",{"type":13,"value":4512,"toc":4671},[4513,4516,4519,4522,4525,4528,4531,4534,4536,4539,4547,4550,4555,4558,4564,4567,4570,4573,4576,4579,4582,4619,4623,4626,4629,4632,4635,4637,4640,4643,4646,4649,4652,4655,4657,4662],[16,4514,4515],{},"Happy Monday and welcome to another edition of the newsletter.",[16,4517,4518],{},"Is it just me, or has keeping up with our industry become increasingly overwhelming? Every day brings new languages, frameworks, tools, and of course the latest AI breakthrough that everyone insists is revolutionary.",[16,4520,4521],{},"I love learning, and I'm grateful that software engineering guarantees a lifetime of discovery. But I'll admit: I struggle with shiny object syndrome. Scrolling through social media, I see something new and immediately think, \"I need to learn this NOW.\" As a content creator, that impulse quickly morphs into \"I need to make a video about this TODAY.\"",[16,4523,4524],{},"Here's what's been helping me lately: I dump everything interesting into a swipe file and let it marinate. Then I run each item through my goal filter using my yearly, quarterly, monthly, and weekly objectives. The question becomes simple: \"Will learning this help me achieve my current goals?\" If yes, it moves up the priority stack. If not, it stays in the swipe file for later.",[16,4526,4527],{},"It's not easy. We're wired to chase the new and exciting, especially when social media amplifies every tool as \"game-changing\" and \"essential.\" But we can't learn everything, and trying to will only leave us scattered and exhausted.",[16,4529,4530],{},"I'm curious about your approach. How do you decide what to learn next? How do you filter the signal from the noise when everyone's shouting about the next big thing?",[16,4532,4533],{},"In this week's edition, I'll share an update on my book, some related projects I'm building, and highlight a few videos from last week and recap my conversation on Spring Office Hours around securing MCP servers.",[28,4535,344],{"id":343},[16,4537,4538],{},"This week is a big week as the book I have been working on for what seems like forever is going to the printer 🥳 If you have been reading my newsletters you already know just how extremely proud and excited I am for you to be able to get this in your hands and give us some feedback. It has been a career goal of mine for as long as I can remember and I can't wait for the day that I have the actual book in my hands.",[16,4540,4541,4542,4546],{},"Nate and I talked about putting together a podcast around the book and I'm happy to announce that we will begin recording episodes some time this week. The podcast will be an opportunity to go in depth on a lot of the topics for the book and we think you're really going to enjoy it. You will be able to listen to this wherever you get your podcasts but there will also be a video version of it. If you want to you can ",[23,4543,4545],{"href":4325,"rel":4544},[101],"subscribe to the channel"," now to be notified when the first episode goes live.",[16,4548,4549],{},"I spent some time this weekend putting together a website for the book and the podcast and I'm really happy with the results. It's amazing what some templates and Claude Code can accomplish in a couple of hours. I was able to put this site together and get it live in some spare time over the weekend. This is something that would have taken a lot longer in the past. When the final touches are complete I will share the URL which will probably be in the next edition of this newsletter.",[16,4551,4552],{},[74,4553],{"alt":3833,"src":4554},"\u002Fimages\u002Fnewsletter\u002F2025\u002F10\u002F27\u002Ffundamentals-website.png",[28,4556,3363],{"id":4557},"youtube",[16,4559,4560],{},[74,4561],{"alt":4562,"src":4563},"YouTube Banner","\u002Fimages\u002Fnewsletter\u002F2025\u002F10\u002F27\u002Fyoutube-banner.png",[16,4565,4566],{},"Last week I published 5 new videos in 5 days, which might be a personal record. Finding consistency has been a real challenge, and I've been experimenting with different approaches to make it sustainable.",[16,4568,4569],{},"I recently hired a video editor who's been fantastic, though we've only worked on a couple of videos so far. I'd love to bring on a full-time editor, but here's something that might surprise you: despite having over 80,000 subscribers, my channel barely generates enough revenue to cover the cost of editing a single video.",[16,4571,4572],{},"That's why I'm considering sponsorships. My inbox has been flooded with partnership opportunities lately, and while I haven't accepted any yet, it might be time. To be clear: I have no desire to become a full-time YouTuber. I love my day job, and the channel is simply an extension of that passion. But having an editor would free me up to create more content while focusing on what matters most.",[16,4574,4575],{},"I've also realized I've been overthinking the production process. Somewhere along the way, I convinced myself every video needed the perfect title, thumbnail, scripted introduction, and polished conclusion. That approach turns a simple tutorial into a multi-day production.",[16,4577,4578],{},"So last week, I tried something different. I turned on the camera and just started talking. No script, just an idea or some code I wanted to share. The result? Five videos in five days, and significantly less stress. Will this approach help grow the channel? Time will tell, but it certainly feels more sustainable.",[16,4580,4581],{},"Here are the videos from last week. I hope you enjoy them:",[1271,4583,4584,4591,4598,4605,4612],{},[1274,4585,4586],{},[23,4587,4590],{"href":4588,"rel":4589},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=MarSC2dFA9g",[101],"Build AI's Future: Model Context Protocol (MCP) with Spring AI in Minutes",[1274,4592,4593],{},[23,4594,4597],{"href":4595,"rel":4596},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=11L34s72s6U",[101],"Google's FREE Vibe Coding Studio Feature inside of AI Studio",[1274,4599,4600],{},[23,4601,4604],{"href":4602,"rel":4603},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=piu3UK20lI8",[101],"Claude Code Web & iOS: Fix Bugs and Deploy Code from Anywhere",[1274,4606,4607],{},[23,4608,4611],{"href":4609,"rel":4610},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QlWyrYuEC84",[101],"Why Plan Mode is Claude Code's Most Underrated Feature",[1274,4613,4614],{},[23,4615,4618],{"href":4616,"rel":4617},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xiw4bMD3SOg",[101],"How to Secure your MCP Servers with Spring Security 🔐 & Spring AI 🤖",[28,4620,4622],{"id":4621},"securing-mcp-servers-with-spring-ai","Securing MCP Servers with Spring AI",[16,4624,4625],{},"Last week I sat down with Daniel Garnier-Moiroux to talk about securing MCP (Model Context Protocol) servers with Spring AI. Daniel works on the Spring Security team and has been helping bring security features to the Spring AI ecosystem. We dug into two main approaches for securing your MCP servers: API keys for when you need something quick and straightforward, and OAuth2 when you need more robust token-based authentication.",[16,4627,4628],{},"What I appreciated most about our conversation was how Daniel broke down what could be a complex topic into practical, implementable solutions. He walked through setting up API key authentication with BCrypt hashing (though he warned about the CPU costs if you're checking keys on every request), and then showed how to wire up OAuth2 with an authorization server. The OAuth dance can be tricky to debug, but Daniel showed me how the MCP Inspector tool makes this way easier. It actually walks you through each step of the handshake so you can pinpoint exactly where things break. His main point? You don't need to become a security expert to properly secure your MCP servers. Spring Security gives you sensible defaults that work, and when you need to customize, the extension points are there without requiring a deep dive into cryptography.",[16,4630,4631],{},"You can watch our entire conversation below 👇🏻",[47,4633],{"id":4634},"AnBNm1vzCDE",[33,4636,4229],{"id":384},[16,4638,4639],{},"The first release candidate of Spring Boot 4 was released last week!",[166,4641],{"id":4642},"1981737263114395873",[16,4644,4645],{},"JavaOne is an amazing conference and if you would like to speak there next year, here is your chance",[166,4647],{"id":4648},"1981411918947766346",[16,4650,4651],{},"OpenAI announced their new Web Browser, Atlas",[166,4653],{"id":4654},"1980687324175560788",[28,4656,1028],{"id":171},[16,4658,178,4659,184],{},[23,4660,183],{"href":181,"rel":4661},[101],[16,4663,187,4664,191,4666,4668],{},[189,4665],{},[189,4667],{},[23,4669,198],{"href":196,"rel":4670},[101],{"title":200,"searchDepth":201,"depth":201,"links":4672},[4673,4674,4675,4678],{"id":343,"depth":201,"text":344},{"id":4557,"depth":201,"text":3363},{"id":4621,"depth":201,"text":4622,"children":4676},[4677],{"id":384,"depth":206,"text":4229},{"id":171,"depth":201,"text":1028},{"_id":4680,"path":4681,"title":4682,"description":4683,"meta":4684,"body":4687},"newsletter\u002Fnewsletter\u002F2025\u002F10\u002F20\u002Fsecuring-mcp-servers-spring-ai.md","\u002Fnewsletter\u002F2025\u002F10\u002F20\u002Fsecuring-mcp-servers-spring-ai","Securing MCP Servers with Spring AI, Compacting Chat Memory Advisor and QCon San Francisco","Learn about securing MCP servers in Spring AI, building a custom compacting chat memory advisor, and Dan's upcoming workshop at QCon San Francisco on building intelligent Java applications.",{"slug":4685,"date":4686},"securing-mcp-servers-spring-ai","2025-10-20",{"type":13,"value":4688,"toc":4801},[4689,4692,4701,4704,4706,4715,4724,4730,4733,4736,4740,4747,4755,4758,4762,4765,4771,4773,4776,4779,4782,4785,4787,4792],[16,4690,4691],{},"Happy Monday and welcome to another edition of the newsletter. It's been such a busy year that all of a sudden I look up and it is almost Halloween 🎃 I had a great week last week catching up on some things and finally getting to a point where I can breathe a little bit, which is a great feeling. I gave three presentations this week to customers on Spring AI, one of which was a 90-minute workshop on building MCP Servers in Spring. Someone asked if this was recorded and unfortunately it wasn't, but it got me thinking. Maybe I can try to run some regular workshops (free of course) and I'm just trying to think of the best way to do that. If you're interested in that, please let me know.",[16,4693,4694,4695,4700],{},"I mentioned last week that the book I'm writing with my friend Nate Schutta is getting closer and closer to a release. I will let you know when it is officially out, but when it does come out you can get instant access to it through the ",[23,4696,4699],{"href":4697,"rel":4698},"https:\u002F\u002Flearning.oreilly.com\u002F",[101],"O'Reilly Learning Platform"," or order it on Amazon. I'm also excited to tell you about another project I'm working on with Nate, a podcast and YouTube channel around this topic called The Fundamentals of Software Engineering Podcast. We are going to begin recording this week and I'll let you know as soon as the first few episodes are available.",[16,4702,4703],{},"This week I'm excited to share with you some code I wrote around securing MCP servers, a new Spring AI Advisor for compacting chat memory, and my upcoming Spring AI Workshop at QCon San Francisco.",[28,4705,4622],{"id":4621},[16,4707,4708,4709,4714],{},"Last week I spent some time going through an excellent article by coworker Daniel Garnier-Moiroux on ",[23,4710,4713],{"href":4711,"rel":4712},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F09\u002F30\u002Fspring-ai-mcp-server-security",[101],"Securing MCP Servers in Spring AI",". This is a hot topic because as we start building MCP servers, you might start out by building local ones but eventually you will want to move some of these to the cloud for everyone to access.",[16,4716,4717,4718,4723],{},"I put together ",[23,4719,4722],{"href":4720,"rel":4721},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fmcps",[101],"this repository"," that has the code for securing a Spring AI MCP server using Spring Security and the Spring Authorization Server. When I'm dealing with workflows like this, it's also helpful for me to build a mental model of how this works. This is another topic we touch on in the new book. So I decided to sit down and diagram this out in one of my favorite tools, Excalidraw. Let me know if this helps and I'm also curious if this is something you do when trying to understand a concept.",[16,4725,4726],{},[74,4727],{"alt":4728,"src":4729},"MCP Server Security Diagram","\u002Fimages\u002Fnewsletter\u002F2025\u002F10\u002F20\u002Fmcp-security-diagram.jpeg",[16,4731,4732],{},"I'm also really excited to sit down with Daniel on this week's Spring Office Hours. If you are reading this before 10 AM EDT on Thursday October 23rd, you can join us live or catch the replay on the Spring Developer YouTube Channel. If you aren't aware, Spring Office Hours we also turn this into a podcast so you can get this wherever you get your podcasts.",[47,4734],{"id":4735},"JmFdDoAJnvM",[28,4737,4739],{"id":4738},"compacting-chat-memory-advisor-for-spring-ai","Compacting Chat Memory Advisor for Spring AI",[16,4741,4742,4743,4746],{},"A few weeks ago at dev2Next in Colorado Springs, I sat in on a fascinating comparison between LangChain4j and Spring AI when someone raised an intriguing question about chat memory limitations. They asked what happens when you hit the maximum message count in Spring AI's chat memory advisor - do the messages just disappear? That moment sparked an idea: why not build a custom advisor that intelligently compacts conversation history instead of simply clearing it, similar to Claude Code's ",[469,4744,4745],{},"\u002Fcompact"," command?",[16,4748,4749,4750,4754],{},"In this video, I demonstrate building a custom compacting chat memory advisor that automatically summarizes conversation history when approaching token limits. The solution monitors message thresholds (configurable at 75% capacity by default) and uses an LLM to compress multiple messages into concise summaries, dramatically reducing token usage while preserving context. Rather than losing all conversation history when hitting the 20-message default limit, this advisor maintains continuity by intelligently consolidating older messages. While this is currently a proof-of-concept I hacked together after the conference, it showcases the real power of Spring AI's advisor pattern - the ability to wrap LLM calls with custom logic to solve specific challenges. The complete code is available on ",[23,4751,851],{"href":4752,"rel":4753},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fcompacting-chat-memory-advisor",[101]," for anyone looking to implement smarter conversation memory management or build their own custom advisors.",[47,4756],{"id":4757},"hyK20bn38lM",[28,4759,4761],{"id":4760},"qcon-san-francisco","QCon San Francisco",[16,4763,4764],{},"I'm really excited to be heading to and speaking at my very first QCon event in San Francisco next month. In this workshop I will have a half day to teach developers about why building AI applications in Java is such a great opportunity right now. You will learn how to write your first AI application using Spring AI and why a framework like this is so much more than a facility for making REST calls to an LLM. I'll show you all of my favorite features in the framework such as a unified API for all the major Large Language Models and the code that we write is the same and we can swap out models using configuration. If you're going to be there, please make sure to say hi and introduce yourself.",[16,4766,4767],{},[23,4768,4770],{"href":4087,"rel":4769},[101],"Building Intelligent Java Applications: A Developer's Workshop at QCon San Francisco 2025",[28,4772,385],{"id":384},[16,4774,4775],{},"I don't know about you but I am really excited about JavaScript 🤣",[166,4777],{"id":4778},"1979557079934505019",[16,4780,4781],{},"I love all of these tools we have at our disposal but is anyone else finding it hard to keep up with all of these features? Claude Code introduced Claude Skills last week.",[166,4783],{"id":4784},"1979166173049532562",[28,4786,1028],{"id":171},[16,4788,178,4789,184],{},[23,4790,183],{"href":181,"rel":4791},[101],[16,4793,187,4794,191,4796,4798],{},[189,4795],{},[189,4797],{},[23,4799,198],{"href":196,"rel":4800},[101],{"title":200,"searchDepth":201,"depth":201,"links":4802},[4803,4804,4805,4806,4807],{"id":4621,"depth":201,"text":4622},{"id":4738,"depth":201,"text":4739},{"id":4760,"depth":201,"text":4761},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":1028},{"_id":4809,"path":4810,"title":4811,"description":4812,"meta":4813,"body":4816},"newsletter\u002Fnewsletter\u002F2025\u002F10\u002F13\u002Fback-from-summer.md","\u002Fnewsletter\u002F2025\u002F10\u002F13\u002Fback-from-summer","After a busy end to the summer, I'm back!","Happy Monday and welcome to another edition of the newsletter. It's been a while since I have written here but I have been a busy man lately.",{"slug":4814,"date":4815},"back-from-summer","2025-10-13",{"type":13,"value":4817,"toc":4938},[4818,4821,4824,4827,4831,4834,4838,4844,4847,4864,4872,4875,4883,4892,4900,4909,4913,4916,4919,4922,4924,4929],[16,4819,4820],{},"Happy Monday and welcome to another edition of the newsletter. It's been a while since I have written here but I have been a busy man lately. I just looked and the last time I wrote a newsletter was on July 21. Thankfully this is a free newsletter so there will be no refunds. I hope you had an amazing summer and happiness and health is treating you and your family well.",[16,4822,4823],{},"It turns out that writing a book while having a full time job and family life to balance is not an easy thing to do, who knew. Speaking of when it comes to writing books my friend Nate told me that writing a book is kind of like having kids. You don't really understand what you're signing up for and when you're done you swear you will never do it again. This certainly checks out. Not that I'm ready to sign up for another book just yet but if I were to I would have a much better idea how to prepare for number 2.",[16,4825,4826],{},"If you didn't know for the last year I have been writing a book called the Fundamentals of Software Engineering with my good friend Nate Schutta. We are wrapping up production on it and it should be available soon. I could not be more proud of this book. I think it comes along at a perfect time and will help a lot of developers navigate their career. In fact I can truly believe that this is a book I wish I had 20 years ago.",[74,4828],{"alt":4829,"src":4830},"Fundamentals of Software Engineering Book Cover","\u002Fimages\u002Fnewsletter\u002F2025\u002F10\u002F13\u002Ffose-cover.png",[16,4832,4833],{},"I will tell you more about it soon and I will obviously let you know when it's available to order. I can't possibly catch you up on everything I have done since July so I'll just touch on a few things and now that things are slowing down I will be able to write more and tell you all about the exciting things I'm working on.",[28,4835,4837],{"id":4836},"devrel-life","DevRel Life",[16,4839,4840],{},[74,4841],{"alt":4842,"src":4843},"Conference Photo","\u002Fimages\u002Fnewsletter\u002F2025\u002F10\u002F13\u002Fdev2next-panel.jpeg",[16,4845,4846],{},"On top of writing a book I have been traveling the country talking to customers and presenting at some amazing conferences. It isn't easy submitting CFPs for conferences 6 months out and trying to project what you will want to talk about in that time frame. On top of that has become increasingly competitive at these conferences and getting selected is not easy so I'm always grateful when I get that acceptance email. Here are the conferences I spoke at lately:",[1271,4848,4849,4852,4855,4858,4861],{},[1274,4850,4851],{},"KCDC - Kansas City, MO",[1274,4853,4854],{},"SpringOne - Las Vegas, NV",[1274,4856,4857],{},"ApacheCon - Minneapolis, MN",[1274,4859,4860],{},"Commit your Code - Plano, TX",[1274,4862,4863],{},"dev2Next - Colorado Springs, CO",[16,4865,4866,4867,4871],{},"A lot of my conference talks and workshops have been around AI. I was able to give 25 min talks on MCP all the way up to an 8 hour workshop on AI for Java Developers. I have also spent a lot of time lately talking about the upcoming releases of Spring Framework 7 and Spring Boot that will drop next month. If you're interested in any of this content you should be able to find related videos on my ",[23,4868,2944],{"href":4869,"rel":4870},"https:\u002F\u002Fwww.youtube.com\u002F@danvega",[101],". I'm hoping to release a bunch of videos on the new features coming in Spring over the next month so make sure you are subscribed.",[28,4873,4124],{"id":4874},"dan-vega-as-a-service",[16,4876,4877,4878,4882],{},"I have spent a lot of time recently updating my ",[23,4879,4881],{"href":198,"rel":4880},[101],"website",". For as long as I can remember I have been creating content and it all started with my website. I am super happy with the current state of my little corner of the internet and have been trying to improve it. I upgraded to Nuxt 4 and bumped a lot of dependencies which wasn't an easy transition. With this you should see some performance improvements along with a new page that I want to tell you about now.",[16,4884,4885,4886,4891],{},"I have been talking a lot about MCP Servers this year and just how easy they are to build in Java and Spring thanks to the ",[23,4887,4890],{"href":4888,"rel":4889},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fjava-sdk",[101],"Official Java SDK"," that was donated to Anthropic by the Spring team. In the latest version of Spring AI 1.1.0 (which is currently in a M3 version) this got even easier. You no longer need to register tool callbacks so this is as easy as adding an annotation to your methods.",[16,4893,4894,4895,4899],{},"I decided to create a new MCP Server called ",[23,4896,4898],{"href":4122,"rel":4897},[101],"Dan Vega as a Service (dvaas)"," that would surface all of my content to an LLM. You have to remember that LLMs are trained on a certain data set up to a date and so a lot of my recent content won't be found if you asked it about something. Yes it can invoke tools like a web search but those won't always be accurate or know about certain data that isn't on my website such as the Spring Office Hours podcast.",[16,4901,4902,4903,4908],{},"In terms of practical use I know that you aren't going to run to install this in your agent of choice. What this does provide though is just how easy it is to create your MCP server in Java and Spring for whatever your use case might be. You can also use the new Streamable Http transport which mine uses and allows you to make your server publicly accessible. You can find the ",[23,4904,4907],{"href":4905,"rel":4906},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fdvaas",[101],"source code on GitHub"," and if you have any questions about it please don't hesitate to ask.",[16,4910,4911],{},[161,4912,4229],{},[166,4914],{"id":4915},"1975613069629006035",[166,4917],{"id":4918},"1976378723575398799",[166,4920],{"id":4921},"1975672073684222194",[28,4923,1028],{"id":171},[16,4925,178,4926,184],{},[23,4927,183],{"href":181,"rel":4928},[101],[16,4930,187,4931,191,4933,4935],{},[189,4932],{},[189,4934],{},[23,4936,198],{"href":196,"rel":4937},[101],{"title":200,"searchDepth":201,"depth":201,"links":4939},[4940,4941,4942],{"id":4836,"depth":201,"text":4837},{"id":4874,"depth":201,"text":4124},{"id":171,"depth":201,"text":1028},{"_id":4944,"path":4945,"title":4946,"description":4947,"meta":4948,"body":4951},"newsletter\u002Fnewsletter\u002F2025\u002F07\u002F21\u002Ffrom-vacation-brain-to-workflow-gains.md","\u002Fnewsletter\u002F2025\u002F07\u002F21\u002Ffrom-vacation-brain-to-workflow-gains","From Vacation Brain to Workflow Gains: Two AI Tools Worth Your Time","Happy Monday and welcome to another edition of the newsletter. I'm back after a nice vacation to Hilton Head with the family and feeling refreshed. I spent some time last week cleaning up Notion which is a tool that I use to track everything I do.",{"slug":4949,"date":4950},"from-vacation-brain-to-workflow-gains","2025-07-21",{"type":13,"value":4952,"toc":5070},[4953,4956,4974,4977,4981,4984,4991,4994,5000,5010,5013,5017,5020,5023,5026,5036,5039,5041,5044,5047,5050,5053,5055,5061],[16,4954,4955],{},"Happy Monday and welcome to another edition of the newsletter. I'm back after a nice vacation to Hilton Head with the family and feeling refreshed. I spent some time last week cleaning up Notion which is a tool that I use to track everything I do. What this means for you is that I have a good backlog of what videos I will be working on next and I published 2 videos last week that I will tell you more about in this newsletter.",[16,4957,4958,4959,529,4964,4969,4970,184],{},"Next up for me is going to be working on more videos and preparing for a bunch of talks over the next few months. In August I will be speaking at ",[23,4960,4963],{"href":4961,"rel":4962},"https:\u002F\u002Fwww.kcdc.info\u002F",[101],"KCDC",[23,4965,4968],{"href":4966,"rel":4967},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fus\u002Fspringone",[101],"SpringOne",". These are a couple of my favorite conferences to attend and speak at. KCDC brings a wide variety of sessions and some of my favorite BBQ. SpringOne at VMware Explore is our flagship conference and a great opportunity for me to connect with so many customers and developers from the community. As always if you want to find out where I will be speaking next you can check out ",[23,4971,4973],{"href":3515,"rel":4972},[101],"this page on my website",[16,4975,4976],{},"In this edition of the newsletter I will be focusing on the 2 new videos I published last week.",[28,4978,4980],{"id":4979},"from-chatbot-to-code-collaborator-why-claude-code-changed-my-development-workflow","From Chatbot to Code Collaborator: Why Claude Code Changed My Development Workflow",[16,4982,4983],{},"Forget everything you think you know about AI coding tools. Claude Code isn't another chatbot that spits out random snippets you'll spend hours debugging. It's an agentic command-line tool that actually understands your project context, respects your existing workflows, and builds complete applications without breaking your codebase.",[16,4985,4986,4987,4990],{},"To demonstrate Claude Code's capabilities, I walked through building a Spring Boot application that integrates with the JSON Placeholder service, implements caching, and follows production-ready patterns. What impressed me wasn't just the code quality—it was the intelligent planning mode that lets you iterate on architecture before writing a single line. Instead of immediately generating code, Claude Code helps you think through the implementation strategy, respects your coding guidelines (stored in a simple ",[469,4988,4989],{},"claude.md"," file), and even runs integration tests to verify everything works correctly.",[16,4992,4993],{},"The game-changer here is the sandboxed approach: Claude Code operates within your project directory, understanding your entire codebase structure while maintaining security boundaries. Combined with smart features like automatic branch management, cost-effective pricing through Pro plans ($20\u002Fmonth vs. expensive API usage), and seamless IDE integration, it feels like having an experienced pair programmer who never gets tired and always follows your team's conventions.",[16,4995,4996,4999],{},[161,4997,4998],{},"Key takeaway:"," Stop trying to replace your existing tools with AI—enhance them instead. Use start.spring.io to scaffold projects, then let Claude Code handle the implementation details while you focus on architecture and business logic.",[16,5001,5002,5005,5006,5009],{},[161,5003,5004],{},"Try this:"," Start with project exploration (",[469,5007,5008],{},"explain this project to me",") before writing any code. Use planning mode (Shift+Tab) to iterate on implementation strategies, and always work in branches for complex features.",[47,5011],{"id":5012},"-jYlp2oJh_o",[28,5014,5016],{"id":5015},"building-real-world-mcp-servers-my-beehiiv-newsletter-automation","Building Real-World MCP Servers: My Beehiiv Newsletter Automation",[16,5018,5019],{},"Last week I tackled a workflow problem that had been bugging me for months. I write my newsletters in Beehiiv because I love the editor, but getting that content onto my personal website required tedious manual conversion to very specific markdown formats. Every single time, I'd copy content, reformat images, convert YouTube embeds to my custom components, and handle Twitter embeds - it was eating up way too much time.",[16,5021,5022],{},"So I built something to fix it: a custom MCP server that connects to the Beehiiv API. Now I can simply tell Claude Desktop \"grab my latest draft and create the markdown file for my website,\" and it handles everything automatically. The MCP server provides tools for getting posts, publications, and subscriptions, while Claude does the heavy lifting of content transformation, spell checking, and file creation. What used to be a 30-minute manual process now takes seconds, and the result is exactly the markdown structure my Vue\u002FNuxt site needs.",[16,5024,5025],{},"This isn't just another \"hello world\" MCP tutorial - it's a real automation I use every week that saves me significant time. The video walks through the complete code, shows the Claude Desktop integration, and demonstrates the actual workflow in action.",[16,5027,5028,5035],{},[161,5029,5030],{},[23,5031,5034],{"href":5032,"rel":5033},"https:\u002F\u002Fyoutu.be\u002FbP9dhrI1wKA",[101],"Watch the full walkthrough here"," to see how I built this MCP server and get inspired for your own workflow automations. If you've been wondering about practical MCP applications beyond simple examples, this one's for you!",[47,5037],{"id":5038},"bP9dhrI1wKA",[28,5040,4229],{"id":384},[16,5042,5043],{},"I don't understand why this is happening.",[166,5045],{"id":5046},"1945874259814822110",[16,5048,5049],{},"Working on improving my video creation process so I began documenting it this week. Happy to share more on this if anyone is interested.",[166,5051],{"id":5052},"1945846240878506240",[28,5054,1028],{"id":171},[16,5056,178,5057,5060],{},[23,5058,183],{"href":181,"rel":5059},[101]," (I'm not calling it X).",[16,5062,187,5063,191,5065,5067],{},[189,5064],{},[189,5066],{},[23,5068,198],{"href":196,"rel":5069},[101],{"title":200,"searchDepth":201,"depth":201,"links":5071},[5072,5073,5074,5075],{"id":4979,"depth":201,"text":4980},{"id":5015,"depth":201,"text":5016},{"id":384,"depth":201,"text":4229},{"id":171,"depth":201,"text":1028},{"_id":5077,"path":5078,"title":5079,"description":5080,"meta":5081,"body":5084},"newsletter\u002Fnewsletter\u002F2025\u002F06\u002F30\u002Fai-for-java-developers-course.md","\u002Fnewsletter\u002F2025\u002F06\u002F30\u002Fai-for-java-developers-course","AI for Java Developers: From Zero to Production in 5.5 Hours","Happy Monday and welcome to another edition of the newsletter. It feels like yesterday that we entered the month of June and just like that June is almost over. We are full swing into summer and I'm loving every single part of it.",{"slug":5082,"date":5083},"ai-for-java-developers-course","2025-06-30T00:56:06.000Z",{"type":13,"value":5085,"toc":5422},[5086,5088,5091,5094,5097,5100,5104,5107,5110,5116,5122,5127,5141,5146,5160,5165,5182,5187,5201,5204,5210,5213,5216,5219,5222,5226,5234,5237,5245,5251,5254,5258,5260,5266,5272,5296,5300,5305,5311,5315,5335,5339,5345,5349,5355,5361,5365,5368,5373,5376,5384,5388,5391,5394,5397,5400,5403,5406,5408,5413],[16,5087,5080],{},[16,5089,5090],{},"This past weekend we had an opportunity to spend some time in the Columbus OH area for a wedding. I have never actually been to Dublin and I can say this is one of the most underrated cities in Ohio. Such a beautiful area with some really nice walkable areas for everyone.",[166,5092],{"id":5093},"1939648690622460006",[16,5095,5096],{},"Next week I'll be on a beach in my happy place on Hilton Head Island in South Carolina so I probably won't have any updates over the next couple of weeks. I think about you a lot and how lucky I am to be a part of this community and the opportunity I have to affect so many people. I hope you are having a great day. If you get a chance take a couple of minutes today try and think about what you are grateful for.",[16,5098,5099],{},"This week's newsletter is really exciting for me. I was able to wrap up and publish a course that has been a long time in the works. I'll also tell you about an MCP server I published and a conversation I had with Dan Dobrin on Spring Office Hours.",[28,5101,5103],{"id":5102},"ai-for-java-developers-course-is-now-live","AI for Java Developers Course is now Live",[16,5105,5106],{},"I'm happy to announce that my latest course is now available for FREE on YouTube. I took everything that I have learned over the last 12-18 months and poured it into one of my most comprehensive courses yet.",[16,5108,5109],{},"I'm often asked with all the momentum in the Python space for AI, what does this mean for Java developers. If you want to get into Machine Learning & Data Science, Python is a great language to learn. But if all you want to do is consume these Large Language Models, you would be hard pressed to find a better place to do this than Java. Java is the language of the enterprise and integration with AI is now a requirement.",[16,5111,5112,5115],{},[161,5113,5114],{},"Here's what makes this course different:"," Instead of just showing you how to make REST calls to OpenAI, you'll learn how to solve the real problems that emerge when building production AI applications. We dive deep into prompt engineering, tackle LLM limitations head-on, and explore the Swiss Army knife of solutions that Spring AI provides.",[16,5117,5118,5119],{},"🎯 ",[161,5120,5121],{},"What you'll learn:",[16,5123,5124],{},[161,5125,5126],{},"AI Foundations & Spring AI Mastery",[1271,5128,5129,5132,5135,5138],{},[1274,5130,5131],{},"AI fundamentals (ML, deep learning, LLMs) for Java developers",[1274,5133,5134],{},"Spring AI architecture and portable API design",[1274,5136,5137],{},"Prompt engineering techniques from basic to advanced",[1274,5139,5140],{},"Multimodal AI: text, image, and audio generation",[16,5142,5143],{},[161,5144,5145],{},"Overcoming LLM Limitations",[1271,5147,5148,5151,5154,5157],{},[1274,5149,5150],{},"Prompt guarding and stuffing strategies",[1274,5152,5153],{},"Retrieval Augmented Generation (RAG) with vector databases",[1274,5155,5156],{},"Function calling and tool integration",[1274,5158,5159],{},"Model Context Protocol (MCP) servers for reusable AI components",[16,5161,5162],{},[161,5163,5164],{},"Production-Ready Development",[1271,5166,5167,5170,5173,5176,5179],{},[1274,5168,5169],{},"Local vs cloud models (cost optimization & security)",[1274,5171,5172],{},"Open source models with Ollama and Docker",[1274,5174,5175],{},"Observability with Prometheus and Grafana dashboards",[1274,5177,5178],{},"Testing strategies for deterministic and non-deterministic AI responses",[1274,5180,5181],{},"Chat memory and conversation management",[16,5183,5184],{},[161,5185,5186],{},"Real-World Applications",[1271,5188,5189,5192,5195,5198],{},[1274,5190,5191],{},"Building intelligent REST APIs and streaming responses",[1274,5193,5194],{},"Structured output for type-safe AI responses",[1274,5196,5197],{},"Multiple model integration in single applications",[1274,5199,5200],{},"Enterprise security and deployment considerations",[16,5202,5203],{},"This isn't just theory. Every concept includes hands-on coding with Spring Boot, so you'll walk away with practical skills you can implement immediately in your Java applications.",[16,5205,5206,5209],{},[161,5207,5208],{},"The best part?"," You'll build everything using the Java and Spring tools you already know and love. No need to learn Python or become a data scientist. This course bridges the gap between traditional Java development and the AI revolution.",[16,5211,5212],{},"From zero to building intelligent apps in 5.5+ hours of hands-on content. This isn't just another AI course. It's your complete roadmap to becoming an AI-powered Java developer who can ship real applications that matter.",[16,5214,5215],{},"Ready to level up your career and join the AI revolution as a Java developer?",[16,5217,5218],{},"Watch the full course below 👇🏻",[47,5220],{"id":5221},"FzLABAppJfM",[28,5223,5225],{"id":5224},"beehiiv-mcp-server","Beehiiv MCP Server",[16,5227,5228,5229,184],{},"While I was putting the Spring AI course together I thought it would be a good opportunity to talk about a real life use case for an MCP server I built. This newsletter that you are reading right now is thanks to a wonderful platform called ",[23,5230,5233],{"href":5231,"rel":5232},"https:\u002F\u002Fwww.beehiiv.com?via=Dan-Vega",[101],"Beehiiv",[16,5235,5236],{},"I author my newsletter in Beehiiv, and then I publish it to my website. My website requires the content to be in Markdown but it also requires some special markdown blocks. I have images, YouTube embeds and Tweets all which require a specific format. In the past this was a very manual process. Now I use the Beehiiv MCP server to pull my latest newsletter, convert it to the specific markdown and then write the file and images in the correct location.",[16,5238,5239,5240,5244],{},"If you want to check out the source code for the MCP server you can find it ",[23,5241,742],{"href":5242,"rel":5243},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fbeehiiv-mcp-server",[101],". An interesting feature of this repo is the native images. Not everyone who wants to use this MCP server will have Java installed or know how to use it the JAR. I added a GitHub action that will publish native images for Windows, MacOS, and Linux.",[16,5246,5247],{},[74,5248],{"alt":5249,"src":5250},"MCP Server Architecture","\u002Fimages\u002Fnewsletter\u002F2025\u002F06\u002F30\u002Fbeehiiv-mcp-server.png",[16,5252,5253],{},"If you're a fellow Beehiiv author and find this useful feedback is welcome.",[28,5255,5257],{"id":5256},"spring-office-hours-s4e17-spring-ai-google-gemini-beyond-the-demo","Spring Office Hours S4E17: Spring AI & Google Gemini Beyond the Demo",[33,5259,4417],{"id":4416},[16,5261,5262,5265],{},[161,5263,5264],{},"Model Selection Philosophy",": Don't chase every new model release. Choose based on your specific use case - long context windows for document work, cost efficiency for high throughput, or performance for confined tasks.",[16,5267,5268,5271],{},[161,5269,5270],{},"Google's AI Ecosystem Simplified",":",[1271,5273,5274,5284,5290],{},[1274,5275,5276,5283],{},[161,5277,5278],{},[23,5279,5282],{"href":5280,"rel":5281},"https:\u002F\u002FGemini.Google.com",[101],"Gemini.Google.com",": Consumer chatbot",[1274,5285,5286,5289],{},[161,5287,5288],{},"AI Studio",": Developer playground with advanced controls",[1274,5291,5292,5295],{},[161,5293,5294],{},"Vertex AI",": Enterprise platform supporting Gemini + 10,000+ Hugging Face models",[33,5297,5299],{"id":5298},"major-technical-highlights","Major Technical Highlights",[5301,5302,5304],"h4",{"id":5303},"cost-optimization","Cost Optimization",[16,5306,1997,5307,5310],{},[161,5308,5309],{},"implicit context caching"," automatically reduces costs when reusing documents across queries. Gemini Flash costs just $0.10\u002F$0.40 per million tokens vs competitors at $75\u002F$150.",[5301,5312,5314],{"id":5313},"mcp-vs-a2a-standards","MCP vs A2A Standards",[1271,5316,5317,5323,5329],{},[1274,5318,5319,5322],{},[161,5320,5321],{},"MCP",": Connects agents to internal tools\u002FAPIs (great for controlled environments)",[1274,5324,5325,5328],{},[161,5326,5327],{},"A2A",": Enables secure agent-to-agent communication across organizations",[1274,5330,5331,5334],{},[161,5332,5333],{},"Big news",": Google donated A2A to Linux Foundation today, making it an open standard",[5301,5336,5338],{"id":5337},"enterprise-reality-check","Enterprise Reality Check",[16,5340,5341,5344],{},[161,5342,5343],{},"Java developers ARE AI developers."," No need to re-platform to Python. The new unified GenAI SDK provides GA Java support with Spring Boot integration and native image compatibility.",[33,5346,5348],{"id":5347},"whats-new","What's New",[16,5350,5351,5354],{},[161,5352,5353],{},"Agent Development Kit (ADK)",": Open-source Java framework for building multi-agent workflows with Spring Boot integration and visual debugging.",[16,5356,5357,5360],{},[161,5358,5359],{},"Serverless AI",": Deploy Gemma 3 on Cloud Run for pay-per-use pricing and sub-second startup times - perfect for private document processing without sharing data externally.",[33,5362,5364],{"id":5363},"bottom-line","Bottom Line",[16,5366,5367],{},"We're shifting from AI experimentation to production implementation. Java developers have everything needed to build robust, cost-effective AI applications today without abandoning existing infrastructure.",[16,5369,5370],{},[161,5371,5372],{},"Watch the full replay below for live demonstrations and deeper technical discussions.",[47,5374],{"id":5375},"x7df-U4qJe4",[16,5377,5378,5379,5383],{},"This week on ",[23,5380,93],{"href":5381,"rel":5382},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=A0H8i9qc_8M",[101]," I sit down with Craig Walls as we do a little AI show and tell and chat about Craig's upcoming book, Spring AI in Action.",[16,5385,5386],{},[161,5387,4229],{},[16,5389,5390],{},"I spent some time last week exploring the Spring AI codebase and attempting to add a new feature.",[166,5392],{"id":5393},"1938666620823425058",[16,5395,5396],{},"Google launched it's new Gemini CLI which is open source!",[166,5398],{"id":5399},"1937860467843625124",[16,5401,5402],{},"I have found myself using Claude Code more than any other tool out there and I really enjoyed this conversation between Riley and Micky.",[166,5404],{"id":5405},"1937698759644971276",[28,5407,1028],{"id":171},[16,5409,178,5410,184],{},[23,5411,183],{"href":181,"rel":5412},[101],[16,5414,187,5415,191,5417,5419],{},[189,5416],{},[189,5418],{},[23,5420,198],{"href":196,"rel":5421},[101],{"title":200,"searchDepth":201,"depth":201,"links":5423},[5424,5425,5426,5432],{"id":5102,"depth":201,"text":5103},{"id":5224,"depth":201,"text":5225},{"id":5256,"depth":201,"text":5257,"children":5427},[5428,5429,5430,5431],{"id":4416,"depth":206,"text":4417},{"id":5298,"depth":206,"text":5299},{"id":5347,"depth":206,"text":5348},{"id":5363,"depth":206,"text":5364},{"id":171,"depth":201,"text":1028},{"_id":5434,"path":5435,"title":5436,"description":5437,"meta":5438,"body":5441},"newsletter\u002Fnewsletter\u002F2025\u002F06\u002F16\u002Fspring-office-hours-to-spring-ai-mastery.md","\u002Fnewsletter\u002F2025\u002F06\u002F16\u002Fspring-office-hours-to-spring-ai-mastery","From Spring Office Hours to Spring AI Mastery","Happy Monday and welcome to another edition of the newsletter. I want to start by extending a belated Happy Father's Day to all the dads out there. For me, it was a day filled with both happiness and sadness. On one hand, becoming a dad has always been my dream, and I couldn't be more blessed with my two little girls who fill my heart daily. On the other hand, this was my first Father's Day without my dad, who passed away late last year. I'm grateful for the time we spent together and take comfort knowing we'll meet again someday. Love you, Dad.",{"slug":5439,"date":5440},"spring-office-hours-to-spring-ai-mastery","2025-06-16T12:00:00.000Z",{"type":13,"value":5442,"toc":5661},[5443,5445,5451,5454,5460,5463,5465,5470,5479,5483,5486,5489,5493,5502,5505,5509,5512,5515,5519,5522,5528,5531,5534,5537,5541,5544,5548,5606,5609,5612,5644,5647,5649,5652],[16,5444,5437],{},[16,5446,5447],{},[74,5448],{"alt":5449,"src":5450},"Happy Father's Day Message","\u002Fimages\u002Fnewsletter\u002F2025\u002F06\u002F16\u002Fhappy-father-s-day-message-with-a-touching-tribute.png",[16,5452,5453],{},"Last week, I spent time in Chicago with a customer. While it was a quick trip, it proved highly productive. I had the opportunity to deliver two presentations that were both well-received. I began by discussing what's new in Spring, recapping everything we've gained in the Spring Boot 3.x line. I focused on this because Spring Boot 3.3 just released in May and will be the last minor release in the 3.x line. After that, we explored what's coming in Spring Boot 3.4. I also presented on building intelligent applications in Java with Spring AI.",[16,5455,5456,5457,184],{},"Additionally, I participated in a Spring One Tour over two days, where I presented on Spring AI and Spring for GraphQL. I absolutely love discussing all the exciting projects in the Spring ecosystem, and it was a fantastic week. This concludes my travel schedule until KCDC in mid-August, and I'm looking forward to some downtime to catch up on various projects. After that conference, I have a packed schedule through October, so I'll spend part of my summer preparing for all the amazing trips ahead. As always, if you're curious about my upcoming speaking engagements, you can check out my ",[23,5458,3517],{"href":3515,"rel":5459},[101],[16,5461,5462],{},"In this edition of the newsletter, I want to update you on what we've been doing on Spring Office Hours. I also spent the better part of last week preparing my comprehensive Spring AI course, which I'll be releasing on YouTube soon.",[28,5464,93],{"id":92},[16,5466,5467],{},[74,5468],{"alt":93,"src":5469},"\u002Fimages\u002Fnewsletter\u002F2025\u002F06\u002F16\u002Fstreamyard-thumbnail_talking_heads.png",[16,5471,5472,5473,5478],{},"DaShaun and I have been having a lot of fun with Spring Office Hours. It's really hard to believe that we are halfway through season 4 already but here we are. We have been doing our best to bring you some really great guests and cover a wide variety of topics. If you're new to Spring Office Hours we (usually) live stream every Monday from 1-2 EDT. You can catch the replays on the ",[23,5474,5477],{"href":5475,"rel":5476},"https:\u002F\u002Fwww.youtube.com\u002F@SpringSourceDev",[101],"Spring Developer YouTube channel"," and we turn this into a podcast so you can listen to use wherever you get your podcasts. In case you have missed the last few episodes here is what we have been up to:",[33,5480,5482],{"id":5481},"s4e14-spring-ai-10-ga-release-with-mark-pollak-and-christian-tzolov","S4E14 - Spring AI 1.0 GA Release with Mark Pollak and Christian Tzolov",[16,5484,5485],{},"Join Dan Vega and DaShaun Carter as they celebrate a major milestone in the Spring ecosystem with the general availability release of Spring AI 1.0. In this episode, the hosts welcome Spring AI team members Mark Pollak and Christian Tzolov to discuss the incredible journey from conception to GA release. They'll explore the powerful features that make Spring AI the go-to framework for building AI-powered applications, dive into Model Context Protocol (MCP) capabilities, and share exciting insights about what's on the horizon for Spring AI. Whether you're new to AI development or a seasoned practitioner, this episode offers valuable perspectives on integrating AI into Spring applications and the future of enterprise AI development.",[47,5487],{"id":5488},"Lp8-baWZYos",[33,5490,5492],{"id":5491},"s4e15-exposing-the-interview-process-with-taylor-desseyn","S4E15 - Exposing the Interview Process with Taylor Desseyn",[16,5494,5495,5496,5501],{},"Join Dan Vega and DaShaun Carter as they welcome Taylor Desseyn, VP of Global Community at ",[23,5497,5500],{"href":5498,"rel":5499},"https:\u002F\u002Ftorc.dev",[101],"torc.dev"," and founder of Dads in Tech. Fresh from his presentation \"Exposing the Interview Process\" at Spring I\u002FO 2025 in Barcelona, Taylor shares unfiltered insights from interviewing thousands of engineers and helping hundreds of companies scale their engineering teams. The hosts dive deep into the current job market realities, interview best practices, and how developers can navigate today's challenging hiring landscape. Learn practical strategies to stand out in your job search and discover what's really happening behind the scenes in tech hiring.",[47,5503],{"id":5504},"z53y6ajYkRo",[33,5506,5508],{"id":5507},"s4e16-spring-grpc-with-dave-syer-and-chris-bono","S4E16 - Spring gRPC with Dave Syer and Chris Bono",[16,5510,5511],{},"Join Dan Vega and DaShaun Carter for the latest updates from the Spring Ecosystem. In this episode, Dan and DaShaun are joined by Spring team members Dave Syer and Chris Bono to explore the official Spring gRPC project. At the end of this episode, you will understand how Spring gRPC provides a Spring-friendly API for developing high-performance gRPC applications, including server and client autoconfiguration, Spring Boot integration, and streamlined Protocol Buffer handling. The hosts will demonstrate how to build gRPC services with Spring's familiar dependency injection patterns and discuss the benefits of gRPC's HTTP\u002F2-based communication over traditional REST APIs.",[47,5513],{"id":5514},"Klw1x6mtCSc",[33,5516,5518],{"id":5517},"spring-ai-course","Spring AI Course",[16,5520,5521],{},"Exciting news! I've been working hard behind the scenes on something special, and I wanted you to be the first to know about it.",[16,5523,5524,5525,184],{},"After a ton of prep work, I'm heading into the studio this week to record a brand-new, comprehensive YouTube course: ",[161,5526,5527],{},"AI for Java Developers: Building Intelligent Applications with Spring AI",[16,5529,5530],{},"The world of software is rapidly adopting Artificial Intelligence, and it's clear that building AI-powered apps is a critical new skill for Java developers. This course is my answer to that. It's designed specifically for the enterprise Java developer, skipping the deep ML theory to focus on practical, hands-on coding with the new Spring AI 1.0 framework.",[16,5532,5533],{},"As a subscriber to this newsletter, you'll get the exclusive first announcement the moment it goes live.",[16,5535,5536],{},"To give you a sneak peek at what's in store, here's the full agenda for the course.",[28,5538,5540],{"id":5539},"course-agenda-️","Course Agenda 🗺️",[16,5542,5543],{},"This course is packed with practical lessons to take you from the basics to advanced real-world applications.",[33,5545,5547],{"id":5546},"what-you-will-learn","What You Will Learn:",[1271,5549,5550,5556,5564,5570,5576,5590,5596],{},[1274,5551,5552,5555],{},[161,5553,5554],{},"AI Fundamentals for Developers:"," Get a quick introduction to the core concepts of AI, Machine Learning, Deep Learning, and LLMs, explained from a developer's point of view—no complex math required.",[1274,5557,5558,5561,5562,184],{},[161,5559,5560],{},"Getting Started with Spring AI:"," We'll walk through setting up your environment, getting API keys, and building your first application with Spring AI's ",[469,5563,572],{},[1274,5565,5566,5569],{},[161,5567,5568],{},"Mastering Prompt Engineering:"," Learn how to \"talk\" to AI models effectively. We'll cover everything from simple prompts to advanced techniques like few-shot prompting, chain-of-thought, and using XML tags for complex requests.",[1274,5571,5572,5575],{},[161,5573,5574],{},"Core Spring AI Features:"," Dive deep into the powerful features of Spring AI, including prompt templates, getting structured output (like JSON), and exploring multimodal capabilities with text, images, and audio.",[1274,5577,5578,5581,5582,5585,5586,5589],{},[161,5579,5580],{},"Solving LLM Limitations:"," Learn how to overcome common LLM challenges like stale data and hallucinations using powerful patterns like ",[161,5583,5584],{},"Retrieval Augmented Generation (RAG)"," to connect to your own documents and ",[161,5587,5588],{},"Tool Calling"," to integrate with external APIs.",[1274,5591,5592,5595],{},[161,5593,5594],{},"Proprietary vs. Open Source Models:"," Understand the landscape of AI models. We'll discuss how to choose the right one for your job and how to run open-source models locally using tools like Ollama.",[1274,5597,5598,5601,5602,5605],{},[161,5599,5600],{},"Observability & Evaluation:"," You'll learn how to monitor your AI applications to track costs and performance, and how to use Spring AI's ",[469,5603,5604],{},"Evaluator"," tools to test for factual accuracy and relevance.",[28,5607,5608],{"id":4416},"Key Takeaways 🏆",[16,5610,5611],{},"By the end of this course, you'll be able to:",[1271,5613,5614,5620,5626,5632,5638],{},[1274,5615,5616,5619],{},[161,5617,5618],{},"Build practical AI features"," into your Spring Boot applications.",[1274,5621,5622,5625],{},[161,5623,5624],{},"Connect LLMs to your own data"," using the RAG pattern.",[1274,5627,5628,5631],{},[161,5629,5630],{},"Create AI agents"," that can use external tools to perform actions.",[1274,5633,5634,5637],{},[161,5635,5636],{},"Confidently select, test, and monitor"," AI models for production use.",[1274,5639,5640,5643],{},[161,5641,5642],{},"Think like an AI engineer",", applying best practices to create reliable and intelligent systems.",[16,5645,5646],{},"I can't wait to get this course out to you. Keep an eye on your inbox for the official release announcement!",[28,5648,1028],{"id":171},[16,5650,5651],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any questions for me or topics you would like me to cover please feel free to reply to this email or reach out to me on Twitter (I'm not calling it X).",[16,5653,187,5654,191,5656,5658],{},[189,5655],{},[189,5657],{},[23,5659,198],{"href":196,"rel":5660},[101],{"title":200,"searchDepth":201,"depth":201,"links":5662},[5663,5669,5672,5673],{"id":92,"depth":201,"text":93,"children":5664},[5665,5666,5667,5668],{"id":5481,"depth":206,"text":5482},{"id":5491,"depth":206,"text":5492},{"id":5507,"depth":206,"text":5508},{"id":5517,"depth":206,"text":5518},{"id":5539,"depth":201,"text":5540,"children":5670},[5671],{"id":5546,"depth":206,"text":5547},{"id":4416,"depth":201,"text":5608},{"id":171,"depth":201,"text":1028},{"_id":5675,"path":5676,"title":5677,"description":5678,"meta":5679,"body":5682},"newsletter\u002Fnewsletter\u002F2025\u002F06\u002F02\u002Fspring-ai-course-preview.md","\u002Fnewsletter\u002F2025\u002F06\u002F02\u002Fspring-ai-course-preview","Spring AI Course, MCP Security and my talk from Spring I\u002FO","Happy Monday and welcome to another edition of the newsletter. I'm happy to announce that I have finished the last chapter in my book, The Fundamentals of Software Engineering. The last chapter was on AI, a subject I really love talking about. The real challenge with this chapter was not putting an entire book into a chapter and focusing on what software developers need to know and answering the question I keep getting asked which is \"Will AI replace me?\"",{"slug":5680,"date":5681},"spring-ai-course-preview","2025-06-02T12:00:00.000Z",{"type":13,"value":5683,"toc":5884},[5684,5691,5694,5699,5705,5709,5718,5721,5726,5758,5764,5770,5775,5782,5786,5795,5798,5801,5807,5813,5830,5835,5849,5855,5858,5861,5865,5868,5871,5873,5875],[16,5685,5686,5687,5690],{},"Happy Monday and welcome to another edition of the newsletter. I'm happy to announce that I have finished the last chapter in my book, ",[23,5688,736],{"href":3456,"rel":5689},[101],". The last chapter was on AI, a subject I really love talking about. The real challenge with this chapter was not putting an entire book into a chapter and focusing on what software developers need to know and answering the question I keep getting asked which is \"Will AI replace me?\"",[16,5692,5693],{},"This doesn't mean that it is finished and ready to go to print, but it's a huge milestone to say the least. We still have a lot of edits to go through and a couple of start-to-finish reads to make sure everything is flowing correctly, but we are really happy with where it is. In fact, our editor sent along this message which made me smile and made me so happy because I have poured so much of my knowledge and experience into this book.",[2238,5695,5696],{},[16,5697,5698],{},"I've completed a beginning-to-end review of the book so far. I have to say...I wish I had this book when I graduated from college.",[16,5700,5701,5702,3518],{},"Other than that, travel is ramping down for me which is really exciting because I get to focus on a few things that I have on my plate. I have a quick customer visit in Chicago next week and other than that I don't have anything planned until KCDC and SpringOne in August. After that, travel is going to ramp up in the fall because for whatever reason I have been accepted to a bunch of events that I'm excited about. As always, if you want to find out where I will be speaking next you can check out the ",[23,5703,3517],{"href":3515,"rel":5704},[101],[28,5706,5708],{"id":5707},"master-spring-ai-build-intelligent-java-applications","Master Spring AI: Build Intelligent Java Applications",[16,5710,5711,5712,5717],{},"I have really enjoyed traveling to customers and conferences and talking about AI over the last year. I love talking about everything that has been happening in this rapidly evolving space. One of the topics I have really enjoyed talking about is Spring AI. This new project in the Spring ecosystem has been in the works for almost 2 years now and recently ",[23,5713,5716],{"href":5714,"rel":5715},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F05\u002F20\u002Fspring-ai-1-0-GA-released",[101],"Spring AI 1.0 GA"," was released.",[16,5719,5720],{},"I have released a ton of content around Spring AI on my YouTube channel but there is a need for an update because of everything that has happened in the framework over the last year or so. With that I'm happy to announce that I'm recording a new masterclass on everything you need to know to get up and running with 1.0. I will be recording the videos this week and hope to release it soon. The only decision I have left is should I release it as one long course or break it up into multiple videos. If you have any feedback on this or what you would like to see in this course let me know.",[16,5722,5723],{},[161,5724,5725],{},"What You'll Learn:",[1271,5727,5728,5734,5740,5746,5752],{},[1274,5729,5730,5733],{},[161,5731,5732],{},"AI Essentials for Java Developers"," - Understand LLMs, prompt engineering techniques, and how to choose the right model for your needs",[1274,5735,5736,5739],{},[161,5737,5738],{},"Spring AI Deep Dive"," - Go beyond simple API calls to leverage Spring AI's powerful features including streaming responses, structured outputs, and multimodal capabilities (images, audio)",[1274,5741,5742,5745],{},[161,5743,5744],{},"Real-World Implementation"," - Work with both proprietary (OpenAI, Anthropic) and open-source models using Ollama and Docker",[1274,5747,5748,5751],{},[161,5749,5750],{},"Advanced Techniques"," - Master Retrieval Augmented Generation (RAG), build custom tools and functions, and explore the Model Context Protocol (MCP) for cross-language tool sharing",[1274,5753,5754,5757],{},[161,5755,5756],{},"Production Best Practices"," - Handle memory management, implement proper testing strategies for non-deterministic outputs, and understand pricing\u002Ftoken optimization",[16,5759,5760,5763],{},[161,5761,5762],{},"Who This Is For:"," Java developers who want to integrate AI capabilities into their applications without switching languages or frameworks. No prior AI experience required - we'll cover everything from \"What is AI?\" to building sophisticated AI-powered features.",[16,5765,5766,5769],{},[161,5767,5768],{},"Key Takeaway:"," Spring AI is more than just a wrapper for LLM APIs - it's a complete framework that brings the full power of modern AI to the Java ecosystem. By the end of this course, you'll be confidently building intelligent applications that leverage the latest in generative AI technology.",[16,5771,5772],{},[734,5773,5774],{},"Get hands-on with practical examples, real-world tools integration, and production-ready code you can immediately apply to your projects.",[16,5776,5777,5778,184],{},"If you want to get your hands on this new course which will be made available for free on YouTube pay attention to this newsletter and make sure you're ",[23,5779,5781],{"href":4869,"rel":5780},[101],"subscribed to my channel",[28,5783,5785],{"id":5784},"securing-spring-ai-mcp-servers-with-oauth-2","Securing Spring AI MCP Servers with OAuth 2",[16,5787,5788,5789,5794],{},"You can't go anywhere on the internet right now without seeing a video or reading an article about Model Context Protocol (MCP). I keep reading about security vulnerabilities in MCP servers and it is something we need to think about. I decided to record a video over on the Spring Developer YouTube channel last week based on an ",[23,5790,5793],{"href":5791,"rel":5792},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F05\u002F19\u002Fspring-ai-mcp-client-oauth2",[101],"article"," from my friend and colleague Daniel Garnier-Moiroux on securing MCP servers with OAuth 2 and Spring Security.",[16,5796,5797],{},"In this video, I walk through how to lock down your Spring AI Model Context Protocol (MCP) servers using OAuth 2 authentication. With developers rushing to build MCP servers, security is often overlooked—but exposing these endpoints without proper authentication is asking for trouble.",[33,5799,5800],{"id":4416},"Key Takeaways:",[16,5802,5803,5806],{},[161,5804,5805],{},"The Problem",": MCP servers are just like REST APIs. If you're exposing tools or data you don't want public, you need proper security measures in place.",[16,5808,5809,5812],{},[161,5810,5811],{},"The Solution",": Using Spring Security with OAuth 2, you can quickly add authentication to your MCP servers. The tutorial demonstrates:",[1271,5814,5815,5818,5824,5827],{},[1274,5816,5817],{},"Adding Spring Authorization Server and Resource Server dependencies",[1274,5819,5820,5821],{},"Configuring OAuth 2 client credentials in ",[469,5822,5823],{},"application.properties",[1274,5825,5826],{},"Setting up a basic security configuration that requires authentication for all requests",[1274,5828,5829],{},"Testing with curl commands and the MCP Inspector tool",[16,5831,5832,5271],{},[161,5833,5834],{},"What's Covered",[1271,5836,5837,5840,5843,5846],{},[1274,5838,5839],{},"Converting an unsecured weather MCP server to require OAuth 2 tokens",[1274,5841,5842],{},"Using client credentials grant for machine-to-machine authentication",[1274,5844,5845],{},"Testing secured endpoints with bearer tokens",[1274,5847,5848],{},"Configuring CORS for browser-based testing tools",[16,5850,5851,5854],{},[161,5852,5853],{},"Next Steps",": The article mentions future enhancements like implementing authorization code flow for user authentication and role-based access control (RBAC) for fine-grained permissions.",[16,5856,5857],{},"This is based on an excellent article by Daniel Garnier-Moiroux on the Spring blog. If you're building MCP servers in 2025, implementing proper security isn't optional—it's essential.",[47,5859],{"id":5860},"gBUnLYFwwyE",[28,5862,5864],{"id":5863},"code-smarter-not-harder-at-spring-io","Code Smarter, Not Harder at Spring I\u002FO",[16,5866,5867],{},"A couple of weeks ago I had the privilege of attending and speaking at one of my favorite conferences, Spring I\u002FO. One of the talks I gave was on some of my AI powered dev hacks I use in my day-to-day workflows. You are probably using some of these already but my hope with this talk is to share what I'm doing and hopefully you learn 1 or 2 things that you can incorporate into your daily workflows. You can find the recording below and as always I would love your feedback.",[47,5869],{"id":5870},"koYCcvPvaY0",[28,5872,1028],{"id":171},[16,5874,5651],{},[16,5876,187,5877,191,5879,5881],{},[189,5878],{},[189,5880],{},[23,5882,198],{"href":196,"rel":5883},[101],{"title":200,"searchDepth":201,"depth":201,"links":5885},[5886,5887,5890,5891],{"id":5707,"depth":201,"text":5708},{"id":5784,"depth":201,"text":5785,"children":5888},[5889],{"id":4416,"depth":206,"text":5800},{"id":5863,"depth":201,"text":5864},{"id":171,"depth":201,"text":1028},{"_id":5893,"path":5894,"title":5895,"description":5896,"meta":5897,"body":5900},"newsletter\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fspring-io-2025-recap.md","\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fspring-io-2025-recap","Spring I\u002FO 2025 Recap, Spring Boot 3.5 and Spring AI hits 1.0 GA","Happy Monday and welcome to another edition of the newsletter. Last week I had the pleasure of making a trip over to Europe to visit Amsterdam and Barcelona. I'm very grateful that my position allows me to visit some of the most amazing places in the world and talk about the things I'm genuinely passionate about.",{"slug":5898,"date":5899},"spring-io-2025-recap","2025-05-27T00:00:00.000Z",{"type":13,"value":5901,"toc":6065},[5902,5904,5907,5910,5913,5923,5926,5929,5932,5935,5938,5942,5945,5951,5954,5957,5960,5963,5967,5970,5973,5983,5986,5990,5993,6003,6006,6012,6016,6022,6025,6028,6036,6040,6043,6046,6049,6052,6054,6056],[16,5903,5896],{},[16,5905,5906],{},"It was a long week but I made so many wonderful memories and it was well worth it. My trip started out in Amsterdam where I was able to visit with a customer of ours and give 2 presentations. I was able to start off with a what's new in Spring talk where I took a look back at all the cool things we got in the Spring Boot 3.x line. This is because Spring Boot 3.5 was released last week and this will be the last minor release in the 3.x line. While I was away DaShaun hosted a special Spring Office Hours with Phil Webb to talk about everything in Spring Boot 3.5.",[47,5908],{"id":5909},"4fHPTERqtEA",[16,5911,5912],{},"Next up I gave a nice introduction to Spring AI. This talk went really well and I got a lot of really great questions about the project. I think I mention this every time I talk about AI but I really love geeking out over it. This was my first time in Amsterdam and while my trip was short it was definitely a good one. I was really tired after only getting about 4.5 hours of interrupted sleep on the plane but I couldn't pass up this chance to see the city. I was able to head into Amsterdam and check out the city and have a nice dinner with coworkers. I hope I get the opportunity to come back one day and explore the city more.",[16,5914,5915,5919],{},[74,5916],{"alt":5917,"src":5918},"Amsterdam Photo 1","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Famsterdam-1.jpeg",[74,5920],{"alt":5921,"src":5922},"Amsterdam Photo 2","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Famsterdam-2.jpeg",[16,5924,5925],{},"In this edition of the newsletter I want to tell you about my trip to Barcelona for my 2nd Spring I\u002FO, and I'll also talk about the release of Spring AI 1.0.",[28,5927,5928],{"id":5898},"Spring I\u002FO 2025 Recap",[16,5930,5931],{},"As I mentioned this was my 2nd trip to the great city of Barcelona Spain for the best Spring Conference on the planet, Spring I\u002FO. Because of my trip to Amsterdam I was able to get into Barcelona Wednesday afternoon rested and ready to go. I headed to the speaker dinner that night and as always that did not disappoint. The food and drinks were amazing but the conversations were the best part as always. I had a really great conversation with the great Taylor Desseyn. He has a content creator that travels with him and until that night I didn't realize that this is what I need in my life. I had a great conversation with them about creating content on the road and the different gear and tools involved to make this happen.",[166,5933],{"id":5934},"1925260125045940489",[16,5936,5937],{},"I didn't stay long because I had a long first day at Spring I\u002FO and I wanted to make sure I got a good night sleep.",[33,5939,5941],{"id":5940},"spring-io-keynote","Spring I\u002FO Keynote",[16,5943,5944],{},"I woke up early on Thursday morning because I had to be there a little bit before the crowd got in because I was going to be in the keynote. I work for the Tanzu Division at Broadcom and we are a major sponsor of Spring I\u002FO. Because of that I got to go up on stage and say something nice about the great company that allows me to do what I love every day. I had to memorize a 2 minute speech that were backed by 6 slides.",[16,5946,5947],{},[74,5948],{"alt":5949,"src":5950},"Dan Vega Keynote","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fkeynote.png",[16,5952,5953],{},"I thought I did a pretty good job even with being a little nervous having to memorize a script. For me, I would much rather give a 4 hour workshop than have to memorize a 2-minute script. I didn't get any pictures of me on stage during the keynote so if you happen to have gotten any please send them over.",[16,5955,5956],{},"After I was done the keynote was ready to get started. The great Juergen Hoeller led us off by talking about all the new and exciting features coming in Spring Framework 7 and Spring Boot 4. As always I thought he did an amazing job of giving us a glimpse into what is coming next.",[16,5958,5959],{},"There were a bunch of really great presentations after that but I won't spoil them for you. If you haven't had a chance to check out the keynote it has already been posted to the Spring I\u002FO channel. Big kudos to everyone involved in the keynote 👏🏻",[47,5961],{"id":5962},"oUK1Np4OvnM",[33,5964,5966],{"id":5965},"code-smarter-not-harder","Code Smarter, Not Harder",[16,5968,5969],{},"After the keynote I went to the speaker lounge to get everything ready for my talk because I was in the 2nd slot today. My talk was titled \"Code Smarter, Not Harder. AI Powered Dev Hacks for all\". I really enjoy giving this talk where I get to share some of the workflows I use AI for every day. Chances are you probably know about a lot of them but if I can introduce you to 1 or 2 new things I have done my job.",[16,5971,5972],{},"First off I saw the registrations for my talk and I was like this can't be right. Sure enough I got into my room and there was standing room only. We even had a bunch of folks sitting on the ground in the front. I was blown away by the interest and support. I thought the talk went really well and based on the questions and comments I received throughout the conference, so did you ☺️",[16,5974,5975,5979],{},[74,5976],{"alt":5977,"src":5978},"Standing Room Only","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fstanding-room-only.jpeg",[74,5980],{"alt":5981,"src":5982},"Full Room","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Ffull-room.jpeg",[16,5984,5985],{},"This talk was recorded and will eventually be posted online. When it does I will let you know as long as you are subscribed here or on Twitter.",[33,5987,5989],{"id":5988},"spring-ai-workshop-day-1","Spring AI Workshop Day 1",[16,5991,5992],{},"After my talk I had a quick lunch break and a chance to prep for the Spring AI workshop. Mark Pollack was running this workshop and asked myself and another colleague if we wanted to help out. I jumped at the opportunity and Mark was nice enough to let me run point on it from the beginning. I have been doing similar workshops on an introduction to Spring AI for the last year so I had plenty of material to share with the group. I thought we brought the right level of introduction for this workshop and attendees were able to get up and running and write their own Spring AI applications within the first hour.",[16,5994,5995,5999],{},[74,5996],{"alt":5997,"src":5998},"Workshop Photo 1","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fworkshop-1.jpeg",[74,6000],{"alt":6001,"src":6002},"Workshop Photo 2","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fworkshop-2.jpeg",[16,6004,6005],{},"I want to just say a big thank you to Sergi Almar and all the volunteers at Spring I\u002FO. Thank you for including me in such a wonderful conference and congrats on running such an amazing event. In the closing ceremony Sergi let us know that the current venue they have been at for the last 10 years or so was getting demolished to make room for a new one. That meant they had to find a new venue for next year. Thankfully Sergi was able to secure one and Spring I\u002FO will be back in 2026 🥳",[16,6007,6008],{},[74,6009],{"alt":6010,"src":6011},"Spring I\u002FO Group Photo","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fsave-the-date.png",[28,6013,6015],{"id":6014},"spring-ai-10-goes-ga","Spring AI 1.0 Goes GA",[16,6017,6018],{},[74,6019],{"alt":6020,"src":6021},"Spring AI Logo","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F27\u002Fspring-ai-logo.png",[16,6023,6024],{},"Spring AI dominated conversations at Spring I\u002FO this year, and for good reason. After navigating 2+ years of development against the rapidly evolving AI landscape, Spring AI 1.0 finally reached general availability last week. The team deliberately took their time, not just because AI is a moving target, but because they wanted to nail the foundational architecture before committing to API stability. That patience paid off with a rock-solid 1.0 release that won't introduce breaking changes as the ecosystem matures.",[16,6026,6027],{},"This isn't just another framework release. It's a comprehensive platform that transforms how we integrate AI into enterprise applications. Spring AI's \"Augmented LLM\" approach goes far beyond simple request-response interactions, offering support for 20 different AI models from Anthropic to ZhiPu through a portable ChatClient API that handles multi-modal inputs and structured JSON responses. What makes this release special is the production-ready feature set: vector store abstractions supporting 20 databases, a lightweight ETL pipeline for data ingestion, sophisticated RAG implementations, and conversational memory management with JDBC, Cassandra, and Neo4j support. A feature I really love is the Advisor API, an interceptor chain that lets you modify prompts dynamically by injecting retrieved data and conversation history, essentially turning your AI interactions into intelligent, context-aware conversations. Plus, with built-in observability through Micrometer, you can finally monitor model latency, token usage, and costs in production environments where \"hope and good vibes\" aren't sufficient monitoring strategies.",[16,6029,6030,6031,6035],{},"If you want to learn more you can check out this ",[23,6032,6034],{"href":5714,"rel":6033},[101],"blog post",". I'm also working on a comprehensive tutorial for YouTube that will teach you everything you need to know to get up and running with Spring AI. I should have more on this the next time you hear from me on this newsletter.",[16,6037,6038],{},[161,6039,4229],{},[16,6041,6042],{},"I'm a big fan of Claude Code, and now you can use it directly in the terminal in IntelliJ with some extra features that we didn't have before.",[166,6044],{"id":6045},"1926590686373007576",[16,6047,6048],{},"Speaking of Claude and Anthropic, they released 2 new models last week.",[166,6050],{"id":6051},"1925593896329019640",[28,6053,1028],{"id":171},[16,6055,5651],{},[16,6057,187,6058,191,6060,6062],{},[189,6059],{},[189,6061],{},[23,6063,198],{"href":196,"rel":6064},[101],{"title":200,"searchDepth":201,"depth":201,"links":6066},[6067,6072,6073],{"id":5898,"depth":201,"text":5928,"children":6068},[6069,6070,6071],{"id":5940,"depth":206,"text":5941},{"id":5965,"depth":206,"text":5966},{"id":5988,"depth":206,"text":5989},{"id":6014,"depth":201,"text":6015},{"id":171,"depth":201,"text":1028},{"_id":6075,"path":6076,"title":6077,"description":6078,"meta":6079,"body":6082},"newsletter\u002Fnewsletter\u002F2025\u002F05\u002F12\u002Fspring-forward-ai-milestones-barcelona-bound-and-cloud-evolution.md","\u002Fnewsletter\u002F2025\u002F05\u002F12\u002Fspring-forward-ai-milestones-barcelona-bound-and-cloud-evolution","Spring Forward: AI Milestones, Barcelona Bound, and Cloud Evolution","Happy Monday and welcome to another edition of the newsletter. You know that feeling when everything in your tech world suddenly aligns? That's my week. Just back from Charleston's charming King Street where I witnessed firsthand how Tanzu Platform is transforming deployments (\"Here's my code, run it for me\" - music to a developer's ears!), I'm already packing for Barcelona and Spring I\u002FO 2025.",{"slug":6080,"date":6081},"spring-forward-ai-milestones-barcelona-bound-and-cloud-evolution","2025-05-12T00:00:00.000Z",{"type":13,"value":6083,"toc":6241},[6084,6086,6089,6092,6096,6099,6107,6110,6114,6117,6120,6123,6126,6129,6133,6142,6145,6149,6152,6156,6162,6168,6194,6200,6206,6209,6212,6215,6219,6222,6225,6227,6232],[16,6085,6078],{},[16,6087,6088],{},"With Spring AI hitting its final milestone before 1.0, Spring Cloud 2025 shaping the future of distributed systems, and AI-powered development becoming our daily reality, we're living through one of the most exciting transformations in the Java ecosystem. Whether you're curious about S3 configuration support, Spring Framework 7's upcoming API versioning, or how to actually use AI to code smarter (not harder), I've got you covered this week.",[16,6090,6091],{},"Plus, did you catch that OpenAI-Windsurf acquisition news? Three billion reasons why the AI development landscape just got more interesting. Let's dive in!",[28,6093,6095],{"id":6094},"southern-hospitality-meets-spring-technology","Southern Hospitality Meets Spring Technology",[16,6097,6098],{},"Last week I had a quick trip to Charleston, SC to visit a customer. I have had the pleasure of visiting the great state of South Carolina before, in fact my family and I love visiting Hilton Head and are planning to head there this summer. I have never had the opportunity until now to visit Charleston and I have to say for the 2 days I was there it was a wonderful place to visit. I arrived on Sunday and stayed down on King Street which is a really cool area lined with shopping and restaurants. The streets were packed on Sunday with everyone dressed in their Southern Sunday best and I really enjoyed it there.",[16,6100,6101,6102,184],{},"The customer visit went great where I had the opportunity to give 2 talks. The first was on the current state of Spring. With Spring 3.5 coming later this month, and the last minor release in the 3.x line it was an opportunity to reflect on all of the wonderful features Spring Boot 3.x has given us. I also had the chance to take a look at what's coming in Spring Boot 4 and Spring Framework 7 later this year. While this session wasn't recorded I did give a similar talk at Microsoft's JDConf last month and you can find a recording of that ",[23,6103,6106],{"href":6104,"rel":6105},"https:\u002F\u002Fyoutu.be\u002FuwjwBUsnVhY",[101],"video here",[16,6108,6109],{},"I also gave an introduction to Spring AI which was a lot of fun. This customer, like most I get to talk to these days is heavily invested in AI and I can't wait to see what they do with Spring AI. This customer was also a huge user of Tanzu Platform and I loved hearing how much they love the cf push experience. Here is my code, run it for me. They kept telling us how they couldn't imagine deployments without it.",[28,6111,6113],{"id":6112},"spring-io-2025","Spring I\u002FO 2025",[16,6115,6116],{},"Next week I'm heading to Europe for a week and I'm really looking forward to this trip. I'm stopping in Amsterdam for a day for a customer visit and then I'm off to the great city of Barcelona for Spring I\u002FO 2025. On Monday May 12 at 10 AM EDT I will be interviewing the great Sergi Almar, the man behind the conference. If you miss the livestream you can always catch the replay or listen to it wherever you get your podcasts.",[47,6118],{"id":6119},"kxYMqcC0HV4",[16,6121,6122],{},"Last year was my first time at Spring I\u002FO and as a Spring Developer I was in awe of the conference. Usually when I go to conferences I can seek out my fellow Java \u002F Spring developers but there they are everywhere. The conference is packed with amazing content and the hallway tracks are filled with great conversations.",[16,6124,6125],{},"I will be giving a talk titled \"Code Smarter, Not Harder: AI-Powered Dev Hacks for All\". In this talk you'll discover how to harness AI-powered tools for everyday tasks like code generation, documentation writing, and collaborative programming with AI assistants. Through practical demonstrations, we'll show how to integrate these technologies seamlessly into your development routine, no matter which programming language or development environment you use.",[16,6127,6128],{},"I will also have a small part on the mainstage prior to the keynote. If you're going to be at the conference I would really love to meetup at chat. I'm taking all of my camera equipment and I'm going to try and record a bunch of content while I'm there.",[28,6130,6132],{"id":6131},"spring-ai-m8","Spring AI M8",[16,6134,6135,6136,6141],{},"Last week ",[23,6137,6140],{"href":6138,"rel":6139},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F04\u002F30\u002Fspring-ai-1-0-0-m8-released",[101],"Spring AI 1.0.0 M8"," was released and this will now be the final milestone release before the release candidate and GA release later this month. While M7 was going to the final milestone the team realized that instead of introducing a breaking change in the release candidate it would be better to get this into M8.",[16,6143,6144],{},"There is going to be a bunch of exciting talks, blog posts and videos coming out around the release of Spring AI which is nearly 2 years in the making. This project is amazing and I'm so excited for to hit 1.0. I'm working on a full course that will teach you everything you need to know to get up and running with Spring AI and my plan is to release that the week after Spring I\u002FO. I'm doing this so I can record all of the videos using the brand new 1.0 release.",[28,6146,6148],{"id":6147},"spring-cloud-2025-new-features-future-direction","Spring Cloud 2025: New Features & Future Direction",[16,6150,6151],{},"I caught up with Spring Cloud veterans Ryan Baxter and Spencer Gibb to discuss what's new in the upcoming 2025.0 release and where the project is heading.",[33,6153,6155],{"id":6154},"key-highlights","Key Highlights",[16,6157,6158,6161],{},[161,6159,6160],{},"Spring Cloud Explained Simply",": Spencer shared a perfect mental model - Spring Boot handles single processes, Spring Cloud manages multiple processes. It's the abstraction layer for distributed systems, letting you choose between Eureka\u002FConsul for service discovery or Git\u002FS3\u002FVault for configuration without vendor lock-in.",[16,6163,6164,6167],{},[161,6165,6166],{},"Major Features in 2025.0 RC1"," (GA release targeted for May):",[1271,6169,6170,6176,6182,6188],{},[1274,6171,6172,6175],{},[161,6173,6174],{},"S3 Configuration Support",": Store config directly in AWS S3 buckets",[1274,6177,6178,6181],{},[161,6179,6180],{},"Composite Configurations",": Pull from multiple sources (Git, S3, config maps) through a single config server",[1274,6183,6184,6187],{},[161,6185,6186],{},"Gateway Gets Messaging",": Route HTTP requests directly to message brokers via Spring Cloud Stream\u002FFunction integration",[1274,6189,6190,6193],{},[161,6191,6192],{},"Clearer Gateway Naming",": Four distinct variants now clearly named (Server WebFlux\u002FMVC, Proxy Exchange WebFlux\u002FMVC)",[16,6195,6196,6199],{},[161,6197,6198],{},"Spring Framework 7 Prep",": The new API versioning features coming in Framework 7 will integrate seamlessly with Gateway for version-based routing and load balancing.",[16,6201,6202,6205],{},[161,6203,6204],{},"Community Feedback Needed",": With a small team, the Spring Cloud team relies heavily on community input. They specifically want feedback on the new gateway messaging features and configuration repository preferences.",[16,6207,6208],{},"This marks the first time Spring Cloud will have two release trains in one year - preparing for the major changes coming with Spring Framework 7 and Boot 4 in November while delivering important features now.",[16,6210,6211],{},"Watch the full replay below for technical details, live Q&A, and deeper insights into Spring Cloud's evolution.",[47,6213],{"id":6214},"xQTke50Nvcc",[16,6216,6217],{},[161,6218,4229],{},[16,6220,6221],{},"I teased this last week but it was made official. OpenAI is acquiring Windsurf for 3 billion",[166,6223],{"id":6224},"1919735284133962063",[28,6226,1028],{"id":171},[16,6228,178,6229,5060],{},[23,6230,183],{"href":181,"rel":6231},[101],[16,6233,187,6234,191,6236,6238],{},[189,6235],{},[189,6237],{},[23,6239,198],{"href":196,"rel":6240},[101],{"title":200,"searchDepth":201,"depth":201,"links":6242},[6243,6244,6245,6246,6249],{"id":6094,"depth":201,"text":6095},{"id":6112,"depth":201,"text":6113},{"id":6131,"depth":201,"text":6132},{"id":6147,"depth":201,"text":6148,"children":6247},[6248],{"id":6154,"depth":206,"text":6155},{"id":171,"depth":201,"text":1028},{"_id":6251,"path":6252,"title":6253,"description":6254,"meta":6255,"body":6258},"newsletter\u002Fnewsletter\u002F2025\u002F05\u002F05\u002Fspring-boot-3-last-dance.md","\u002Fnewsletter\u002F2025\u002F05\u002F05\u002Fspring-boot-3-last-dance","The Last Dance of Spring Boot 3.x: Windsurf AI, Testcontainers, and a Keynote Announcement","Happy Monday and welcome to another edition of the newsletter. I'm writing this on a Sunday as I'm in the airport heading out to Charleston, SC to visit a customer. One of the many perks of my job is that i get to travel to conferences and customers all around the world. Customers offer an opportunity to get in the room with the developers using various projects in the Spring ecosystem.",{"slug":6256,"date":6257},"spring-boot-3-last-dance","2025-05-05T00:00:00.000Z",{"type":13,"value":6259,"toc":6558},[6260,6262,6265,6271,6284,6287,6291,6294,6297,6300,6332,6335,6338,6341,6344,6348,6351,6353,6358,6373,6378,6392,6397,6431,6435,6438,6449,6453,6456,6459,6463,6493,6496,6499,6503,6506,6509,6513,6522,6525,6530,6533,6537,6540,6544,6549],[16,6261,6254],{},[16,6263,6264],{},"One off the presentations I'm giving tomorrow is a \"State of Spring\" where we will talk about where we are and where we are heading. It's hard to believe that Spring Boot 3.0 was released in November of 2022. I bring this up because later this month Spring Boot 3.5 will be released and this will be the last release in the 3.x as we prepare for Spring Boot 4.0 in November.",[16,6266,6267],{},[74,6268],{"alt":6269,"src":6270},"Spring Boot Release Timeline","\u002Fimages\u002Fnewsletter\u002F2025\u002F05\u002F05\u002Fspringboot3.png",[16,6272,6273,6274,6277,6278,6283],{},"I also had some time to think about a lot of my favorite features in the 3.x line and decided to submit a talk about it for ",[23,6275,4968],{"href":4966,"rel":6276},[101],". I ended up submitting ",[23,6279,6282],{"href":6280,"rel":6281},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fabstracts\u002Fblob\u002Fmain\u002Fspring-one-2025.md",[101],"8 different talks"," on a variety of subjects so fingers 🤞🏻 crossed that one of them get selected.",[16,6285,6286],{},"There are a lot of really great AI powered tools for developers on the market today. In today's edition of the newsletter I will continue my exploration of them by introducing you to Windsurf. I also want to share a conversation I had with Eddú Meléndez over at Docker on Testcontainers and Docker Model Runner. Finally, I'll share a presentation I did at JavaOne and some big conference news!",[28,6288,6290],{"id":6289},"windsurf-the-agentic-code-editor","Windsurf: The Agentic Code Editor",[16,6292,6293],{},"Last week I mentioned my video on JetBrains Junie, and this week I'm continuing my AI Coding Agents series with a first look at Windsurf. In this video, I explore what makes Windsurf stand out in the crowded AI coding tools market.",[16,6295,6296],{},"Windsurf represents the latest evolution in AI-assisted development - what I call \"agentic AI IDE environments.\" Unlike traditional chatbots (ChatGPT, Claude) or inline IDE assistants (GitHub Copilot, JetBrains AI), Windsurf acts as a proactive coding partner that can manage multi-step tasks autonomously. It's like having a smart junior developer who takes initiative, suggests refactoring, and coordinates changes across your codebase.",[16,6298,6299],{},"In the video, I demonstrate building a Spring Boot CRUD REST API that connects to the JSONPlaceholder service. Here are the highlights:",[1271,6301,6302,6308,6314,6320,6326],{},[1274,6303,6304,6307],{},[161,6305,6306],{},"Fast and Responsive",": Windsurf is noticeably quick at making edits and changes compared to other tools",[1274,6309,6310,6313],{},[161,6311,6312],{},"Model Flexibility",": You can choose between different AI models (GPT-4.0, Claude, etc.) based on your needs",[1274,6315,6316,6319],{},[161,6317,6318],{},"Customizable Rules",": The ability to set global and workspace rules to match your coding style is a game-changer. For example, I prefer Java records over classes for immutability",[1274,6321,6322,6325],{},[161,6323,6324],{},"Contextual Understanding",": Windsurf understands your entire project context, making it excellent for established codebases",[1274,6327,6328,6331],{},[161,6329,6330],{},"Memory Feature",": It learns from your preferences over time, becoming more aligned with your coding style",[16,6333,6334],{},"The demo includes implementing caching with Spring's built-in cache abstraction and shows how Windsurf handles complex tasks like refactoring from RestTemplate to RestClient.",[16,6336,6337],{},"There's also exciting news that OpenAI might be acquiring Windsurf for around $3 billion, which could signal big changes ahead for this tool. If you're a Visual Studio Code user looking for a powerful AI coding assistant, Windsurf is definitely worth checking out. Remember, though - you're the pilot, not the passenger. Use these tools to enhance your productivity while maintaining control of your code.",[16,6339,6340],{},"You can watch the full video below and use my referral link in the description if you'd like to try Windsurf yourself.",[47,6342],{"id":6343},"XkRM4eO885I",[28,6345,6347],{"id":6346},"spring-office-hours-testcontainers-and-docker-with-eddú-meléndez","Spring Office Hours- Testcontainers and Docker with Eddú Meléndez",[16,6349,6350],{},"Last week on Spring Office Hours, we had the pleasure of interviewing Eddu Melendez, a Software Engineer at Docker who joined through the Atomic Jar acquisition. We dove deep into Testcontainers, Docker Model Runner, and how these tools are revolutionizing both testing and AI development.",[33,6352,5800],{"id":4416},[16,6354,6355],{},[161,6356,6357],{},"Test Containers Evolution",[1271,6359,6360,6363,6370],{},[1274,6361,6362],{},"Test containers started as a solution for managing containers programmatically in tests",[1274,6364,6365,6366,6369],{},"Now integrated seamlessly with Spring Boot 3.1+ using the ",[469,6367,6368],{},"@ServiceConnection"," annotation (no more manual configuration!)",[1274,6371,6372],{},"Can be used for both testing AND local development with Spring Boot's test run feature",[16,6374,6375],{},[161,6376,6377],{},"Docker Model Runner",[1271,6379,6380,6383,6386,6389],{},[1274,6381,6382],{},"Docker's new feature for running AI models locally",[1274,6384,6385],{},"Provides an OpenAI-compatible API, making it easy to integrate with Spring AI",[1274,6387,6388],{},"Available on macOS (Apple Silicon) and now Windows with NVIDIA GPUs",[1274,6390,6391],{},"Supports tool calling for models that have this capability",[16,6393,6394],{},[161,6395,6396],{},"Key Features Discussed:",[3943,6398,6399,6405,6415,6421],{},[1274,6400,6401,6404],{},[161,6402,6403],{},"Dev-time Test Containers",": You can now use the same test container configuration for both testing and local development, eliminating the need to maintain separate Docker Compose files",[1274,6406,6407,6410,6411,6414],{},[161,6408,6409],{},"New Elasticsearch SSL Support",": Spring Boot 3.5 introduces an ",[469,6412,6413],{},"@SSL"," annotation specifically for secure Elasticsearch connections",[1274,6416,6417,6420],{},[161,6418,6419],{},"Docker Model Runner Integration",": Test containers now has built-in support for Docker Model Runner, simplifying AI model testing with just one line of code",[1274,6422,6423,6426,6427,6430],{},[161,6424,6425],{},"Docker Compose Updates",": New ",[469,6428,6429],{},"provider"," type in Docker Compose for AI models, making it easier to share AI-powered applications",[33,6432,6434],{"id":6433},"practical-example","Practical Example",[16,6436,6437],{},"Eddu demonstrated how to evaluate AI models using test containers:",[1271,6439,6440,6443,6446],{},[1274,6441,6442],{},"Use Docker Model Runner container in your tests",[1274,6444,6445],{},"Automatically configure Spring AI to use local models",[1274,6447,6448],{},"Run evaluations and sentiment analysis tests against your models",[33,6450,6452],{"id":6451},"notable-quotes","Notable Quotes",[16,6454,6455],{},"When I asked about using microservices as test containers, Eddu wisely noted: \"We don't advocate for that very often... because the microservice B depends on other services, maybe a database, maybe Kafka... it could be really heavy for your machine.\"",[16,6457,6458],{},"On the Java ecosystem: \"I feel really lucky because we have a great ecosystem, really good tools, build tools, a great framework, testing frameworks as well.\"",[33,6460,6462],{"id":6461},"resources","Resources",[1271,6464,6465,6472,6479,6486],{},[1274,6466,6467],{},[23,6468,6471],{"href":6469,"rel":6470},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F01\u002F23\u002Fspring-ai-with-docker",[101],"Spring AI and Docker Model Runner Article",[1274,6473,6474],{},[23,6475,6478],{"href":6476,"rel":6477},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fai",[101],"Docker Hub AI Models",[1274,6480,6481],{},[23,6482,6485],{"href":6483,"rel":6484},"https:\u002F\u002Fjava.testcontainers.org\u002F",[101],"Test Containers for Java",[1274,6487,6488],{},[23,6489,6492],{"href":6490,"rel":6491},"https:\u002F\u002Fdocs.docker.com\u002Fmodel-runner\u002F",[101],"Docker Model Runner in Docker Desktop 4.40+",[16,6494,6495],{},"You can watch the full episode here:",[47,6497],{"id":6498},"p3NfPM1SKLg",[28,6500,6502],{"id":6501},"javaone-2025","JavaOne 2025",[16,6504,6505],{},"I was lucky to attend and speak at my first JavaOne Conference back in March. Just last week the recording of my presentation was posted on their YouTube channel. If you want to learn more about frontend development as a Java development please consider checking it out.",[47,6507],{"id":6508},"CLgWfNnsDiM",[28,6510,6512],{"id":6511},"dev2next-2025","dev2Next 2025",[16,6514,6515,6516,6521],{},"I am beyond excited to announce that I will be attending and speaking at ",[23,6517,6520],{"href":6518,"rel":6519},"https:\u002F\u002Fwww.dev2next.com\u002F",[101],"dev2next"," this year. I was lucky to have 4 submissions accepted to this conference including the keynote. That's right, alongside my good friend Nate Schutta I will be giving a keynote talk at the conference. Nate and I have a book coming out titled \"The Fundamentals of Software Engineering\".",[16,6523,6524],{},"I hear a lot of people saying that with AI taking over software development the fundamentals no longer matter. Nate and I have a much different perspective on this and think the fundamentals are more important than ever. Here is the title and the abstract for the keynote and we hope to see you in Colorado Springs in the fall.",[16,6526,6527],{},[161,6528,6529],{},"Fundamentals of Software Engineering In the age of AI",[16,6531,6532],{},"Agentic coding assistants and editor based AI chat interfaces are altering the development workflow leading some to proclaim the end of software engineering. Is it time to explore other careers? Not so fast, the rumors of our demise are greatly exaggerated! While these tools can boost productivity, to be used effectively, developers still need to master the fundamentals of the software craft. Modern software development demands more than just coding proficiency—it requires navigating an increasingly AI-augmented landscape.",[16,6534,6535],{},[161,6536,4229],{},[166,6538],{"id":6539},"1917744566008176914",[16,6541,6542],{},[161,6543,1028],{},[16,6545,178,6546,5060],{},[23,6547,183],{"href":181,"rel":6548},[101],[16,6550,187,6551,191,6553,6555],{},[189,6552],{},[189,6554],{},[23,6556,198],{"href":196,"rel":6557},[101],{"title":200,"searchDepth":201,"depth":201,"links":6559},[6560,6561,6567,6568],{"id":6289,"depth":201,"text":6290},{"id":6346,"depth":201,"text":6347,"children":6562},[6563,6564,6565,6566],{"id":4416,"depth":206,"text":5800},{"id":6433,"depth":206,"text":6434},{"id":6451,"depth":206,"text":6452},{"id":6461,"depth":206,"text":6462},{"id":6501,"depth":201,"text":6502},{"id":6511,"depth":201,"text":6512},{"_id":6570,"path":6571,"title":6572,"description":6573,"meta":6574,"body":6577},"newsletter\u002Fnewsletter\u002F2025\u002F04\u002F27\u002Fjetbrains-junie-goes-public.md","\u002Fnewsletter\u002F2025\u002F04\u002F27\u002Fjetbrains-junie-goes-public","JetBrains Junie goes public, Building MCP Servers in Java & Presentation Recordings","Happy Monday and welcome to another edition of the newsletter. It's hard to believe that we will flip the calendars to May later this week, but I am all for it. The weather is starting to turn the corner, and I am able to get outside and enjoy the sunshine. I don't know about you, but I work from my basement and I feel like I have been \"locked up\" for the winter, and it's definitely done a number on me mentally.",{"slug":6575,"date":6576},"jetbrains-junie-goes-public","2025-04-27T00:00:00.000Z",{"type":13,"value":6578,"toc":6772},[6579,6581,6584,6590,6597,6600,6603,6612,6615,6619,6622,6625,6634,6637,6641,6644,6648,6651,6654,6660,6666,6672,6678,6684,6687,6690,6693,6697,6700,6703,6706,6709,6735,6738,6741,6744,6748,6751,6754,6758,6763],[16,6580,6573],{},[16,6582,6583],{},"I missed last week's newsletter because I have been swamped trying to get caught up on the book that I'm writing. It's been a lot of hard work, and we are nearing the production finish line, not the actual finish line but a huge milestone nonetheless. The plan if for this book to be released early fall if everything comes together and I couldn't be more excited about it. I don't think I have shared this with anyone yet, but we have a color copy of what will be the cover of our book.",[16,6585,6586],{},[74,6587],{"alt":6588,"src":6589},"Fundamentals of Spring 6 book cover","\u002Fimages\u002Fnewsletter\u002F2025\u002F04\u002F27\u002FFOSE_cover.png",[16,6591,6592,6593,6596],{},"If you're on the ",[23,6594,3458],{"href":4697,"rel":6595},[101]," you can get early access to the book right now!",[16,6598,6599],{},"This week I want to tell you about a couple of videos I made on JetBrains Junie and Building an MCP server with pure Java. I also gave some presentations over the last 2 weeks and I want to share those with you.",[28,6601,6602],{"id":6575},"JetBrains Junie goes Public",[16,6604,6605,6606,6611],{},"Last week, JetBrains released their AI coding agent \"",[23,6607,6610],{"href":6608,"rel":6609},"https:\u002F\u002Fwww.jetbrains.com\u002Fjunie\u002F",[101],"Junie","\" to the public by removing it from early access. I decided to sit down and create an introduction to Junie for Java\u002FSpring developers by going through a couple of quick examples. First I took a look at how you can use the chat feature to learn more about working with existing codebases. Next I had it create me CRUD REST API in Spring and asked it to do retrieve data from a public API. After a pretty decent application I showed off how you can create a guidelines doc to help guide the AI agent to your coding standards and specifications. Overall I thought this was a pretty good tutorial and I hope you enjoy it.",[47,6613],{"id":6614},"fcbSG8lm7So",[28,6616,6618],{"id":6617},"building-a-lightweight-mcp-server-with-pure-java-sdk","Building a Lightweight MCP Server with Pure Java SDK",[16,6620,6621],{},"In this week's tutorial, I show you how to implement a Model Context Protocol (MCP) server using only the core Java SDK — no Spring Framework required! This streamlined approach gives you more flexibility with lighter dependencies for projects where Spring isn't necessary.",[16,6623,6624],{},"The video walks through the complete process: setting up core MCP Java dependencies, implementing a server using standard Java SDK, working with STDIO transport implementations, and testing with the MCP Inspector tool. I build a simple service that provides JavaOne presentations data to demonstrate how easily you can create custom tools that LLMs like Claude can access. Perfect for developers who want to understand the fundamentals of MCP server implementation without framework overhead.",[16,6626,6627,6628,6633],{},"If you've been following my MCP series, this tutorial expands your toolkit with a more flexible, lightweight alternative. Check out the complete walkthrough below and grab the source code from our ",[23,6629,6632],{"href":6630,"rel":6631},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fjavaone-mcp",[101],"GitHub repository","!",[47,6635],{"id":6636},"Y_Rk6QgWUbE",[28,6638,6640],{"id":6639},"presentation-recordings","Presentation Recordings",[16,6642,6643],{},"I gave a couple of presentations over the last 2 weeks, and they happen to have been recorded. Thanks to both of these groups for inviting me to speak. If you would like me to speak at your meetup group or conference please feel free to reach out to me.",[33,6645,6647],{"id":6646},"ai-powered-developer-hacks-work-smarter-not-harder","AI-Powered Developer Hacks: Work Smarter, Not Harder",[16,6649,6650],{},"In my recent JetBrains livestream presentation, I shared practical ways developers can leverage AI tools to enhance productivity without replacing core skills. While many worry AI will replace developers, I firmly believe that \"developers who use AI will replace those who don't\" - finding the right balance is key to staying competitive.",[16,6652,6653],{},"I demonstrated how AI can transform everyday development workflows through several powerful applications:",[16,6655,6656,6659],{},[161,6657,6658],{},"Effective Prompting Strategies",": I showed how structured, detailed prompts with clear context yield dramatically better results than vague requests. Using voice dictation for complex prompts can also save significant time compared to typing lengthy instructions.",[16,6661,6662,6665],{},[161,6663,6664],{},"Learning Acceleration",": AI excels as a learning companion, helping both junior developers break down complex concepts and senior developers explore architectural patterns or emerging technologies. Creating personalized learning paths for new technologies has become one of my favorite applications.",[16,6667,6668,6671],{},[161,6669,6670],{},"Code Comprehension",": With developers spending roughly 10x more time reading code than writing it, AI can dramatically improve onboarding to unfamiliar codebases by explaining design patterns, identifying dependencies, and suggesting refactoring opportunities.",[16,6673,6674,6677],{},[161,6675,6676],{},"Documentation & Technical Writing",": AI significantly streamlines creating class documentation, API endpoint descriptions, and README files - mundane but essential tasks that often get neglected.",[16,6679,6680,6683],{},[161,6681,6682],{},"Custom Tool Building",": I demonstrated how AI enables building developer tools that would previously require significant learning investment, sharing how I created a Raycast extension for Spring Boot project initialization despite limited React experience.",[16,6685,6686],{},"The presentation concluded with guidance on running AI models locally for security-sensitive work and how to effectively guide AI coding assistants with personalized guidelines files - showing how Junie can adapt to team coding conventions when properly instructed.",[16,6688,6689],{},"Remember - you are the pilot, not the passenger. Use AI to enhance your capabilities while maintaining critical oversight and understanding of the code it produces.",[47,6691],{"id":6692},"85tXw0uUN04",[33,6694,6696],{"id":6695},"building-intelligent-applications-with-spring-ai","Building Intelligent Applications with Spring AI",[16,6698,6699],{},"In my recent session for Huawei's AI Echoes series, I demonstrated how Java developers can leverage Spring AI to build intelligent applications without needing to switch to Python. This powerful framework provides a consistent abstraction layer for working with various AI providers.",[16,6701,6702],{},"I walked through several key capabilities of Spring AI, demonstrating with working code samples:",[16,6704,6705],{},"First, I showed how easily a Spring Boot app can connect to large language models using a simple REST controller and the ChatClient interface. With just a few lines of configuration for your chosen AI provider (OpenAI in our example), you can start making chat completions or stream responses back to users.",[16,6707,6708],{},"The framework excels at making complex AI patterns accessible, including:",[1271,6710,6711,6717,6723,6729],{},[1274,6712,6713,6716],{},[161,6714,6715],{},"Structured Output:"," Rather than receiving unstructured text, Spring AI can map responses directly to Java types, making integration with your domain model seamless.",[1274,6718,6719,6722],{},[161,6720,6721],{},"Multi-modal Support:"," Beyond text, I demonstrated sending images to the LLM and receiving detailed descriptions in return.",[1274,6724,6725,6728],{},[161,6726,6727],{},"Memory Management:"," Adding conversation memory through the ChatMemoryAdvisor makes it trivial to maintain context across stateless HTTP requests.",[1274,6730,6731,6734],{},[161,6732,6733],{},"Tool Integration:"," The @Tool annotation lets you extend AI capabilities by connecting to external systems like databases, APIs, or even simple utilities like getting the current date.",[16,6736,6737],{},"Version 1.0.0-M7 is the last milestone release, with GA expected in May before Spring I\u002FO Barcelona. If you're building enterprise applications and need to incorporate AI capabilities, Spring AI provides a familiar, flexible approach that leverages your existing Java expertise.",[16,6739,6740],{},"The full code examples are available in my Spring AI workshop repository on GitHub.",[47,6742],{"id":6743},"omn3SrDSPJg",[16,6745,6746],{},[161,6747,4229],{},[166,6749],{"id":6750},"1913226370982740262",[166,6752],{"id":6753},"1912593645926244787",[16,6755,6756],{},[161,6757,1028],{},[16,6759,178,6760,5060],{},[23,6761,183],{"href":181,"rel":6762},[101],[16,6764,187,6765,191,6767,6769],{},[189,6766],{},[189,6768],{},[23,6770,198],{"href":196,"rel":6771},[101],{"title":200,"searchDepth":201,"depth":201,"links":6773},[6774,6775,6776],{"id":6575,"depth":201,"text":6602},{"id":6617,"depth":201,"text":6618},{"id":6639,"depth":201,"text":6640,"children":6777},[6778,6779],{"id":6646,"depth":206,"text":6647},{"id":6695,"depth":206,"text":6696},{"_id":6781,"path":6782,"title":6783,"description":6784,"meta":6785,"body":6788},"newsletter\u002Fnewsletter\u002F2025\u002F04\u002F14\u002Fspring-ai-m7.md","\u002Fnewsletter\u002F2025\u002F04\u002F14\u002Fspring-ai-m7","Spring AI's Final Countdown: Virtual Threads, AWS Integration & Developer Productivity","Happy Monday and welcome to another edition of the newsletter! Last week, I tackled an RSS feed issue through good old-fashioned debugging rather than defaulting to AI. After a few minutes of investigation, I discovered that my feed plugin had a default limit on the number of posts to include. With a quick configuration update, the feed was back in business. I've also added a feed link to the blog home page for those who weren't aware of this option.",{"slug":6786,"date":6787},"spring-ai-m7","2025-04-14T00:00:00.000Z",{"type":13,"value":6789,"toc":7006},[6790,6799,6802,6806,6814,6817,6820,6823,6828,6832,6835,6838,6841,6844,6847,6850,6855,6858,6861,6869,6872,6875,6879,6893,6897,6903,6906,6920,6923,6928,6957,6960,6966,6970,6973,6976,6979,6982,6985,6988,6992,6997],[16,6791,6792,6793,6798],{},"Happy Monday and welcome to another edition of the newsletter! Last week, I tackled an RSS feed issue through good old-fashioned debugging rather than defaulting to AI. After a few minutes of investigation, I discovered that my feed plugin had a default limit on the number of posts to include. With a quick configuration update, the feed was back in business. I've also added a feed link to the ",[23,6794,6797],{"href":6795,"rel":6796},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F",[101],"blog home page"," for those who weren't aware of this option.",[16,6800,6801],{},"This week is packed with exciting developments you won't want to miss. I'm thrilled to share critical news about Spring AI's final milestone release before GA, with significant enhancements for local model deployment. I've created a fresh video demonstrating JDK 24's breakthrough Virtual Threads without Pinning feature that dramatically improves application performance. I'll recap our latest Spring Office Hours episode featuring James Ward from AWS discussing MCP-based agents. Additionally, I'll share highlights from my recent AI for Java Developers talk at Microsoft's JDConf 2025, and announce my upcoming live stream with IntelliJ where I'll show you AI-powered productivity hacks for developers of all skill levels. Let's dive in!",[28,6803,6805],{"id":6804},"final-countdown-spring-ai-100-m7-marks-last-milestone-before-ga","Final Countdown: Spring AI 1.0.0-M7 Marks Last Milestone Before GA",[16,6807,6808,6809,6813],{},"Spring AI has reached a critical inflection point with the release of version 1.0.0-M7, officially ",[23,6810,3018],{"href":6811,"rel":6812},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F04\u002F10\u002Fspring-ai-1-0-0-m7-released",[101]," on April 10th. This milestone marks the final pre-release before the project moves to Release Candidate status next month, followed quickly by General Availability in time for the Spring I\u002FO conference in Barcelona in May. For teams building AI-powered applications with Spring, now is the perfect time to begin migration planning.",[16,6815,6816],{},"The M7 release introduces significant enhancements focused on local model deployment and improved architecture. Docker Desktop 4.40's Model Runner integration provides a seamless OpenAI-compatible API for local model execution, particularly beneficial for Apple Silicon users who can now run models locally without sending data to external services. Additionally, the release incorporates the latest Model Context Protocol (MCP) reference implementation Java SDK version 0.9.0, featuring session-based architecture and exchange-based interactions that improve handling of multiple concurrent client connections.",[16,6818,6819],{},"Developers should note that the release includes breaking changes to artifact IDs and package structures. Vector store starters have been renamed from spring-ai-{store}-store-spring-boot-starter to spring-ai-starter-vector-store-{store}, while MCP starters have changed from spring-ai-mcp-{type}-spring-boot-starter to spring-ai-starter-mcp-{type}. The Spring AI auto-configuration has also evolved from a monolithic artifact to individual auto-configuration artifacts per model, vector store, and other components—a change designed to minimize dependency conflicts.",[16,6821,6822],{},"If you're developing with Spring AI, I highly recommend upgrading to this milestone release now to ensure a smooth transition to the upcoming GA version. The comprehensive documentation provides detailed migration guidance, and getting ahead of these architectural changes will position your projects for success with the stable 1.0 release next month.",[16,6824,6825],{},[734,6826,6827],{},"What are you building with Spring AI? Share your projects and experiences in our community forums—we'd love to feature innovative implementations in an upcoming issue!",[28,6829,6831],{"id":6830},"spring-office-hours-recap-running-mcp-based-agents-on-aws","Spring Office Hours Recap: Running MCP-based Agents on AWS",[16,6833,6834],{},"In our latest episode of Spring Office Hours, my co-host Deshawn Carter and I welcomed James Ward, Principal Developer Advocate at AWS, to discuss the exciting world of Model Context Protocol (MCP) and its implementation on AWS.",[16,6836,6837],{},"James shared how MCP is transforming backend development by making AI integration more accessible to Java developers like us. I was particularly impressed by how Spring AI dramatically simplifies what would require thousands of lines of Python code into just 20 lines of Java. We explored AWS Bedrock service for model inference, including Amazon's Nova models and how they support tool calls essential for MCP integration.",[16,6839,6840],{},"Our conversation covered architectural considerations for deploying MCP servers on AWS using container services like ECS, and James highlighted current protocol limitations with server-sent events and the upcoming streamable HTTP protocol that will enable serverless implementations. I found his insights on how MCP enables dynamic workflows particularly valuable - where LLMs can determine which data sources to query based on natural language prompts, eliminating the need for static dashboards.",[16,6842,6843],{},"If you're a Java developer looking to integrate AI capabilities into your enterprise applications using familiar Spring tools and AWS infrastructure, I highly recommend watching the full episode.",[16,6845,6846],{},"Watch the replay here",[47,6848],{"id":6849},"U5JDfNvusP0",[6851,6852,6854],"h1",{"id":6853},"virtual-threads-without-pinning-in-jdk-24-performance-breakthrough","Virtual Threads Without Pinning in JDK 24: Performance Breakthrough",[16,6856,6857],{},"JDK 24 introduces a significant enhancement to virtual threads that eliminates the \"pinning\" problem that previously limited their scalability. In your demonstration, you showcase how virtual threads in JDK 21 would get pinned to carrier threads when entering synchronized blocks, causing severe performance bottlenecks. With synchronized blocks in JDK 24, virtual threads can now yield their carrier thread during blocking operations, dramatically improving throughput. Your examples show impressive performance gains: execution time dropping from 32 seconds to just 0.46 seconds in a pure Java example, and from 21 seconds to 2.3 seconds in a Spring application under high load.",[16,6859,6860],{},"This improvement is particularly valuable for applications with legacy code relying on synchronized constructs and those performing frequent blocking operations like database access or service calls. The restaurant analogy effectively illustrates how JDK 24 allows \"waiters\" (carrier threads) to serve multiple \"customers\" (tasks) efficiently instead of being tied to a single customer during waiting periods.",[16,6862,6863,6864],{},"Read the full blog post: ",[23,6865,6868],{"href":6866,"rel":6867},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fjdk-24-virtual-threads-without-pinning",[101],"JDK 24 Virtual Threads Without Pinning",[16,6870,6871],{},"Watch the video:",[47,6873],{"id":6874},"V4gsffMge7E",[28,6876,6878],{"id":6877},"microsoft-jdconf-2025","Microsoft JDConf 2025",[16,6880,6881,6882,6887,6888,184],{},"I was honored to be a part of Microsoft's ",[23,6883,6886],{"href":6884,"rel":6885},"https:\u002F\u002Fjdconf.com\u002F",[101],"Java Developer Conference"," last week. I gave a talk on AI for Java Developers and packed a lot of information into a 30 minute session. Thank you to Microsoft for allowing me to present and a huge thank you to everyone that attended my session. If you want to catch the replay of all the sessions you can check out ",[23,6889,6892],{"href":6890,"rel":6891},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLmsFUfdnGr3w0fHizYfyBY7E0r97LULRZ",[101],"this playlist",[6851,6894,6896],{"id":6895},"code-smarter-not-harder-ai-powered-dev-hacks-for-all","\"Code Smarter, Not Harder: AI-Powered Dev Hacks for All\"",[16,6898,6899],{},[74,6900],{"alt":6901,"src":6902},"IntelliJ Livestream","\u002Fimages\u002Fnewsletter\u002F2025\u002F04\u002F14\u002Fintellij_livestream.png",[16,6904,6905],{},"This practical presentation will demonstrate how AI tools can enhance developer productivity across various aspects of software development. The session will feature real-world examples and live demonstrations showing how AI can improve your workflow through:",[1271,6907,6908,6911,6914,6917],{},[1274,6909,6910],{},"Code completion and bug detection",[1274,6912,6913],{},"Automated refactoring and test generation",[1274,6915,6916],{},"Documentation writing and code generation",[1274,6918,6919],{},"Collaborative programming with AI assistants",[16,6921,6922],{},"The presentation is designed to be accessible for developers of all skill levels and will provide concrete strategies for integrating AI tools into your development routine, regardless of your preferred programming language or environment.",[16,6924,6925],{},[161,6926,6927],{},"Event Details:",[1271,6929,6930,6936,6942,6948],{},[1274,6931,6932,6935],{},[161,6933,6934],{},"When:"," April 17, 2025",[1274,6937,6938,6941],{},[161,6939,6940],{},"Platform:"," IntelliJ Livestream",[1274,6943,6944,6947],{},[161,6945,6946],{},"Registration:"," Free",[1274,6949,6950,1195,6953],{},[161,6951,6952],{},"Registration Link:",[23,6954,6955],{"href":6955,"rel":6956},"https:\u002F\u002Finfo.jetbrains.com\u002Fidea-livestream-april17-2025.html",[101],[16,6958,6959],{},"If you're looking to enhance your coding efficiency with AI-powered tools, this presentation should provide valuable insights and practical techniques you can implement immediately.",[16,6961,6962,6963,3518],{},"As always if you want to find out when and where I will be speaking next you can check out the ",[23,6964,3517],{"href":3515,"rel":6965},[101],[16,6967,6968],{},[161,6969,4229],{},[16,6971,6972],{},"I'm heading back to KCDC!",[166,6974],{"id":6975},"1911743914781950282",[16,6977,6978],{},"SpringOne at VMware Explore is taking place in Las Vegas later this year!",[166,6980],{"id":6981},"1910038229887184974",[16,6983,6984],{},"Really excited to share this video I worked on for Spring AI",[166,6986],{"id":6987},"1909998057963274388",[16,6989,6990],{},[161,6991,1028],{},[16,6993,178,6994,5060],{},[23,6995,183],{"href":181,"rel":6996},[101],[16,6998,187,6999,191,7001,7003],{},[189,7000],{},[189,7002],{},[23,7004,198],{"href":196,"rel":7005},[101],{"title":200,"searchDepth":201,"depth":201,"links":7007},[7008,7009,7010],{"id":6804,"depth":201,"text":6805},{"id":6830,"depth":201,"text":6831},{"id":6877,"depth":201,"text":6878},{"_id":7012,"path":7013,"title":7014,"description":7015,"meta":7016,"body":7019},"newsletter\u002Fnewsletter\u002F2025\u002F04\u002F07\u002Flocal-ai-power.md","\u002Fnewsletter\u002F2025\u002F04\u002F07\u002Flocal-ai-power","Local AI Power: Docker's Model Runner, MCP Revolution, and My JDConf Sessions","Happy Monday and welcome to another edition of The Beehive! This week is particularly exciting as I'll be speaking at Microsoft's JDConf 2025 with two sessions – one live for our night owl friends in the Asia-Pacific region, and another on-demand covering the latest Spring innovations.",{"slug":7017,"date":7018},"local-ai-power","2025-04-06T00:00:00.000Z",{"type":13,"value":7020,"toc":7157},[7021,7023,7026,7029,7033,7036,7039,7042,7045,7049,7058,7061,7064,7067,7070,7073,7076,7089,7093,7101,7105,7118,7121,7124,7132,7135,7138,7141,7144,7146,7148],[16,7022,7015],{},[16,7024,7025],{},"If you've been looking to break free from cloud AI dependencies, you're in luck. Last week's video demonstration of Docker Desktop's new Model Runner feature shows how to run powerful AI models like Google's Gemma 3 completely locally – zero API keys, zero data sharing, and zero monthly fees. Plus, I dive into the Model Context Protocol (MCP) that's revolutionizing how AI systems access external tools (think of it as the USB-C standardization of AI integrations).",[16,7027,7028],{},"As always, I've packed this newsletter with practical insights, code examples, and upcoming events to help you stay at the cutting edge of Java and AI development. Let's dive in!",[28,7030,7032],{"id":7031},"run-ai-models-locally-docker-desktops-game-changing-model-runner-feature","Run AI Models Locally: Docker Desktop's Game-Changing Model Runner Feature",[16,7034,7035],{},"Tired of cloud API dependencies for your AI applications? In last week's video, I demonstrate Docker Desktop's powerful new Model Runner feature that lets you run AI models completely locally on your machine. I show you how to run Google's Gemma 3 open-source model with zero API keys, zero data sharing, and zero monthly fees—all while maintaining impressive performance on Apple Silicon.",[16,7037,7038],{},"The video provides a step-by-step walkthrough of configuring Docker Desktop's Model Runner, pulling AI models from Docker Hub, and integrating them with Spring Boot applications using Spring AI. You'll see how to create a fully functional AI-powered Java application in just 15 minutes, complete with code examples that show how easily you can switch from cloud-based models to local ones without changing your application architecture.",[16,7040,7041],{},"Click the video below to discover this developer-friendly approach to AI implementation that gives you complete control over your data while eliminating ongoing costs!",[47,7043],{"id":7044},"6E6JFLMHcoQ",[28,7046,7048],{"id":7047},"model-context-protocol-unleashing-ais-full-potential","Model Context Protocol: Unleashing AI's Full Potential",[16,7050,7051,7052,7057],{},"In my ",[23,7053,7056],{"href":7054,"rel":7055},"https:\u002F\u002Fspring-office-hours.transistor.fm\u002Fepisodes\u002Fs4e8-model-context-protocol-an-introduction-for-java-spring-developers",[101],"Spring Office Hours podcast"," this week (Season 4, Episode 8), Deshawn Carter and I explored the rapidly evolving Model Context Protocol (MCP) - a new approach to extending AI capabilities that's being widely adopted across the industry.",[16,7059,7060],{},"MCP addresses fundamental limitations of large language models by providing them with tools to access real-time data, interact with external APIs, and connect with your local machine or organization's documents. This protocol, introduced by Anthropic in November, has quickly gained industry-wide adoption with OpenAI and Google now supporting it.",[16,7062,7063],{},"The core value of MCP lies in its client-server architecture that standardizes how AI systems access external tools. I compared it to USB-C standardization - instead of creating custom integrations for each application, developers can create reusable MCP servers that any compatible client can leverage.",[16,7065,7066],{},"During the episode, I demonstrated how I use multiple MCP servers together to automate workflows, such as transforming my Beehive newsletter content into markdown for my website - eliminating previously manual conversion processes.",[16,7068,7069],{},"My team at Spring has made significant contributions to the MCP ecosystem. We donated the official Java SDK for MCP that was adopted by Anthropic. This makes building MCP servers with Spring Boot straightforward, but also supports pure Java implementations without requiring a web framework.",[16,7071,7072],{},"The full episode is available now on the Spring Developer YouTube channel and wherever you get your podcasts.",[47,7074],{"id":7075},"laJyrPIxSWc",[16,7077,7078,7079,7083,7084,184],{},"If you found that interesting this week we welcome ",[23,7080,2321],{"href":7081,"rel":7082},"https:\u002F\u002Fx.com\u002FJamesWard",[101],", Principal Developer Advocate at AWS. In this episode we explore James' career journey, his podcast work and his expertise in Java. The conversation dives into Amazon's Nova model and James' recent article on ",[23,7085,7088],{"href":7086,"rel":7087},"https:\u002F\u002Fcommunity.aws\u002Fcontent\u002F2v8AETAkyvPp9RVKC4YChncaEbs\u002Frunning-mcp-based-agents-clients-servers-on-aws",[101],"running MCP-based agents on AWS",[28,7090,7092],{"id":7091},"join-me-at-jdconf-2025-this-week","Join Me at JDConf 2025 This Week!",[16,7094,7095,7096,7100],{},"I'm excited to share that I'll be speaking at ",[23,7097,7099],{"href":6884,"rel":7098},[101],"Microsoft's JDConf 2025"," this week with not one but two sessions! This conference brings together the brightest minds in Java development to explore the future of Java in an AI-driven, cloud-native world.",[33,7102,7104],{"id":7103},"my-sessions","My Sessions:",[3943,7106,7107,7112],{},[1274,7108,7109,7111],{},[161,7110,4089],{}," - Live on April 9th at 10:30 PM EDT (I know, crazy time - but perfect for our Asia-Pacific audience!)\nIn this session, I'll be covering essential AI concepts for Java developers and demonstrating practical implementations using modern frameworks and tools.",[1274,7113,7114,7117],{},[161,7115,7116],{},"What's New in Spring"," - Available On-Demand\nThis session explores the latest innovations in the Spring ecosystem, covering new features, improvements, and best practices that every Spring developer should know about.",[16,7119,7120],{},"JDConf 2025 features an impressive lineup of speakers from Microsoft, Broadcom, Red Hat, IBM, Oracle and more, with sessions covering everything from AI integration and cloud-native development to performance optimization and security.",[16,7122,7123],{},"The event is organized across three regional broadcasts (Americas, Asia-Pacific, and EMEA) to accommodate global attendees, plus there's a rich catalog of on-demand sessions available anytime.",[16,7125,7126,7127,7131],{},"Best of all, registration is free! Head over to the ",[23,7128,7130],{"href":6884,"rel":7129},[101],"JDConf"," website to RSVP and check out the full agenda. I hope to see you there!",[16,7133,7134],{},"Here is an interesting use case for the new native image generation in ChatGPT",[166,7136],{"id":7137},"1907805519680524762",[16,7139,7140],{},"I'm trying to put together a tutorial on the new feature in JDK 24 that doesn't pin virtual threads in synchronized methods or blocks and I'm having trouble showing the performance benefits. Can anyone point me in the right direction?",[166,7142],{"id":7143},"1908141714243572092",[28,7145,1028],{"id":171},[16,7147,5651],{},[16,7149,187,7150,191,7152,7154],{},[189,7151],{},[189,7153],{},[23,7155,198],{"href":196,"rel":7156},[101],{"title":200,"searchDepth":201,"depth":201,"links":7158},[7159,7160,7161,7164],{"id":7031,"depth":201,"text":7032},{"id":7047,"depth":201,"text":7048},{"id":7091,"depth":201,"text":7092,"children":7162},[7163],{"id":7103,"depth":206,"text":7104},{"id":171,"depth":201,"text":1028},{"_id":7166,"path":7167,"title":7168,"description":7169,"meta":7170,"body":7173},"newsletter\u002Fnewsletter\u002F2025\u002F03\u002F31\u002Fmcp-server-build.md","\u002Fnewsletter\u002F2025\u002F03\u002F31\u002Fmcp-server-build","Building your own MCP Server, JDK 24 with Billy Korando and OpenAI's new Image Generation","Happy Monday! This week's edition is packed with AI advancements and Java updates. Learn how to build a custom MCP server from scratch with Spring AI to connect your tools to models like Claude, and hear about MCP's momentum with OpenAI's support. We'll also share highlights from our chat with Billy Korando about exciting JDK 24 features, and dive into the fun (and impressive results) of OpenAI's new built-in image generator in ChatGPT.",{"slug":7171,"date":7172},"mcp-server-build","2025-03-31T00:00:00.000Z",{"type":13,"value":7174,"toc":7399},[7175,7177,7180,7183,7187,7204,7207,7211,7220,7224,7227,7233,7236,7239,7243,7246,7260,7263,7277,7281,7292,7297,7312,7348,7354,7359,7362,7365,7368,7371,7374,7377,7381,7384,7387,7389],[16,7176,7169],{},[28,7178,5321],{"id":7179},"mcp",[16,7181,7182],{},"In this week's tutorial video, I demonstrated how to build a custom Model Context Protocol (MCP) server from scratch using Spring AI's powerful starter packages. The video walks through creating a simple MCP server that exposes information about my courses, which can then be accessed by AI assistants like Claude Desktop.",[33,7184,7186],{"id":7185},"what-youll-learn-in-the-video","What You'll Learn in the Video",[1271,7188,7189,7192,7195,7198,7201],{},[1274,7190,7191],{},"How to set up a Spring Boot application with the MCP server starter",[1274,7193,7194],{},"Creating custom tools that expose functionality to AI models",[1274,7196,7197],{},"Configuring the server to work with standard input\u002Foutput transport",[1274,7199,7200],{},"Installing and connecting your MCP server to Claude Desktop",[1274,7202,7203],{},"Testing the integration with real queries",[47,7205],{"id":7206},"w5YVHG1j3Co",[33,7208,7210],{"id":7209},"mcp-taking-off-rapidly","MCP Taking Off Rapidly",[16,7212,7213,7214,7219],{},"The Model Context Protocol ecosystem is expanding at an impressive pace! Just last week, ",[23,7215,7218],{"href":7216,"rel":7217},"https:\u002F\u002Fx.com\u002Fsama\u002Fstatus\u002F1904957253456941061",[101],"Sam Altman announced"," that OpenAI will be supporting MCP, representing a major milestone for this emerging standard. This means we'll likely see broader adoption and interoperability across different AI platforms in the near future.",[33,7221,7223],{"id":7222},"spring-ai-team-leading-the-way","Spring AI Team Leading the Way",[16,7225,7226],{},"While I used Spring Boot in my example, it's worth highlighting that the Spring AI team is behind the official MCP Server SDK for Java. Even if you're not using Spring in your projects, you can take advantage of this SDK to build MCP-compatible servers with pure Java:",[16,7228,7229],{},[23,7230,7232],{"href":4888,"rel":7231},[101],"Java SDK for Model Context Protocol",[16,7234,7235],{},"This standardized approach to connecting AI models with external tools and data sources opens up exciting possibilities for creating workflows where AI assistants can access your applications, APIs, and databases through a consistent interface.",[16,7237,7238],{},"What MCP servers would you like to see built next? Let me know your thoughts and ideas!",[28,7240,7242],{"id":7241},"spring-office-hours-with-billy-korando","Spring Office Hours with Billy Korando",[16,7244,7245],{},"Last week on Spring Office Hours we had the opportunity to sit down with Oracle Java Developer Advocate Billy Korando to discuss the recent release of JDK 24 and highlights from Java One conference. Billy shares insights on significant improvements in JDK 24, including synchronized virtual threads without pinning (JEP 451) and Stream Gatherers (JEP 485), both popular features that excited many developers at Java One. The conversation explores how Project Amber continues to enhance Java with data-oriented programming concepts, and touches on upcoming improvements to structured concurrency in JDK 25.",[16,7247,7248,7249,529,7254,7259],{},"We also discussed the performance benefits of updating to newer JDK versions, with Netflix reporting significant improvements after upgrading. Billy provides guidance on how developers can contribute to Java's evolution and test early access builds of upcoming versions. The episode wraps up with recommendations to check out the complete JDK 24 ",[23,7250,7253],{"href":7251,"rel":7252},"https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Ftechnologies\u002Fjavase\u002F24-relnote-issues.html",[101],"release notes",[23,7255,7258],{"href":7256,"rel":7257},"https:\u002F\u002Fwww.youtube.com\u002F@java",[101],"Java YouTube"," channel for comprehensive information on all the new features.",[47,7261],{"id":7262},"ZsKJHGgahuA",[16,7264,7265,7266,7271,7272,7276],{},"Speaking of JDK one of my favorite new features is Stream Gatherers. I put together a ",[23,7267,7270],{"href":7268,"rel":7269},"https:\u002F\u002Fyoutu.be\u002FhIbCu1slooE",[101],"video"," and a ",[23,7273,6034],{"href":7274,"rel":7275},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fstream-gatherers",[101]," on this last week if you're interested in learning about them.",[28,7278,7280],{"id":7279},"open-ais-new-native-image-generator","Open AI's new native Image Generator",[16,7282,7283,7284,7287,7288,7291],{},"Did your social feeds suddenly explode with amazing, weird, and wonderful AI-generated images last week? Blame OpenAI! They just dropped their super-powered new GPT-4o image generation ",[734,7285,7286],{},"directly inside ChatGPT",", and let's just say people have been having ",[734,7289,7290],{},"a lot"," of fun experimenting with all sorts of styles and ideas. The creativity online has been wild!",[16,7293,7294],{},[161,7295,7296],{},"So, What's This New Image Sorcery All About?",[16,7298,7299,7300,7303,7304,7307,7308,7311],{},"This isn't just plugging into a separate DALL-E window anymore. Oh no, this is ",[161,7301,7302],{},"native magic!"," GPT-4o now has its ",[734,7305,7306],{},"own"," built-in pixel pixies working overtime right within your chat. Forget context switching – you can brainstorm wild ideas and ",[734,7309,7310],{},"poof"," conjure images right there! They're promising some seriously cool upgrades:",[1271,7313,7314,7320,7326,7336,7342],{},[1274,7315,7316,7319],{},[161,7317,7318],{},"Mind-Blowing Quality:"," Get ready for images so sharp and realistic they might fool your grandma.",[1274,7321,7322,7325],{},[161,7323,7324],{},"Hands That Look... Like Hands?!"," The AI is apparently getting better at drawing those tricky finger-noodles. Fewer nightmare Cthulhu hands, we hope!",[1274,7327,7328,7331,7332,7335],{},[161,7329,7330],{},"Text That Doesn't Look Like Alien Scribbles:"," Need words ",[734,7333,7334],{},"in"," your image? GPT-4o is flexing its improved text-rendering muscles. Spellcheck included? Maybe!",[1274,7337,7338,7341],{},[161,7339,7340],{},"Your Weird Ideas Welcome:"," It's supposedly much better at understanding complex, off-the-wall prompts. Go on, ask for a \"cyberpunk squirrel riding a taco through a Van Gogh painting.\" See what happens!",[1274,7343,7344,7347],{},[161,7345,7346],{},"All-in-One Creative Chaos:"," Generate, tweak styles, change dimensions – all without leaving your ChatGPT conversation.",[16,7349,7350,7353],{},[161,7351,7352],{},"Important Note:"," Currently, this shiny new image-making superpower is available exclusively for paying ChatGPT subscribers. So if you're on the free tier, you'll have to enjoy the artistic explosion from the sidelines for a bit longer!",[16,7355,7356],{},[161,7357,7358],{},"My Own Adventures in AI Art Land!",[16,7360,7361],{},"Naturally, I had to dive headfirst into this digital paint bucket! Below are a few wacky, weird, or wonderfully artistic things I managed to coax out of the AI. Don't judge my prompt skills too harshly – we're all mad scientists in this new lab!",[166,7363],{"id":7364},"1904890856512925730",[16,7366,7367],{},"And I was even able to take this a step further and animate one of the images I created and posted it on YouTube as a short.",[47,7369],{"id":7370},"Uz5vDHzn59s",[16,7372,7373],{},"Who's watching the new Daredevil series?",[166,7375],{"id":7376},"1905434515960725833",[16,7378,7379],{},[161,7380,4229],{},[16,7382,7383],{},"If you haven't had a chance to check out Google Gemini Pro 2.5 it's time to give a spin!",[166,7385],{"id":7386},"1905252626159010191",[28,7388,1028],{"id":171},[16,7390,7391,7392,191,7394,7396],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any questions for me or topics you would like me to cover please feel free to reply to this email or reach out to me on Twitter (I'm not calling it X).\nHappy Coding,",[189,7393],{},[189,7395],{},[23,7397,198],{"href":196,"rel":7398},[101],{"title":200,"searchDepth":201,"depth":201,"links":7400},[7401,7406,7407,7408],{"id":7179,"depth":201,"text":5321,"children":7402},[7403,7404,7405],{"id":7185,"depth":206,"text":7186},{"id":7209,"depth":206,"text":7210},{"id":7222,"depth":206,"text":7223},{"id":7241,"depth":201,"text":7242},{"id":7279,"depth":201,"text":7280},{"id":171,"depth":201,"text":1028},{"_id":7410,"path":7411,"title":7412,"description":7413,"meta":7414,"body":7416},"newsletter\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fjavaone-2025.md","\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fjavaone-2025","JavaOne Wrap Up, JDK 24 Stream Gatherers and a tutorial on few shot prompting","Happy Monday and welcome to another edition of the newsletter. I'm back at my desk this week after an amazing trip to JavaOne in San Francisco and I can't wait to tell you all about it.",{"slug":6501,"date":7415},"2025-03-24T00:00:00.000Z",{"type":13,"value":7417,"toc":7575},[7418,7420,7423,7427,7430,7436,7443,7449,7456,7459,7465,7468,7474,7477,7483,7486,7490,7493,7497,7500,7503,7509,7512,7515,7521,7525,7528,7531,7534,7537,7540,7544,7547,7550,7553,7556,7559,7562,7564,7566],[16,7419,7413],{},[16,7421,7422],{},"It has been a busy month that had me traveling 3 out of the last 4 weeks to ConFoo, DevNexus and JavaOne. I'm really excited to get back to making some videos this week. I was so inspired by being at so many great conferences and so many developers thanking me for my contributions to the community. It go me fired up to get home and do more and that is what I will be working on this week.",[28,7424,7426],{"id":7425},"javaone","JavaOne",[16,7428,7429],{},"Last week I had the opportunity to attend and speak at my very first JavaOne. The conference was really amazing on so many levels. First off it was so exciting to be in the keynote watching it live because I have watched so many of these keynotes over the years from my desk.",[16,7431,7432],{},[74,7433],{"alt":7434,"src":7435},"JavaOne Keynote","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fkeynote.jpeg",[16,7437,7438,7439,7442],{},"I thought the keynote was wall planned out. I really appreciated ",[161,7440,7441],{},"Mark Reinhold"," did an amazing job of debunking some of Java's myths. These are things you might hear people complain about from time to time but sure enough Java has an answer for them.",[16,7444,7445],{},[74,7446],{"alt":7447,"src":7448},"Java Myths","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fjava-myths.png",[16,7450,7451,7452,184],{},"If you didn't get a chance to catch the keynote and want to watch a replay of it you can check it out ",[23,7453,742],{"href":7454,"rel":7455},"https:\u002F\u002Fwww.youtube.com\u002Flive\u002Fmk_2MIWxLI0",[101],[16,7457,7458],{},"There were so many great talks throughout the conference. I really enjoyed Adam Bien's talk and finally getting the chance to meet him in person. He is so knowledgeable and I really enjoy his humor and presentation style. If you ever get a chance to watch him in person, take it.",[16,7460,7461],{},[74,7462],{"alt":7463,"src":7464},"Adam Bien's Talk","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fadam-bien-talk.png",[16,7466,7467],{},"I also go the opportunity to meet Brian Goetz and watch his talk on where Java is going. Brian is just one of those people who when they are talking, you listen. He is so knowledgeable on past, present and future of Java and it was really great to hear his insights.",[16,7469,7470],{},[74,7471],{"alt":7472,"src":7473},"Brian Goetz","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fbrian-goetz.jpeg",[16,7475,7476],{},"I got to take a picture with Duke!",[16,7478,7479],{},[74,7480],{"alt":7481,"src":7482},"Duke","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fduke-photo.jpeg",[16,7484,7485],{},"It was so great talking and hanging out with so many great people at JavaOne. This was a conference I won't forget and can't wait to get back to the next one. This week inspired me to do more for this great community and that is exactly what I will do ❤️",[28,7487,7489],{"id":7488},"streamlining-your-code-with-jdk-24s-stream-gatherers","Streamlining Your Code with JDK 24's Stream Gatherers",[16,7491,7492],{},"Last week at JavaOne everyone was talking about JDK 24. I put together an article on one of my favorite new features: Stream Gatherers.",[33,7494,7496],{"id":7495},"what-are-stream-gatherers","What Are Stream Gatherers?",[16,7498,7499],{},"JDK 24's Stream Gatherers (JEP 485) revolutionize how we build intermediate operations in Java's Stream API. This powerful addition allows developers to create custom, reusable transformations that make complex data processing elegantly simple.",[16,7501,7502],{},"In my latest tutorial, I demonstrate how Stream Gatherers solve a common challenge: building a \"Recent Posts By Category\" feature for blog applications. The traditional approach requires nested collectors and multiple stream operations, resulting in verbose, difficult-to-follow code. Stream Gatherers transform this complexity into a concise, natural flow that's both more readable and maintainable.",[16,7504,7505],{},[74,7506],{"alt":7507,"src":7508},"Stream Gatherers Example","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F24\u002Fstream-gatherers.png",[16,7510,7511],{},"What makes Gatherers special is their four-component design: an initializer to create state, an integrator to process elements, a combiner for parallel execution, and a finisher to emit results. This architecture provides exceptional flexibility while maintaining the Stream API's lazy evaluation and parallelism capabilities.",[16,7513,7514],{},"Beyond basic grouping operations, Stream Gatherers shine when implementing sophisticated processing like sliding window analysis, word frequency counting, sentiment analysis, and dynamic pagination. They bridge the gap between intermediate and terminal operations, enabling elegant solutions to problems that previously required cumbersome workarounds.",[16,7516,7517,7518],{},"Check out the complete tutorial with working examples at: ",[23,7519,7274],{"href":7274,"rel":7520},[101],[28,7522,7524],{"id":7523},"few-shot-prompting","Few Shot Prompting",[16,7526,7527],{},"This week, I tackled Few-Shot prompting in Spring AI after receiving a viewer question about sentiment analysis implementation. If you've been following my tutorials, you know I'm passionate about making AI concepts accessible to everyone.",[16,7529,7530],{},"I demonstrated how I approach Few-Shot prompting by showing you exactly how to provide example input-output pairs that guide large language models toward more accurate responses. I built a complete Spring Boot application that classifies tweet sentiment, highlighting a critical implementation detail many developers miss - placing examples in the user message rather than the system or assistant messages.",[16,7532,7533],{},"My implementation combines Spring AI with OpenAI's GPT-4, setting temperature to 0.0 for deterministic classification results. I walked through everything from initial configuration to final execution, sharing insights about message structure that will immediately improve your own AI implementations.",[16,7535,7536],{},"What I wanted to emphasize most in this tutorial is that \"prompt engineering\" isn't some gatekeeping skill - it's something we can all learn and improve with practice. Check out the video link below, and if you've been experimenting with Few-Shot prompting in your own projects, I'd love to hear about your experiences.",[47,7538],{"id":7539},"QZyYFyx_4RY",[16,7541,7542],{},[161,7543,4229],{},[16,7545,7546],{},"I started watching the Lex Friedman interview with The Primeagen and it's so good!",[166,7548],{"id":7549},"1903620751904633096",[16,7551,7552],{},"Next up on the speaking circuit is Microsoft's JDConf.",[166,7554],{"id":7555},"1903139292043428148",[16,7557,7558],{},"Is AI making us dumber?",[166,7560],{"id":7561},"1902476353011585066",[28,7563,1028],{"id":171},[16,7565,5651],{},[16,7567,187,7568,191,7570,7572],{},[189,7569],{},[189,7571],{},[23,7573,198],{"href":196,"rel":7574},[101],{"title":200,"searchDepth":201,"depth":201,"links":7576},[7577,7578,7581,7582],{"id":7425,"depth":201,"text":7426},{"id":7488,"depth":201,"text":7489,"children":7579},[7580],{"id":7495,"depth":206,"text":7496},{"id":7523,"depth":201,"text":7524},{"id":171,"depth":201,"text":1028},{"_id":7584,"path":7585,"title":7586,"description":7587,"meta":7588,"body":7591},"newsletter\u002Fnewsletter\u002F2025\u002F03\u002F17\u002Fjdk-24-javaone.md","\u002Fnewsletter\u002F2025\u002F03\u002F17\u002Fjdk-24-javaone","JDK 24, JavaOne, The Virtual Java User Group (vJUG) and my return to YouTube!","Are you ready for Java's biggest upgrade of the year? JDK 24 lands on Tuesday, bringing 24 powerful JEPs that will transform how we build applications. As Java celebrates its 30th birthday, I'm packing my bags for JavaOne in San Francisco, where I'll be speaking about bridging the gap between Java and frontend development. This newsletter is packed with technical insights you won't want to miss—from unlocking AI potential with Spring AI to monitoring token usage in your LLM applications. Between my return to YouTube after a month-long hiatus and fresh tutorials on Google Gemini integration, we've got plenty to explore. Whether you're curious about quantum-resistant cryptography or struggling with structured LLM outputs, this edition has something to elevate your development workflow.",{"slug":7589,"date":7590},"jdk-24-javaone","2025-03-17T00:00:00.000Z",{"type":13,"value":7592,"toc":7963},[7593,7595,7599,7602,7605,7608,7612,7806,7810,7817,7820,7824,7827,7830,7834,7837,7840,7843,7846,7848,7851,7860,7863,7867,7870,7873,7876,7880,7883,7891,7894,7898,7901,7909,7912,7916,7919,7930,7933,7937,7940,7947,7950,7952,7954],[16,7594,7587],{},[28,7596,7598],{"id":7597},"jdk-24-javas-most-feature-packed-release-yet","JDK 24: Java's Most Feature-Packed Release Yet!",[16,7600,7601],{},"Java developers, get ready for a productivity revolution! JDK 24 arrives on March 18 with an impressive lineup of 24 JEPs that push Java's capabilities into exciting new territory. The new Class-File API (JEP 484) transforms how framework developers and bytecode manipulation tools operate, offering a standard, fully-supported API for reading, writing, and transforming Java class files without resorting to third-party libraries. This opens up countless possibilities for code generation, runtime analysis, and custom language features that were previously difficult to implement reliably.",[16,7603,7604],{},"Stream enthusiasts will fall in love with Stream Gatherers (JEP 485), which supercharges Java's functional programming model by enabling complex multi-element transformations within streams. Unlike traditional map\u002Ffilter operations that process elements individually, gatherers can correlate and transform groups of elements, making operations like windowing, batch processing, and complex aggregations dramatically more elegant.",[16,7606,7607],{},"Developers working with concurrent applications will appreciate the maturing Structured Concurrency API (JEP 499) and enhanced Scoped Values (JEP 487), which together solve thorny context-propagation problems in multi-threaded environments. And if you're building for the future, the quantum-resistant cryptography implementations (JEPs 496 & 497) ensure your security-critical applications will stay protected even in the post-quantum era.",[33,7609,7611],{"id":7610},"complete-jdk-24-feature-list","Complete JDK 24 Feature List",[1271,7613,7614,7622,7630,7638,7646,7654,7662,7670,7678,7686,7694,7702,7710,7718,7726,7734,7742,7750,7758,7766,7774,7782,7790,7798],{},[1274,7615,7616,7621],{},[23,7617,7620],{"href":7618,"rel":7619},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F404",[101],"JEP 404",": Generational Shenandoah (Experimental)",[1274,7623,7624,7629],{},[23,7625,7628],{"href":7626,"rel":7627},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F450",[101],"JEP 450",": Compact Object Headers (Experimental)",[1274,7631,7632,7637],{},[23,7633,7636],{"href":7634,"rel":7635},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F472",[101],"JEP 472",": Prepare to Restrict the Use of JNI",[1274,7639,7640,7645],{},[23,7641,7644],{"href":7642,"rel":7643},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F475",[101],"JEP 475",": Late Barrier Expansion for G1",[1274,7647,7648,7653],{},[23,7649,7652],{"href":7650,"rel":7651},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F478",[101],"JEP 478",": Key Derivation Function API (Preview)",[1274,7655,7656,7661],{},[23,7657,7660],{"href":7658,"rel":7659},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F479",[101],"JEP 479",": Remove the Windows 32-bit x86 Port",[1274,7663,7664,7669],{},[23,7665,7668],{"href":7666,"rel":7667},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F483",[101],"JEP 483",": Ahead-of-Time Class Loading & Linking",[1274,7671,7672,7677],{},[23,7673,7676],{"href":7674,"rel":7675},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F484",[101],"JEP 484",": Class-File API",[1274,7679,7680,7685],{},[23,7681,7684],{"href":7682,"rel":7683},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F485",[101],"JEP 485",": Stream Gatherers",[1274,7687,7688,7693],{},[23,7689,7692],{"href":7690,"rel":7691},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F486",[101],"JEP 486",": Permanently Disable the Security Manager",[1274,7695,7696,7701],{},[23,7697,7700],{"href":7698,"rel":7699},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F487",[101],"JEP 487",": Scoped Values (Fourth Preview)",[1274,7703,7704,7709],{},[23,7705,7708],{"href":7706,"rel":7707},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F488",[101],"JEP 488",": Primitive Types in Patterns, instanceof, and switch (Second Preview)",[1274,7711,7712,7717],{},[23,7713,7716],{"href":7714,"rel":7715},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F489",[101],"JEP 489",": Vector API (Ninth Incubator)",[1274,7719,7720,7725],{},[23,7721,7724],{"href":7722,"rel":7723},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F490",[101],"JEP 490",": ZGC: Remove the Non-Generational Mode",[1274,7727,7728,7733],{},[23,7729,7732],{"href":7730,"rel":7731},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F491",[101],"JEP 491",": Synchronize Virtual Threads without Pinning",[1274,7735,7736,7741],{},[23,7737,7740],{"href":7738,"rel":7739},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F492",[101],"JEP 492",": Flexible Constructor Bodies (Third Preview)",[1274,7743,7744,7749],{},[23,7745,7748],{"href":7746,"rel":7747},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F493",[101],"JEP 493",": Linking Run-Time Images without JMODs",[1274,7751,7752,7757],{},[23,7753,7756],{"href":7754,"rel":7755},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F494",[101],"JEP 494",": Module Import Declarations (Second Preview)",[1274,7759,7760,7765],{},[23,7761,7764],{"href":7762,"rel":7763},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F495",[101],"JEP 495",": Simple Source Files and Instance Main Methods (Fourth Preview)",[1274,7767,7768,7773],{},[23,7769,7772],{"href":7770,"rel":7771},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F496",[101],"JEP 496",": Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism",[1274,7775,7776,7781],{},[23,7777,7780],{"href":7778,"rel":7779},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F497",[101],"JEP 497",": Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm",[1274,7783,7784,7789],{},[23,7785,7788],{"href":7786,"rel":7787},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F498",[101],"JEP 498",": Warn upon Use of Memory-Access Methods in sun.misc.Unsafe",[1274,7791,7792,7797],{},[23,7793,7796],{"href":7794,"rel":7795},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F499",[101],"JEP 499",": Structured Concurrency (Fourth Preview)",[1274,7799,7800,7805],{},[23,7801,7804],{"href":7802,"rel":7803},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F501",[101],"JEP 501",": Deprecate the 32-bit x86 Port for Removal",[28,7807,7809],{"id":7808},"join-me-at-javaone-2025-where-javas-future-unfolds","Join Me at JavaOne 2025: Where Java's Future Unfolds",[16,7811,7812,7813,7816],{},"As we celebrate Java's 30th birthday, I'm thrilled to announce that I'll be speaking at JavaOne 2025! My session, \"A Java Developer's Guide to Navigating the Frontend Landscape ",[1492,7814,7815],{},"SES1487",",\" will explore how Java developers can leverage their existing skills while embracing modern frontend technologies.",[16,7818,7819],{},"In a world where full-stack development has become increasingly important, many Java developers find themselves stepping into unfamiliar frontend territory. My talk will bridge this gap by providing practical strategies for tackling JavaScript frameworks, build tools, and UI libraries with a Java developer's mindset. You'll walk away with concrete approaches to apply your Java expertise to frontend challenges, making the transition smoother and more intuitive.",[33,7821,7823],{"id":7822},"why-this-session-matters","Why This Session Matters",[16,7825,7826],{},"The boundary between backend and frontend continues to blur, creating both challenges and opportunities for Java developers. Rather than treating these as separate worlds, we'll explore how your Java expertise provides a solid foundation for frontend work. From state management patterns that mirror Java concepts to leveraging type safety with TypeScript, you'll discover that your backend knowledge is more transferable than you might think.",[16,7828,7829],{},"We'll also dive into the cultural and workflow differences between these ecosystems, and how to navigate them successfully. If you've ever felt overwhelmed by the rapidly evolving frontend landscape, this session will provide the compass you need to chart your course forward.",[33,7831,7833],{"id":7832},"lets-connect-at-javaone","Let's Connect at JavaOne!",[16,7835,7836],{},"If you're planning to attend, I'd love to continue the conversation after my session. Whether you're facing specific frontend challenges in your Java projects or just want to share experiences, I'm looking forward to connecting with fellow developers who are bridging these worlds.",[16,7838,7839],{},"The conference has an incredible lineup this year, from the Java 24 launch to the special 30th birthday celebrations. Between the world-class learning opportunities, networking events, and even the Wednesday night party at Devil's Canyon Brewing Company, it's shaping up to be an unmissable event for the Java community.",[16,7841,7842],{},"My session is scheduled for Tuesday, Mar 182:30 PM - 3:15 PM PDT in Room 105, and I hope to see you there! Drop by to say hello, or reach out beforehand if you have specific topics you'd like me to address during the Q&A portion.",[16,7844,7845],{},"See you in Redwood Shores!",[28,7847,6696],{"id":6695},[16,7849,7850],{},"I was deeply honored to speak at the virtual Java User Group (vJUG) last week, presenting to what is the largest Java User Group on the planet. My session focused on Spring AI, where I introduced the fundamentals of AI and large language models before exploring how Java developers can integrate these technologies into their applications.",[16,7852,7853,7854,7859],{},"I began by covering key AI concepts before diving into Spring AI's architecture, demonstrating how it provides a portable API supporting multiple AI providers and modalities. Through live coding examples, I showcased Spring AI's practical features including structured output, chat memory, multimodal capabilities, and tools integration. I emphasized how Spring AI simplifies LLM integration by abstracting away provider-specific implementations, allowing developers to switch between models like OpenAI's GPT and Google's Gemini with minimal code changes. I also addressed important considerations around tokens, context windows, and pricing when building production applications with LLMs. For those interested in exploring further, I've created a GitHub repository (",[23,7855,7858],{"href":7856,"rel":7857},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-ai-workshop",[101],"github.com\u002Fdanvega\u002Fspring-ai-workshop",") with additional examples and resources.",[47,7861],{"id":7862},"XjfWyc6xmSA",[28,7864,7866],{"id":7865},"back-in-action-breaking-the-content-creation-hiatus","Back in Action: Breaking the Content Creation Hiatus",[16,7868,7869],{},"After a 33-day break from YouTube, I'm excited to share that I've returned with four fresh technical tutorials this week! Between client projects and conference preparations, finding time for content creation has been challenging—but your messages asking when new videos would arrive kept me motivated.",[16,7871,7872],{},"Each video tackles a specific challenge I've personally encountered while building AI-powered applications. Whether you're looking to extend LLM capabilities with external data sources, need consistent response formats from unpredictable models, or want to avoid surprise bills at month-end, there's something here to enhance your development workflow.",[16,7874,7875],{},"What AI challenges are you currently facing in your projects? Reply to this email with your questions—your feedback directly shapes my upcoming content. And if you found these tutorials helpful, sharing them with a colleague goes a long way toward growing our community.",[33,7877,7879],{"id":7878},"unleashing-llm-potential-with-model-context-protocol-mcp","Unleashing LLM Potential with Model Context Protocol (MCP)",[16,7881,7882],{},"Model Context Protocol (MCP) addresses a critical limitation of large language models: their inability to access real-time data, personal documents, or external systems. This standardized protocol enables LLMs to communicate with external data sources and tools through a client-server architecture. Similar to how USB standardized device connections, MCP establishes a unified way for models to interact with various data sources without requiring custom integrations for each service.",[16,7884,7885,7886],{},"The implementation utilizes MCP servers (like file system access, Brave search, GitHub integration) that can be plugged into MCP-compatible clients such as Claude Desktop, Claude Code, Cursor, and WinSurf. By following this protocol, developers can create reusable tools that extend LLM capabilities without duplicating integration efforts across teams or applications. The video demonstrates this by configuring Claude Desktop to access local files and perform web searches for real-time information about recent shows like Daredevil Born Again. ",[23,7887,7890],{"href":7888,"rel":7889},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fmodel-context-protocol",[101],"GitHub Documentation",[47,7892],{"id":7893},"nNLshWCoe0o",[33,7895,7897],{"id":7896},"streamlining-google-gemini-flash-20-integration-with-api-keys","Streamlining Google Gemini Flash 2.0 Integration with API Keys",[16,7899,7900],{},"Google Gemini Flash 2.0 offers exceptional performance for AI applications with its speed, accuracy, and cost-efficiency. While previous implementations required using Google Vertex API with Google credentials, this tutorial demonstrates a simpler approach using just API keys through OpenAI compatibility. The technique leverages Spring AI's existing OpenAI integration by configuring two critical properties: changing the base URL to Google's Generative Language API endpoint and using Google Gemini API keys in place of OpenAI keys.",[16,7902,7903,7904],{},"The implementation includes a sample Spring Boot application that connects to Gemini models using this compatibility layer, plus a bonus endpoint that lists all available Google Gemini models. This approach creates a path forward until the official Google Gemini Java SDK matures and gets integrated into Spring AI directly. For developers concerned with API costs and performance, Gemini Flash 2.0 provides an excellent alternative with straightforward integration into existing Spring applications. ",[23,7905,7908],{"href":7906,"rel":7907},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fgemini-flash-api",[101],"GitHub Repository",[47,7910],{"id":7911},"5zhNfPH-jps",[33,7913,7915],{"id":7914},"controlling-ai-responses-with-structured-output-in-spring-ai","Controlling AI Responses with Structured Output in Spring AI",[16,7917,7918],{},"Structured output solves a critical challenge when working with LLMs in applications: unpredictable response formats. While consumers might be satisfied with any format when asking questions conversationally, applications need consistent, typed responses that can be deserialized into objects. The tutorial demonstrates how different LLMs implement structured output through their own JSON schema specifications, making standardization difficult for developers working with multiple models.",[16,7920,7921,7922,7925,7926],{},"Spring AI elegantly solves this complexity by handling format conversion behind the scenes. By simply defining a Java record and using the ",[469,7923,7924],{},"entity()"," method with a parameterized type reference, Spring AI automatically generates the appropriate schema for the target LLM. The implementation shows a REST controller that transforms an unstructured list of NBA teams into a structured collection of objects with consistent properties. This approach eliminates the need to understand each LLM's schema details while ensuring applications receive predictable, strongly-typed responses that integrate seamlessly with Java's type system. ",[23,7927,7908],{"href":7928,"rel":7929},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fstructured-output",[101],[47,7931],{"id":7932},"8buYgH3T8XA",[33,7934,7936],{"id":7935},"building-ai-application-observability-with-spring-boot-prometheus-and-grafana","Building AI Application Observability with Spring Boot, Prometheus, and Grafana",[16,7938,7939],{},"For developers paying per token in AI applications, operating without visibility into usage metrics is like running blindfolded toward an inevitable billing surprise. This technical solution implements comprehensive monitoring using a stack of complementary technologies: Spring Boot Actuator exposes application metrics through HTTP endpoints, Prometheus collects and stores these metrics as time-series data, and Grafana transforms this data into customizable dashboards for real-time monitoring.",[16,7941,7942,7943],{},"The implementation provides detailed visibility into critical AI metrics including token usage (both prompt and completion tokens), response times, error rates, and system resource consumption. Using Docker Compose for simplified deployment, the solution includes pre-configured dashboards that developers can immediately use or customize. By tracking these metrics, teams can implement appropriate guardrails around token consumption, optimize response times by identifying requests that would benefit from streaming responses, and avoid unexpected billing surprises. The complete monitoring solution requires minimal code changes to existing Spring AI applications while providing maximum visibility into performance and cost metrics. ",[23,7944,7908],{"href":7945,"rel":7946},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-ai-metrics",[101],[47,7948],{"id":7949},"pBVKkcBhw6I",[28,7951,1028],{"id":171},[16,7953,5651],{},[16,7955,187,7956,191,7958,7960],{},[189,7957],{},[189,7959],{},[23,7961,198],{"href":196,"rel":7962},[101],{"title":200,"searchDepth":201,"depth":201,"links":7964},[7965,7968,7972,7973,7979],{"id":7597,"depth":201,"text":7598,"children":7966},[7967],{"id":7610,"depth":206,"text":7611},{"id":7808,"depth":201,"text":7809,"children":7969},[7970,7971],{"id":7822,"depth":206,"text":7823},{"id":7832,"depth":206,"text":7833},{"id":6695,"depth":201,"text":6696},{"id":7865,"depth":201,"text":7866,"children":7974},[7975,7976,7977,7978],{"id":7878,"depth":206,"text":7879},{"id":7896,"depth":206,"text":7897},{"id":7914,"depth":206,"text":7915},{"id":7935,"depth":206,"text":7936},{"id":171,"depth":201,"text":1028},{"_id":7981,"path":7982,"title":7983,"description":7984,"meta":7985,"body":7988},"newsletter\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fdevnexus-2025.md","\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fdevnexus-2025","ConFoo, DevNexus, Upcoming Presentations and a Notion Spring Boot Starter","Happy Monday and welcome to another edition of the newsletter. It has been a busy few weeks for me giving presentations at conferences, for customers and some online meetups.",{"slug":7986,"date":7987},"devnexus-2025","2025-03-10T00:00:00.000Z",{"type":13,"value":7989,"toc":8137},[7990,7992,7994,8000,8008,8014,8017,8019,8022,8025,8031,8034,8037,8045,8049,8068,8075,8079,8082,8090,8093,8099,8105,8109,8112,8115,8118,8121,8123,8128],[16,7991,7984],{},[28,7993,1888],{"id":1887},[16,7995,7996],{},[74,7997],{"alt":7998,"src":7999},"ConFoo Conference","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fconfoo_01.png",[16,8001,8002,8003,8007],{},"This was my 2nd year attending and speaking at ConFoo and I absolutely love this conference. The food, sessions, conversations and people were all amazing. I was lucky to give 2 presentations at this conference and I thought they both went really well. The first was on AI-Powered Dev Hacks and it was an opportunity to share how I am using AI in my day-to-day workflows. If you want to check out the slides or a quick overview of the talk you can check out ",[23,8004,4182],{"href":8005,"rel":8006},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fai-powered-dev-hacks-confoo-2025",[101]," on this.",[16,8009,8010],{},[74,8011],{"alt":8012,"src":8013},"AI-Powered Dev Hacks","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fconfoo_02.png",[16,8015,8016],{},"The 2nd talk was an introduction to Spring AI and I absolutely love giving this talk. I gave a bit of an introduction to Artificial Intelligence and then went in to showing the value of Spring AI. If you're interested in this presentation keep reading because I will be giving a version of it later this week.",[28,8018,1910],{"id":1909},[16,8020,8021],{},"Last week I had the opportunity to head to Atlanta and attend DevNexus. This is one of my favorite conferences for Java developers. The vendors, speakers, sessions and hallway tracks are all so great. I love catching up with so many developers from the Java community and this for me is one of those can't miss conferences.",[16,8023,8024],{},"I had the opportunity to give a talk on how to navigate the frontend landscape. This was an overview for Java developers who all of a sudden need to create a frontend for an application and are curious as to what your options are. The frontend development space is fast paced and always changing so this was my chance to give an overview of what technologies you should focus on in 2025. I had some really good feedback on this talk and I really appreciate everyone who attended my talk.",[16,8026,8027],{},[74,8028],{"alt":8029,"src":8030},"Frontend Landscape","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Ffrontend_landscape.png",[16,8032,8033],{},"While we were there DaShaun and I had an opportunity to record an episode of Spring Office Hours live.",[47,8035],{"id":8036},"yCXrUjsKy_A",[16,8038,8039,8040,8044],{},"While I was on the road I had an opportunity to give a couple of a presentations. One was a workshop on Spring AI and this ended up being a really great talk, well attended and some amazing questions. As I got ready for this talk I took the opportunity to update my ",[23,8041,8043],{"href":7856,"rel":8042},[101],"Spring AI Workshop Repository"," to the latest milestone and added a bunch of really great examples.",[28,8046,8048],{"id":8047},"upcoming-presentations","Upcoming Presentations",[1271,8050,8051,8060],{},[1274,8052,8053,8054,8059],{},"This week I will be giving a ",[23,8055,8058],{"href":8056,"rel":8057},"https:\u002F\u002Fwww.meetup.com\u002Fvirtualjug\u002Fevents\u002F306414120\u002F",[101],"talk"," to the Virtual Java User Group (vJUG) on Spring AI. In this talk I will give you a quick introduction to AI and where Spring AI helps you solve some of the problems that will come up when you start building real world applications.",[1274,8061,8062,8063,8067],{},"Next week I will be in California for ",[23,8064,7426],{"href":8065,"rel":8066},"https:\u002F\u002Fwww.oracle.com\u002Fjavaone\u002F",[101]," and I will be giving my talk on navigating the frontend landscape for Java Developers.",[16,8069,8070,8071,8074],{},"As always if you're interested in where I am speaking next you can always check out the ",[23,8072,3517],{"href":3515,"rel":8073},[101]," on my website for upcoming and past presentations.",[28,8076,8078],{"id":8077},"notion-spring-boot-starter","Notion Spring Boot Starter",[16,8080,8081],{},"I am a huge fan of Notion and use it for almost everything in both my personal and professional life. I have put together some tutorials in the past on integrating with Notion but it was very much a manual process.",[16,8083,8084,8085,8089],{},"I decided to sit down with my robot friends and build out a Spring Boot Starter that I could use in any application that need to interact with Notion. What we came up with was the first version of a ",[23,8086,8078],{"href":8087,"rel":8088},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fnotion-spring-boot-starter",[101],". There is some information in the readme on how to get started with it but I will build this out more as I start to put together some samples.",[16,8091,8092],{},"I'm starting with the idea of a content calendar and if you want to pull this information into your Spring Application you could pull in this Notion Starter and it would be fairly easy read and write to that database. If this sounds like something you're interested in please let me know. Also if you could let me know what types of integrations you're working on it will help me out when putting some samples together.",[16,8094,8095],{},[74,8096],{"alt":8097,"src":8098},"Notion Starter Code","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fcontent_cal.png",[16,8100,8101],{},[74,8102],{"alt":8103,"src":8104},"Notion Content Calendar","\u002Fimages\u002Fnewsletter\u002F2025\u002F03\u002F10\u002Fnotion_content_cal.png",[16,8106,8107],{},[161,8108,4229],{},[16,8110,8111],{},"These prices are starting to get out of hand 🤦‍♂️",[166,8113],{"id":8114},"1895300659949510727",[16,8116,8117],{},"I had a chance to check out Claude Code",[166,8119],{"id":8120},"1894127619035033722",[28,8122,1028],{"id":171},[16,8124,178,8125,5060],{},[23,8126,183],{"href":181,"rel":8127},[101],[16,8129,187,8130,191,8132,8134],{},[189,8131],{},[189,8133],{},[23,8135,198],{"href":196,"rel":8136},[101],{"title":200,"searchDepth":201,"depth":201,"links":8138},[8139,8140,8141,8142,8143],{"id":1887,"depth":201,"text":1888},{"id":1909,"depth":201,"text":1910},{"id":8047,"depth":201,"text":8048},{"id":8077,"depth":201,"text":8078},{"id":171,"depth":201,"text":1028},{"_id":8145,"path":8146,"title":8147,"description":8148,"meta":8149,"body":8152},"newsletter\u002Fnewsletter\u002F2025\u002F02\u002F24\u002Fconfoo-2025.md","\u002Fnewsletter\u002F2025\u002F02\u002F24\u002Fconfoo-2025","ConFoo, Moving Java forward with Shar, Spring AI releases and Speaking Updates","Happy Monday and welcome to another edition of the newsletter. We are entering the last week of February and I am all for it. I don’t mind the cold or the snow but when we get into late February I am just over it. I’m hitting the road for 3 out of the next 4 weeks and I’m excited to connect with the community.",{"slug":8150,"date":8151},"confoo-2025","2025-02-24T07:00:00.000Z",{"type":13,"value":8153,"toc":8264},[8154,8156,8159,8162,8165,8167,8175,8178,8184,8187,8190,8194,8197,8200,8204,8219,8222,8228,8232,8235,8238,8241,8244,8248,8254,8256,8259],[16,8155,8148],{},[16,8157,8158],{},"I have been pretty swamped lately preparing for all my upcoming talks, so I haven’t released any videos on the YouTube channel but I will get back to that and answering your questions as soon as I can.",[16,8160,8161],{},"I’m also preparing for a 3-hour workshop on Spring AI and I’m going to use a lot of that material to create a big introduction for YouTube. I’m expecting that video to be in the 3-4 hour range and I’ll let you know more about that as soon as I start working on it.",[16,8163,8164],{},"“Living in a state of gratitude is the gateway to grace” Arianna Huffington",[28,8166,1888],{"id":1887},[16,8168,8169,8170,8174],{},"This week I’m heading to Montreal, CA for ",[23,8171,1888],{"href":8172,"rel":8173},"https:\u002F\u002Fconfoo.ca\u002Fen\u002F2025",[101],". Last year was my first year at the conference and I really enjoyed it. The people were awesome, the talks were great and the food was amazing. It was also my first time in Montreal and I really enjoyed seeing the city and the unground cities underneath the city.",[16,8176,8177],{},"I’m giving 2 talks at the conference and the first one is all about using AI in your day-to-day workflows. This is a brand-new talk, and I am really excited about this. This talk isn’t just how to use ChatGPT or IDE extensions to write code. I go into some practical use cases that I’m using to be more productive every day.",[16,8179,8180],{},[74,8181],{"alt":8182,"src":8183},"Code Smarter Not Harder","\u002Fimages\u002Fnewsletter\u002F2025\u002F02\u002F24\u002Fcode-smarter-not-harder.png",[16,8185,8186],{},"The 2nd talk is about using Generative AI in your Java applications with Spring AI. I have given this talk before, but I updated it for the conference with less slides and all new examples to go through. I am packing in a lot of great content in 45 minutes and I’m looking forward to this presentation.",[16,8188,8189],{},"If you’re going to be at ConFoo please say hello 👋🏻",[28,8191,8193],{"id":8192},"moving-java-forward","Moving Java Forward",[16,8195,8196],{},"Last week was a special Spring Office Hours as we got to sit and talk with my good friend Sharat Chander. We talked about all things Java, Community and upcoming conferences that we will all be at like DevNexus and JavaOne. If you didn’t get a chance to catch this live, the replay of the podcast you can check it out below.",[47,8198],{"id":8199},"cqCQUjzRit4",[28,8201,8203],{"id":8202},"spring-ai","Spring AI",[16,8205,8206,8207,8212,8213,8218],{},"Last week was a huge week for the Spring AI team. They announced the availability of ",[23,8208,8211],{"href":8209,"rel":8210},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F02\u002F14\u002Fspring-ai-1-0-0-m6-released",[101],"Spring AI 1.0.0 M6"," along with the official ",[23,8214,8217],{"href":8215,"rel":8216},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F02\u002F14\u002Fmcp-java-sdk-released-2",[101],"SDK Model Context Protocol (MCP) for Java",". The Spring AI team worked closely with the folks at Anthropic to make this happen and this is really exciting to see. If you haven’t had a chance to check out MCP and what it can do you for this is a really good time to jump on in.",[28,8220,3381],{"id":8221},"speaking",[16,8223,8224,8225,3518],{},"Conference season is in full swing over here. I’m going to ConFoo this week, DevNexus next week and JavaOne on March 18th. I was also able to submit some proposals to Spring I\u002FO in Barcelona and KCDC so I will be crossing my fingers for those.  If you want to keep up to date with my speaking engagements you can check out the ",[23,8226,3517],{"href":3515,"rel":8227},[101],[16,8229,8230],{},[161,8231,4229],{},[16,8233,8234],{},"Grok 3 was released last week and so far I have been pretty happy with it",[166,8236],{"id":8237},"1892647616460001337",[16,8239,8240],{},"This had to be the coolest announcement of last week.",[166,8242],{"id":8243},"1892633380556009967",[16,8245,8246],{},[161,8247,1028],{},[16,8249,178,8250,8253],{},[23,8251,183],{"href":181,"rel":8252},[101]," (I’m not calling it X).",[16,8255,187],{},[16,8257,8258],{},"Dan Vega",[16,8260,8261],{},[23,8262,198],{"href":196,"rel":8263},[101],{"title":200,"searchDepth":201,"depth":201,"links":8265},[8266,8267,8268,8269],{"id":1887,"depth":201,"text":1888},{"id":8192,"depth":201,"text":8193},{"id":8202,"depth":201,"text":8203},{"id":8221,"depth":201,"text":3381},{"_id":8271,"path":8272,"title":8273,"description":8274,"meta":8275,"body":8278},"newsletter\u002Fnewsletter\u002F2025\u002F02\u002F10\u002Fgoogle-gemini-flash-2.md","\u002Fnewsletter\u002F2025\u002F02\u002F10\u002Fgoogle-gemini-flash-2","Google Gemini Flash 2.0, Spring Office Hours Q&A and CloudFoundry Weekly","Happy Monday and welcome to another edition of the newsletter. The Super Bowl was last night and I feel like we have this conversation every year but why do keep doing this on a Sunday night. Adults have to work the next day, kids have to go to school and this could all be avoided if we just moved the game to Saturday night.",{"slug":8276,"date":8277},"google-gemini-flash-2","2025-02-10T07:00:00.000Z",{"type":13,"value":8279,"toc":8343},[8280,8282,8285,8289,8292,8295,8298,8302,8305,8308,8311,8314,8317,8320,8324,8327,8330,8332,8334],[16,8281,8274],{},[16,8283,8284],{},"I am going to keep this pretty short today as I am pretty swamped getting ready for 3 conferences and many other customer talks over the next month. If you're going to be at ConFoo, DevNexus or JavaOne please say hello 👋🏻",[28,8286,8288],{"id":8287},"googles-flash-20","Google's Flash 2.0",[16,8290,8291],{},"Google Gemini Flash 2.0 represents a significant advancement in the LLM landscape, particularly for production applications requiring high throughput. The model family stands out for its impressive combination of speed, quality, and cost-effectiveness – with pricing at just 10 cents per million tokens for input and 40 cents per million tokens for output. Through the Spring AI project, developers can now easily integrate Gemini Flash 2.0 using Google's Vertex AI platform, though it requires some initial setup with Google Cloud CLI and project configuration.",[16,8293,8294],{},"The implementation details showcase practical integration paths through three main access points: Google AI Studio for experimentation, Vertex AI for enterprise-grade applications, and the consumer-facing Gemini app for everyday use. For Java developers, while direct API access isn't yet available, the Spring AI project provides a clean abstraction over Vertex AI, enabling straightforward integration with just a few lines of configuration and code. The demo application demonstrates how to set up a basic chat client using Spring AI's ChatClient builder, making it accessible for developers to start building with this powerful new model.",[47,8296],{"id":8297},"mMLaWFx2SN8",[28,8299,8301],{"id":8300},"spring-office-hours-s4","Spring Office Hours S4",[16,8303,8304],{},"In our first Spring Office Hours episode of February, DaShaun and I dived into some exciting developments in the Spring ecosystem. One of the biggest announcements we covered was the upcoming changes in Spring Boot 3.5, particularly the removal of the spring-boot-starter-parent. While this change will streamline dependency management and make upgrades smoother, we recognize it'll require some adaptation for teams using parent POM wrappers.",[16,8306,8307],{},"We spent time discussing the rapid evolution of Spring AI, including its new support for DeepSeek's models and the framework's capabilities for building AI agents. I'm particularly excited about how quickly our Spring AI team has been adding support for new models, keeping pace with the fast-moving AI landscape.",[16,8309,8310],{},"A significant portion of our discussion focused on something I'm particularly passionate about - community involvement and career development in the Spring ecosystem. We emphasized that you don't need official permission to contribute to Spring, and highlighted the many \"good first issue\" labels in our repositories that are perfect for new contributors.",[16,8312,8313],{},"Looking ahead, we're gearing up for an exciting conference season. I'll be at ConFoo in Montreal, DevNexus in Atlanta (where DaShaun and I will be doing a live Spring Office Hours!), JavaOne in San Francisco and Spring I.O in Barcelona. If you're planning to submit a talk for Spring I.O, don't forget the CFP closes on February 13th.",[16,8315,8316],{},"The episode really drove home something I believe strongly: there are many paths to growth in the Spring ecosystem, whether through code contributions, blog posts, or local meetups. Everyone can contribute in their own way, and that's what makes our community so vibrant.",[47,8318],{"id":8319},"AL2HL3zRWwI",[28,8321,8323],{"id":8322},"cloud-foundry-weekly","Cloud Foundry Weekly",[16,8325,8326],{},"Last week I was lucky to be a guest on the Cloud Foundry Weekly Podcast. DaShaun and I were actually on the very first episode and we returned for last weeks 44th episode and it was a lot of fun. We talked a lot about AI and What's new in Spring. You can check this episode of the podcast below as well as an archive of previous episodes.",[47,8328],{"id":8329},"EDAjySENoM4",[28,8331,1028],{"id":171},[16,8333,5651],{},[16,8335,187,8336,191,8338,8340],{},[189,8337],{},[189,8339],{},[23,8341,198],{"href":196,"rel":8342},[101],{"title":200,"searchDepth":201,"depth":201,"links":8344},[8345,8346,8347,8348],{"id":8287,"depth":201,"text":8288},{"id":8300,"depth":201,"text":8301},{"id":8322,"depth":201,"text":8323},{"id":171,"depth":201,"text":1028},{"_id":8350,"path":8351,"title":8352,"description":8353,"meta":8354,"body":8357},"newsletter\u002Fnewsletter\u002F2025\u002F02\u002F03\u002Fdeepseek-java-challengers.md","\u002Fnewsletter\u002F2025\u002F02\u002F03\u002Fdeepseek-java-challengers","DeepSeek takes the internet by storm, Java Challengers Podcast & Conference Season","Happy Monday and welcome to another edition of the newsletter. I sat down to start writing this on Friday which happens to be the last day of January. I sent out a tweet congratulating people on making it to January 87th because that what it feels like. January just feel like the longest month ever when you’re in the dead of winter. We have now turned the calendar to February, the shortest month of the year as we make the march towards Spring!",{"slug":8355,"date":8356},"deepseek-java-challengers","2025-02-03T07:00:00.000Z",{"type":13,"value":8358,"toc":8578},[8359,8361,8364,8367,8371,8374,8378,8381,8395,8398,8402,8405,8408,8411,8415,8418,8421,8432,8435,8446,8449,8460,8463,8474,8477,8492,8495,8498,8502,8509,8511,8514,8530,8532,8539,8541,8549,8553,8560,8564,8569],[16,8360,8353],{},[16,8362,8363],{},"Last week you couldn’t throw a rock without hitting something that was talking about DeepSeek. This is the new model from the Chinese Artificial Intelligence company that was reportedly trained at a fraction of a cost as some of the frontier models. That very claim has come with some scrutiny but regardless DeepSeek tok over the world last week.",[16,8365,8366],{},"In this episode of the newsletter I will tell you a little bit more about DeepSeek and some of the videos I published on the topic last week. I was also a guest on the Java Challengers podcast and can’t wait to tell you about it.",[28,8368,8370],{"id":8369},"deepseek","DeepSeek",[16,8372,8373],{},"DeepSeek is a Chinese AI company founded in 2023 by Liang Wenfeng and backed by the High-Flyer hedge fund. It focuses on developing open‐source large language models that are both cost‑efficient and high‑performance. Notably, its flagship model, DeepSeek‑R1, emphasizes advanced reasoning and logical inference, and its rapid rise—quickly overtaking ChatGPT as the top free app on the U.S. iOS App Store—has stirred both the global AI community and financial markets. In essence, DeepSeek is reshaping the AI landscape by delivering powerful, open‑source solutions at a fraction of the cost of many Western rivals.",[33,8375,8377],{"id":8376},"deepseek-introduction","DeepSeek Introduction",[16,8379,8380],{},"DeepSeek unveiled its R1 model in January 2025, achieving performance comparable to leading language models while requiring significantly less computing power and cost. The model is fully open source under an MIT license, allowing unrestricted commercial use and modification. Benchmarks demonstrate R1's capabilities across mathematical reasoning, coding, and scientific knowledge, matching or exceeding GPT-4's performance on standard tests like MMLU and SWE Bench.",[16,8382,8383,8384,8389,8390],{},"The implementation offers multiple deployment options: a hosted API service with competitive pricing (14¢\u002Fmillion input tokens), chat interface at ",[23,8385,8388],{"href":8386,"rel":8387},"https:\u002F\u002Fchat.deepseek.com\u002F",[101],"chat.deepseek.com",", and local installation through Ollama. For developers wanting to run R1 locally, DeepSeek provides distilled versions ranging from 1.5B to 70B parameters. The video demonstrates setting up a local environment using Ollama and Open WebUI, creating a ChatGPT-like interface for the model while keeping all data and processing on your machine. GitHub: ",[23,8391,8394],{"href":8392,"rel":8393},"https:\u002F\u002Fgithub.com\u002Fdeepseek-ai\u002FDeepSeek-LLM",[101],"github.com\u002Fdeepseek-ai\u002FDeepSeek-LLM",[47,8396],{"id":8397},"DDjHLQKtV-k",[33,8399,8401],{"id":8400},"deepseek-integration-with-java-spring","DeepSeek Integration with Java & Spring",[16,8403,8404],{},"DeepSeek's R1 reasoning model can now be integrated into Java and Spring applications through two implementation approaches. The first uses Java's native HTTP client to interact with DeepSeek's REST API, which follows OpenAI's API specification. The second leverages Spring AI's framework, offering a unified abstraction layer that simplifies AI integration and supports both cloud API and local model deployment.",[16,8406,8407],{},"The Spring implementation introduces key advantages like streaming responses and multi-provider support through Spring AI's ChatClient interface. Notably, developers can run smaller R1 models (7B parameters) locally using Ollama integration, offering faster response times compared to the cloud API. The tutorial demonstrates proper configuration for both remote and local deployments, including API authentication, model selection, and streaming response handling in a production environment.",[47,8409],{"id":8410},"TWlBGA3x3cQ",[28,8412,8414],{"id":8413},"java-challengers","Java Challengers",[16,8416,8417],{},"I was grateful to be invited on The Java Challengers podcast to speak with Rafael about my 20+ year journey in software development. Our wide-ranging conversation covered several key themes:",[16,8419,8420],{},"Career Development:",[1271,8422,8423,8426,8429],{},[1274,8424,8425],{},"Started at a two-year technical college, moved to San Francisco for a startup, and progressed through various roles including curriculum developer and Spring Developer Advocate",[1274,8427,8428],{},"Emphasized the importance of community involvement and networking in career growth",[1274,8430,8431],{},"Discussed the path to becoming a Java Champion through consistent community contributions",[16,8433,8434],{},"Technical Leadership:",[1271,8436,8437,8440,8443],{},[1274,8438,8439],{},"Defined characteristics of senior developers: strong problem-solving skills, deep technical knowledge, and mentorship abilities",[1274,8441,8442],{},"Highlighted the importance of reading code vs writing code",[1274,8444,8445],{},"Stressed understanding core Java fundamentals, concurrency, and distributed systems",[16,8447,8448],{},"Learning and Growth:",[1271,8450,8451,8454,8457],{},[1274,8452,8453],{},"Recommended prioritizing learning based on community needs and personal interests",[1274,8455,8456],{},"Suggested blocking dedicated time for learning, even during work hours when appropriate",[1274,8458,8459],{},"Emphasized consistency over intensity in learning new technologies",[16,8461,8462],{},"Professional Development:",[1271,8464,8465,8468,8471],{},[1274,8466,8467],{},"Discussed strategies for handling imposter syndrome",[1274,8469,8470],{},"Highlighted the value of embracing failure as a learning opportunity",[1274,8472,8473],{},"Emphasized the importance of empathy and collaboration in software development",[16,8475,8476],{},"Content Creation:",[1271,8478,8479,8482,8485],{},[1274,8480,8481],{},"Shared experiences running a successful YouTube channel focused on Spring",[1274,8483,8484],{},"Discussed the Spring Office Hours podcast",[1274,8486,8487,8488],{},"Talked about our upcoming book ",[23,8489,8491],{"href":3456,"rel":8490},[101],"\"Fundamentals of Software Engineering\"",[47,8493],{"id":8494},"XNZF-kgEMG4",[16,8496,8497],{},"The conversation provided practical advice for developers at all stages of their careers, emphasizing the importance of continuous learning, community involvement, and maintaining a growth mindset.",[28,8499,8501],{"id":8500},"upcoming-conferences","Upcoming Conferences",[16,8503,8504,8505,8508],{},"We are getting closer to conference season and I’m getting really excited about some of the events I get to attend. As always if you want to see where I will be speaking next you can check out the ",[23,8506,3517],{"href":3515,"rel":8507},[101]," on my website for an up to date list.",[33,8510,1888],{"id":1887},[16,8512,8513],{},"This conference is happening at the end of the month in Montreal CA. I am really looking forward to returning to this wonderful conference after last year which was my first time there. I will be giving 2 talks on building intell",[1271,8515,8516,8523],{},[1274,8517,8518],{},[23,8519,8522],{"href":8520,"rel":8521},"https:\u002F\u002Fconfoo.ca\u002Fen\u002F2025\u002Fsession\u002Fcode-smarter-not-harder-ai-powered-dev-hacks-for-all",[101],"Code Smarter, Not Harder: AI-Powered Dev Hacks for All",[1274,8524,8525],{},[23,8526,8529],{"href":8527,"rel":8528},"https:\u002F\u002Fconfoo.ca\u002Fen\u002F2025\u002Fsession\u002Fspring-into-ai-building-intelligent-apps-with-spring-ai",[101],"Spring into AI: Building Intelligent apps with Spring AI",[33,8531,1910],{"id":1909},[16,8533,8534,8535,184],{},"I missed last years DevNexus so I am extra excited about this years event. I’ll be speaking, working the booth, helping to run a happy hour and whatever else I can get involved in. I put together a little video talking about my session at DevNexus that you can check out ",[23,8536,742],{"href":8537,"rel":8538},"https:\u002F\u002Fwww.linkedin.com\u002Fposts\u002Fvmware-tanzu_devnexus-activity-7291189292171698176-DNFy",[101],[33,8540,7426],{"id":7425},[16,8542,8543,8544,8548],{},"I’m so excited to attend and speak at my very first JavaOne conference in March. The early bird pricing is going up soon so make sure you register for ",[23,8545,8547],{"href":8065,"rel":8546},[101],"this amazing conference"," ASAP.",[33,8550,8552],{"id":8551},"microsoft-jdconf","Microsoft jDConf",[16,8554,8555,8556,184],{},"I just found out that I was selected to speak at Microsoft jDConf and this will be another first for me. This is a virtual conference that you can ",[23,8557,8559],{"href":6884,"rel":8558},[101],"register for free",[16,8561,8562],{},[161,8563,1028],{},[16,8565,178,8566,8253],{},[23,8567,183],{"href":181,"rel":8568},[101],[16,8570,187,8571,191,8573,8575],{},[189,8572],{},[189,8574],{},[23,8576,198],{"href":196,"rel":8577},[101],{"title":200,"searchDepth":201,"depth":201,"links":8579},[8580,8584,8585],{"id":8369,"depth":201,"text":8370,"children":8581},[8582,8583],{"id":8376,"depth":206,"text":8377},{"id":8400,"depth":206,"text":8401},{"id":8413,"depth":201,"text":8414},{"id":8500,"depth":201,"text":8501,"children":8586},[8587,8588,8589,8590],{"id":1887,"depth":206,"text":1888},{"id":1909,"depth":206,"text":1910},{"id":7425,"depth":206,"text":7426},{"id":8551,"depth":206,"text":8552},{"_id":8592,"path":8593,"title":8594,"description":8595,"meta":8596,"body":8599},"newsletter\u002Fnewsletter\u002F2025\u002F01\u002F27\u002Fgoogle-ai-tools.md","\u002Fnewsletter\u002F2025\u002F01\u002F27\u002Fgoogle-ai-tools","Making sense of Google's AI Tools and new YouTube videos","Happy Monday and welcome to another edition of the newsletter. I had such a busy month of December and beginning of January that I’m feeling like my new year is finally underway. I was able to get back to creating videos for YouTube last week. I was able to record 7 and publish 6 which has to be some sort of record for me. No, I can not keep up that pace but it’s nice to know that once in awhile I can create a bunch of them.",{"slug":8597,"date":8598},"google-ai-tools","2025-01-27T07:00:00.000Z",{"type":13,"value":8600,"toc":8811},[8601,8603,8606,8609,8612,8615,8619,8627,8630,8641,8644,8655,8658,8661,8665,8668,8672,8675,8678,8681,8684,8688,8691,8694,8697,8700,8704,8707,8710,8713,8716,8719,8723,8726,8729,8732,8735,8738,8742,8745,8748,8751,8754,8757,8761,8764,8767,8781,8784,8787,8790,8793,8797,8802,8804,8806],[16,8602,8595],{},[16,8604,8605],{},"I was tinkering around with the idea of hiring an editor because that would help me produce more videos but after doing a little looking around I realized that I just can’t afford one right now. Don’t get me wrong, they are totally worth it but I just can’t justify it right now when the channel doesn’t really bring in any revenue.",[16,8607,8608],{},"After seeing some examples of edits to educational content I realized I wanted to try and make my videos a little bit more engaging. I started playing around with some different effects and transitions last week and I hope they are helping with your viewing experience.",[16,8610,8611],{},"In this week's newsletter I want to tell you about some of the videos I made last week. I also want to discuss an article I wrote last week for the ByteSized AI Newsletter on Google Gemini. This week I will focused on making more videos and this week I will be getting back into the AI space.",[16,8613,8614],{},"I hope you had a wonderful weekend and are ready to take on the new week.",[28,8616,8618],{"id":8617},"google-ai-tools-explained","Google AI Tools Explained",[16,8620,2481,8621,8626],{},[23,8622,8625],{"href":8623,"rel":8624},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fgoogles-ai-tools",[101],"article explains"," how Google has evolved beyond a search engine to offer three main AI tools powered by their Gemini language model: Google AI Studio, Vertex AI, and Google Gemini. You introduce Gemini as Google DeepMind's multimodal LLM released in December 2023, highlighting its ability to handle text, images, audio, and video while maintaining context over long conversations.",[16,8628,8629],{},"For each tool, you break down their distinct purposes:",[3943,8631,8632,8635,8638],{},[1274,8633,8634],{},"Google AI Studio: Positioned as a free \"AI laboratory\" for experimentation, featuring a user-friendly interface and example prompts. It's ideal for developers, students, and researchers who want to test AI capabilities.",[1274,8636,8637],{},"Vertex AI: Described as the \"enterprise powerhouse\" offering comprehensive AI solution building and deployment at scale. It includes advanced model training, enterprise-grade security, and Google Cloud integration.",[1274,8639,8640],{},"Google Gemini: The consumer-facing version that integrates AI capabilities into Google Workspace products, making it accessible for everyday use.",[16,8642,8643],{},"You effectively help readers choose between these tools by providing a comparison framework and a simple decision tree:",[1271,8645,8646,8649,8652],{},[1274,8647,8648],{},"Beginners should start with AI Studio",[1274,8650,8651],{},"Enterprise needs point to Vertex AI",[1274,8653,8654],{},"Those wanting integrated AI features should use Gemini",[16,8656,8657],{},"The article strikes a good balance between technical information and accessibility, using clear analogies and \"Quick Tips\" to help readers understand complex concepts. You also include a relevant call-to-action at the end, encouraging readers to start with small projects and consider how AI could benefit their work.",[16,8659,8660],{},"The article successfully achieves its goal of demystifying Google's AI offerings for a general audience while providing enough technical detail to be useful for more advanced readers.",[28,8662,8664],{"id":8663},"new-youtube-videos","New YouTube Videos",[16,8666,8667],{},"Here are the videos I published last week:",[28,8669,8671],{"id":8670},"building-a-spring-initializer-extension-for-raycast-a-developers-journey","Building a Spring Initializer Extension for Raycast: A Developer's Journey\"",[16,8673,8674],{},"I recently shared one of my favorite Mac productivity tools, Raycast, and a new extension I built for it. As a developer who values keyboard-driven workflows, I've found Raycast to be an incredible replacement for Spotlight, offering everything from clipboard history to window management.",[16,8676,8677],{},"The exciting part? I just launched my own Raycast extension for Spring Initializer. Now you can create Spring Boot projects right from your launcher - no browser needed. What's particularly interesting is how I built it: despite my limited React experience, I leveraged AI to help translate my TypeScript knowledge into a working React extension in just a few days.",[16,8679,8680],{},"For Mac users interested in supercharging their workflow, you can find my extension in the Raycast store under \"spring-init.\" And yes, Windows users, Raycast is coming your way soon!",[47,8682],{"id":8683},"NIVBxoK-APU",[28,8685,8687],{"id":8686},"spring-configuration-mixing-xml-annotation-configuration","Spring Configuration: Mixing XML & Annotation Configuration",[16,8689,8690],{},"In this video, I tackled a great question from our Spring Office Hours podcast about mixing XML and annotation-based configuration in Spring Boot applications.",[16,8692,8693],{},"While I personally prefer annotation-based configuration for new projects (it's cleaner and more intuitive), I wanted to demonstrate why there's nothing wrong with using both approaches in the same application. Through a practical example, I showed how to configure beans using both XML and annotations, and how they can peacefully coexist in the same project.",[16,8695,8696],{},"The key takeaway? If you're working with a legacy Spring application that uses XML configuration, there's no need to rush into converting everything to annotations. Focus your time on delivering value rather than rewriting working code just for the sake of modernization.",[47,8698],{"id":8699},"6arSdLciC_k",[28,8701,8703],{"id":8702},"graphql-performance-improvements","GraphQL Performance Improvements",[16,8705,8706],{},"In a recent video, I shared crucial performance optimizations for GraphQL APIs in Java and Spring, focusing on two key issues I recently presented at CodeMash 2025.",[16,8708,8709],{},"The first is the notorious N+1 problem - when you fetch a list of authors and then make separate database calls for each author's books. I demonstrated two solutions: using a JPA join fetch query and leveraging Spring for GraphQL's @BatchMapping annotation to consolidate multiple calls into one efficient request.",[16,8711,8712],{},"The second optimization involves virtual threads in Spring Boot 3.2 and JDK21. I showed how enabling virtual threads can significantly improve performance when making multiple concurrent calls. I also emphasized the importance of observability tools like Zipkin for identifying these performance bottlenecks in production environments.",[16,8714,8715],{},"These optimizations made a huge difference - turning what could be hundreds of separate database calls into a single efficient query, while maintaining clean, maintainable code.",[47,8717],{"id":8718},"6oOKpVn4Qqg",[28,8720,8722],{"id":8721},"debugging-spring-boot-api-integration-issues","Debugging Spring Boot API Integration Issues",[16,8724,8725],{},"In a recent video, I addressed a common challenge developers face when integrating with external APIs - handling JSON responses and converting them into usable Java objects.",[16,8727,8728],{},"Using a real-world example with the Polygon.io API, I demonstrated a systematic approach to troubleshooting integration issues. First, I showed how to properly model the JSON response using Java records, using @JsonProperty annotations to map abbreviated JSON field names (like \"T\" and \"C\") to meaningful Java variables (like \"ticker\" and \"close\").",[16,8730,8731],{},"The key insight came when tackling the HTTP client error many developers encounter: \"no suitable HTTP message converter found.\" The solution wasn't in the JSON mapping, but in properly setting the Accept header to expect JSON responses. By walking through both the data modeling and HTTP client configuration, I showed how to build robust API integrations in Spring Boot applications.",[16,8733,8734],{},"This tutorial highlighted important practices like writing focused unit tests for JSON deserialization and using Spring Boot's REST client effectively, skills that are valuable for any developer working with external APIs.",[47,8736],{"id":8737},"-iO9HkuSelo",[28,8739,8741],{"id":8740},"sending-email-in-java-with-sendgrid","Sending email in Java with SendGrid",[16,8743,8744],{},"In a this video, I walked through integrating SendGrid's email service into Java applications - a powerful alternative to the traditional Java Mail API.",[16,8746,8747],{},"I demonstrated how SendGrid offers several key advantages: better email deliverability rates, comprehensive analytics, and a modern REST API with robust SDKs. The implementation is straightforward - after adding the SendGrid dependency to your Maven project, you can create an email service class that handles all the sending logic.",[16,8749,8750],{},"Using practical code examples, I showed how to set up the SendGrid client, construct email requests, and handle responses. The real power comes from SendGrid's additional features like delivery tracking, spam handling, and email templates, making it a more complete solution for production applications.",[16,8752,8753],{},"While SendGrid is a paid service, they offer a free tier that's perfect for testing. This makes it an excellent option for developers who need reliable email delivery and detailed analytics in their Java applications.",[47,8755],{"id":8756},"i8Hvvo4ZITg",[28,8758,8760],{"id":8759},"how-i-built-a-tool-to-automatically-generate-documentation","How I built a tool to automatically generate documentation",[16,8762,8763],{},"In my final video of the week, I shared a practical tool I built to solve a common developer pain point - generating documentation for GitHub repositories. The tool, called \"repo-content-generator,\" streamlines the process of creating README files by combining repository analysis with AI assistance.",[16,8765,8766],{},"Here's how it works:",[3943,8768,8769,8772,8775,8778],{},[1274,8770,8771],{},"The application (built with Spring Boot) scans either a GitHub repository or local directory",[1274,8773,8774],{},"It intelligently filters content based on configurable include\u002Fexclude patterns",[1274,8776,8777],{},"It generates a single consolidated file containing relevant code and configuration",[1274,8779,8780],{},"This content can then be fed to an LLM (I use Claude) with specific documentation generation instructions",[16,8782,8783],{},"The key innovation is the workflow - rather than manually writing documentation or asking an LLM to directly analyze a repository, this tool creates a curated snapshot that can be used to generate accurate, well-structured documentation.",[16,8785,8786],{},"I demonstrated both the practical usage and technical implementation, including handling GitHub's API, recursive file traversal, and configurable content filtering. While I currently use it with Claude, the output can be used with any LLM that supports structured documentation generation.",[16,8788,8789],{},"The solution isn't just about automation - it's about creating consistent, comprehensive documentation even for small demo projects, saving valuable development time while maintaining quality.",[47,8791],{"id":8792},"QYchuz6nBR8",[16,8794,8795],{},[161,8796,1028],{},[16,8798,178,8799,8253],{},[23,8800,183],{"href":181,"rel":8801},[101],[16,8803,187],{},[16,8805,8258],{},[16,8807,8808],{},[23,8809,198],{"href":196,"rel":8810},[101],{"title":200,"searchDepth":201,"depth":201,"links":8812},[8813,8814,8815,8816,8817,8818,8819,8820],{"id":8617,"depth":201,"text":8618},{"id":8663,"depth":201,"text":8664},{"id":8670,"depth":201,"text":8671},{"id":8686,"depth":201,"text":8687},{"id":8702,"depth":201,"text":8703},{"id":8721,"depth":201,"text":8722},{"id":8740,"depth":201,"text":8741},{"id":8759,"depth":201,"text":8760},{"_id":8822,"path":8823,"title":8824,"description":8825,"meta":8826,"body":8828},"newsletter\u002Fnewsletter\u002F2025\u002F01\u002F21\u002Fjava-champions-conference.md","\u002Fnewsletter\u002F2025\u002F01\u002F21\u002Fjava-champions-conference","Java Champions Conference,  CodeMash 2025 Recap, and AI Agents in Spring","Happy Monday Tuesday and welcome to another edition of the newsletter. I was off yesterday as we observed Martin Luther King Jr so this is coming to you a day later this week.",{"slug":2935,"date":8827},"2025-01-21T07:00:00.000Z",{"type":13,"value":8829,"toc":8961},[8830,8838,8841,8844,8847,8849,8856,8859,8882,8886,8889,8892,8895,8901,8909,8913,8922,8931,8940,8943,8947,8952],[16,8831,8832,8833,8837],{},"Happy ",[8834,8835,8836],"del",{},"Monday"," Tuesday and welcome to another edition of the newsletter. I was off yesterday as we observed Martin Luther King Jr so this is coming to you a day later this week.",[16,8839,8840],{},"If you don’t know I live outside of Cleveland OH and this area of the world is experiencing some real cold weather right now. As I am writing this on Monday afternoon it is currently 10º  Fahrenheit with a low of 5º.  It is so cold around here that they have preemptively canceled school for the kids for the next 2 days.",[16,8842,8843],{},"Given that I will be staying in and catching up on a lot of things. It’s been a busy start to the new year but I feel like I am finally in a place to start crossing some things off my list. To start I have a backlog of about 10 videos that I’m ready to record and I am going to start tackling those this week.",[16,8845,8846],{},"I also am beginning to plan out a couple of courses for the 1st part of the year including a full course on Spring AI. If there is anything you would like to see specifically from me I’m always welcome to feedback and suggestions.",[28,8848,2936],{"id":2935},[16,8850,8851,8852,8855],{},"This week on Thursday 1\u002F23\u002F25 the ",[23,8853,2936],{"href":2989,"rel":8854},[101]," kicks off for free virtually. This is a 4-day conference where all talks are given by Java Champions. I have had a chance to attend (virtually) past conferences, and they were always packed full of amazing content.",[16,8857,8858],{},"This year's lineup is no different and I’m really looking forward to it. Here are a few of the talks I will be locked in on.",[1271,8860,8861,8868,8875],{},[1274,8862,8863],{},[23,8864,8867],{"href":8865,"rel":8866},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eiFnSevxAdk",[101],"It Takes Two to Tango – Designing Module Interactions in Modulithic Spring Applications - Oliver Drotbohm",[1274,8869,8870],{},[23,8871,8874],{"href":8872,"rel":8873},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=fmToimoSF4s",[101],"A Data-Oriented Programming Approach to REST APIs - Ken Kousen",[1274,8876,8877],{},[23,8878,8881],{"href":8879,"rel":8880},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ChEBO4d2U0o",[101],"How my views on teaching Java have changed - Kenneth Fogel",[28,8883,8885],{"id":8884},"codemash-2025-recap","CodeMash 2025 Recap",[16,8887,8888],{},"Last week was CodeMash right up the road from me in Sandusky OH. I believe this is my 3rd time attending and speaking at this wonderful conference. I usually take the family with me so the kids can enjoy the water park. We decided to skip that this year though because they were already sick for a week and didn’t want them to get sick again and miss more school.",[16,8890,8891],{},"It was another amazing conference and I particularly enjoyed catching up with my good friends Nate Schutta, Todd Sharp and Chris Judd. We had some time to chat about work, life and tech in general, and it is always great seeing them.",[16,8893,8894],{},"I gave a talk on building your first GraphQL API in Java using Spring for GraphQL. I have given a similar talk before and in fact I gave this talk last year at CodeMash. Knowing that I decided to switch it up this year and only came to the conference with 4 slides and decided I would do an hour of live coding.",[16,8896,8897],{},[74,8898],{"alt":8899,"src":8900},"CodeMash 2025","\u002Fimages\u002Fnewsletter\u002F2025\u002F01\u002F21\u002Fcodemash_2025.jpeg",[16,8902,8903,8904,184],{},"I thought it went really well, and it was pretty well attended. So thank you everyone who decided to spend an hour with me and I hope you learned something new. If you want to see the code we went through you can check it out on this ",[23,8905,8908],{"href":8906,"rel":8907},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fgraphql-books",[101],"GitHub Repo",[28,8910,8912],{"id":8911},"building-effective-agents-with-spring-ai","Building Effective Agents with Spring AI",[16,8914,8915,8916,8921],{},"If you have been paying attention to the world of AI all the buzz heading into 2025 is about AI Agents. If you’re curious about the basics of agents I wrote an article for my other newsletter ",[23,8917,8920],{"href":8918,"rel":8919},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fai-agents-the-next-evolution-in-automation",[101],"ByteSized AI"," where I cover the fundamentals of AI agents.",[16,8923,8924,8925,8930],{},"In December 2024 Anthropic came out with a really great blog post on ",[23,8926,8929],{"href":8927,"rel":8928},"https:\u002F\u002Fwww.anthropic.com\u002Fresearch\u002Fbuilding-effective-agents",[101],"how to build effective agents",". In this post, they share what they have learned from working with their customers and building agents themselves, and give practical advice for developers on how to build effective agents.",[16,8932,8933,8934,8939],{},"As a bit of a follow-up to this article Christian Tzolov (from the Spring AI team) just released an article “",[23,8935,8938],{"href":8936,"rel":8937},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F01\u002F21\u002Fspring-ai-agentic-patterns",[101],"Building Effective Agents with Spring AI - Part 1","” where he takes the lessons learned from the Anthropic blog post and applies them to Spring AI.",[16,8941,8942],{},"If you’re interested in building AI Agents in Java, and why wouldn’t you be this is a really great place to start. I’m going to be diving into voice assistants, Model Context Protocol (MCP) and AI agents in depth in 2025 so if that is something you’re interested in, stay tuned!",[16,8944,8945],{},[161,8946,1028],{},[16,8948,178,8949,8253],{},[23,8950,183],{"href":181,"rel":8951},[101],[16,8953,187,8954,191,8956,8958],{},[189,8955],{},[189,8957],{},[23,8959,198],{"href":196,"rel":8960},[101],{"title":200,"searchDepth":201,"depth":201,"links":8962},[8963,8964,8965],{"id":2935,"depth":201,"text":2936},{"id":8884,"depth":201,"text":8885},{"id":8911,"depth":201,"text":8912},{"_id":8967,"path":8968,"title":8969,"description":8970,"meta":8971,"body":8974},"newsletter\u002Fnewsletter\u002F2025\u002F01\u002F13\u002Fcodemash-2025-preview.md","\u002Fnewsletter\u002F2025\u002F01\u002F13\u002Fcodemash-2025-preview","CodeMash 2025 and a new way to bootstrap your Spring applications 🔥","Happy Monday and welcome to another edition of the newsletter. I’m attending and speaking at my first conference of the new year this week and I’m excited to kick off 2025. This week marks 3 years at VMware \u002F Broadcom for me which means I am heading into year number 4 of my dream job.",{"slug":8972,"date":8973},"codemash-2025-preview","2025-01-13T07:00:00.000Z",{"type":13,"value":8975,"toc":9069},[8976,8978,8987,8995,8998,9001,9006,9009,9012,9015,9018,9022,9028,9031,9040,9043,9052,9054,9060],[16,8977,8970],{},[16,8979,8980,8981,8986],{},"I ",[23,8982,8985],{"href":8983,"rel":8984},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fim-joining-vmware",[101],"published a blog post"," 3 years ago about my journey to VMware and how excited I was to be joining this amazing team. A lot has changed since then but I’m so grateful to still be here and doing what I love every single day. I’m currently writing a chapter on career management for my upcoming book “Fundamentals of Software Engineering” and I put I quote in there that I love",[2238,8988,8989,8990],{},"\n\"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle.\"\n",[1271,8991,8992],{},[1274,8993,8994],{},"Steve Jobs",[16,8996,8997],{},"I wholeheartedly believe this: while we sometimes need to take jobs out of necessity, we should never lose sight of our dreams. If you have a career goal, make sure you're working toward it every single day. I'm truly blessed to be doing what I love, and I'm looking forward to starting my fourth year in this position in 2025.",[28,8999,3404],{"id":9000},"codemash",[16,9002,9003],{},[74,9004],{"alt":3404,"src":9005},"\u002Fimages\u002Fnewsletter\u002F2025\u002F01\u002F13\u002Fcodemash.jpeg",[16,9007,9008],{},"CodeMash 2025 in beautiful Sandusky Ohio is taking place this week, and I’m looking forward to being back there. This is my 3rd time attending and speaking at this conference and it should be another great event.",[16,9010,9011],{},"This year I am speaking on building GraphQL APIs in Java but I’m putting a bit of a wrinkle on this years presentation. I have given many versions of this presentation that have all included a large number of slides. This year I have decided to cut my slides down to 3. We are going to spend the full hour live coding building out GraphQL APIs in Java and Spring and exploring all of the features of Spring for GraphQL.",[16,9013,9014],{},"This conference has a wide variety of tracks \u002F languages and while it isn’t a huge Java conference there are going to be some really good Java talks. I will check out as many as I can and tell you about them next week. I’m also really excited to catch up with my friends Chris Judd and Nate Schutta.",[16,9016,9017],{},"It should be a great week and if you will be there please say hi 👋🏻",[28,9019,9021],{"id":9020},"spring-initializr-on-raycast","Spring Initializr on Raycast",[16,9023,9024],{},[74,9025],{"alt":9026,"src":9027},"Raycast Extension","\u002Fimages\u002Fnewsletter\u002F2025\u002F01\u002F13\u002Fspring_init_raycast_extension.png",[16,9029,9030],{},"One of my favorite Mac apps just got better—thanks to a little help from me! If you're on a Mac and haven't heard of Raycast, it's an application that replaces Spotlight and serves as your shortcut for everything. I use it to quickly launch apps, and it has an amazing set of extensions for doing pretty much anything.",[16,9032,9033,9034,9039],{},"Anyone can build these extensions by checking out the Raycast ",[23,9035,9038],{"href":9036,"rel":9037},"https:\u002F\u002Fdevelopers.raycast.com\u002Fbasics\u002Fcreate-your-first-extension",[101],"documentation",". Despite my limited experience with React, I figured I could build my first extension with the help of AI.",[16,9041,9042],{},"I wanted to create an extension that would let you build a new Spring Boot Application directly from Raycast. The web interface and IDE extensions all pull their metadata from a single endpoint, which meant I could fetch the API data without needing to constantly update the extension.",[16,9044,9045,9046,9051],{},"I'm happy to announce that this extension is now available in the ",[23,9047,9050],{"href":9048,"rel":9049},"https:\u002F\u002Fwww.raycast.com\u002Fdanvega\u002Fspring-initializr",[101],"Raycast Store",". Please give it a try—I'd love your feedback.",[28,9053,1028],{"id":171},[16,9055,178,9056,8253],{},[23,9057,183],{"href":9058,"rel":9059},"https:\u002F\u002Fx.com\u002Ftherealdanvega",[101],[16,9061,187,9062,191,9064,9066],{},[189,9063],{},[189,9065],{},[23,9067,198],{"href":198,"rel":9068},[101],{"title":200,"searchDepth":201,"depth":201,"links":9070},[9071,9072,9073],{"id":9000,"depth":201,"text":3404},{"id":9020,"depth":201,"text":9021},{"id":171,"depth":201,"text":1028},{"_id":9075,"path":9076,"title":9077,"description":9078,"meta":9079,"body":9082},"newsletter\u002Fnewsletter\u002F2024\u002F12\u002F23\u002Fspring-grpc-preview.md","\u002Fnewsletter\u002F2024\u002F12\u002F23\u002Fspring-grpc-preview","Spring Security 6.4 Released, JTE Production Guide, and Spring gRPC Preview","Happy Monday and welcome to another edition of the newsletter. It’s hard to believe that Christmas is in a few days and then we turn the pages on 2024 and head into the new year. We are hosting a special Spring Office Hours today at 1 PM EDT over on the Spring Developer YouTube Channel. In this episode we will review what happened in Java and Spring and why its an exciting time to be a Spring Developer.",{"slug":9080,"date":9081},"spring-grpc-preview","2024-12-23T07:00:00.000Z",{"type":13,"value":9083,"toc":9323},[9084,9093,9097,9106,9109,9117,9120,9123,9126,9130,9133,9136,9141,9156,9161,9169,9177,9180,9183,9187,9194,9199,9202,9207,9224,9229,9243,9248,9267,9273,9287,9290,9294,9297,9300,9303,9306,9310,9314],[16,9085,9086,9087,9092],{},"Happy Monday and welcome to another edition of the newsletter. It’s hard to believe that Christmas is in a few days and then we turn the pages on 2024 and head into the new year. We are hosting a special Spring Office Hours today at 1 PM EDT over on the ",[23,9088,9091],{"href":9089,"rel":9090},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=moWjYv7j56s",[101],"Spring Developer YouTube Channel",". In this episode we will review what happened in Java and Spring and why its an exciting time to be a Spring Developer.",[28,9094,9096],{"id":9095},"spring-security-64-features-interview-with-rob-winch","Spring Security 6.4 Features Interview with Rob Winch",[16,9098,9099,9100,9105],{},"In this week's Spring Office Hours, I sat down with Rob Winch, Spring Security project lead, to explore the latest features in ",[23,9101,9104],{"href":9102,"rel":9103},"https:\u002F\u002Fdocs.spring.io\u002Fspring-security\u002Freference\u002Fwhats-new.html",[101],"Spring Security 6.4"," (included with Spring Boot 3.4).",[16,9107,9108],{},"Two major highlights from this release:",[1271,9110,9111,9114],{},[1274,9112,9113],{},"One-time token login: A streamlined authentication method allowing users to log in via email-delivered tokens, perfect for applications prioritizing user convenience.",[1274,9115,9116],{},"Passkey support: A modern authentication approach using public-key cryptography and biometrics, offering enhanced security without password management headaches.",[16,9118,9119],{},"Rob also emphasized preparing for Spring Security 7.0 by adopting the Lambda DSL configuration style. While both configuration styles work in 6.4, only Lambda DSL will be supported in 7.0.",[16,9121,9122],{},"Catch the full discussion on Spring Developer YouTube channel or your favorite podcast platform to learn more about these features and implementation details.",[47,9124],{"id":9125},"FxfrJbdQ0Bo",[28,9127,9129],{"id":9128},"taking-jte-apps-to-production-with-spring-boot","Taking JTE Apps to Production with Spring Boot",[16,9131,9132],{},"In my latest video, I explore how to deploy Spring Boot applications using Java Template Engine (JTE) to production. If you haven't tried JTE yet, it's a great alternative to Thymeleaf or Mustache that offers pre-compiled templates and better IDE integration for working with Java objects. It's now available right from Spring Initializer!",[16,9134,9135],{},"I ran into some interesting challenges while taking my JTE apps to production, and I wanted to share two key solutions I discovered:",[16,9137,9138],{},[161,9139,9140],{},"For JAR Deployments:",[1271,9142,9143,9153],{},[1274,9144,9145,9146,529,9149,9152],{},"You'll need to set ",[469,9147,9148],{},"jte.development-mode=false",[469,9150,9151],{},"jte.use-precompiled-templates=true"," in your production properties",[1274,9154,9155],{},"I show how to use Spring profiles to keep your dev and prod configurations separate",[16,9157,9158],{},[161,9159,9160],{},"For Native Images with GraalVM:",[1271,9162,9163,9166],{},[1274,9164,9165],{},"The trick is properly configuring runtime hints for template resolution",[1274,9167,9168],{},"I demonstrate the exact implementation needed to get your templates working in native images",[16,9170,9171,9172,184],{},"I walk through everything using a simple todo application, and you can find all the code on my GitHub at ",[23,9173,9176],{"href":9174,"rel":9175},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fjte-production",[101],"github.com\u002Fdanvega\u002Fjte-production",[16,9178,9179],{},"Whether you're just getting started with JTE or looking to deploy existing applications, these solutions should help you avoid the common pitfalls I encountered. Check out the full video for the step-by-step walkthrough!",[47,9181],{"id":9182},"DuVxoVc_vD4",[28,9184,9186],{"id":9185},"spring-grpc","Spring gRPC",[16,9188,9189,9190,184],{},"If you haven’t noticed there is a new starter (currently experimental) on the Spring Initializr for ",[23,9191,9186],{"href":9192,"rel":9193},"https:\u002F\u002Fgithub.com\u002Fspring-projects-experimental\u002Fspring-grpc",[101],[16,9195,9196],{},[74,9197],{"alt":9186,"src":9198},"\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F22\u002Fspring-grpc.png",[16,9200,9201],{},"Spring gRPC is a new project that brings gRPC development into the Spring ecosystem, making it easier to build gRPC applications using familiar Spring patterns and conventions. Here are the key points:",[3943,9203,9204],{},[1274,9205,9206],{},"Core Features:",[1271,9208,9209,9212,9215,9218,9221],{},[1274,9210,9211],{},"Spring-friendly API and abstractions for gRPC development",[1274,9213,9214],{},"Spring Boot starter with Auto Configuration support",[1274,9216,9217],{},"Dependency injection integration",[1274,9219,9220],{},"Support for both client and server implementations",[1274,9222,9223],{},"Native image support for GraalVM",[3943,9225,9226],{"start":201},[1274,9227,9228],{},"Getting Started:",[1271,9230,9231,9234,9237,9240],{},[1274,9232,9233],{},"Can be initialized through Spring Initializr",[1274,9235,9236],{},"Uses standard protobuf definitions for service contracts",[1274,9238,9239],{},"Works with both Maven and Gradle build systems",[1274,9241,9242],{},"Default server port is 9090",[3943,9244,9245],{"start":206},[1274,9246,9247],{},"Key Components:",[1271,9249,9250,9257,9264],{},[1274,9251,9252,9253,9256],{},"Server side: Uses ",[469,9254,9255],{},"@Service"," annotations with gRPC generated base classes",[1274,9258,9259,9260,9263],{},"Client side: Provides ",[469,9261,9262],{},"GrpcChannelFactory"," for creating client connections",[1274,9265,9266],{},"Configuration can be done through standard Spring properties files",[3943,9268,9270],{"start":9269},4,[1274,9271,9272],{},"Notable Benefits:",[1271,9274,9275,9278,9281,9284],{},[1274,9276,9277],{},"Simplifies gRPC integration in Spring applications",[1274,9279,9280],{},"Provides Spring Boot-style autoconfiguration",[1274,9282,9283],{},"Supports Spring Boot 3.4.x",[1274,9285,9286],{},"Offers configuration externalization through properties",[16,9288,9289],{},"It essentially brings the \"Spring way\" of doing things to gRPC development, making it more accessible to Spring developers while maintaining gRPC's powerful features.",[16,9291,9292],{},[161,9293,4229],{},[16,9295,9296],{},"The story about Google’s new chip Willow is wild and I feel like nobody is even talking about it 🤯",[166,9298],{"id":9299},"1870174887794684092",[16,9301,9302],{},"I am currently working on the career management chapter of my upcoming book “Fundamentals of Software Engineering”. While I was putting all my thoughts together I did a little self reflection on my career. A good reminder that it’s hard to see a forest through the trees but everything on my path happened for a reason.",[166,9304],{"id":9305},"1869578954706940131",[16,9307,9308],{},[161,9309,1028],{},[16,9311,178,9312,8253],{},[23,9313,183],{"href":200},[16,9315,187,9316,191,9318,9320],{},[189,9317],{},[189,9319],{},[23,9321,198],{"href":198,"rel":9322},[101],{"title":200,"searchDepth":201,"depth":201,"links":9324},[9325,9326,9327],{"id":9095,"depth":201,"text":9096},{"id":9128,"depth":201,"text":9129},{"id":9185,"depth":201,"text":9186},{"_id":9329,"path":9330,"title":9331,"description":9332,"meta":9333,"body":9336},"newsletter\u002Fnewsletter\u002F2024\u002F12\u002F16\u002Fscm-ai-productivity-hack.md","\u002Fnewsletter\u002F2024\u002F12\u002F16\u002Fscm-ai-productivity-hack","Spring Common Mistakes, AI Productivity Hack & IntelliJ Tips and Tricks","Happy Monday and welcome to another edition of the newsletter. It is really hard to believe that it is the middle of December. Well now that I think about it the weather has been extremely cold so it’s not that hard to believe. My family and I had a brunch with Santa even over the weekend and the girls absolutely loved it. I’m not a fan of this cold weather we have right now but I love seeing the girls happy so it makes everything worth it.",{"slug":9334,"date":9335},"scm-ai-productivity-hack","2024-12-16T09:00:00.000Z",{"type":13,"value":9337,"toc":9457},[9338,9340,9346,9349,9353,9362,9365,9368,9372,9381,9384,9387,9390,9394,9402,9405,9409,9412,9415,9418,9424,9428,9431,9434,9437,9439,9443,9448],[16,9339,9332],{},[16,9341,9342],{},[74,9343],{"alt":9344,"src":9345},"Brunch with Santa","\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F16\u002Fsanta_brunch.jpeg",[16,9347,9348],{},"In today’s newsletter I want to start off by talking about some of the common mistakes we make as Spring Developers. From there we will dive into a productivity hack that I have been using when working with Large Language Models that has been a real time saver. I’ll share with you a conversation I had with Siva Reddy last week on Spring Office hours and my move to Figma for YouTube Thumbnail designs. I hope you have an amazing week as we start to close out the year!",[28,9350,9352],{"id":9351},"spring-common-mistakes","Spring Common Mistakes",[16,9354,9355,9356,9361],{},"Last week I gave a presentation for the ",[23,9357,9360],{"href":9358,"rel":9359},"https:\u002F\u002Fwww.linkedin.com\u002Fshowcase\u002Fdatev-software-craft-community",[101],"Software Craft Community at Datev"," on common mistakes Spring Developers make. I have talked about a few of these mistakes before but this is the first time that I put a bunch of them into presentation format. I actually have a ton of material on this and if we did a little more live coding this would probably be about a 2 hour presentation.",[16,9363,9364],{},"I want to thank Datev for having me and allowing me to ramble and for everyone who attended and asked so many great questions. If you’re interested in a deeper dive on this let me know, I’m considering making a series out of this for the YouTube channel.",[47,9366],{"id":9367},"jAsxVPCOATA",[28,9369,9371],{"id":9370},"the-best-ai-productivity-hack","The Best AI Productivity Hack",[16,9373,9374,9375,9380],{},"I want to share a productivity tip that's transformed my AI workflow: ",[23,9376,9379],{"href":9377,"rel":9378},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fai-productivity-hack",[101],"using voice dictation instead of typing",". Rather than spending time crafting elaborate written prompts for tools like ChatGPT and Claude, I use my computer's built-in dictation feature (activated with a simple keyboard shortcut) to speak naturally to AI models.",[16,9382,9383],{},"The setup is straightforward – enable dictation in your system settings, choose a microphone, and assign a keyboard shortcut. For best results, use a quality microphone and structure your thoughts before speaking. The real power comes from treating AI interactions like conversations, iterating through dialogue rather than trying to craft perfect prompts.",[16,9385,9386],{},"I find this especially useful for content creation, technical documentation, and problem-solving discussions. The best part? It works anywhere there's a text input box, making it a universal tool for faster, more natural AI interactions. This simple change has saved me countless hours and made working with AI feel as natural as talking to a colleague.",[47,9388],{"id":9389},"bexmnv-l8ps",[28,9391,9393],{"id":9392},"intellij-tips-and-tricks-with-siva","IntelliJ Tips and Tricks with Siva",[16,9395,9396,9397,9401],{},"It was great to chat with Siva Reddy, Developer Advocate at JetBrains last week on ",[23,9398,93],{"href":9399,"rel":9400},"https:\u002F\u002Fspring-office-hours.transistor.fm\u002Fepisodes\u002Fs3e42-intellij-tips-tricks-with-siva-reddy",[101],". In this episode we talked with Siva about being a Developer Advocate, Spring & IntelliJ. I really enjoyed our conversation and I hope you will too.",[47,9403],{"id":9404},"i0pokvrl4xc",[28,9406,9408],{"id":9407},"youtube-thumbnail-designs","YouTube Thumbnail Designs",[16,9410,9411],{},"I have used Adobe XD for designing my YouTube thumbnails for as long as I can remember. I use it because I have a subscription to the Creative Cloud Applications and its always just worked for me. Well Adobe is really no longer updating this software and when I got my new laptop I decided it was time to install and learn Figma.",[16,9413,9414],{},"I am not a designer but I find tools like this are easy to learn and I enjoy using them. The thumbnails I create are nothing special but I do try and make them nice. In macOS you can go into your photos app and find a image and copy the subject so I get a nice headshot of myself without the background and then paste that into my thumbnail. From there I try to use big text with simple backgrounds and add any little touches I can to it.",[16,9416,9417],{},"Here is my current thumbnail design board for some upcoming videos.",[16,9419,9420],{},[74,9421],{"alt":9422,"src":9423},"Figma","\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F16\u002Ffigma.png",[16,9425,9426],{},[161,9427,4229],{},[16,9429,9430],{},"Chat GPT introduced projects last week 🤩",[166,9432],{"id":9433},"1865118162770928114",[16,9435,9436],{},"I am going to be working on more Spring AI and Google Gemini videos in the near future.",[166,9438],{"id":9433},[16,9440,9441],{},[161,9442,1028],{},[16,9444,178,9445,184],{},[23,9446,183],{"href":181,"rel":9447},[101],[16,9449,187,9450,191,9452,9454],{},[189,9451],{},[189,9453],{},[23,9455,198],{"href":198,"rel":9456},[101],{"title":200,"searchDepth":201,"depth":201,"links":9458},[9459,9460,9461,9462],{"id":9351,"depth":201,"text":9352},{"id":9370,"depth":201,"text":9371},{"id":9392,"depth":201,"text":9393},{"id":9407,"depth":201,"text":9408},{"_id":9464,"path":9465,"title":9466,"description":9467,"meta":9468,"body":9471},"newsletter\u002Fnewsletter\u002F2024\u002F12\u002F09\u002Fspring-init-bookmarks.md","\u002Fnewsletter\u002F2024\u002F12\u002F09\u002Fspring-init-bookmarks","Spring Initializr Bookmarks, GraphQL Query by Example and Open AI's 12 days of Shipmas","Happy Monday and welcome to another edition of the newsletter. This past weekened was a much needed one for me. My wife and I were able to go on a date, we got a bunch of decorating done around the house and we had brunch with Santa 🧑‍🎄 These girls make me so happy 🤩",{"slug":9469,"date":9470},"spring-init-bookmarks","2024-12-09T09:00:00.000Z",{"type":13,"value":9472,"toc":9638},[9473,9475,9480,9485,9499,9508,9528,9535,9539,9542,9545,9549,9557,9560,9577,9580,9583,9587,9590,9596,9599,9606,9610,9613,9615,9618,9622,9628],[16,9474,9467],{},[16,9476,9477],{},[74,9478],{"alt":9344,"src":9479},"\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F09\u002Fbws_01.jpeg",[16,9481,9482],{},[74,9483],{"alt":9344,"src":9484},"\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F09\u002Fbws_02.jpeg",[16,9486,9487,9488,9493,9494,9498],{},"This week I’m giving a presentation on common mistakes that Spring Developers make. I made ",[23,9489,9492],{"href":9490,"rel":9491},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PbkROQPTBao",[101],"a video"," earlier this year when I went over some of the most common mistakes I could think of. We also did a whole show on ",[23,9495,93],{"href":9496,"rel":9497},"https:\u002F\u002Fspring-office-hours.transistor.fm\u002Fepisodes\u002Fspring-office-hours-s3e4-common-spring-developer-mistakes",[101]," about this topic.",[16,9500,9501,9502,9507],{},"This is going to be a 60-minute version of this talk but I quickly built out a ",[23,9503,9506],{"href":9504,"rel":9505},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fscm-workshop",[101],"repo"," that has a few hours of content. I think my main goal with this talk is for developers to walk away and learning 1 or 2 new things that didn’t already know. Some of the demos I walk through might be pretty common to a lot of developers but if you can pick up 1 thing from this talk and then take it back and improve your codebase I will consider it a success.",[16,9509,9510,9511,9516,9517,9522,9523,9527],{},"Last week I was lucky to ",[23,9512,9515],{"href":9513,"rel":9514},"https:\u002F\u002Fspring-office-hours.transistor.fm\u002Fepisodes\u002Fs3e41-springs-hidden-powers-with-greg-turnquist",[101],"chat"," with my good friend Greg Turnquist on Spring Office Hours. We got to catch up on what Greg is doing over at ",[23,9518,9521],{"href":9519,"rel":9520},"https:\u002F\u002Fwww.cockroachlabs.com\u002F",[101],"Cockroach Labs"," and I learned a few new things which is a common occurrence when I get to chat with Greg. This week we are sitting down with JetBrains Developer Advocate ",[23,9524,9525],{"href":9525,"rel":9526},"https:\u002F\u002Fx.com\u002Fsivalabs?utm_source=dan-vega.beehiiv.com&utm_medium=referral&utm_campaign=spring-initializr-bookmarks-graphql-query-by-example-and-open-ai-s-12-days-of-shipmas",[101]," and I’m looking forward to that talk.",[16,9529,9530,9531,9534],{},"Speaking of ",[23,9532,93],{"href":4154,"rel":9533},[101]," we only have a few more episodes and then season 3 will come to an end. Pretty crazy to think that we are heading into Season 4 in less than a month. This year has been a big year for the podcast and I can’t thank you all enough for the support.",[28,9536,9538],{"id":9537},"spring-initializr-bookmarks","Spring Initializr Bookmarks",[16,9540,9541],{},"The Spring Initializer has introduced a helpful new bookmarking feature that lets developers save their frequently used project configurations. Users can now create a project setup with their preferred settings (like Java version, dependencies, and build tools), and save it as a named bookmark for future use. For example, you might save a configuration for Spring AI projects with Claude, including specific dependencies like Web, Anthropic Cloud, PGVector, Docker Compose, and actuator. These bookmarks are easily accessible through a \"starred\" section, where they can be managed, edited, or deleted. The tool also maintains a history of recent configurations. If you head over to Twitter using the link below you can check out a short video I did on this feature.",[166,9543],{"id":9544},"1865063943095320781",[28,9546,9548],{"id":9547},"graphql-repository-query-by-example","GraphQL Repository Query By Example",[16,9550,9551,9552,9556],{},"I put together a ",[23,9553,6034],{"href":9554,"rel":9555},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-graphql-query-by-example",[101]," and video that demonstrates how to build a GraphQL API using Spring's @GraphQLRepository annotation combined with Query by Example (QBE) functionality.I show you how to create a simple book management system that allows flexible querying without writing extensive boilerplate code. Instead of creating multiple custom repository methods for different search combinations (by title, author, year, etc.), QBE allows developers to create dynamic queries by example.",[16,9558,9559],{},"The key steps covered include:",[1271,9561,9562,9565,9568,9571,9574],{},[1274,9563,9564],{},"Setting up a Spring Boot project with GraphQL, JPA, and Postgres",[1274,9566,9567],{},"Creating a GraphQL schema for books with input types for flexible querying",[1274,9569,9570],{},"Implementing a JPA entity and repository that extends both JpaRepository and QueryByExampleExecutor",[1274,9572,9573],{},"Using the @GraphQLRepository annotation to automatically wire up GraphQL queries to repository methods",[1274,9575,9576],{},"Testing the API through GraphQL's playground interface",[16,9578,9579],{},"The main benefit highlighted is the significant reduction in boilerplate code - developers don't need to write individual controller methods or data fetchers, as the @GraphQLRepository annotation handles this automatically. The approach is particularly useful for rapid prototyping and building flexible search functionality.",[47,9581],{"id":9582},"J8vC8RflPPY",[28,9584,9586],{"id":9585},"openai-releases-gpt-o1","OpenAI Releases GPT-o1",[16,9588,9589],{},"OpenAI kicked off their \"12 Days of Shipmas\" with the release of GPT-o1, a groundbreaking AI model that prioritizes advanced reasoning capabilities over raw processing power. Building on their earlier o1-preview and o1-mini models, GPT-o1 shows remarkable improvements in mathematical and scientific reasoning, achieving 83.3% accuracy on Mathematics Olympiad problems and reaching the 89th percentile in Codeforces competitions.",[16,9591,9592],{},[74,9593],{"alt":9594,"src":9595},"Reasoning with Robots","\u002Fimages\u002Fnewsletter\u002F2024\u002F12\u002F09\u002Frobots-reasoning-with-each-other-in-the-style-of-p.jpeg",[16,9597,9598],{},"The model introduces a sophisticated \"chain-of-thought\" methodology, allowing it to break down complex problems into manageable steps and think through solutions more thoroughly. Along with the model release, OpenAI launched ChatGPT Pro, a new $200 monthly subscription tier offering unlimited access to both GPT-o1 and GPT-4o, letting users leverage each model's unique strengths – GPT-4o for faster, general-purpose tasks and GPT-o1 for complex technical problem-solving requiring deeper reasoning.",[16,9600,9601,9602,184],{},"If you want to read more about It I wrote an article on my other newsletter, ",[23,9603,8920],{"href":9604,"rel":9605},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fopenai-s-gpt-o1-a-new-era-of-ai-reasoning",[101],[16,9607,9608],{},[161,9609,4229],{},[16,9611,9612],{},"Are you looking for resources to learn Spring AI?",[166,9614],{"id":9433},[166,9616],{"id":9617},"1863767002088694093",[16,9619,9620],{},[161,9621,1028],{},[16,9623,178,9624,9627],{},[23,9625,181],{"href":181,"rel":9626},[101],").",[16,9629,9630,9631,191,9633,9635],{},"Happy Coding",[189,9632],{},[189,9634],{},[23,9636,198],{"href":198,"rel":9637},[101],{"title":200,"searchDepth":201,"depth":201,"links":9639},[9640,9641,9642],{"id":9537,"depth":201,"text":9538},{"id":9547,"depth":201,"text":9548},{"id":9585,"depth":201,"text":9586},{"_id":9644,"path":9645,"title":9646,"description":9647,"meta":9648,"body":9651},"newsletter\u002Fnewsletter\u002F2024\u002F11\u002F25\u002Fspring-boot-3-4-0-released.md","\u002Fnewsletter\u002F2024\u002F11\u002F25\u002Fspring-boot-3-4-0-released","Spring Boot 3.4, Spring AI M4 and AI Agents!","Happy Monday and welcome to another edition of the newsletter. It’s Thanksgiving here in the US this week so I thought I would start this off my saying what I’m thankful for. I’m first and foremost thankful for my family. They are why I wake up every day and they make everything worth it.",{"slug":9649,"date":9650},"spring-boot-3-4-0-released","2024-11-25T09:00:00.000Z",{"type":13,"value":9652,"toc":9918},[9653,9655,9658,9661,9664,9670,9673,9677,9684,9687,9690,9693,9696,9707,9710,9721,9724,9735,9738,9749,9752,9762,9765,9769,9774,9783,9786,9797,9800,9811,9814,9825,9828,9839,9842,9846,9851,9854,9857,9860,9874,9881,9890,9894,9897,9900,9904,9909],[16,9654,9647],{},[16,9656,9657],{},"I’m thankful for all of you. I know we get caught up in this world of social media on how many followers we have (I’m guilty of this) but It’s the wrong way to look at it. I would much rather have 100 followers on any platform that wanted to learn from me or cared what I have to say as opposed to 100,000 followers who didn’t really care about me.",[16,9659,9660],{},"I love what I get to do every single day. I love to learn and teach what I know back to the community. This could be through my YouTube channel, newsletter, blog, presentation or any of the number of things I’m working on. The fact that I still get excited rolling into work every day is the gift of a lifetime and I don’t take it for granted.",[16,9662,9663],{},"So thank you to all of you who follow me here or on social media and allow me to ramble about the things I am passionate about ❤️",[16,9665,9666],{},[74,9667],{"alt":9668,"src":9669},"Thankful for you","\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F25\u002Fthankful-for-being-your-teacher-2.png",[16,9671,9672],{},"In this issue I want to talk about Spring Boot 3.4, Spring AI and AI Agents.",[28,9674,9676],{"id":9675},"spring-boot-34","Spring Boot 3.4",[16,9678,9679,9680,184],{},"It’s a great time to be a Java and Spring developer. Every 6 months we get a new version of Java with the latest version 23 being released in September. Last week Spring Boot 3.4 was released and it came packed full of updates. If you want to learn more about what changed along with what’s new you can check out the ",[23,9681,7253],{"href":9682,"rel":9683},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.4-Release-Notes",[101],[16,9685,9686],{},"I wasn’t able to be a part of it last week but DaShaun and Phil Webb had a special edition of the Spring Office Hours Podcast had a release party. It’s always great hearing from Phil and the Spring Team about all of their hard work.",[47,9688],{"id":9689},"ivKvlLJ_y4s",[16,9691,9692],{},"I will be working on some content around Spring Boot 3.4 over the next few weeks and here is what I plan on focusing on:",[16,9694,9695],{},"🔄 HTTP Client Enhancements",[1271,9697,9698,9701,9704],{},[1274,9699,9700],{},"Improved RestClient\u002FRestTemplate auto-configuration",[1274,9702,9703],{},"Support for multiple HTTP clients (Apache, Jetty, Reactor Netty, JDK)",[1274,9705,9706],{},"Graceful shutdown now enabled by default",[16,9708,9709],{},"📊 Observability & Logging",[1271,9711,9712,9715,9718],{},[1274,9713,9714],{},"New structured logging support (ECS, GELF, Logstash)",[1274,9716,9717],{},"Enhanced OTLP tracing with gRPC transport",[1274,9719,9720],{},"Improved SSL monitoring and certificate health checks",[16,9722,9723],{},"🧪 Testing & Development",[1271,9725,9726,9729,9732],{},[1274,9727,9728],{},"AssertJ support for MockMvc",[1274,9730,9731],{},"Enhanced Testcontainers and Docker Compose support",[1274,9733,9734],{},"New @Fallback annotation for conditional beans",[16,9736,9737],{},"🛠️ Infrastructure Updates",[1271,9739,9740,9743,9746],{},[1274,9741,9742],{},"Smaller container images with new tiny builder default",[1274,9744,9745],{},"Virtual threads support in key components",[1274,9747,9748],{},"Improved bean validation and configuration properties",[16,9750,9751],{},"🔄 Framework Updates",[1271,9753,9754,9757,9759],{},[1274,9755,9756],{},"Spring Framework 6.2",[1274,9758,9104],{},[1274,9760,9761],{},"Spring Data 2024.1",[16,9763,9764],{},"This release focuses on developer experience, observability, and performance while maintaining backward compatibility.",[28,9766,9768],{"id":9767},"spring-ai-m4","Spring AI M4",[16,9770,9771],{},[74,9772],{"alt":8203,"src":9773},"\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F25\u002Fspring-ai---robots-writing-code-4.png",[16,9775,9776,9777,9782],{},"Last week also brought us the ",[23,9778,9781],{"href":9779,"rel":9780},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F11\u002F20\u002Fspring-ai-1-0-0-m4-released",[101],"Spring AI 1.0.0 M4 release",", and it's packed with exciting new features that make AI integration even more accessible for Spring developers. Here are the highlights I'm particularly excited about:",[16,9784,9785],{},"🤖 Amazon Bedrock Converse",[1271,9787,9788,9791,9794],{},[1274,9789,9790],{},"New unified interface for Amazon's AI chat models",[1274,9792,9793],{},"Adds powerful features like Tool Calling and Visual capabilities",[1274,9795,9796],{},"If you're using Amazon's models, this is the way forward",[16,9798,9799],{},"⚡ Supercharged Function Calling",[1271,9801,9802,9805,9808],{},[1274,9803,9804],{},"Better support for Java functions (Function, Supplier, Consumer)",[1274,9806,9807],{},"New Tool Context for state management",[1274,9809,9810],{},"Setting up the foundation for @ToolMapping coming in M5",[16,9812,9813],{},"🎯 Kotlin First-Class Support",[1271,9815,9816,9819,9822],{},[1274,9817,9818],{},"Finally, proper Kotlin support with type-safe APIs",[1274,9820,9821],{},"Direct Kotlin function registration as AI tools",[1274,9823,9824],{},"Makes AI integration feel native for Kotlin developers",[16,9826,9827],{},"📚 Advanced RAG (Retrieval Augmented Generation)",[1271,9829,9830,9833,9836],{},[1274,9831,9832],{},"New experimental modular system",[1274,9834,9835],{},"Think LEGO blocks for building AI retrieval systems",[1274,9837,9838],{},"Flexible components for query transformation, routing, and document handling",[16,9840,9841],{},"The team is pushing hard toward GA, with M5 planned for December and the final release coming in January. If you're interested in AI development with Spring, now is a great time to start experimenting with these features.",[28,9843,9845],{"id":9844},"ai-agents","AI Agents",[16,9847,9848],{},[74,9849],{"alt":9845,"src":9850},"\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F25\u002Frobots-acting-as-agents-or-virtual-assistants-5.jpeg",[16,9852,9853],{},"There's been a lot of excitement around AI Agents lately, and for good reason. In my latest ByteSized AI newsletter, I wanted to cut through the noise and explain why they're such a big deal.",[16,9855,9856],{},"Here's the key insight: Traditional AI is reactive - like a really smart assistant waiting for your questions. You prompt, it responds. But AI Agents? They're proactive players that can observe, decide, and act on their own. Think of them as AI systems that don't just answer questions, but can actually get things done.",[16,9858,9859],{},"🤖 What makes them special:",[1271,9861,9862,9865,9868,9871],{},[1274,9863,9864],{},"They understand their environment",[1274,9866,9867],{},"Make autonomous decisions",[1274,9869,9870],{},"Take actions to achieve goals",[1274,9872,9873],{},"Learn and adapt from experience",[16,9875,9876,9877,184],{},"Want to dive deeper? I break it all down in my ",[23,9878,9880],{"href":8918,"rel":9879},[101],"latest article",[16,9882,9883,9884,9889],{},"I really liked ",[23,9885,9888],{"href":9886,"rel":9887},"https:\u002F\u002Fyoutu.be\u002FKrRD7r7y7NY",[101],"this video"," from Andrew Ng who is one the great minds we have in the AI space. In this presentation Andrew goes through his definition of AI agents and I feel like I learned a lot from this and definitely worth a watch.",[16,9891,9892],{},[161,9893,4229],{},[16,9895,9896],{},"I don’t know what is going on with YouTube lately but one video seems to be getting a lot of love. 160,000 views in 28 days is pretty wild. If all of my videos were",[166,9898],{"id":9899},"1860769389454184468",[16,9901,9902],{},[161,9903,1028],{},[16,9905,178,9906,9627],{},[23,9907,181],{"href":181,"rel":9908},[101],[16,9910,9630,9911,191,9913,9915],{},[189,9912],{},[189,9914],{},[23,9916,198],{"href":198,"rel":9917},[101],{"title":200,"searchDepth":201,"depth":201,"links":9919},[9920,9921,9922],{"id":9675,"depth":201,"text":9676},{"id":9767,"depth":201,"text":9768},{"id":9844,"depth":201,"text":9845},{"_id":9924,"path":9925,"title":9926,"description":9927,"meta":9928,"body":9931},"newsletter\u002Fnewsletter\u002F2024\u002F11\u002F18\u002Fnew-macbook-pro-m4.md","\u002Fnewsletter\u002F2024\u002F11\u002F18\u002Fnew-macbook-pro-m4","Setting up a new MacBook Pro, Spring  Raycast Extension and website updates","Happy Monday and welcome to another edition of the newsletter. Last week I got a new laptop and spent some time setting it up. I have always wanted to share my process on how I set up a new machine but in the past I have lacked the patience to do so. This time around I waited patiently for a few days and live-streamed my setup.",{"slug":9929,"date":9930},"new-macbook-pro-m4","2024-11-18T09:00:00.000Z",{"type":13,"value":9932,"toc":10089},[9933,9935,9944,9947,9951,9954,9957,9971,9980,9983,9986,9990,9993,9996,10005,10011,10015,10024,10027,10049,10053,10056,10059,10062,10065,10068,10071,10075,10080],[16,9934,9927],{},[16,9936,9937,9938,9943],{},"I recently joined ",[23,9939,9942],{"href":9940,"rel":9941},"https:\u002F\u002Fbsky.app\u002Fprofile\u002Fdanvega.dev",[101],"BlueSky"," and so far I have been enjoying less noise. I’m not in the camp of leaving Twitter because I do enjoy it there, but I thought I would check it out. If you’re over there please give me a follow and I will give you one back if I can. I will say that has been one annoying feature of the platform so far is I can’t find a way to silence notifications on my phone.",[16,9945,9946],{},"In this edition of the newsletter I will share with you the replay of that live stream and talk a little bit about my setup. During the setup I talked about one of my favorite applications for macOS, Raycast. Last week I was able to create a new extension for Raycast that allows you to create a Spring Boot app using the Spring Initializer. Finally, I made a few updates to website that I will share with you.",[28,9948,9950],{"id":9949},"new-macbook-pro","New MacBook Pro",[16,9952,9953],{},"There are few things in the world of tech that are as exciting as unboxing a new gadget that you’re excited to get your hands on. I purchased a new M1 back in 2021, and I have just been blown away by how great of a machine that it has been compared to the Intel versions of the MacBook.",[16,9955,9956],{},"When the new M4 Max was announced I knew that it was time to upgrade. The performance comparisons to the M1 were through the roof and I knew I had to get my hands on this one. If you’re curious about the specs I ended up getting the 14” MacBook Pro Space Black with the following configuration:",[1271,9958,9959,9962,9965,9968],{},[1274,9960,9961],{},"Apple M4 Max chip with 16‑core CPU, 40‑core GPU, 16‑core Neural Engine",[1274,9963,9964],{},"48GB unified memory",[1274,9966,9967],{},"1TB SSD storage",[1274,9969,9970],{},"Three Thunderbolt 5 ports, HDMI port, SDXC card slot, headphone jack, MagSafe 3 port",[16,9972,9973,9974,9979],{},"Before I went on and streamed my setup I put together another version of my ",[23,9975,9978],{"href":9976,"rel":9977},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fnew-macbook-setup\u002Fblob\u002Fmaster\u002F2024\u002FREADME.md",[101],"New MacBook Setup"," on GitHub. This document contains every application and configuration I did when I set up this new machine.",[47,9981],{"id":9982},"t8ry7PkYe6M",[16,9984,9985],{},"I hope you enjoyed the live stream or the replay if you couldn’t join me live. I’m always curious to hear how others set up a new machine so if you have any must have apps or tips for me please let me know.",[28,9987,9989],{"id":9988},"spring-initializer-raycast-extension","Spring Initializer Raycast Extension",[16,9991,9992],{},"During the live stream I mentioned how much I love Raycast. I find it to be one of those must have applications that really helps increase productivity in a number of ways. I have always wanted to create an extension for the Raycast store but I had a couple of things stopping me.",[16,9994,9995],{},"First, I wasn’t sure what type of extension I would create. Second, I’m not a React developer, so I wouldn’t even know where to start. I noticed that there wasn’t a Spring Initalizr extension so this would be a perfect one for me to create. Now with AI I could get Claude to help me create one.",[16,9997,9998,9999,10004],{},"I was able to get this working last week, and you can find the ",[23,10000,10003],{"href":10001,"rel":10002},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fraycast-spring-initializr",[101],"code for it here",". I have submitted this to the Raycast Store and it hopefully it will be published this week. In the meantime you can pull the code and run it locally. This extension will allow you to create a new Spring Boot Application right from the Raycast Launcher.",[16,10006,10007],{},[74,10008],{"alt":10009,"src":10010},"Spring Raycast Extension","\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F18\u002Fspring_raycast_extension.png",[28,10012,10014],{"id":10013},"website-updates","Website Updates",[16,10016,10017,10018,10023],{},"I spent a little time last week fixing up a couple of issues on my website. The first one was with the image loader on my home page. Previously I had some “Loading Images” text in place before the images were loaded. This caused the screen to jump when the actual images were loaded. Now I am using a cool technique called “skeleton loading” and it was super easy to do with Tailwind. If you want to learn how I did it you can check out the ",[23,10019,10022],{"href":10020,"rel":10021},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fdanvega-dev-nuxt\u002Fblob\u002Fmain\u002Fcomponents\u002Fhome\u002FPhotos.vue",[101],"code here"," on line 56.",[16,10025,10026],{},"Here are a couple of other updates I made:",[1271,10028,10029,10037,10046],{},[1274,10030,10031,10032,10036],{},"I added a new ",[23,10033,6034],{"href":10034,"rel":10035},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fno-lombok",[101]," on Why you might not need to use Lombok anymore. I often get asked in videos why I don’t use Lombok so I thought I would put this together.",[1274,10038,10039,10040,10045],{},"I updated my ",[23,10041,10044],{"href":10042,"rel":10043},"https:\u002F\u002Fwww.danvega.dev\u002Fuses",[101],"uses page"," with all of my current hardware and software. I have been updating my office lately and this list was getting behind.",[1274,10047,10048],{},"Finally, there is an easter egg on the home page if you use the keyboard shortcut ctrl+space. 🎉",[16,10050,10051],{},[161,10052,4229],{},[16,10054,10055],{},"I hit a huge milestone crossing 20,000 followers on Twitter last week. Thanks to everyone (and the bots) for listening to me ramble on this platform over the years.",[166,10057],{"id":10058},"1858319719616364694",[16,10060,10061],{},"AI Image generation is getting pretty crazy. I'm not sure why, but I love this version of me.",[166,10063],{"id":10064},"1857068152036680149",[16,10066,10067],{},"7.5 million minutes of MY YouTube channel watched in a single month is mind-blowing 🤯",[166,10069],{"id":10070},"1856691471665041419",[16,10072,10073],{},[161,10074,1028],{},[16,10076,178,10077,8253],{},[23,10078,183],{"href":181,"rel":10079},[101],[16,10081,9630,10082,191,10084,10086],{},[189,10083],{},[189,10085],{},[23,10087,198],{"href":198,"rel":10088},[101],{"title":200,"searchDepth":201,"depth":201,"links":10090},[10091,10092,10093],{"id":9949,"depth":201,"text":9950},{"id":9988,"depth":201,"text":9989},{"id":10013,"depth":201,"text":10014},{"_id":10095,"path":10096,"title":10097,"description":10098,"meta":10099,"body":10102},"newsletter\u002Fnewsletter\u002F2024\u002F11\u002F11\u002Fgenerating-github-docs.md","\u002Fnewsletter\u002F2024\u002F11\u002F11\u002Fgenerating-github-docs","Generating GitHub Docs, Notebook LM, Rest Client OAuth2 Support and Query by Example","Happy Monday and welcome to another edition of the newsletter. This week I'm getting my new MacBook Pro and my plan was to live stream my setup. I would love to do this, but I also realize what a time commitment that would be and I have a lot of things that have to take priority this week. If I have time you will get notified if you're subscribed to my YouTube channel but if I don't I will take notes and share my setup with you.",{"slug":10100,"date":10101},"generating-github-docs","2024-11-11T09:00:00.000Z",{"type":13,"value":10103,"toc":10221},[10104,10111,10114,10118,10121,10129,10132,10135,10138,10141,10145,10151,10165,10168,10177,10181,10184,10187,10191,10194,10197,10200,10203,10205,10208,10211,10213,10218],[16,10105,10106,10107,10110],{},"Happy Monday and welcome to another edition of the newsletter. This week I'm getting my new MacBook Pro and my plan was to live stream my setup. I would love to do this, but I also realize what a time commitment that would be and I have a lot of things that have to take priority this week. If I have time you will get notified if you're subscribed to my ",[23,10108,2944],{"href":4869,"rel":10109},[101]," but if I don't I will take notes and share my setup with you.",[16,10112,10113],{},"I want to share a little bit more of what I have been using AI for lately. I was able to publish 2 new videos last week on Spring Security and Spring Data and I will tell you a little bit about those.",[28,10115,10117],{"id":10116},"generating-github-readme-documentation","Generating GitHub Readme Documentation",[16,10119,10120],{},"If you're new around here I am really into AI and how it can help increase productivity. I will admit that when I first introduced to AI I thought it was just another gimmick. I would run off to ChatGPT, ask a question and get a decent response. Now I see it as the ultimate Swiss Army Knife that I can use to be a more productive developer.",[16,10122,10123,10124,10128],{},"I have talked about ",[23,10125,10127],{"href":4869,"rel":10126},[101],"Claude Projects",", but I don't think I have gone deep on them before. I like using each project and setting the custom instructions to streamline my workflows.",[16,10130,10131],{},"I wanted to share a time-saving workflow I've been using lately that's completely changed how I handle documentation for my demo projects. Last week, I made a video about this because I think it could help many of you who regularly create and share code repositories.",[16,10133,10134],{},"Here's the situation: We all know that good documentation is crucial. When someone lands on your GitHub repo, they need to understand what the project does, how to get started, and what components are involved. But let's be honest – writing comprehensive README files isn't exactly the most exciting part of our day, is it?",[16,10136,10137],{},"Instead of manually writing documentation (which I could definitely find better uses of my time for), I've developed a streamlined process using generative AI. Check out the video below where I go through my process for generating documentation.",[166,10139],{"id":10140},"1854546291620974994",[28,10142,10144],{"id":10143},"notebook-lm-audio-overview","Notebook LM Audio Overview",[16,10146,10147],{},[74,10148],{"alt":10149,"src":10150},"Robot Podcast","\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F11\u002F2-robots-conducting-a-podcast.jpg",[16,10152,10153,10154,10159,10160,10164],{},"Last week I published a ",[23,10155,10158],{"href":10156,"rel":10157},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fnotebook-lm-audio-overview",[101],"new issue"," on my other newsletter, ByteSized AI on ",[23,10161,10163],{"href":2000,"rel":10162},[101],"Notebook LM",". In that issue I talked about a particularly interesting feature called Audio Overview. NotebookAM's Audio Overview is a fascinating feature that transforms your written content into dynamic audio discussions. Instead of a monotonous text-to-speech conversion, it creates an engaging conversation between two AI hosts who discuss your content, make connections, and break down complex ideas into digestible segments.",[16,10166,10167],{},"I mention this because I have started taking my YouTube videos, blog posts and whatever other content I have and turning them into podcasts. The results were fascinating. Within minutes, NotebookLM generated a podcast-style discussion that not only summarized my main points but also added valuable context and connections I hadn't explicitly made in the original content.",[16,10169,10170,10171,10176],{},"I don't think I can stress that point enough. It is not just taking a blog post or a video and talking verbatim about the points made in its reference material. It is generating new content based on the document provided, and it does a perfect job of this. I have been throwing around the idea of turning this into an actual podcast, but I'm not there yet. For now, I have decided to create a ",[23,10172,10175],{"href":10173,"rel":10174},"https:\u002F\u002Fdanvega.notion.site\u002FDeveloping-with-Dan-138550ad79c380ac935fdad17513b19c",[101],"Notion site"," where you can find all the episodes that I have generated.",[28,10178,10180],{"id":10179},"rest-client-oauth2-support","Rest Client OAuth2 Support",[16,10182,10183],{},"I talked about this in last week's episode but Spring Security 6.4 is adding Rest Client OAuth2 Support. This tutorial walks you through building a secure multi-module application from scratch, complete with authorization server, resource server, and client applications. In this step-by-step guide, we'll build a OAuth2 implementation using Spring Boot 3.4's latest features. Perfect for developers looking to implement secure authentication in their Spring applications!",[47,10185],{"id":10186},"nFKcJDpUuZ8",[28,10188,10190],{"id":10189},"query-by-example","Query by Example",[16,10192,10193],{},"I received a question about using QueryByExampleExectuor in a GraphQL application. I thought it was a great question and plan on doing a video on it this week. Before we dive into that though I thought it was a good opportunity to take a look at what Query by Example is and when you might want to reach for it.",[16,10195,10196],{},"Tired of writing endless custom repository methods for your Spring Boot applications? In this tutorial, I'll show you how Query By Example (QBE) can revolutionize the way you handle dynamic database searches. Whether you're building a search form with multiple filters or need flexible querying capabilities, QBE is about to become your new best friend! 🚀",[16,10198,10199],{},"In this comprehensive tutorial, we'll build a complete Spring Boot application that demonstrates the power of Query By Example. I'll walk you through every step, from basic setup to advanced implementation, showing you how to eliminate boilerplate code and create clean, maintainable search functionality.",[47,10201],{"id":10202},"NGVWHdGNbiI",[28,10204,385],{"id":384},[166,10206],{"id":10207},"1853462460235169794",[166,10209],{"id":10210},"1854966561049903444",[28,10212,1028],{"id":171},[16,10214,178,10215,8253],{},[23,10216,183],{"href":9058,"rel":10217},[101],[16,10219,10220],{},"Happy Coding,\nDan Vega",{"title":200,"searchDepth":201,"depth":201,"links":10222},[10223,10224,10225,10226,10227,10228],{"id":10116,"depth":201,"text":10117},{"id":10143,"depth":201,"text":10144},{"id":10179,"depth":201,"text":10180},{"id":10189,"depth":201,"text":10190},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":1028},{"_id":10230,"path":10231,"title":10232,"description":10233,"meta":10234,"body":10237},"newsletter\u002Fnewsletter\u002F2024\u002F11\u002F04\u002Fawesome-spring-ai.md","\u002Fnewsletter\u002F2024\u002F11\u002F04\u002Fawesome-spring-ai","Awesome Spring AI, RestClient OAuth2 Support and new YouTube Tutorials","Happy Monday and welcome to another edition of the newsletter. Last week was Halloween, and we had some amazing weather and the girls go so much candy for the parents to go through while they are sleeping 🤣",{"slug":10235,"date":10236},"awesome-spring-ai","2024-11-04T09:00:00.000Z",{"type":13,"value":10238,"toc":10364},[10239,10241,10247,10251,10265,10269,10272,10275,10278,10286,10289,10293,10296,10305,10309,10316,10348,10350,10353,10356,10358,10360],[16,10240,10233],{},[16,10242,10243],{},[74,10244],{"alt":10245,"src":10246},"Halloween 2024","\u002Fimages\u002Fnewsletter\u002F2024\u002F11\u002F04\u002Fhalloween_2024.png",[28,10248,10250],{"id":10249},"new-macbook-announcement","New MacBook Announcement",[16,10252,4401,10253,10258,10259,10264],{},[23,10254,10257],{"href":10255,"rel":10256},"https:\u002F\u002Fwww.apple.com\u002Fmacbook-pro",[101],"MacBook's were announced"," last week, and I was lucky enough to pick up a new one. I was able to order a new MacBook Pro M4 Max in space black, and I'm really excited to get my hands on this. I waited an entire day after the announcement though so mine won't be in for a couple of weeks. I did a quick ",[23,10260,10263],{"href":10261,"rel":10262},"https:\u002F\u002Fx.com\u002Ftherealdanvega\u002Fstatus\u002F1852174428773249264",[101],"poll on Twitter",", and it seems like you're interested in a live stream where I set a new machine up so I will get that scheduled.",[28,10266,10268],{"id":10267},"in-this-edition","In This Edition",[16,10270,10271],{},"In this edition of the newsletter I want to talk to you about Awesome Spring AI which is a new resource for Spring AI. I'm also really excited about the new OAuth2 support in the Rest Client, so I put together a repo on that and I will be recording a video on that this week. Finally, October was a great month on the YouTube channel where I added 13 new videos, 3 of which came last week and I will tell you about them.",[28,10273,10274],{"id":10235},"Awesome Spring AI",[16,10276,10277],{},"Last week on Spring Office Hours we sat down with the project lead for Spring AI, Dr Mark Pollack. It was great to catch up with him on where the project is and where it is heading.",[16,10279,10280,10281,10285],{},"We also had the opportunity to start a new resource for the Spring AI community called ",[23,10282,10274],{"href":10283,"rel":10284},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fawesome-spring-ai?",[101],". This is a curated list of awesome resources, tools, tutorials, and projects for building generative AI applications using Spring AI. This repository aims to help developers leverage the power of Large Language Models (LLMs) within the Spring ecosystem.",[47,10287],{"id":10288},"S1zmtURwc1o",[28,10290,10292],{"id":10291},"restclient-oauth2-support","RestClient OAuth2 Support",[16,10294,10295],{},"A new blog post dropped on the Spring IO Blog last week introducing support for OAuth2 in the Rest Client. If you follow me you know that I am a huge fan of the Rest Client and have done a number of tutorials on it in the past.",[16,10297,10298,10299,10304],{},"One of the most asked questions about it was how to use it in conjunction with OAuth2. There was a way to do this in the past, but it involved writing your own interceptor. The new support in Spring Security 6.4 (and Spring Boot 3.4) makes this really easy to do. I put together a ",[23,10300,10303],{"href":10301,"rel":10302},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fgolf-scheduler",[101],"repository"," showing this off and I plan to record a tutorial on it early this week.",[28,10306,10308],{"id":10307},"youtube-videos-new","YouTube Videos (New)",[16,10310,10311,10312,10315],{},"I was able to record 3 new video last week and in case you missed them here they are. By the way if you aren't subscribed to my ",[23,10313,2944],{"href":4869,"rel":10314},[101]," you should do so now so you don't miss my next one!",[3943,10317,10318,10328,10338],{},[1274,10319,10320,10327],{},[23,10321,10324],{"href":10322,"rel":10323},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rQV76dufxz4",[101],[161,10325,10326],{},"Spring Environment Variables",": Never expose your API keys again! In this tutorial, we'll dive into managing environment variables in Spring Boot applications - the secure and professional way to handle configuration across different environments.",[1274,10329,10330,10337],{},[23,10331,10334],{"href":10332,"rel":10333},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=l35P5GylXN8",[101],[161,10335,10336],{},"RestClient Logging",": Learn how to implement clean, efficient request\u002Fresponse logging for Spring Boot's REST Client! In this comprehensive tutorial, we'll build a reusable solution that gives you exactly the logging information you need, without the overwhelming verbosity of the underlying HTTP client logging.",[1274,10339,10340,10347],{},[23,10341,10344],{"href":10342,"rel":10343},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZUCVRppXPSc",[101],[161,10345,10346],{},"Tokens are the currency of LLMs",": Ever wondered how much your AI requests are actually costing you? In this comprehensive tutorial, we dive deep into understanding tokens - the currency of Large Language Models (LLMs) - and build a practical Spring Boot application to track and monitor your token usage.",[28,10349,385],{"id":384},[166,10351],{"id":10352},"1852333793517936878",[166,10354],{"id":10355},"1850939479978135999",[28,10357,172],{"id":171},[16,10359,5651],{},[16,10361,187,10362,191],{},[189,10363],{},{"title":200,"searchDepth":201,"depth":201,"links":10365},[10366,10367,10368,10369,10370,10371,10372],{"id":10249,"depth":201,"text":10250},{"id":10267,"depth":201,"text":10268},{"id":10235,"depth":201,"text":10274},{"id":10291,"depth":201,"text":10292},{"id":10307,"depth":201,"text":10308},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":10374,"path":10375,"title":10376,"description":10377,"meta":10378,"body":10381},"newsletter\u002Fnewsletter\u002F2024\u002F10\u002F28\u002Fuplift-desk.md","\u002Fnewsletter\u002F2024\u002F10\u002F28\u002Fuplift-desk","New Standing Desk, JTE Spring Security Demo & RAG for Java Developers","Happy Monday and welcome to another edition of the newsletter. It's hard to believe that Halloween is this week but here we are. I love seeing Halloween costumes so if you have some pictures of you or you and family please share them with me!",{"slug":10379,"date":10380},"uplift-desk","2024-10-28T09:00:00.000Z",{"type":13,"value":10382,"toc":10516},[10383,10385,10389,10392,10398,10401,10407,10411,10414,10418,10435,10438,10446,10449,10452,10456,10459,10462,10465,10468,10472,10475,10479,10497,10499,10502,10505,10508,10510,10512],[16,10384,10377],{},[28,10386,10388],{"id":10387},"office-updates","Office Updates",[16,10390,10391],{},"I told you last week that was upgrading my office and that continued last week. I got my new uplift desk and spent the weekend putting it together. I still haven't put the final touches on cable management because I am still trying to figure out what is actually going to go on the desk and how I want to lay things out.",[16,10393,10394],{},[74,10395],{"alt":10396,"src":10397},"Uplift Desk","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F28\u002Fdesk.png",[16,10399,10400],{},"I have a 27\" 4k and a 34\" Widescreen display and I have been using those with my laptop giving me 3 displays. I don't have the room for the 34\" widescreen now and quite frankly its overkill for a 3rd monitor. I think what I am going to do is sell that and purchase another 27\" 4k display. I also think I need a docking station because I pull my laptop from the desk often and I hate having to plugin 20 things. My tentative plan right now is to get another monitor and mount the displays on some swing mounts and not use my laptop as a display anymore and get rid of the laptop stand I am using. I also picked up this nice filing cabinet for underneath my Cleveland sign.",[16,10402,10403],{},[74,10404],{"alt":10405,"src":10406},"Filing Cabinet","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F28\u002Fcabinet.jpeg",[28,10408,10410],{"id":10409},"java-template-engine-spring-security-login","Java Template Engine + Spring Security Login",[16,10412,10413],{},"I just released a new tutorial showing how to build a Spring Security login system using Java Template Engine (JTE) and OAuth2. I created this in response to questions from viewers about using JTE with Spring Security, and I'm excited to share a clean solution that handles both traditional username\u002Fpassword authentication and social logins through Google and GitHub.",[33,10415,10417],{"id":10416},"key-features-implemented","Key features implemented:",[1271,10419,10420,10423,10426,10429,10432],{},[1274,10421,10422],{},"Custom login form with Spring Security integration",[1274,10424,10425],{},"OAuth2 authentication with multiple providers",[1274,10427,10428],{},"Protected dashboard displaying user information",[1274,10430,10431],{},"Clean, modern UI built with Tailwind CSS",[1274,10433,10434],{},"Java Template Engine (JTE) integration with Spring Boot",[16,10436,10437],{},"In my tutorial, I walk through building a modern authentication system that I find essential for most projects. I also implemented a clean UI using Tailwind CSS, which I actually generated using AI to save time on the frontend work.",[16,10439,10440,10441,10445],{},"Rather than doing a line-by-line coding session, I focused on explaining the core concepts and implementation details, which I think makes the tutorial more practical and efficient. I've made all the code available on ",[23,10442,851],{"href":10443,"rel":10444},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-boot-oauth-demo",[101]," as a starter template, so developers can quickly get up and running with secure authentication in their Spring Boot applications. For those interested in learning more about JTE, I've also included a link to my full playlist covering this template engine.",[16,10447,10448],{},"This tutorial also showcases how JTE can work seamlessly with Spring Security - something many developers have been asking me about since JTE was added to the Spring initializer.",[47,10450],{"id":10451},"f1h4GkhxMp8",[28,10453,10455],{"id":10454},"rag-for-java-developers","RAG for Java Developers",[16,10457,10458],{},"In my latest video, I tackled Retrieval Augmented Generation (RAG) in Java applications using Spring AI. I broke down why RAG matters - LLMs have training cutoff dates and aren't trained on your private data. More importantly, I clarified what RAG isn't: it's not just dumping all your documents into a prompt!",[16,10460,10461],{},"I demonstrated this by building a practical example, showing how to store economic analysis documents in a vector database and query them effectively. Using Spring AI made this process surprisingly straightforward, from document ingestion to similarity search.",[16,10463,10464],{},"The demo highlighted how RAG can provide accurate, up-to-date responses by intelligently retrieving relevant information chunks rather than sending entire documents to the LLM. For those concerned about data privacy, stay tuned for an upcoming video on using RAG with local LLMs like Ollama.",[47,10466],{"id":10467},"6Pgmr7xMjiY",[28,10469,10471],{"id":10470},"live-streaming","Live Streaming",[16,10473,10474],{},"Now that I have my office dialed in I want to make an effort to get back to live-streaming. Not that I have ever been a consistent live streamer but I want to be. I love hanging out with all of you and last week I was able to get 2 live streams in. It is so much easier to stream when so many of you show up and ask so many great questions and that is exactly what happened last week. Thank you to all of you for taking time out of your day and for the wonderful questions. Here are the recordings from those live streams and I will try and get some more in this week.",[33,10476,10478],{"id":10477},"recent-streams","Recent Streams:",[1271,10480,10481,10489],{},[1274,10482,10483,10484],{},"10\u002F23\u002F2024 - ",[23,10485,10488],{"href":10486,"rel":10487},"https:\u002F\u002Fwww.youtube.com\u002Flive\u002Fe1c2GCL1vOM",[101],"Stream and Chill",[1274,10490,10491,10492],{},"10\u002F24\u002F2024 - ",[23,10493,10496],{"href":10494,"rel":10495},"https:\u002F\u002Fwww.youtube.com\u002Flive\u002F9DRdXgYfjXg",[101],"Spring AI Workshop Updates",[28,10498,385],{"id":384},[166,10500],{"id":10501},"1849803941745152397",[166,10503],{"id":10504},"1849844721448845627",[166,10506],{"id":10507},"1849813392300671064",[28,10509,172],{"id":171},[16,10511,5651],{},[16,10513,187,10514,191],{},[189,10515],{},{"title":200,"searchDepth":201,"depth":201,"links":10517},[10518,10519,10522,10523,10526,10527],{"id":10387,"depth":201,"text":10388},{"id":10409,"depth":201,"text":10410,"children":10520},[10521],{"id":10416,"depth":206,"text":10417},{"id":10454,"depth":201,"text":10455},{"id":10470,"depth":201,"text":10471,"children":10524},[10525],{"id":10477,"depth":206,"text":10478},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":10529,"path":10530,"title":10531,"description":10532,"meta":10533,"body":10536},"newsletter\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Foffice-upgrades.md","\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Foffice-upgrades","Updating my office, Spring Office Hours and AI for Java Developers","Happy Monday and welcome to another edition of the newsletter. Even before I became a “content creator” I was fascinated by the office tours on YouTube. How were creators utilizing the space they had and what were all the cool gear they were using. I have had a lot of fun over the years trying to improve my office space and we coming up on another makeover.",{"slug":10534,"date":10535},"office-upgrades","2024-10-21T09:00:00.000Z",{"type":13,"value":10537,"toc":10664},[10538,10540,10543,10549,10552,10558,10561,10567,10570,10575,10577,10580,10583,10585,10600,10603,10606,10609,10612,10616,10619,10622,10625,10627,10630,10633,10636,10639,10642,10646,10655,10657,10662],[16,10539,10532],{},[16,10541,10542],{},"I decided it was time to upgrade the office and this past weekend was step 1 in that process. If you look at a vide from last weekend you can see this cream color wall behind me. It is pretty boring and honestly just dulls the video for me.",[16,10544,10545],{},[74,10546],{"alt":10547,"src":10548},"Boring Wall","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Fboring_wall.png",[16,10550,10551],{},"We decided paint the whole office and making that wall behind me a feature wall with a different color. The color we decided to go with is a navy blue from Sherwin Williams called “In the Navy”. Here is that same wall after a fresh coat of a paint with the blank shelf. It is extremely time consuming unloading and loading books on to this thing 🤦‍♂️",[16,10553,10554],{},[74,10555],{"alt":10556,"src":10557},"Blue Wall","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Fblue_wall.png",[16,10559,10560],{},"And here is what the background will look like in a video. It’s crazy how a single color can totally transform the shot like this but I am really happy with how this turned out. What do you think?",[16,10562,10563],{},[74,10564],{"alt":10565,"src":10566},"New Look","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Fnew_look.png",[16,10568,10569],{},"I also decided to get a new desk. I have had this IKEA desk hack for what seems like forever now and it’s time to move on. I was looking for a large standing desk and after doing some searching I decided to go with the Uplift Standing desk. This desk is 72”x30” and the finish is Heritage Oak.",[16,10571,10572],{},[74,10573],{"alt":10396,"src":10574},"\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F21\u002Fuplift_desk.png",[28,10576,93],{"id":92},[16,10578,10579],{},"This week on Spring Office Hours I’m excited to sit down with Nelson Djalo, founder of Amigoscode, to discuss the art of continuous learning and teaching Spring. In this episode, the we’ll explore Nelson's journey from software engineer to influential educator, diving into his unique approach to teaching Spring and DevOps. Discover valuable insights on staying current in the fast-paced world of software development, and learn how Nelson's platform is helping millions break into tech.",[47,10581],{"id":10582},"zKSbm2Ce6p8",[28,10584,8203],{"id":8202},[16,10586,10587,10588,10593,10594,10599],{},"There was a bunch of news related to Spring AI last week. First off the Spring Initializr now includes the ",[23,10589,10592],{"href":10590,"rel":10591},"https:\u002F\u002Fx.com\u002Ftherealdanvega\u002Fstatus\u002F1846561630491992439",[101],"document reader starters",". There is also a new ",[23,10595,10598],{"href":10596,"rel":10597},"https:\u002F\u002Fdocs.spring.io\u002Fspring-ai\u002Freference\u002Fapi\u002Fchat\u002Fcomparison.html",[101],"Chat Model Comparison"," matrix in the documentation that I think you’re really going to enjoy.",[16,10601,10602],{},"I created some new videos last week:",[33,10604,4089],{"id":10605},"ai-for-java-developers",[16,10607,10608],{},"I wanted to show off how to get started with AI for Java Developers. If you want to call a Large Language Model there are REST APIs that you can call from the command line or a simple Java Application. Once you start building real world applications though a framework like Spring AI really helps you by solving a lot of the problems you are going to run into.",[47,10610],{"id":10611},"uoOwVWVl_eU",[33,10613,10615],{"id":10614},"calling-multiple-llms","Calling Multiple LLMs",[16,10617,10618],{},"Learn how to integrate multiple Large Language Models (LLMs) in a single Java application using Spring AI. This tutorial demonstrates how to use both OpenAI's GPT-4 and Anthropic's Claude 3.5 Sonnet in the same Spring Boot project.",[47,10620],{"id":10621},"bK1MTlEDQvk",[16,10623,10624],{},"Speaking of Spring AI I had a really great meeting with the team last week. I am going to help out with some resources for the community and I can’t wait to share those with you. Stay Tuned!",[28,10626,385],{"id":384},[16,10628,10629],{},"Last week I worked on some graphics for a RAG video coming out",[166,10631],{"id":10632},"1847335334641533118",[166,10634],{"id":10635},"1846731132408418351",[16,10637,10638],{},"I have received so many amazing messages from the community lately but this one really hit.",[166,10640],{"id":10641},"1846999540056183230",[28,10643,10645],{"id":10644},"the-rest","THE REST",[16,10647,10648,10649,10654],{},"It appears that ",[23,10650,10653],{"href":10651,"rel":10652},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=UmbQGImXwvA",[101],"my presentation"," from ConnectTech last year has been posted to YouTube. If you’re interested in learning how I build a blog on top of Vue 3 \u002F Nuxt 3 and Notion this presentation is right up your alley.",[28,10656,1028],{"id":171},[16,10658,178,10659,8253],{},[23,10660,183],{"href":9058,"rel":10661},[101],[16,10663,10220],{},{"title":200,"searchDepth":201,"depth":201,"links":10665},[10666,10667,10671,10672,10673],{"id":92,"depth":201,"text":93},{"id":8202,"depth":201,"text":8203,"children":10668},[10669,10670],{"id":10605,"depth":206,"text":4089},{"id":10614,"depth":206,"text":10615},{"id":384,"depth":201,"text":385},{"id":10644,"depth":201,"text":10645},{"id":171,"depth":201,"text":1028},{"_id":10675,"path":10676,"title":10677,"description":10678,"meta":10679,"body":10682},"newsletter\u002Fnewsletter\u002F2024\u002F10\u002F14\u002Fstreaming-chatbot.md","\u002Fnewsletter\u002F2024\u002F10\u002F14\u002Fstreaming-chatbot","Building a Streaming ChatBot in Java, AI Memory, JTE Forms and I published a new tool","Happy Monday and Welcome to Another Edition of the Newsletter! Last week, I drove down to Cincinnati to spend time with a customer. I stayed near the Cincinnati Reds stadium, which sits on the Ohio\u002FKentucky border. The area is known as \"The Banks,\" and I must say, I loved it there. If I have the chance, I'm going to try to make it back next summer to catch a game! Speaking of baseball, my Cleveland Guardians are in the ALCS ⚾️🤩",{"slug":10680,"date":10681},"streaming-chatbot","2024-10-14T07:00:00.000Z",{"type":13,"value":10683,"toc":10810},[10684,10686,10689,10693,10707,10711,10717,10720,10723,10726,10743,10746,10749,10753,10756,10763,10767,10770,10773,10776,10779,10782,10785,10788,10793,10795,10798,10801,10804,10806,10808],[16,10685,10678],{},[16,10687,10688],{},"I gave a talk to our customer on GraphQL, similar to the one I gave at SpringOne. I absolutely love discussing GraphQL because it solves real problems. One thing I always stress to developers is the importance of understanding the \"why\" before diving into a new technology. Avoid resume-driven development—learning something just to put it on your resume. GraphQL addresses several issues that REST APIs face, such as over-fetching, multiple resource calls, API versioning, and more. If you have questions about building GraphQL APIs in Java & Spring feel free to reach out.",[28,10690,10692],{"id":10691},"in-this-edition-of-the-newsletter","In this edition of the newsletter",[1271,10694,10695,10698,10701,10704],{},[1274,10696,10697],{},"How to build a streaming chatbot in Java",[1274,10699,10700],{},"How to build an AI ChatBot with Memory",[1274,10702,10703],{},"Working with forms in Java Template Engine",[1274,10705,10706],{},"JSON to Java Record Converter",[33,10708,10710],{"id":10709},"building-a-streaming-chatbot-in-java","Building a Streaming ChatBot in Java",[16,10712,10713],{},[74,10714],{"alt":10715,"src":10716},"Streaming Chatbot","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F14\u002Fstreaming_chatbot.png",[16,10718,10719],{},"It is really easy to get started building generative AI applications in Java with Spring AI. With minimal lines of code you can communicate with a Large Language Model and get a response back. By default, that is a synchronous call, and you will need to wait for the entire response to return to display it to the user.",[16,10721,10722],{},"If this is a larger response this might not make for the best user experience. In that case Spring AI enables you to stream the response back to the client with a method called stream. I decided to put together a quick little tutorial on how to do this",[16,10724,10725],{},"🎯 What you'll learn:",[1271,10727,10728,10731,10734,10737,10740],{},[1274,10729,10730],{},"Setting up a Spring Boot project with Spring AI",[1274,10732,10733],{},"Implementing both traditional and streaming response methods",[1274,10735,10736],{},"Integrating with Anthropic Claude 3.5 Sonnet (easily adaptable to other LLMs)",[1274,10738,10739],{},"Creating a sleek UI with HTMX and Tailwind CSS",[1274,10741,10742],{},"Handling streaming data on the front-end with JavaScript",[16,10744,10745],{},"Whether you're a seasoned Spring developer or just getting started with AI integration, this tutorial offers valuable insights to elevate your projects.",[47,10747],{"id":10748},"q2p0mG4RICM",[33,10750,10752],{"id":10751},"building-an-ai-chatbot-with-memory","Building an AI ChatBot with Memory",[16,10754,10755],{},"I had a few people reach out to me and ask me how we can remember previous conversations when talking to an LLM. You have to remember that the web is stateless and when we are communicating with Large Language Models there is no record of previous conversations. There are products that sit in front of these LLMs though like ChatGPT which is able to remember previous conversations.",[16,10757,10758,10759,184],{},"I put together a quick video on how to do this in Java with Spring AI. If you're interested in the code check out the ",[23,10760,7908],{"href":10761,"rel":10762},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fchat-memory",[101],[33,10764,10766],{"id":10765},"working-with-forms-in-java-template-engine-jte","Working with forms in Java Template Engine (JTE)",[16,10768,10769],{},"I have been receiving a lot of comment on JTE over the last couple of weeks. I am getting all kinds of questions on how to do this and that and how it compares to Thymeleaf.",[16,10771,10772],{},"In this tutorial learn how to create interactive web forms using Spring Boot and the Java Template Engine (JTE). I'll walk you through building a full-featured user registration form, covering:",[16,10774,10775],{},"✅ Setting up a Spring Boot project with JTE\n✅ Creating a user model and repository\n✅ Implementing form validation\n✅ Persisting data to a PostgreSQL database using Docker\n✅ Handling form submissions and displaying success\u002Ferror messages",[16,10777,10778],{},"Perfect for developers looking to move beyond Thymeleaf and explore JTE's capabilities in Spring Boot applications. Whether you're new to Spring or an experienced developer, this tutorial offers valuable insights into modern web form development.",[47,10780],{"id":10781},"ifnv4kGtZgo",[33,10783,10706],{"id":10784},"json-to-java-record-converter",[16,10786,10787],{},"I love hacking on things especially tools that I find useful. I have been messing around with a tool that can convert a block of JSON into a Java Record. I decided to put it on my website so that you can check it out.",[16,10789,10790],{},[74,10791],{"alt":10706,"src":10792},"\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F14\u002Fjson-java-record.png",[28,10794,4229],{"id":384},[166,10796],{"id":10797},"1844761724840198348",[166,10799],{"id":10800},"1844755271991619837",[166,10802],{"id":10803},"1844742997599994141",[28,10805,1028],{"id":171},[16,10807,5651],{},[16,10809,10220],{},{"title":200,"searchDepth":201,"depth":201,"links":10811},[10812,10818,10819],{"id":10691,"depth":201,"text":10692,"children":10813},[10814,10815,10816,10817],{"id":10709,"depth":206,"text":10710},{"id":10751,"depth":206,"text":10752},{"id":10765,"depth":206,"text":10766},{"id":10784,"depth":206,"text":10706},{"id":384,"depth":201,"text":4229},{"id":171,"depth":201,"text":1028},{"_id":10821,"path":10822,"title":10823,"description":10824,"meta":10825,"body":10828},"newsletter\u002Fnewsletter\u002F2024\u002F10\u002F07\u002Fjava-template-engine.md","\u002Fnewsletter\u002F2024\u002F10\u002F07\u002Fjava-template-engine","Spring Framework 7.0 and Java Template Engine & ChatGPT Canvas","Happy Monday and welcome to another edition of the newsletter. Last week was a pretty interesting week as we had some news drop about the future of the Spring Framework. I also found out last week the Java Template Engine (JTE) was added to the Spring Initalizr. This led to a lot of tweets, playing around with some code, writing blog posts and I posted 3 videos last week on this. Finally, there was a lot of news in the AI space which I try and cover on www.bytesizedai.dev but none bigger for software developers than the new release of ChatGPT Canvas.",{"slug":10826,"date":10827},"java-template-engine","2024-10-07T07:00:00.000Z",{"type":13,"value":10829,"toc":11007},[10830,10839,10843,10852,10855,10857,10866,10869,10886,10895,10898,10901,10917,10921,10927,10930,10933,10940,10942,10945,10948,10951,10955,10989,10993,10998,11000,11005],[16,10831,10832,10833,10838],{},"Happy Monday and welcome to another edition of the newsletter. Last week was a pretty interesting week as we had some news drop about the future of the Spring Framework. I also found out last week the Java Template Engine (JTE) was added to the Spring Initalizr. This led to a lot of tweets, playing around with some code, writing blog posts and I posted 3 videos last week on this. Finally, there was a lot of news in the AI space which I try and cover on ",[23,10834,10837],{"href":10835,"rel":10836},"http:\u002F\u002Fwww.bytesizedai.dev",[101],"www.bytesizedai.dev"," but none bigger for software developers than the new release of ChatGPT Canvas.",[28,10840,10842],{"id":10841},"spring-framework-70","Spring Framework 7.0",[16,10844,10845,10846,10851],{},"A new article was released last week from Juergen Hoeller titled ",[23,10847,10850],{"href":10848,"rel":10849},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F10\u002F01\u002Ffrom-spring-framework-6-2-to-7-0",[101],"\"From Spring Framework 6.2 to 7.0\"","   . Spring Framework is gearing up for significant updates. Version 6.2, set for November 2024, will bring major revisions to the core container and web support, supporting JDK 17-23 and Jakarta EE 9-10.",[16,10853,10854],{},"Looking ahead, Spring Framework 7.0 is slated for November 2025, upgrading to Jakarta EE 11 and embracing JDK 25 LTS while maintaining JDK 17 compatibility. It will also support Kotlin 2 and adopt JSpecify annotations for null-safety. The framework continues its focus on GraalVM, Project Leyden, and Spring AOT, with planned revisions to JPA and JMS support. Milestones for version 7.0 are expected in early 2025, with related Spring Boot and Spring Cloud updates following throughout the year.",[28,10856,2830],{"id":10826},[16,10858,10859,10860,10865],{},"I found out last week that a ",[23,10861,10864],{"href":10862,"rel":10863},"https:\u002F\u002Fx.com\u002Ftherealdanvega\u002Fstatus\u002F1840793222005567621",[101],"new template"," was added to the Spring Initializr. The Java Template Engine also known as JTE was added and can now be used seamlessly in your Spring Boot applications.",[16,10867,10868],{},"A template engine in Spring Boot is a tool that allows you to generate dynamic HTML content by combining static HTML with data from your application. From the Spring Initializr you can now select from the following template engines:",[1271,10870,10871,10874,10877,10880,10883],{},[1274,10872,10873],{},"Thymeleaf (default)",[1274,10875,10876],{},"Groovy Templates",[1274,10878,10879],{},"Apache FreeMarker",[1274,10881,10882],{},"Mustache",[1274,10884,10885],{},"Java Template Engine (JTE)",[16,10887,10888,10889,10894],{},"Once I saw this was available I decided to write up a ",[23,10890,10893],{"href":10891,"rel":10892},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fhello-jte",[101],"quick blog post"," and record a video on how to get started with JTE in Spring Boot.",[47,10896],{"id":10897},"KoWgHSWA1cc",[16,10899,10900],{},"This video got a lot of attention quickly and I can't thank you all enough for that. Out of that came some fascinating questions. The questions I received the most were around how to use layouts in JTE and if you could use it with HTMX. I ended up creating a blog post and video for each of those topics, and you can check them out below.",[1271,10902,10903,10910],{},[1274,10904,10905],{},[23,10906,10909],{"href":10907,"rel":10908},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fjte-layouts",[101],"Getting Started with JTE layouts in Spring Boot",[1274,10911,10912],{},[23,10913,10916],{"href":10914,"rel":10915},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-jte-htmx",[101],"Building a Dynamic Task Manager with Spring Boot, JTE, and HTMX",[28,10918,10920],{"id":10919},"chatgpts-canvas","ChatGPT's Canvas",[16,10922,10923],{},[74,10924],{"alt":10925,"src":10926},"ChatGPT Canvas","\u002Fimages\u002Fnewsletter\u002F2024\u002F10\u002F07\u002Fcanvas.jpeg",[16,10928,10929],{},"OpenAI has unveiled Canvas, a groundbreaking feature for ChatGPT that promises to revolutionize AI collaboration for writers and coders. This innovative tool moves beyond the traditional chat interface, opening in a separate window to facilitate side-by-side work between users and AI. Canvas offers a suite of powerful features, including inline editing, length adjustment, and reading level changes for writers, as well as code review, bug fixing, and language porting capabilities for programmers.",[16,10931,10932],{},"Powered by GPT-4o, a model specifically trained for creative partnership, Canvas represents a significant shift from simple chat-based interactions to a more intuitive and collaborative AI workspace. This new approach has the potential to transform how professionals tackle writing, coding, and creative tasks, paving the way for more seamless integration of AI assistance in various fields. As Canvas evolves beyond its beta phase, it may well redefine our relationship with AI technology in the workplace.",[16,10934,10935,10936,8007],{},"If you want to learn more about it, I posted an article over on ",[23,10937,8920],{"href":10938,"rel":10939},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fcanvas-painting-a-new-future-for-ai-collaboration",[101],[28,10941,4229],{"id":384},[166,10943],{"id":10944},"1841432849028731139",[166,10946],{"id":10947},"1841507795901812975",[166,10949],{"id":10950},"1841561740619702769",[28,10952,10954],{"id":10953},"around-the-web","AROUND THE WEB",[1271,10956,10957,10963,10972,10981],{},[1274,10958,10959,10962],{},[23,10960,7426],{"href":8065,"rel":10961},[101]," is returning in 2025 and the CFP is still open for a few more days. They are still looking for speakers like you so please get those submissions in by October 10th.",[1274,10964,10965,10966,10971],{},"My colleague Christian Tzolov wrote an article for the Spring Blog titled ",[23,10967,10970],{"href":10968,"rel":10969},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F10\u002F02\u002Fsupercharging-your-ai-applications-with-spring-ai-advisors",[101],"\"Supercharging your AI Applications with Spring AI Advisors\"",". At their core, Spring AI Advisors are components that intercept and potentially modify the flow of chat-completion requests and responses in your AI applications.",[1274,10973,10974,10975,10980],{},"If you want some of the top Java Blogs you should be following be sure to check out ",[23,10976,10979],{"href":10977,"rel":10978},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2024\u002F10\u002Ftop-java-blogs-to-follow-in-2024-part-1\u002F",[101],"this article"," by Irina Mariasova.",[1274,10982,10983,10984,10988],{},"I really enjoyed ",[23,10985,9888],{"href":10986,"rel":10987},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VvWtoaeHQUQ",[101]," by JetBrains Developer Advocate Siva on Developing Spring Boot Applications with Joy.",[28,10990,10992],{"id":10991},"quote-of-the-week","💡 QUOTE OF THE WEEK",[2238,10994,10995],{},[16,10996,10997],{},"\"The measure of intelligence is the ability to change.\" - Albert Einstein",[28,10999,1028],{"id":171},[16,11001,178,11002,5060],{},[23,11003,183],{"href":9058,"rel":11004},[101],[16,11006,10220],{},{"title":200,"searchDepth":201,"depth":201,"links":11008},[11009,11010,11011,11012,11013,11014,11015],{"id":10841,"depth":201,"text":10842},{"id":10826,"depth":201,"text":2830},{"id":10919,"depth":201,"text":10920},{"id":384,"depth":201,"text":4229},{"id":10953,"depth":201,"text":10954},{"id":10991,"depth":201,"text":10992},{"id":171,"depth":201,"text":1028},{"_id":11017,"path":11018,"title":11019,"description":11020,"meta":11021,"body":11024},"newsletter\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf-recap.md","\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf-recap","jConf Recap, Upcoming talks and Spring Office Hours","Happy Monday and welcome to another edition of the newsletter. After traveling to Dallas last week for jConf I'm home for a week and looking forward to getting caught up on some work. It's been a long time (almost 2 months) since I last posted a video on my YouTube channel. I have a pretty good backlog of videos that are ready to go and that will be my focus this week.",{"slug":11022,"date":11023},"jconf-recap","2024-09-30T07:00:00.000Z",{"type":13,"value":11025,"toc":11135},[11026,11028,11032,11039,11042,11046,11049,11052,11058,11063,11066,11069,11074,11079,11082,11084,11087,11092,11096,11099,11101,11104,11107,11111,11114,11117,11126,11128,11131],[16,11027,11020],{},[33,11029,11031],{"id":11030},"what-happened-last-week","WHAT HAPPENED LAST WEEK",[16,11033,11034,11035,11038],{},"Last week on Spring Office Hours DaShaun and I were joined by special guest Anthony Dahanne. Anthony is the Montreal Java User Group organizer and Buildpacks expert. In this episode we discussed why \"Friends don't let friends use Docker files\". You can catch the replay below or visit ",[23,11036,3062],{"href":3060,"rel":11037},[101]," to listen to the podcast version.",[47,11040],{"id":11041},"am4x5DNaJgs",[5301,11043,11045],{"id":11044},"jconfdev","jConf.dev",[16,11047,11048],{},"As I mentioned earlier I traveled to Dallas last week for jConf. The conference was held at the Courtyard Dallas in Allen TX which was about 40 minutes away from the airport. I thought the hotel's location was really nice. There were a bunch of great restaurants and shopping all within walking distance which is always a bonus.",[16,11050,11051],{},"This was a really quick trip for me. I got in Tuesday afternoon and had to leave Wednesday evening. I was happy to get in Tuesday early enough to attend the Speaker dinner. I was immediately happy to see so many familiar faces. I have made some pretty good friends on the speaker circuit, and it was great to catch up with some of them.",[16,11053,11054],{},[74,11055],{"alt":11056,"src":11057},"jConf Speaker Dinner","\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf_01.jpeg",[16,11059,11060],{},[74,11061],{"alt":11056,"src":11062},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf_02.jpeg",[16,11064,11065],{},"Wednesday morning the conference started and I dropped by a few sessions. After that I was up in the afternoon and ready to talk about Spring AI.",[16,11067,11068],{},"I have given a version of this talk a lot over the last year or so but I decided to rewrite it from the ground up based on what I have learned this year and because It needed a refresh. I thought this session went really well and I got a bunch of really great questions. My friend Chandra said he had an excuse for not being there and captured the overflow into the hallway. Thank you to everyone who joined my session for your attention, time and wonderful questions.",[16,11070,11071],{},[74,11072],{"alt":11056,"src":11073},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf_03.jpeg",[16,11075,11076],{},[74,11077],{"alt":11056,"src":11078},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fjconf_04.avif",[166,11080],{"id":11081},"1839663768294351310",[5301,11083,3404],{"id":9000},[16,11085,11086],{},"Speaking of conferences I just found out that I was selected to speak at CodeMash next year. I'm a huge fan of this conference for many reasons. First off it is practically in my backyard about an hour away in Sandusky OH. Next the kids love going to this conference because it's in a water park, and they have a kids track. Finally, I am a big fan of the diverse amount of content. Looking forward to seeing everyone in beautiful Sandusky OH in January where I'm sure it will be snowing and very cold 🥶",[16,11088,11089],{},[74,11090],{"alt":8899,"src":11091},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F30\u002Fcodemash_2025.avif",[33,11093,11095],{"id":11094},"whats-happening-this-week","WHAT'S HAPPENING THIS WEEK",[16,11097,11098],{},"This week on Spring Office Hours we are joined by Chris Bono from the Spring Team. I happened to see Chris last week at jConf and I'm very much looking forward to talking with him this week. Chris is part of the team that delivers Spring Cloud Data Flow, Spring for Apache Pulsar, Spring Cloud Stream and more. If you're available you can join us for the live stream today from 1-2 PM EDT or catch the replay or podcast wherever you get your podcasts. If you are a podcast subscriber please do us a favor and leave us a review.",[33,11100,4229],{"id":384},[166,11102],{"id":11103},"1839696692674757040",[166,11105],{"id":11106},"1839670201996001389",[33,11108,11110],{"id":11109},"️-around-the-web","🌎️ AROUND THE WEB",[16,11112,11113],{},"There was a conference around the programming language Swift. One of the news items to come out of that conference was some Swift\u002FJava interoperability. It looks like these sessions were recorded but just haven't been posted yet. I find this pretty interesting and I want to learn a little bit more about this.",[166,11115],{"id":11116},"1839328831200809217",[16,11118,11119,11120,11125],{},"William Deblauwe announced that his book ",[23,11121,11124],{"href":11122,"rel":11123},"https:\u002F\u002Fwww.lulu.com\u002Fshop\u002Fwim-deblauwe\u002Fmodern-frontends-with-htmx\u002Fpaperback\u002Fproduct-rme4eq9.html?page=1&pageSize=4",[101],"\"Modern frontends with htmx\""," is now available in print. This is an awesome book that will introduce you to htmx and how to get started with it in Spring Boot.",[33,11127,172],{"id":171},[16,11129,11130],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any links you would like me to include please contact me and I might add them to a future newsletter. I hope you have a great week and as always friends...",[16,11132,187,11133,191],{},[189,11134],{},{"title":200,"searchDepth":201,"depth":201,"links":11136},[11137,11138,11139,11140,11141],{"id":11030,"depth":206,"text":11031},{"id":11094,"depth":206,"text":11095},{"id":384,"depth":206,"text":4229},{"id":11109,"depth":206,"text":11110},{"id":171,"depth":206,"text":172},{"_id":11143,"path":11144,"title":11145,"description":11146,"meta":11147,"body":11150},"newsletter\u002Fnewsletter\u002F2024\u002F09\u002F23\u002Fjdk-23-jconf.md","\u002Fnewsletter\u002F2024\u002F09\u002F23\u002Fjdk-23-jconf","JDK 23, jConf, and the move to Beehiiv","Happy Monday and welcome to a brand-new edition of the newsletter! This is an exciting day for me because I've officially moved this newsletter over to Beehiiv. In last week's issue, I told you about a new newsletter I started called ByteSized AI, which is also powered by Beehiiv. I'm really enjoying everything about this platform and looking forward to continuing to write to you.",{"slug":11148,"date":11149},"jdk-23-jconf","2024-09-23T07:00:00.000Z",{"type":13,"value":11151,"toc":11338},[11152,11164,11167,11170,11173,11178,11195,11197,11201,11204,11207,11210,11222,11224,11227,11230,11233,11239,11251,11253,11257,11266,11269,11272,11278,11280,11283,11286,11289,11291,11300,11308,11316,11318,11323,11325,11334],[16,11153,11154,11155,11159,11160,11163],{},"Happy Monday and welcome to a brand-new edition of the newsletter! This is an exciting day for me because I've officially moved this newsletter over to ",[23,11156,5233],{"href":11157,"rel":11158},"https:\u002F\u002Fwww.beehiiv.com\u002F?via=Dan-Vega",[101],". In last week's issue, I told you about a new newsletter I started called ",[23,11161,8920],{"href":2849,"rel":11162},[101],", which is also powered by Beehiiv. I'm really enjoying everything about this platform and looking forward to continuing to write to you.",[16,11165,11166],{},"I originally started this newsletter as a way to keep myself consistently writing. These days, I don't have that problem with a blog, two newsletters, and my first book underway. Don't worry—this newsletter isn't going anywhere—but I'm curious what you'd like to hear about every week.",[16,11168,11169],{},"I kind of like just writing about what I'm up to. I have my hands in so many projects, and it's fun talking to all of you and letting you know what I'm doing. If you like this format, please let me know. If there are things you'd like to see in the newsletter, I'm open to suggestions.",[16,11171,11172],{},"One feature I might add is an \"In the News\" section where I highlight articles, videos, or tweets that I came across that week. I've done this in the past, but I think I have a better way to approach it now. I would love any feedback you have, with that lets get into it",[16,11174,11175],{},[161,11176,11177],{},"In todays email:",[1271,11179,11180,11183,11186,11189,11192],{},[1274,11181,11182],{},"JDK 23 was released last week",[1274,11184,11185],{},"jConf in Dallas TX this week",[1274,11187,11188],{},"Tweets from the bird app",[1274,11190,11191],{},"Around the web",[1274,11193,11194],{},"Quote of the week",[28,11196,11031],{"id":11030},[33,11198,11200],{"id":11199},"jdk-23","JDK 23",[16,11202,11203],{},"It's a great time to be a Java developer. If you have been around this ecosystem for a while you know how stagnant Java was for a long time. JDK 8 was released 3 years after JDK 7 and that waterfall approach took a long time. Now we get a new release every 6 months filled with new & preview features and enhancements.",[16,11205,11206],{},"Last week JDK 23 was released and there was a log of buzz around it. First off the team at Oracle had an awesome 3-hour release party where they went into great detail about everything included in this new version. If you haven't had a chance to catch the replay I suggested checking it out 👇️",[47,11208],{"id":11209},"QG9xKpgwOI4",[16,11211,9551,11212,11216,11217,184],{},[23,11213,6034],{"href":11214,"rel":11215},"http:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fjdk-23-first-look",[101]," to highlight some of these features if you want to check that out 🤷‍♂️ If you want to download JDK 23 you can get it from IntelliJ or by using ",[23,11218,11221],{"href":11219,"rel":11220},"https:\u002F\u002Fsdkman.io\u002F",[101],"SDK Man",[33,11223,93],{"id":92},[16,11225,11226],{},"Last week we had a special edition of the podcast on Tuesday where we sat down with Java Developer Advocate Billy Korando and talked about some of the new features in JDK 23. I love talking to Billy about all things Java because he is just so knowledgable and has really great insight and opinions on everything.",[47,11228],{"id":11229},"eDg4OkeePLM",[16,11231,11232],{},"I had someone ask me on the live stream when Spring would support JDK 23. At the time I wasn't sure, but I thought it would be by the end of the week and sure enough it showed up on the Spring Initializr on Thursday last week. If you want to give JDK 23 a spin in a Spring Project you can do that right now!",[16,11234,11235],{},[74,11236],{"alt":11237,"src":11238},"Spring Boot 🤝 JDK 23","https:\u002F\u002Fmedia.beehiiv.com\u002Fcdn-cgi\u002Fimage\u002Ffit=scale-down,format=auto,onerror=redirect,quality=80\u002Fuploads\u002Fasset\u002Ffile\u002F16a2887f-bc3b-48d6-b01d-12c77022d265\u002Fimage.png?t=1726776092",[16,11240,11241,11242,11246,11247,184],{},"If you want to read through all the JEPS included in this release you can do so ",[23,11243,742],{"href":11244,"rel":11245},"https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F23\u002F",[101],". This release was not just about the JEPs though as there were many notable issues resolved and deprecations and if you want to find out about those you can read through the ",[23,11248,7253],{"href":11249,"rel":11250},"https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Ftechnologies\u002Fjavase\u002F23all-relnotes.html",[101],[28,11252,11095],{"id":11094},[33,11254,11256],{"id":11255},"jconf-in-dallas-tx","jConf in Dallas TX",[16,11258,11259,11260,11265],{},"This week I will be heading to Dallas TX for ",[23,11261,11264],{"href":11262,"rel":11263},"https:\u002F\u002F2024.jconf.dev\u002F",[101],"jConf",". It's going to be a really quick trip for me, but I'm excited for a bunch of reasons. I have the honor of presenting on Building Intelligent Applications with Spring AI. If you have been following me you know I'm very much into the AI space, and I'm a huge fan of how easy Spring AI makes it to build intelligent apps.",[16,11267,11268],{},"I'm also really excited for my favorite part of conferences and that is the hallway track. So many really great speakers are going to be there some of which I have never met before. I'm also really looking forward to catching up with some friends. If you're going to be there I will be there Tuesday afternoon and I leave Wednesday evening. I would love to catch up, meet or just say hello 👋🏻",[16,11270,11271],{},"Last week I had a chance to give the same presentation to the Houston Java User Group. I want to thank them for having me present. I thought it went really well, and we got some really great questions. One of which you can read about in the Tweets section below.",[16,11273,11274,11275,184],{},"If you're interested in having me speak at your next user group meeting or conference please feel free to contact me. If you want to find out where I will be speaking next you can check out my ",[23,11276,3517],{"href":3515,"rel":11277},[101],[28,11279,4229],{"id":384},[166,11281],{"id":11282},"1836594043414892755",[166,11284],{"id":11285},"1836773036822811093",[166,11287],{"id":11288},"1836597076655824972",[28,11290,11110],{"id":11109},[16,11292,11293,11294,11299],{},"📝 Mala Gupta had an amazing article on the JetBrains blog titled \"",[23,11295,11298],{"href":11296,"rel":11297},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2024\u002F09\u002Fjava-23-and-intellij-idea\u002F",[101],"Java 23 and IntelliJ IDEA","\" and its really good.",[16,11301,11302,11303],{},"🎙️ Mala Gupta and Vikas Malik, live from New Delhi, on a ",[23,11304,11307],{"href":11305,"rel":11306},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WxRpseXnr_w",[101],"Bootiful Podcast",[16,11309,11310,11311],{},"📹 \"Pkl: Safe and Miantainable Config for Java Apps and Infrastructure\" by ",[23,11312,11315],{"href":11313,"rel":11314},"https:\u002F\u002Fvimeo.com\u002F1006138422",[101],"James Ward at JavaZone",[28,11317,10992],{"id":10991},[16,11319,11320,11321],{},"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle. - ",[734,11322,8994],{},[28,11324,172],{"id":171},[16,11326,11327,11328,11333],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any links you would like me to include please ",[23,11329,11332],{"href":11330,"rel":11331},"http:\u002F\u002Ftwitter.com\u002Ftherealdanvega",[101],"contact me"," and I might add them to a future newsletter. I hope you have a great week and as always friends...",[16,11335,9630,11336,191],{},[189,11337],{},{"title":200,"searchDepth":201,"depth":201,"links":11339},[11340,11344,11347,11348,11349,11350],{"id":11030,"depth":201,"text":11031,"children":11341},[11342,11343],{"id":11199,"depth":206,"text":11200},{"id":92,"depth":206,"text":93},{"id":11094,"depth":201,"text":11095,"children":11345},[11346],{"id":11255,"depth":206,"text":11256},{"id":384,"depth":201,"text":4229},{"id":11109,"depth":201,"text":11110},{"id":10991,"depth":201,"text":10992},{"id":171,"depth":201,"text":172},{"_id":11352,"path":11353,"title":11354,"description":11355,"meta":11356,"body":11359},"newsletter\u002Fnewsletter\u002F2024\u002F09\u002F16\u002Fbytesized-ai-dev.md","\u002Fnewsletter\u002F2024\u002F09\u002F16\u002Fbytesized-ai-dev","ByteSized AI, Java 23 & Upcoming Talks","Happy Monday and welcome to another edition of the newsletter. I have had a lot going on this summer and that is why the issues have been a little infrequent. I have been writing a lot more lately and that is something that makes me happy.",{"slug":11357,"date":11358},"bytesized-ai-dev","2024-09-16T07:00:00.000Z",{"type":13,"value":11360,"toc":11497},[11361,11363,11370,11377,11381,11392,11400,11403,11408,11412,11420,11433,11435,11437,11440,11448,11450,11454,11457,11463,11466,11469,11475,11477,11482],[16,11362,11355],{},[16,11364,11365,11366,11369],{},"I mentioned this in a previous newsletter, but I'm writing a book with good my friend Nate Schutta titled ",[23,11367,8491],{"href":3456,"rel":11368},[101],". This has been a huge learning process for me but such a great experience. I finished my first chapter and as soon as it is in the early access edition I will be sure to let you know.",[16,11371,11372,11373,11376],{},"Next week I will be in Dallas for ",[23,11374,11264],{"href":11262,"rel":11375},[101],", and I am really looking forward to it. I will be giving an updated version of my talk \"Building Intelligent Applications in Java with Spring AI\". If you're going to be at jConf please say hi and let's talk about what you're doing with AI. In other news I had to pull out of dev2Next, and I'm super bummed out about this. I was really looking forward to this conference and have to withdrawal from conferences you were selected to speak at is never an easy decision.",[28,11378,11380],{"id":11379},"bytesized-ai-newsletter","ByteSized AI Newsletter",[16,11382,11383,11384,11387,11388,11391],{},"As if I wasn't busy enough writing I decided to launch a new newsletter called ",[23,11385,8920],{"href":2849,"rel":11386},[101],". I sent out an email about this last week but if you didn't catch it you can check it out ",[23,11389,742],{"href":2849,"rel":11390},[101]," and subscribe not to miss another issue.",[16,11393,11394,11395,11399],{},"I started this newsletter because I really love learning about everything related to Artificial Intelligence and then writing about it. I also started it because I wanted a reason to check out the newsletter platform ",[23,11396,11398],{"href":5231,"rel":11397},[101],"Beehiv",". I am absolutely loving everything about this platform. It has a truly enjoyable writing experience. I'm enjoying it so much that I plan on moving this newsletter over to it as soon as I can find the time to do it.",[16,11401,11402],{},"In my next issue I will be talking about Open AI's two new models o1-preview and 01-mini. The o1 series introduces integrated chain-of-thought reasoning, a feature that promises to revolutionize how AI models approach complex problems and tasks.",[16,11404,11405],{},[74,11406],{"alt":8920,"src":11407},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F16\u002Fbytesized_ai.png",[28,11409,11411],{"id":11410},"java-23","Java 23",[16,11413,11414,11415,11419],{},"What a great time it is to be a Java Developer! We get a new version of the JDK every 6 months. JDK 23 will be released this week, and I'm really looking forward to it. I have a ",[23,11416,6034],{"href":11417,"rel":11418},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fjdk-23-first-look",[101]," highlighting some of the new features, enhancements and preview features.",[16,11421,11422,11423,11427,11428,11432],{},"You can join the Java 23 launch stream ",[23,11424,742],{"href":11425,"rel":11426},"https:\u002F\u002Fdev.java\u002Fcommunity\u002Fjava-23-launch\u002F",[101],". This is a 3.5-hour live stream covering the launch of Java 23 as well as community updates and what to expect from future releases. We will also have a special Spring Office Hours planned for Tuesday with special guest ",[23,11429,11431],{"href":11430},"@BillyKorando","Billy Korando"," where we will talk all about it.",[47,11434],{"id":11229},[28,11436,3363],{"id":4557},[16,11438,11439],{},"It's been awhile since I last posted a video on YouTube, but I'm hoping I can turn that around this week. I have a large number of ideas in the backlog and 3-4 videos that are ready to go. As I stated previously I have been pretty busy with other priorities but creating videos is what makes me the happiest. I crossed some pretty amazing milestones lately and I just want to say thank you for continuing to support the channel ❤️",[1271,11441,11442,11445],{},[1274,11443,11444],{},"60,000 Subscribers",[1274,11446,11447],{},"5.3 Million Views",[28,11449,11191],{"id":10953},[33,11451,11453],{"id":11452},"articles","📝 Articles",[16,11455,11456],{},"This article introduces Htmx, a lightweight library that allows Spring Boot developers to create interactive web experiences without complex frontend frameworks. It demonstrates how to integrate Htmx with Spring Boot and Thymeleaf, showcasing simple examples like button clicks and search functionality, while highlighting the benefits of using Htmx for server-side rendering and reduced frontend complexity",[16,11458,11459],{},[23,11460,11461],{"href":11461,"rel":11462},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2024\u002F09\u002Fintroduction-to-htmx-for-spring-boot-developers\u002F",[101],[33,11464,11465],{"id":30},"🎬 Videos",[16,11467,11468],{},"This session will provide a comprehensive overview of the new feature in IntelliJ IDEA: workspaces. Andrey will explain what workspaces are, how they function, and how they can be integrated into your current projects. We will demonstrate some practical examples to get you started: creating a workspace, adding projects, and running them within it.",[16,11470,11471],{},[23,11472,11473],{"href":11473,"rel":11474},"https:\u002F\u002Fwww.youtube.com\u002Flive\u002Fewe8AgP7oUE",[101],[28,11476,172],{"id":171},[16,11478,11327,11479,11333],{},[23,11480,11332],{"href":11330,"rel":11481},[101],[16,11483,9630,11484,191,11486,11488,11492,11494],{},[189,11485],{},[189,11487],{},[23,11489,11491],{"href":11490},"mailto:danvega@gmail.com","danvega@gmail.com",[189,11493],{},[23,11495,198],{"href":198,"rel":11496},[101],{"title":200,"searchDepth":201,"depth":201,"links":11498},[11499,11500,11501,11502,11506],{"id":11379,"depth":201,"text":11380},{"id":11410,"depth":201,"text":11411},{"id":4557,"depth":201,"text":3363},{"id":10953,"depth":201,"text":11191,"children":11503},[11504,11505],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":171,"depth":201,"text":172},{"_id":11508,"path":11509,"title":11510,"description":11511,"meta":11512,"body":11515},"newsletter\u002Fnewsletter\u002F2024\u002F09\u002F01\u002Fspring-one-2024.md","\u002Fnewsletter\u002F2024\u002F09\u002F01\u002Fspring-one-2024","SpringOne at Explore 2024 Recap, new Blog Posts & Videos","Happy Tuesday and welcome to another edition of the newsletter. This is coming to you a day late because we celebrated Labor Day here yesterday. I have a lot to catch you up on because it was a busy August for me starting with SpringOne at Explore 2024.",{"slug":11513,"date":11514},"spring-one-2024","2024-09-03T07:00:00.000Z",{"type":13,"value":11516,"toc":11716},[11517,11519,11522,11525,11528,11531,11534,11537,11540,11547,11550,11556,11561,11566,11571,11574,11578,11581,11583,11592,11609,11611,11614,11618,11621,11630,11634,11637,11645,11649,11652,11661,11663,11666,11670,11673,11676,11690,11699,11701,11703],[16,11518,11511],{},[16,11520,11521],{},"I was back in Vegas for SpringOne at Explore 2024 last week and wow was it a long but productive few days. I got into Vegas on Saturday, August 24th because I had to be up and early on Sunday morning for rehearsals. I was the host of the Spring Spotlight (Keynote) and I had to record some voice-overs as well as run through the entire show on site with the whole team.",[16,11523,11524],{},"The keynote started on Monday at 9:00 AM and I had to be up early to prepare for the big show. It was a lot of fun and the honor of a lifetime to be up on the main stage introducing so many talented people that I had to pinch myself a couple of times during the show. If you want to see a recording of the keynote you can check it out below.",[47,11526],{"id":11527},"7S6M8H2hz6w",[16,11529,11530],{},"I spent the rest of my trip in the Spring Theater as an emcee for most of our amazing speakers on Monday and Tuesday. I also had a couple sessions of my own which you can check out below.",[47,11532],{"id":11533},"tMPC-u891XA",[47,11535],{"id":11536},"CMpatvWLan8",[16,11538,11539],{},"If you want to check out the keynote and all the sessions from the Spring Theater you can view our YouTube playlist below.",[16,11541,11542],{},[23,11543,11546],{"href":11544,"rel":11545},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=7S6M8H2hz6w&list=PLgGXSWYM2FpPDrv8zmf3oN6SX1prqmESN",[101],"SpringOne 2024 Playlist",[16,11548,11549],{},"And here are a few photos from the event.",[16,11551,11552],{},[74,11553],{"alt":11554,"src":11555},"SpringOne 2024","\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F03\u002Fspring_one_2024_01.jpeg",[16,11557,11558],{},[74,11559],{"alt":11554,"src":11560},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F03\u002Fspring_one_2024_02.jpeg",[16,11562,11563],{},[74,11564],{"alt":11554,"src":11565},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F03\u002Fspring_one_2024_03.jpeg",[16,11567,11568],{},[74,11569],{"alt":11554,"src":11570},"\u002Fimages\u002Fnewsletter\u002F2024\u002F09\u002F03\u002Fspring_one_2024_04.jpeg",[16,11572,11573],{},"Thank you to everyone who attended my sessions and spent some time talking with me. I had so much fun interacting with our amazing community and I can't wait to do it again!",[28,11575,11577],{"id":11576},"ai","AI",[16,11579,11580],{},"If you follow me at all you know I have been deep into the world of AI. I am having so much fun learning about how to leverage AI in my day to workflow as a developer and content creator. I have also had a lot of fun this year learning how to incorporate it into my Java applications with Spring AI.",[33,11582,8203],{"id":8202},[16,11584,11585,11586,11591],{},"Speaking of Spring AI did you hear that the team just released ",[23,11587,11590],{"href":11588,"rel":11589},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F08\u002F23\u002Fspring-ai-1-0-0-m2-released",[101],"Spring AI 1.0.0 M2",". A major emphasis for this release has been on observability functionality, crucial for monitoring, debugging, and optimizing AI applications. Comprehensive observability features have been introduced for:",[1271,11593,11594,11597,11600,11603,11606],{},[1274,11595,11596],{},"ChatClient (including Advisors)",[1274,11598,11599],{},"Chat Models (OpenAI, Ollama, Mistral, Anthropic)",[1274,11601,11602],{},"Embedding Models",[1274,11604,11605],{},"Image Generation Models",[1274,11607,11608],{},"Vector Stores",[33,11610,66],{"id":65},[16,11612,11613],{},"I have written a few blog posts over the last month that I thought I would share with you.",[5301,11615,11617],{"id":11616},"harnessing-local-llms-a-practical-guide-to-ollama-and-open-web-ui","Harnessing Local LLMs: A Practical Guide to Ollama and Open Web UI",[16,11619,11620],{},"In this blog post, I dive into Ollama, a cool tool that lets you run large language models (LLMs) right on your own machine. Imagine having the power of models like Llama 3.1 at your fingertips, with all the benefits of cost savings and enhanced security. I break down the whole process, from installation to model selection, and even introduce you to Open Web UI – think of it as your personal, customizable ChatGPT.",[16,11622,11623,11624,11629],{},"Curious about running your own local LLMs and supercharging your AI projects? Check out the full guide here: ",[23,11625,11628],{"href":11626,"rel":11627},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Follama-web-ui",[101],"Harnessing Local LLMs - A Practical Guide to Ollama and Open Web UI",". Trust me, whether you're a developer, AI enthusiast, or just love staying ahead of the tech curve, this is one you won't want to miss. Happy coding! 🚀💻",[5301,11631,11633],{"id":11632},"claude-35-sonnet-ai-assistance-with-speed-and-artifacts","Claude 3.5 Sonnet - AI Assistance with Speed and Artifacts",[16,11635,11636],{},"Anthropic has just released Claude 3.5 Sonnet, and it's a game-changer. This new model is not only smarter and faster than its predecessors, but it also introduces a cool new feature called Artifacts. Imagine having your own AI assistant that can generate code, create documents, and even design websites, all while you chat and collaborate in real-time. It's like having a super-powered brainstorming partner right at your fingertips!",[16,11638,11639,11640,11644],{},"But that's not all – Claude 3.5 Sonnet also comes with a nifty feature called Projects, helping you keep all your AI-assisted work organized and easily accessible. Whether you're a coding newbie, a content creator, or just someone curious about the latest in AI, this tool is definitely worth checking out. Want to learn more about how Claude 3.5 Sonnet can supercharge your productivity and creativity? Head over to my full blog post here: ",[23,11641,11633],{"href":11642,"rel":11643},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fclaude-sonnet-35",[101],". Trust me, you won't want to miss this glimpse into the future of human-AI collaboration! 🚀🤖",[5301,11646,11648],{"id":11647},"supercharge-your-spring-apps-with-ai-a-beginners-guide-to-claude-35-sonnet-and-spring-ai","Supercharge Your Spring Apps with AI - A Beginner's Guide to Claude 3.5 Sonnet and Spring AI",[16,11650,11651],{},"Ready to take your Java applications to the next level with some cutting-edge AI? I've got just the thing for you! In my latest blog post, I'm diving into how to integrate Claude 3.5 Sonnet (that awesome new AI model from Anthropic) with Spring applications using Spring AI. It's like giving your Spring apps a superpower boost! 🚀",[16,11653,11654,11655,11660],{},"I walk you through setting up a Spring Boot project that uses Spring AI to chat with Claude 3.5 Sonnet, complete with code samples for creating a chat controller and handling generated code. The best part? It's all done in the familiar Spring environment you know and love. Whether you're looking to add code generation, natural language processing, or other AI capabilities to your projects, this guide has got you covered. Curious to see how it all comes together? Check out the full post here: ",[23,11656,11659],{"href":11657,"rel":11658},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fclaude-sonnet-spring-ai",[101],"Supercharge Your Spring Apps with AI",". And don't forget to grab the source code from my GitHub repo to start experimenting. Happy coding, and let's build some AI-powered Spring magic! 🌟💻",[28,11662,31],{"id":30},[16,11664,11665],{},"As I mentioned earlier August was a busy month, but I was able to knock out 1 video. I have a long list of videos in the queue and I will begin working on those this week.",[28,11667,11669],{"id":11668},"must-watch-java-tutorial-method-references-explained","📺 Must-Watch Java Tutorial: Method References Explained",[16,11671,11672],{},"I had an opportunity to put together a video on method references in Java. I break down this powerful Java 8 feature, showing how it can make our code cleaner and more expressive. I cover all four types of method references with clear, practical examples that even Java beginners can follow.",[33,11674,11675],{"id":4416},"🔑 Key Takeaways:",[1271,11677,11678,11681,11684,11687],{},[1274,11679,11680],{},"Method references offer a concise way to reference methods or constructors",[1274,11682,11683],{},"They work alongside lambda expressions for more functional-style programming",[1274,11685,11686],{},"Types include: static, instance (particular object), instance (arbitrary object), and constructor references",[1274,11688,11689],{},"Your IDE can help spot opportunities to use method references",[16,11691,11692,11693,11698],{},"If you're looking to level up your Java skills, ",[23,11694,11697],{"href":11695,"rel":11696},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=DELCbBuCHHE",[101],"check out the video here",". It's time well spent!",[28,11700,172],{"id":171},[16,11702,11130],{},[16,11704,9630,11705,191,11707,11709,11711,11713],{},[189,11706],{},[189,11708],{},[23,11710,11491],{"href":11490},[189,11712],{},[23,11714,198],{"href":198,"rel":11715},[101],{"title":200,"searchDepth":201,"depth":201,"links":11717},[11718,11722,11723,11726],{"id":11576,"depth":201,"text":11577,"children":11719},[11720,11721],{"id":8202,"depth":206,"text":8203},{"id":65,"depth":206,"text":66},{"id":30,"depth":201,"text":31},{"id":11668,"depth":201,"text":11669,"children":11724},[11725],{"id":4416,"depth":206,"text":11675},{"id":171,"depth":201,"text":172},{"_id":11728,"path":11729,"title":11730,"description":11731,"meta":11732,"body":11735},"newsletter\u002Fnewsletter\u002F2024\u002F07\u002F15\u002Fhello-fundamentals-software-engineering.md","\u002Fnewsletter\u002F2024\u002F07\u002F15\u002Fhello-fundamentals-software-engineering","Fundamentals of Software Engineering, Spring I\u002FO and Video Content","Happy Monday and welcome to another edition of the newsletter. Last time we talked, I mentioned that I was writing a new book but didn’t give you many details. I’m happy to announce that the contracts have been signed and I have begun writing, so I can share a bit more about it now. The name of the book is \"Fundamentals of Software Engineering,\" and I am co-authoring it with my good friend Nate Schutta.",{"slug":11733,"date":11734},"hello-fundamentals-software-engineering","2024-07-15T07:00:00.000Z",{"type":13,"value":11736,"toc":11845},[11737,11739,11745,11748,11751,11754,11758,11761,11764,11767,11770,11773,11777,11780,11789,11792,11795,11799,11802,11805,11809,11812,11815,11819,11822,11825,11827,11832],[16,11738,11731],{},[16,11740,11741],{},[74,11742],{"alt":11743,"src":11744},"fose_book_cover.png","\u002Fimages\u002Fnewsletter\u002F2024\u002F07\u002F15\u002Ffose_cover.png",[16,11746,11747],{},"The purpose of the book is to help those who are new to the industry and or 1-2 years on the job. This will be a bit of a guide or a reminder on some of the most important things you should remember as a new developer. Nate and I have over 40 years of experience on a wide range of roles between the 2 of us.",[16,11749,11750],{},"I'm not only excited about this because this is my first book, and I’m doing it with my good friend but because I honestly believe in the book. I think this is one of those books that new developers will continually reach for and come back to time and time again.",[16,11752,11753],{},"This book is on the O’Reilly Learning Platform which means that when we publish new chapters you can get early access to the content. This doesn’t mean that this is the final version, but you can get it before everyone else. I’m excited for all of you to get your hands on it and of course I would love some feedback.",[28,11755,11757],{"id":11756},"spring-io","Spring I\u002FO",[16,11759,11760],{},"It’s been almost 2 months since Spring I\u002FO in beautiful Barcelona, Spain, and there have been a few updates I want to share with you. First, there is a new highlight video that showcases some of the amazing talks and events from the conference. I got really excited about the conference all over again after watching this video. I even made it into the video a couple of times, so I thought I would share it with you.",[47,11762],{"id":11763},"CsiCKAInWhg",[16,11765,11766],{},"My presentation titled “A Spring Developers Guide to Navigating the Frontend Landscape” has been published to the Spring I\u002FO YouTube Channel. This was my first time giving this exact talk and I thought it went pretty well. If you need to build a frontend for your Spring application and aren’t sure where to start I think this is a pretty good overview.",[47,11768],{"id":11769},"CdtyvO9jg8E",[16,11771,11772],{},"Also, a huge shout-out to Sergi and the entire team at Spring I\u002FO for posting all the presentations. The recordings are high quality and the speakers were top-notch. I am still going through all of these presentations myself.",[28,11774,11776],{"id":11775},"video-content","Video Content",[16,11778,11779],{},"I am always working on ways to improve my video content. I noticed my videos were taking a lot longer to record, edit, and publish, so I looked for ways to cut down on that time to create more content.",[16,11781,11782,11783,11788],{},"I came across new screen recording software called ",[23,11784,11787],{"href":11785,"rel":11786},"https:\u002F\u002Fwww.screen.studio\u002F",[101],"Screen Studio",", and I loved its unique look. The camera was in the lower right-hand corner with a unique shape and drop shadow, and it zoomed in to show certain parts of the video.",[16,11790,11791],{},"I enjoyed this feature, so I decided to purchase the software and make a couple of videos using it. The first video had more zooming in and out than the second one. You gave feedback saying you didn’t like the automatic zooming, so in the second video, I tried to use less of it.",[16,11793,11794],{},"In the end, I had a single video that I could edit and publish more quickly. I don’t know if I will keep using it forever, but I will for now. I also have some ideas for redesigning my home studio to improve the look, and I'll let you know when that happens. For now, here are some of the videos I worked on since we last spoke:",[33,11796,11798],{"id":11797},"spring-boot-rest-client-testing-issue-and-fix","Spring Boot Rest Client Testing (Issue and Fix)",[16,11800,11801],{},"In this tutorial you will learn how to test your Rest Client calls using the Rest Client Test annotation (@RestClientTest) in Spring Boot. If you need to change out the underlying HTTP Client library to the JDK Http Client you might have run into an issue, and we will talk about it and a work-around.",[47,11803],{"id":11804},"-ChpDCIjyh0",[33,11806,11808],{"id":11807},"building-a-chatgpt-clone-in-java-with-htmx-spring-boot-and-spring-ai","Building a ChatGPT Clone in Java with HTMX, Spring Boot, and Spring AI",[16,11810,11811],{},"In this video you are going to learn how to build a ChatGPT clone with HTMX, Spring Boot and Spring AI. HTMX allows you to add dynamic behavior to your frontend without having to write JavaScript. Spring AI allows you to easily build intelligent applications with generative AI. In this application you will use OpenAI's GPT-4o, but you could easily replace that with your Large Language Model (LLM) of choice.",[47,11813],{"id":11814},"jJ63tedBAzI",[33,11816,11818],{"id":11817},"whats-new-in-spring-ai-100-m1","What’s new in Spring AI 1.0.0 M1",[16,11820,11821],{},"In this tutorial you will learn about the new features in the latest release of Spring AI, 1.0.0 M1. I am a huge fan of the Chat Client's new fluent API as it makes the code so much more concise and readable.",[47,11823],{"id":11824},"De9a-TaJImI",[28,11826,172],{"id":171},[16,11828,11327,11829,11333],{},[23,11830,11332],{"href":11330,"rel":11831},[101],[16,11833,9630,11834,191,11836,11838,11840,11842],{},[189,11835],{},[189,11837],{},[23,11839,11491],{"href":11490},[189,11841],{},[23,11843,198],{"href":198,"rel":11844},[101],{"title":200,"searchDepth":201,"depth":201,"links":11846},[11847,11848,11853],{"id":11756,"depth":201,"text":11757},{"id":11775,"depth":201,"text":11776,"children":11849},[11850,11851,11852],{"id":11797,"depth":206,"text":11798},{"id":11807,"depth":206,"text":11808},{"id":11817,"depth":206,"text":11818},{"id":171,"depth":201,"text":172},{"_id":11855,"path":11856,"title":11857,"description":11858,"meta":11859,"body":11862},"newsletter\u002Fnewsletter\u002F2024\u002F06\u002F17\u002Fwriting-my-first-book.md","\u002Fnewsletter\u002F2024\u002F06\u002F17\u002Fwriting-my-first-book","I’m writing my first book and Spring AI 1.0.0 M1 has been released","Happy Monday and welcome to another edition of the newsletter. I know it's been a couple of weeks since you heard from me, but I promise I have some good reasons for that. I’m excited to announce that I have begun writing my first book!",{"slug":11860,"date":11861},"writing-my-first-book","2024-06-17T07:00:00.000Z",{"type":13,"value":11863,"toc":11985},[11864,11866,11869,11872,11875,11878,11882,11890,11896,11905,11911,11920,11923,11926,11930,11939,11945,11956,11960,11963,11966,11968,11973],[16,11865,11858],{},[16,11867,11868],{},"This has been a significant career goal for me. I've always enjoyed writing, whether it's for this newsletter, my blog with over 1,000 posts, or documentation. It's something I've consistently enjoyed over the years. While this goal is not yet accomplished, I'm pleased to announce that I've started writing my first chapter.",[16,11870,11871],{},"I have had some offers to work on books over the years but the timing was never right. I have had little kids at home for the last 6 years and during those days of not sleeping I knew I couldn’t take on any extra work.",[16,11873,11874],{},"I also knew that I was going to hold to work on a book for a specific publisher. O’Reilly has long been the gold standard for tech books for me and you will find my bookshelf (Physical and Digital) lined with them. I knew that if I was going to write a book I wanted it to be with them. Lucky for me, I have been doing work with them on various projects over the years and the stars aligned with them on this one.",[16,11876,11877],{},"I have more to tell you about how this opportunity came up and who I’m co-authoring this book with (I’m really excited about that part) but that information will be coming soon. In the meantime I need to finish this newsletter and get back to writing the book. In this newsletter I want to talk about Spring AI 1.0.0 M1 and some things I have been working on around that release.",[28,11879,11881],{"id":11880},"spring-ai-100-m1","Spring AI 1.0.0 M1",[16,11883,11884,11885,11889],{},"The first milestone release of Spring AI happened when I was in Barcelona for Spring I\u002FO. I had a chance to see a lot of the new features being demonstrated at the conference and I was really excited to get back home and try them all out. If you haven’t had a chance to check out the blog post announcing 1.0.0 M1 you can check it out ",[23,11886,742],{"href":11887,"rel":11888},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F05\u002F30\u002Fspring-ai-1-0-0-m1-released",[101],". If you look at the bottom of the announcement you will even see that I got a mention as a contributor to the project and that was AWESOME to see!",[16,11891,11892],{},[74,11893],{"alt":11894,"src":11895},"Spring AI Contributor","\u002Fimages\u002Fnewsletter\u002F2024\u002F06\u002F17\u002Fcontributor.png",[16,11897,11898,11899,11904],{},"The first thing I did was go through ",[23,11900,11903],{"href":11901,"rel":11902},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-into-ai",[101],"my repository"," of examples that I use when I present on Spring AI and try to update them all based on the new features. I already thought that Spring AI was easy to use but the new fluent API for the chat client has made everything so much more concise and easy to read. Since the newsletter isn’t a great place to drop a bunch of code here is a screenshot that I think sums up the new API pretty well.",[16,11906,11907],{},[74,11908],{"alt":11909,"src":11910},"Spring AI Fluent API","\u002Fimages\u002Fnewsletter\u002F2024\u002F06\u002F17\u002Fspring-ai-fluent-api.png",[16,11912,11913,11914,11919],{},"After I went through and got all of my demos updated I was ready to share the new features with some friends. A couple of weeks ago I presented on Building Intelligent Applications with Spring AI to my friends at the ",[23,11915,11918],{"href":11916,"rel":11917},"https:\u002F\u002Fwww.meetup.com\u002Fsfjava\u002Fevents\u002F299876110\u002F",[101],"San Francisco Java User Group",". This meetup was recorded and when the recording becomes available I will share it with all of you.",[16,11921,11922],{},"Finally, we discussed the new release on last week’s episode of Spring Office Hours.",[47,11924],{"id":11925},"a6mgGDyDq5o",[28,11927,11929],{"id":11928},"️-speaking","🗣️ Speaking",[16,11931,11932,11933,11938],{},"Last week I gave a presentation virtually to the ",[23,11934,11937],{"href":11935,"rel":11936},"https:\u002F\u002Fwww.javaday.org.ua\u002Fprogram-2024-online",[101],"JavaDay Lviv Conference",". I really want to thank them for allowing me to share some of my favorite features in Spring Boot 3 and Beyond 🚀I’m not sure if these sessions were recorded, but I will look into that and if they were I will share them out.",[16,11940,11941],{},[23,11942,11943],{"href":11943,"rel":11944},"https:\u002F\u002Fx.com\u002FJavadaylviv\u002Fstatus\u002F1801599652556353774",[101],[16,11946,11947,11948,11951,11952,11955],{},"This week I will be in Toronto giving a presentation on Spring AI and a Workshop on Spring AI which I am really looking forward to. Next week I will be at ",[23,11949,4963],{"href":4961,"rel":11950},[101]," to both present on Spring Boot 3 and get some good BBQ with my friend DaShaun! As always if you want to find out where I will be next please check out my ",[23,11953,3517],{"href":3515,"rel":11954},[101],". If you would like to have me speak at your event please feel free to reach out to me.",[28,11957,11959],{"id":11958},"my-videos","🎥 My Videos",[16,11961,11962],{},"I only have one video to share with you this week but I think it’s a good one. This is an introduction to using HTMX in Spring along with some fun demos. If you want to learn about how to add dynamic behavior to your web applications without having to write JavaScript this video is for you!",[47,11964],{"id":11965},"cjL0n1NApRA",[28,11967,172],{"id":171},[16,11969,11327,11970,11333],{},[23,11971,11332],{"href":11330,"rel":11972},[101],[16,11974,9630,11975,191,11977,11979,11981,11982],{},[189,11976],{},[189,11978],{},[23,11980,11491],{"href":11490},".\n",[23,11983,198],{"href":198,"rel":11984},[101],{"title":200,"searchDepth":201,"depth":201,"links":11986},[11987,11988,11989,11990],{"id":11880,"depth":201,"text":11881},{"id":11928,"depth":201,"text":11929},{"id":11958,"depth":201,"text":11959},{"id":171,"depth":201,"text":172},{"_id":11992,"path":11993,"title":11994,"description":11995,"meta":11996,"body":11999},"newsletter\u002Fnewsletter\u002F2024\u002F06\u002F03\u002Fspring-io-2024-newsletter.md","\u002Fnewsletter\u002F2024\u002F06\u002F03\u002Fspring-io-2024-newsletter","Spring I\u002F0 2024","Happy Monday and welcome to another edition of the newsletter. I just returned from Spring I\u002FO 2024 and I feel rejuvenated in the only way a conference full of passionate Java and Spring developers can do. I work remote, and it isn’t often I get to hang out with many of my coworkers.",{"slug":11997,"date":11998},"spring-io-2024-newsletter","2024-06-03T07:00:00.000Z",{"type":13,"value":12000,"toc":12042},[12001,12003,12006,12009,12016,12022,12024,12029],[16,12002,11995],{},[16,12004,12005],{},"It was amazing to hear so many people come up to me during the conference and tell me how much my content is helping them on their journey. I heard from junior developers learning Spring for the first time, Senior developers brushing up on their skills and even a couple who were coming from another language & framework.",[16,12007,12008],{},"It was a great reminder that what I am doing is making a real impact in the community and that I need to stay consistent with it and keep improving. If you want to read my recap of Spring I\u002FO 2024 you can check out my blog post below.",[16,12010,12011],{},[23,12012,12015],{"href":12013,"rel":12014},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-io-2024",[101],"Spring I\u002FO Recap",[16,12017,12018],{},[74,12019],{"alt":12020,"src":12021},"Dan at Spring I\u002FO 2024","\u002Fimages\u002Fnewsletter\u002F2024\u002F06\u002F03\u002Fspring_io_cover.jpeg",[28,12023,172],{"id":171},[16,12025,11327,12026,11333],{},[23,12027,11332],{"href":11330,"rel":12028},[101],[16,12030,9630,12031,191,12033,12035,12037,12039],{},[189,12032],{},[189,12034],{},[23,12036,11491],{"href":11490},[189,12038],{},[23,12040,198],{"href":198,"rel":12041},[101],{"title":200,"searchDepth":201,"depth":201,"links":12043},[12044],{"id":171,"depth":201,"text":172},{"_id":12046,"path":12047,"title":12048,"description":12049,"meta":12050,"body":12053},"newsletter\u002Fnewsletter\u002F2024\u002F05\u002F20\u002Fgpt-4o.md","\u002Fnewsletter\u002F2024\u002F05\u002F20\u002Fgpt-4o","GPT-4o and Spring I\u002FO","Happy Monday and welcome to another edition of the newsletter. As I write this on Sunday afternoon the weather here in Northeast Ohio is warming up and its my favorite time of the year. We took the girls to a birthday party today, had lunch by the water and now I’m getting ready for a quick trip to Dallas. I will be in Dallas to give a presentation on Spring AI and immediately following that talk I am giving a virtual presentation on Spring Boot 3.",{"slug":12051,"date":12052},"gpt-4o","2024-05-20T07:00:00.000Z",{"type":13,"value":12054,"toc":12175},[12055,12057,12060,12063,12067,12070,12073,12076,12079,12105,12111,12114,12118,12121,12124,12126,12132,12135,12143,12146,12150,12155,12157,12162],[16,12056,12049],{},[16,12058,12059],{},"I love this time of year at work as well because it is conference season. Next week I will be heading to the beautiful city of Barcelona Spain for Spring I\u002FO. This is one of those conferences that I haven’t been to yet but was definitely on the bucket list. I have heard nothing but amazing things about it and I am beyond excited about.",[16,12061,12062],{},"In this edition of the newsletter I want to talk about AI and Spring I\u002FO.",[28,12064,12066],{"id":12065},"hello-gpt-4o","Hello, GPT-4o  👋🏻",[16,12068,12069],{},"Last week Open AI announced its newest flagship model GPT-4o that can reason across audio, vision, and text in real time. If you interested in learning more about you can check out their Spring Update in the video below.",[47,12071],{"id":12072},"DQacCB9tDaw",[16,12074,12075],{},"I really enjoyed it because it got straight to the point, had some great demos and it was fairly short for an announcement video. I also found it interested that OpenAI is heavily funded by Microsoft who I believe owns something like 49% and all of their demos were on iPhones and Macbook’s 🤷‍♂️",[16,12077,12078],{},"Some of the big improvements in GPT-4o include:",[1271,12080,12081,12087,12093,12099,12102],{},[1274,12082,12083,12086],{},[161,12084,12085],{},"50% lower pricing."," GPT-4o is 50% cheaper than GPT-4 Turbo, across both input tokens ($5 per 1 million tokens) and output tokens ($15 per 1 million tokens).",[1274,12088,12089,12092],{},[161,12090,12091],{},"2x faster latency."," GPT-4o is 2x faster than GPT-4 Turbo.",[1274,12094,12095,12098],{},[161,12096,12097],{},"5x higher rate limits."," Over the coming weeks, GPT-4o will ramp to 5x those of GPT-4 Turbo—up to 10 million tokens per minute for developers with high usage.",[1274,12100,12101],{},"128k Context Window",[1274,12103,12104],{},"Knowledge cut-off date of October 2023",[16,12106,12107,12108,12110],{},"After the news broke I thought I would give it a spin in Spring AI. Sure enough all I had to do was change the version of the model I was using to ",[469,12109,12051],{}," and I was now on the latest and greatest. I haven’t run any benchmarks yet but in the few demos I went through it seems much faster. The responses I get back seem very snappy. I created a video on using this in Spring AI in the snapshot version and taking advantage of both the chat and vision modals.",[47,12112],{"id":12113},"y90CkHvDGls",[33,12115,12117],{"id":12116},"gpt-4o-and-java","GPT-4o and Java",[16,12119,12120],{},"I also thought I would take some time and introduce Java developers to GPT-4o. Spring makes it really easy to talk to the different LLMs out there but for someone just getting started I wanted to make it accessible and easy to get going. That is why I put together a simple demo that doesn't use any external dependencies.  As long as your own JDK 11+ and have access to the Http Client this will work.",[47,12122],{"id":12123},"EDJLHWcFvpQ",[28,12125,11757],{"id":11756},[16,12127,12128,12129],{},"As I mentioned in the open I am extremely excited about Spring I\u002FO next week.  Last week we had a chance to sit down with Sergi Almar the creator and organizer of the conference. I had a chance to talk to him about how the conference started and all of the planning that goes into each of these events. You can check out the livestream recording below or listen to the podcast where ever you get your podcasts. If you want to get a list of archives for the show check out ",[23,12130,4154],{"href":4154,"rel":12131},[101],[47,12133],{"id":12134},"LGx5gX7k-ao",[16,12136,12137,12138,12142],{},"The schedule is now out for ",[23,12139,11757],{"href":12140,"rel":12141},"https:\u002F\u002F2024.springio.net\u002Fsessions\u002F",[101]," so if you’re heading there check it out and start making plans for your favorite talks. Sergi also mentioned that the app should be updated this week so you can start planning your conference in the app. There are so many amazing sessions in this lineup and I have no idea how I am going to choose which talks to attend. Thankfully all of the talks are being recorded and will be available sometime after the conference has ended. I will be giving a presentation on navigating the frontend landscape and I hope to see some of you live in the audience.",[16,12144,12145],{},"I think the biggest thing I am looking forward to is meeting so many amazing people that I have talked to online for years and never had the chance to meet. If you are going to be there please say hello and lets chat about how you’re using Java and Spring!",[33,12147,12149],{"id":12148},"️-quote-of-the-week","✍️ Quote of the week",[2238,12151,12152],{},[16,12153,12154],{},"“Happiness is a choice, a repetitive one.” - Akilnathan Logeswaran",[28,12156,172],{"id":171},[16,12158,11327,12159,11333],{},[23,12160,11332],{"href":11330,"rel":12161},[101],[16,12163,9630,12164,191,12166,12168,12170,12172],{},[189,12165],{},[189,12167],{},[23,12169,11491],{"href":11490},[189,12171],{},[23,12173,198],{"href":198,"rel":12174},[101],{"title":200,"searchDepth":201,"depth":201,"links":12176},[12177,12180,12183],{"id":12065,"depth":201,"text":12066,"children":12178},[12179],{"id":12116,"depth":206,"text":12117},{"id":11756,"depth":201,"text":11757,"children":12181},[12182],{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":12185,"path":12186,"title":12187,"description":12188,"meta":12189,"body":12192},"newsletter\u002Fnewsletter\u002F2024\u002F05\u002F13\u002Fspring-office-hours-turns-1.md","\u002Fnewsletter\u002F2024\u002F05\u002F13\u002Fspring-office-hours-turns-1","Spring Office Hours turns 1, Spring I\u002FO and Spring AI","Happy Monday and welcome to another edition of the newsletter. It's being a while since my last update and I apologize for that, but I have been pretty busy with life and work.",{"slug":12190,"date":12191},"spring-office-hours-turns-1","2024-05-13T07:00:00.000Z",{"type":13,"value":12193,"toc":12341},[12194,12196,12199,12202,12206,12209,12215,12218,12221,12225,12228,12236,12240,12243,12246,12248,12256,12264,12267,12273,12275,12278,12281,12284,12321,12323,12328],[16,12195,12188],{},[16,12197,12198],{},"I don’t want to let the cat of the bag just yet, but I had a really great meeting last week about an upcoming project that I am beyond excited about. This is something that I have been thinking about for as long as I can remember, and it is one of those projects that have been at the top of my career bucket list. As soon as it becomes official I will tell you more about it.",[16,12200,12201],{},"In this edition of the newsletter I want to talk about the podcast turning 1, Spring I\u002FO and Spring AI.",[28,12203,12205],{"id":12204},"spring-office-hours-podcast","Spring Office Hours Podcast",[16,12207,12208],{},"DaShaun and I have been working on the Spring Office Hours live stream for about 2 years. I was reminded a couple of weeks ago that we hit the 1-year milestone for launching the podcast and what a year it's been. I bring this up because I want to share some valuable advice with you.",[16,12210,12211],{},[74,12212],{"alt":12213,"src":12214},"Spring Office Hours Podcast Turns 1","\u002Fimages\u002Fnewsletter\u002F2024\u002F05\u002F13\u002Fpodcast-turns-one.png",[16,12216,12217],{},"We kept going back and forth on when would be ready to launch the podcast portion of Spring Office Hours. We needed a great intro, hook, theme music and a more professional sounding show. We needed to make sure we had a list of great guests lined up, and we needed to make sure we had some really great topics planned.",[16,12219,12220],{},"No we didn’t. We just needed to start it. I don’t know about you but the idea of perfection used to stop me from starting things. Now I see the perfection in imperfection and I’m here to tell you it’s so much better on this side. The next time you are struggling with these decisions just get started right now and remember that you can always improve what you’re doing over time.",[33,12222,12224],{"id":12223},"spring-office-hours-road-show","Spring Office Hours Road Show",[16,12226,12227],{},"I’m also excited to announce that we are taking Spring Office Hours on the road this year. We are still working on what these shows are going to look like but we are excited to do some live recordings of the podcast this year. If you’re going to be at any of the following conferences be on the lookout for our live show",[1271,12229,12230,12232,12234],{},[1274,12231,11757],{},[1274,12233,4963],{},[1274,12235,4968],{},[33,12237,12239],{"id":12238},"spring-security-with-dan","Spring Security with Dan",[16,12241,12242],{},"Last week I had the opportunity to sit down with my colleague Daniel Garnier-Moiroux. We had a chance to preview his upcoming talk at Spring I\u002FO, what’s new in Spring Security 6.3 as well as answering some questions live. I love chatting with Daniel because he is just an amazing person and has so much experience that I always leave our conversations learning something.",[47,12244],{"id":12245},"GdgzXLAbnn8",[28,12247,11757],{"id":11756},[16,12249,12250,12251,12255],{},"I am really excited to be heading to my very first ",[23,12252,11757],{"href":12253,"rel":12254},"https:\u002F\u002F2024.springio.net\u002F",[101]," in Barcelona Spain at the end of the month. I was just in Barcelona for the first time in November and wow what a beautiful city it was, but it was also a little colder out. I’m looking forward to experiencing the city with some better running weather.",[16,12257,12258,12259,12263],{},"I have heard so many great things about Spring I\u002FO and I can’t wait to take in the talks, the people and everything that the conference has to offer. I will be giving a ",[23,12260,8058],{"href":12261,"rel":12262},"https:\u002F\u002F2024.springio.net\u002Fsessions\u002Fa-spring-developers-guide-to-navigating-the-frontend-landscape\u002F",[101]," on navigating the frontend landscape for Spring Developers. The idea behind this talk is that you’re a Spring Developer and you need to build out a frontend for your application, what technology do you use to do it? There are so many questions that go into this decision and in this session I will try and answer some of them.",[16,12265,12266],{},"I already threw out this question on Twitter and got a lot of really great answers. If you have questions please add them to this tweet or email me and I will try to answer them. Over the couple of weeks and even after my presentation I am going to focus a lot of my content on this subject.",[16,12268,12269],{},[23,12270,12271],{"href":12271,"rel":12272},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1788654559843209302",[101],[28,12274,8203],{"id":8202},[16,12276,12277],{},"It’s been awhile since you have heard from and during that time I have been pretty busy working on Spring AI tutorials. We are getting close to a Spring AI milestone and with that comes an understanding that some things will change between now and that highly anticipated 1.0 release.",[16,12279,12280],{},"In the meantime I have focused on putting together tutorials to cover all the basics of building intelligent applications in Java with Spring AI. If you have ever wanted to build an application that talks to one of the Large Language Models (LLMs) like Open AI’s GPT-4 there are REST APIs available. You might wonder why would I need a library when I can simply call the REST API in Java using JDK Http Client or in Spring using something like the Rest Client.",[16,12282,12283],{},"The answer is you can but as you start to build out these applications you will quickly find out that you need to solve for certain problems. When you get a response from the LLM how do you turn that into something you can work with? How can you augment the LLM with your organizations private data? These are just a couple of the questions I answer in this series of videos.",[1271,12285,12286,12293,12300,12307,12314],{},[1274,12287,12288],{},[23,12289,12292],{"href":12290,"rel":12291},"https:\u002F\u002Fyoutu.be\u002FCuIr3FiG_fc",[101],"Spring AI’s Output Parser",[1274,12294,12295],{},[23,12296,12299],{"href":12297,"rel":12298},"https:\u002F\u002Fyoutu.be\u002FTL3cko6YkgU",[101],"Open AI - Stuffing the Prompt",[1274,12301,12302],{},[23,12303,12306],{"href":12304,"rel":12305},"https:\u002F\u002Fyoutu.be\u002F4-rG2qsTrAs",[101],"Java and Spring AI - Retrieval Augmented Generation (RAG)",[1274,12308,12309],{},[23,12310,12313],{"href":12311,"rel":12312},"https:\u002F\u002Fyoutu.be\u002FZoPVGrB8iHU",[101],"Building a Spring Boot Documentation Assistant with AI",[1274,12315,12316],{},[23,12317,12320],{"href":12318,"rel":12319},"https:\u002F\u002Fyoutu.be\u002Fn7IvE1VSbvI",[101],"Spring AI Function Calling",[28,12322,172],{"id":171},[16,12324,11327,12325,11333],{},[23,12326,11332],{"href":11330,"rel":12327},[101],[16,12329,9630,12330,191,12332,12334,12336,12338],{},[189,12331],{},[189,12333],{},[23,12335,11491],{"href":11490},[189,12337],{},[23,12339,198],{"href":198,"rel":12340},[101],{"title":200,"searchDepth":201,"depth":201,"links":12342},[12343,12347,12348,12349],{"id":12204,"depth":201,"text":12205,"children":12344},[12345,12346],{"id":12223,"depth":206,"text":12224},{"id":12238,"depth":206,"text":12239},{"id":11756,"depth":201,"text":11757},{"id":8202,"depth":201,"text":8203},{"id":171,"depth":201,"text":172},{"_id":12351,"path":12352,"title":12353,"description":12354,"meta":12355,"body":12358},"newsletter\u002Fnewsletter\u002F2024\u002F04\u002F22\u002Fspring-boot-frontends.md","\u002Fnewsletter\u002F2024\u002F04\u002F22\u002Fspring-boot-frontends","Spring Boot Frontends, Spring AI and Spring Academy Pro is now FREE!","Happy Monday, and welcome to another edition of the newsletter. Unfortunately, I must start today's newsletter on a somber note. This week is the Great International Developer Summit (GIDS), where I was scheduled to deliver two talks. Regrettably, I won't be able to attend. I was truly excited about meeting many amazing developers and speakers in India, a country I have yet to visit. I’m going to try and not get too hung up on though and hope I have another chance next year.",{"slug":12356,"date":12357},"spring-boot-frontends","2024-04-22T07:00:00.000Z",{"type":13,"value":12359,"toc":12515},[12360,12362,12365,12367,12374,12377,12380,12386,12389,12392,12395,12404,12407,12415,12421,12425,12434,12436,12438,12468,12470,12479,12481,12486,12489,12495,12497,12502],[16,12361,12354],{},[16,12363,12364],{},"I have exciting news about two other conferences, but I'll keep you in suspense for now. Keep reading to find out more! In this week's edition of the newsletter, I'll discuss Spring AI, Frontend Development for Java Developers, and an exciting update on Spring Academy Pro.",[28,12366,8203],{"id":8202},[16,12368,12369,12370,12373],{},"In other conference news, I was recently accepted to ",[23,12371,11045],{"href":11262,"rel":12372},[101],", taking place in Dallas, TX from September 24 to 26. I will be presenting a talk on building intelligent applications in Spring with AI, a topic I have been deeply researching and am passionate about. If you missed my introduction to Spring AI, you can watch the video below.",[47,12375],{"id":12376},"yyvjT0v3lpY",[16,12378,12379],{},"I have a handful of videos that are ready to record so I am going to work hard on getting some of those out the door this week.I also started working on some demos around Retrieval Augmentation Generation (RAG) and this has been a lot of fun working on. I ended up building a native command-line application using Spring Shell + Spring Ai that uses the Spring Boot Reference docs to answer questions.",[16,12381,12382],{},[74,12383],{"alt":12384,"src":12385},"Spring AI + Spring Shell Native App","\u002Fimages\u002Fnewsletter\u002F2024\u002F04\u002F22\u002Fspring-ai-cml.png",[28,12387,12388],{"id":12356},"Spring Boot Frontends",[16,12390,12391],{},"In the last episode of Spring Office Hours we took some time to discuss the ever changing landscape of frontend development but specifically for Java Developers.  We discussed a lot of the options out there and when you might want to reach for one over the other.",[47,12393],{"id":12394},"-wi4U1rOn-k",[16,12396,12397,12398,12403],{},"One of the topics we touched on in that show was htmx. I understand the concepts but admittedly don’t have a ton of experience with it. That is why we decided to bring on the author of the book ",[23,12399,12402],{"href":12400,"rel":12401},"https:\u002F\u002Fleanpub.com\u002Fmodern-frontends-with-htmx",[101],"Modern Frontends with htmx",", Wim Deblauwe. In this weeks episode we will ask Wim about htmx, how to get started with it in Spring and when to reach for it.",[47,12405],{"id":12406},"y5wcruuSfvc",[16,12408,12409,12410,12414],{},"On the topic of frontends I’m happy to announce that I will be ",[23,12411,12413],{"href":12261,"rel":12412},[101],"giving a talk"," on this subject at Spring I\u002FO in Barcelona next month. This will be my first time attending and speaking at this conference and I’m beyond excited to meet so many people I work with and talk to online for the first time.",[16,12416,12417],{},[74,12418],{"alt":12419,"src":12420},"Spring I\u002FO Talk","\u002Fimages\u002Fnewsletter\u002F2024\u002F04\u002F22\u002Fspring-io-talk.png",[28,12422,12424],{"id":12423},"spring-academy-pro","Spring Academy Pro",[16,12426,12427,12428,12433],{},"I mentioned this on last weeks episode of Spring Office Hours but in case you missed it ",[23,12429,12432],{"href":12430,"rel":12431},"https:\u002F\u002Fspring.academy\u002F",[101],"Spring Academy"," Pro is now FREE. There was always a free tier available but if you wanted access to more of the pro courses you needed to pay for the pro subscription. This also came with an exam voucher to take the Spring Certification which will no longer be a part of that package. If you want to get certified you can still pay the $299 but until you’re ready you can binge all of the content Spring Academy has to offer. If you’re looking to learn Spring this is the best place to start.",[28,12435,11191],{"id":10953},[33,12437,11453],{"id":11452},[1271,12439,12440,12447,12454,12461],{},[1274,12441,12442],{},[23,12443,12446],{"href":12444,"rel":12445},"https:\u002F\u002Fmaciejwalkowiak.com\u002Fblog\u002Fspring-data-jpa-dynamic-projections\u002F",[101],"Spring Data JPA Dynamic Projections",[1274,12448,12449],{},[23,12450,12453],{"href":12451,"rel":12452},"https:\u002F\u002Fgithub.com\u002Fpkl-community\u002Fawesome-pkl",[101],"Awesome PKL",[1274,12455,12456],{},[23,12457,12460],{"href":12458,"rel":12459},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2024\u002F04\u002Fjava-frameworks-you-must-know-in-2024",[101],"Java Frameworks you must know in 2024",[1274,12462,12463],{},[23,12464,12467],{"href":12465,"rel":12466},"https:\u002F\u002Fspring.io\u002Fblog\u002F2024\u002F04\u002F16\u002Fspring-framework-6-2-0-m1-overriding-beans-in-tests",[101],"Spring Framework 6.2.0-M1 - Overriding beans in tests",[33,12469,11465],{"id":30},[16,12471,12472,12473,12478],{},"In preparation for my upcoming chat with Wim about htmx in Spring I watched ",[23,12474,12477],{"href":12475,"rel":12476},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=okCdaBTQsik",[101],"his presentation"," from Spring I\u002FO last year and I really enjoyed it.",[33,12480,12149],{"id":12148},[2238,12482,12483],{},[16,12484,12485],{},"“When one door closes another door opens; but we so often look so long and so regretfully upon the closed door, that we do not see the ones which open for us.” - Alexander Graham Bell",[33,12487,12488],{"id":2235},"🐦 Tweet",[16,12490,12491],{},[23,12492,12493],{"href":12493,"rel":12494},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1780621419795062849",[101],[28,12496,172],{"id":171},[16,12498,11327,12499,11333],{},[23,12500,11332],{"href":11330,"rel":12501},[101],[16,12503,9630,12504,191,12506,12508,12510,12512],{},[189,12505],{},[189,12507],{},[23,12509,11491],{"href":11490},[189,12511],{},[23,12513,198],{"href":198,"rel":12514},[101],{"title":200,"searchDepth":201,"depth":201,"links":12516},[12517,12518,12519,12520,12526],{"id":8202,"depth":201,"text":8203},{"id":12356,"depth":201,"text":12388},{"id":12423,"depth":201,"text":12424},{"id":10953,"depth":201,"text":11191,"children":12521},[12522,12523,12524,12525],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":12528,"path":12529,"title":12530,"description":12531,"meta":12532,"body":12535},"newsletter\u002Fnewsletter\u002F2024\u002F04\u002F01\u002Fspring-into-ai.md","\u002Fnewsletter\u002F2024\u002F04\u002F01\u002Fspring-into-ai","Spring into AI and the last episode of Spring Office Hours 😉","Happy Monday and welcome to another edition of our newsletter. For anyone who celebrates Easter I hope you had an amazing day filled with love, food, family and friends. I was able to take this picture of my family before we went to church yesterday morning. Pro Tip: If you have an iPhone and an Apple Watch you can set your phone on a tripod and take pictures using your watch 🤯",{"slug":12533,"date":12534},"spring-into-ai","2024-04-01T07:00:00.000Z",{"type":13,"value":12536,"toc":12771},[12537,12539,12545,12548,12551,12554,12557,12564,12572,12575,12578,12580,12588,12597,12735,12738,12741,12745,12748,12751,12753,12758],[16,12538,12531],{},[16,12540,12541],{},[74,12542],{"alt":12543,"src":12544},"Family Picture on Easter Sunday","\u002Fimages\u002Fnewsletter\u002F2024\u002F04\u002F01\u002Feaster-family.jpeg",[16,12546,12547],{},"Although it's April Fools' Day, I'll skip the jokes as I know you're all too clever for that, so let's get straight to business. Please note that there will be no newsletter next week since my family and I are taking a much-needed vacation. We're off to Marco Island, Florida for some fun in the sun, and I couldn't be more thrilled. I plan to set aside my laptop for a week to recharge ahead of a busy few months. In today's newsletter, I'll discuss Spring AI and some exciting developments with the podcast, Spring Office Hours.",[28,12549,12550],{"id":12533},"Spring into AI",[16,12552,12553],{},"Artificial Intelligence (AI) is a prevalent topic in today's tech industry. While some may worry about AI taking over their jobs, I am excited about its potential as a tool to enhance my daily work.",[16,12555,12556],{},"Machine Learning is often associated with Python, as it has been the go-to language for training these models for a long time. However, with the advent of Large Language Models (LLMs), we are entering a new phase where these models are pre-trained and can be accessed through REST APIs.",[16,12558,12559,12560,12563],{},"Java is one of the most popular programming languages in the world and is used all over enterprise companies. With LLMs like ",[469,12561,12562],{},"gpt-4"," making their services available via REST API you could just call the API with your existing clients. It turns out there is a lot more you have to think about though when it comes to configuration, tokens, prompts, output parsing, embeddings, vector databases and more.",[16,12565,12566,12567,12571],{},"This is why I am particularly excited about a new project in the Spring ecosystem called ",[23,12568,8203],{"href":12569,"rel":12570},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-ai",[101],". This project offers an abstraction layer over various LLMs, providing a consistent method of working with them.",[16,12573,12574],{},"Last week I had an opportunity to live stream with my friends over at JetBrains, the maker of my favorite IDE, IntelliJ. I had a chance to talk about AI terminology, Java and AI, Spring AI, and I was able to answer some really great questions from the crowd. Thanks to everyone who joined me live and for those of you who missed it, you can catch the replay below.",[47,12576],{"id":12577},"x6KmUyPWy2Q",[28,12579,93],{"id":92},[16,12581,12582,12583,12587],{},"I've seen significant growth in the ",[23,12584,2375],{"href":12585,"rel":12586},"https:\u002F\u002Fwww.springofficehours.io",[101]," recently and I want to begin by expressing my gratitude to everyone who has supported it. I think we have had some really great topics lately and last week we had the opportunity to talk about Spring Boot 3.3 and Java 22.",[16,12589,12590,12591,12596],{},"Java 22 was recently released, and we examined all the JEPs included in this version. It featured many previews and second previews, including two JEPs from Project Loom (462,464). I had hoped these would finalize in version 22, but we will need to ",[23,12592,12595],{"href":12593,"rel":12594},"http:\u002F\u002Fwait.One",[101],"wait."," One cool feature that I was excited to see was the ability to launch multi-file source code programs.",[1613,12598,12599,12612],{},[1616,12600,12601],{},[1619,12602,12603,12606],{},[1622,12604,12605],{},"423:",[1622,12607,12608],{},[23,12609,12610],{"href":12610,"rel":12611},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F423",[101],[1629,12613,12614,12625,12636,12647,12658,12669,12680,12691,12702,12713,12724],{},[1619,12615,12616,12619],{},[1634,12617,12618],{},"447:",[1634,12620,12621],{},[23,12622,12623],{"href":12623,"rel":12624},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F447",[101],[1619,12626,12627,12630],{},[1634,12628,12629],{},"454:",[1634,12631,12632],{},[23,12633,12634],{"href":12634,"rel":12635},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F454",[101],[1619,12637,12638,12641],{},[1634,12639,12640],{},"456:",[1634,12642,12643],{},[23,12644,12645],{"href":12645,"rel":12646},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F456",[101],[1619,12648,12649,12652],{},[1634,12650,12651],{},"457:",[1634,12653,12654],{},[23,12655,12656],{"href":12656,"rel":12657},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F457",[101],[1619,12659,12660,12663],{},[1634,12661,12662],{},"458:",[1634,12664,12665],{},[23,12666,12667],{"href":12667,"rel":12668},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F458",[101],[1619,12670,12671,12674],{},[1634,12672,12673],{},"459:",[1634,12675,12676],{},[23,12677,12678],{"href":12678,"rel":12679},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F459",[101],[1619,12681,12682,12685],{},[1634,12683,12684],{},"460:",[1634,12686,12687],{},[23,12688,12689],{"href":12689,"rel":12690},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F460",[101],[1619,12692,12693,12696],{},[1634,12694,12695],{},"461:",[1634,12697,12698],{},[23,12699,12700],{"href":12700,"rel":12701},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F461",[101],[1619,12703,12704,12707],{},[1634,12705,12706],{},"462:",[1634,12708,12709],{},[23,12710,12711],{"href":12711,"rel":12712},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F462",[101],[1619,12714,12715,12718],{},[1634,12716,12717],{},"463:",[1634,12719,12720],{},[23,12721,12722],{"href":12722,"rel":12723},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F463",[101],[1619,12725,12726,12729],{},[1634,12727,12728],{},"464:",[1634,12730,12731],{},[23,12732,12733],{"href":12733,"rel":12734},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F464",[101],[16,12736,12737],{},"We also had a chance to look at what’s coming in Spring Boot 3.3 which will launch on May 23. We took a look at the 3 milestone releases by reviewing the release notes. If you’re interested in learning about Java 22 and Spring Boot 3.3 you can check out the replay of our live stream below",[47,12739],{"id":12740},"ew_wc-mNHfM",[33,12742,12744],{"id":12743},"the-very-last-spring-office-hours","The very last Spring Office Hours 😉",[16,12746,12747],{},"With that said I am sad to say that today’s show is going to be our very last episode of Spring Office Hours. We hope you can drop by and hangout with us and say goodbye to our Podcast. It’s been a lot of fun hanging out with all of you every week but all good things eventually come to an end.",[47,12749],{"id":12750},"V7dO-gJ8fMY",[28,12752,172],{"id":171},[16,12754,11327,12755,11333],{},[23,12756,11332],{"href":11330,"rel":12757},[101],[16,12759,9630,12760,191,12762,12764,12766,12768],{},[189,12761],{},[189,12763],{},[23,12765,11491],{"href":11490},[189,12767],{},[23,12769,198],{"href":198,"rel":12770},[101],{"title":200,"searchDepth":201,"depth":201,"links":12772},[12773,12774,12777],{"id":12533,"depth":201,"text":12550},{"id":92,"depth":201,"text":93,"children":12775},[12776],{"id":12743,"depth":206,"text":12744},{"id":171,"depth":201,"text":172},{"_id":12779,"path":12780,"title":12781,"description":12782,"meta":12783,"body":12786},"newsletter\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fatlanta-jug.md","\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fatlanta-jug","Hello Atlanta, Java 22 and a BIG YouTube Milestone","Happy Monday and welcome to another edition of the newsletter. While Spring has officially arrived here in Northeast Ohio we are still seeing snow and temps in the 20s. This week's forecast is starting to look a little better as we are getting ready to celebrate Easter. We had an Easter egg hunt this past weekend and the girls had a blast!",{"slug":12784,"date":12785},"atlanta-jug","2024-03-25T07:00:00.000Z",{"type":13,"value":12787,"toc":12967},[12788,12790,12796,12802,12805,12809,12812,12818,12824,12827,12833,12836,12840,12849,12855,12859,12872,12875,12884,12888,12891,12897,12900,12906,12912,12915,12919,12927,12930,12933,12942,12947,12949,12954],[16,12789,12782],{},[16,12791,12792],{},[74,12793],{"alt":12794,"src":12795},"Easter Girls","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Feaster_girls.JPG",[16,12797,12798],{},[74,12799],{"alt":12800,"src":12801},"Easter Family","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Feaster_family.JPG",[16,12803,12804],{},"Major League Baseball starts back up this week and I always look forward to this time of year. I know I’m beginning to sound like a broken record but my physical and mental health need this cold weather to move on to wherever it goes. In this edition of the newsletter I want to tell you about my trip down to Atlanta for the Atlanta Java User Group meetup, the release of Java 22 and I crossed a huge milestone on YouTube.",[28,12806,12808],{"id":12807},"my-trip-to-atlanta","My trip to Atlanta",[16,12810,12811],{},"I took a quick trip down to Atlanta for a meetup at the Atlanta Java User Group. I have a lot of friends in Atlanta, so I would always see pictures of the meetups and really wanted to get there one day. I got to the venue a little bit earlier and to my surprise Neal Ford was there. Neal is the author of so many books that line my bookshelf, so it was really great to meet him. I also had an opportunity to sit down with my friend Glenn and that was really nice to catch up with him for a little bit.",[16,12813,12814],{},[74,12815],{"alt":12816,"src":12817},"Dan + Neal","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fdan_neal.jpeg",[16,12819,12820],{},[74,12821],{"alt":12822,"src":12823},"Dan + Neal + Glenn","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fdan_neal_glenn.jpeg",[16,12825,12826],{},"I gave a talk on Spring Boot 3 and Beyond, and it was about half slides and half coding. I thought the presentation went really well with everyone asking some really amazing questions. The crowd was amazing and I really fed off of it. After the presentation I had some time to chat with a lot of folks, and it was a really great time.",[16,12828,12829],{},[74,12830],{"alt":12831,"src":12832},"Atlanta JUG Crowd","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fatlanta_jug_crowd.jpeg",[16,12834,12835],{},"I really want to thank the AJUG for having me and for everyone that was in attendance. It really was an awesome crowd and I feel honored to have been there.",[33,12837,12839],{"id":12838},"oreilly-spring-recipes","O’Reilly - Spring Recipes",[16,12841,12842,12843,12848],{},"The very next morning at 9 AM EDT I had a training for the O’Reilly Learning Platform. This was a 4-hour training on “",[23,12844,12847],{"href":12845,"rel":12846},"https:\u002F\u002Flearning.oreilly.com\u002Flive-events\u002Fspring-recipes\u002F0636920095810\u002F",[101],"Spring Recipes - Practical Solutions to common problems","” with my good friend Nate Schutta. I wouldn’t have time to get home, so I had a little bit of a traveling setup ready to go in my hotel room. The hotel room Wi-Fi was good and I thought the training went really well. Thank you to everyone who joined us!",[16,12850,12851],{},[74,12852],{"alt":12853,"src":12854},"My Hotel Setup","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002Fhotel_presentation.jpeg",[28,12856,12858],{"id":12857},"java-22","Java 22",[16,12860,12861,12862,12866,12867,12871],{},"Java 22 was released last week, and it's already available as on option on the ",[23,12863,12865],{"href":2088,"rel":12864},[101],"Spring Initalizr","! If you want to learn more about it, you can check out the ",[23,12868,7253],{"href":12869,"rel":12870},"https:\u002F\u002Fjdk.java.net\u002F22\u002Frelease-notes",[101],". The team at Oracle had a really great release party where they went through the new features on a live stream that was almost 5 hours long. If you haven't had a chance to check it you can watch the recording below.",[47,12873],{"id":12874},"AjjAZsnRXtE",[16,12876,12877,12878,12883],{},"If you want to learn more you can check out ",[23,12879,12882],{"href":12880,"rel":12881},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ew_wc-mNHfM",[101],"Spring Office Hours this week"," as DaShaun and I will discuss Java 22 and Spring Boot 3.3.",[28,12885,12887],{"id":12886},"youtube-milestone","YouTube Milestone",[16,12889,12890],{},"I crossed a pretty big milestone this past week passing 50k subscribers on YouTube! Funny enough my wife informed me she wasn't subscribed, so we were able to time it out, and she was my 50,000 subscriber.",[16,12892,12893],{},[74,12894],{"alt":12895,"src":12896},"50k","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002F50k.jpeg",[16,12898,12899],{},"We went out to one of our favorite restaurants that evening. They were so nice and gave me this really cool card and dessert!",[16,12901,12902],{},[74,12903],{"alt":12904,"src":12905},"50k Card","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002F50k_card.JPG",[16,12907,12908],{},[74,12909],{"alt":12910,"src":12911},"50k Dessert","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F25\u002F50k_dessert.jpeg",[16,12913,12914],{},"I had so many people reach out to me and say some really nice things and I can't thank you all enough. YouTube, Java and Spring are really great communities to be a part of and I feel very lucky that I get to do this every day!",[28,12916,12918],{"id":12917},"freecode-camp-course-is-live","freeCode Camp Course is Live",[16,12920,12921,12922,12926],{},"If you missed it my 3.5 hour course on Spring Boot 3 is now live on freeCodeCamp. Beau from freeCodeCamp also wrote up a really nice ",[23,12923,6034],{"href":12924,"rel":12925},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Flearn-app-development-with-spring-boot-3\u002F",[101]," that you can check out. This video has gotten 70,000 views in the first week which is really mind-blowing 🤯 Thank you to everyone who has given this a watch and had something nice to say about it.",[47,12928],{"id":12929},"31KTdfRH6nY",[28,12931,12932],{"id":11094},"What’s happening this week",[16,12934,12935,12936,12941],{},"This week I'm putting the final touches on my ",[23,12937,12940],{"href":12938,"rel":12939},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2024\u002F03\u002Fnew-livestream-building-intelligent-applications-with-spring-ai\u002F",[101],"Spring AI talk"," for my friends at IntelliJ. In this presentation I will be covering some of the fundamentals of AI and how to get started with Spring AI. If you're interested please register for free and I will see you on Thursday!",[16,12943,12944],{},[23,12945,12938],{"href":12938,"rel":12946},[101],[28,12948,172],{"id":171},[16,12950,11327,12951,11333],{},[23,12952,11332],{"href":11330,"rel":12953},[101],[16,12955,9630,12956,191,12958,12960,12962,12964],{},[189,12957],{},[189,12959],{},[23,12961,11491],{"href":11490},[189,12963],{},[23,12965,198],{"href":198,"rel":12966},[101],{"title":200,"searchDepth":201,"depth":201,"links":12968},[12969,12972,12973,12974,12975,12976],{"id":12807,"depth":201,"text":12808,"children":12970},[12971],{"id":12838,"depth":206,"text":12839},{"id":12857,"depth":201,"text":12858},{"id":12886,"depth":201,"text":12887},{"id":12917,"depth":201,"text":12918},{"id":11094,"depth":201,"text":12932},{"id":171,"depth":201,"text":172},{"_id":12978,"path":12979,"title":12980,"description":12981,"meta":12982,"body":12985},"newsletter\u002Fnewsletter\u002F2024\u002F03\u002F18\u002Fpull-requests-welcomed.md","\u002Fnewsletter\u002F2024\u002F03\u002F18\u002Fpull-requests-welcomed","freeCodeCamp, Pull Requests are welcomed and Spring AI","Happy Monday and welcome to another edition of the newsletter. In typical Cleveland weather I was able to get out and play a quick 9 holes of golf earlier this week and now as I’m writing this on Sunday it’s snowing. This week I’m heading out on the road for a quick trip to Atlanta to visit the Atlanta Java User Group. This is one of the biggest user groups in the country and I’m really looking forward to this visit.",{"slug":12983,"date":12984},"free-code-camp","2024-03-18T07:00:00.000Z",{"type":13,"value":12986,"toc":13167},[12987,12989,12992,12994,13008,13011,13013,13017,13025,13028,13044,13046,13051,13059,13064,13067,13073,13081,13085,13088,13092,13095,13098,13102,13105,13108,13112,13115,13118,13120,13126,13147,13149,13154],[16,12988,12981],{},[16,12990,12991],{},"This past week was an excellent one and started out strong with one of our best Spring Office Hours shows ever. I’m also in the midst of putting together a talk on building intelligent applications with Spring AI. This is a project I’m very excited about and can’t wait to tell you more about it. Finally, I was able to film, edit and publish 3 videos this week on Spring Native Images, Primitive vs Reference Types in Java and Upgrading with OpenRewrite.",[28,12993,12918],{"id":12917},[16,12995,12996,12997,13002,13003,13007],{},"A few weeks ago I reached out to ",[23,12998,13001],{"href":12999,"rel":13000},"https:\u002F\u002Fwww.freecodecamp.org\u002F",[101],"freeCodeCamp"," to see if I could build a course for their ",[23,13004,2944],{"href":13005,"rel":13006},"https:\u002F\u002Fwww.youtube.com\u002F@freecodecamp",[101],". If you aren’t familiar with freeCodeCamp they are a place where you can learn to code for free. When I was developing curriculum for a coding bootcamp we used to use a lot of their courses as prerequisites for the course, and they are an amazing resource.",[16,13009,13010],{},"I sat down and wrote a curriculum, recorded about 4 hours of video and published this course in a week. This is an introduction to building web applications in Java with Spring Boot 3. I’m really happy with how this course turned out, and I’m really excited to share it with you. If you have a chance to go through it, I would really love your feedback.",[47,13012],{"id":12929},[28,13014,13016],{"id":13015},"pull-requests-welcome","Pull Requests Welcome",[16,13018,13019,13020,13024],{},"Last week started with one of our best Spring Office Hours shows yet! In a previous episode we built out a ",[23,13021,10303],{"href":13022,"rel":13023},"https:\u002F\u002Fgithub.com\u002Fspring-office-hours\u002Fresources-learning-spring",[101]," that contains some really great resources for learning Spring. In this episode we decided to have a chat around contributing to open source software, including this repo we created. We ended up having like 333 live viewers and that repo that we started now has 565 stars. This was just another reminder of great this community is, and we can’t thank you enough for all of your support.",[47,13026],{"id":13027},"Ap1XaG0WPeE",[16,13029,13030,13031,13034,13035,13038,13039,184],{},"As a reminder we stream live every Monday at 1 PM EDT and the replay for that stream can be found on the ",[23,13032,9091],{"href":5475,"rel":13033},[101],". We also turn that stream into a podcast and if you would like to find out more about that you can head over to ",[23,13036,824],{"href":824,"rel":13037},[101],". This week we will be discussing how to do ",[23,13040,13043],{"href":13041,"rel":13042},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0Os62f_KDPs",[101],"batch processing with Spring Batch",[28,13045,8203],{"id":8202},[16,13047,13048],{},[74,13049],{"alt":8203,"src":13050},"\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F18\u002Fspring-ai.png",[16,13052,13053,13054,13058],{},"I had some time last week to spend working with ",[23,13055,13057],{"href":12569,"rel":13056},[101],"Spring AI,"," and I’m really excited about where this project already is and where it is headed. What is Spring AI you ask?",[2238,13060,13061],{},[16,13062,13063],{},"Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design and promote using POJOs as the building blocks of an application to the AI domain.",[16,13065,13066],{},"In short, it gives you a nice abstraction layer over the different LLMs (Large Language Models) and simplifies working with the inputs (Prompts) and outputs (Output Parsers). I was able to put a bunch of really cool examples in a short amount of time starting with this simple example that talks to Open AI (The folks behind ChatGPT).",[16,13068,13069],{},[74,13070],{"alt":13071,"src":13072},"spring-ai-open-ai.png","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F18\u002Fspring-ai-open-ai.png",[16,13074,13075,13076,13080],{},"If you’re interested in hearing more about this you can register for an ",[23,13077,13079],{"href":12938,"rel":13078},[101],"upcoming livestream"," with my good friends at JetBrains.",[28,13082,13084],{"id":13083},"_3-new-videos-last-week","3 New Videos Last week!",[16,13086,13087],{},"I was able to knock out 3 new videos last week and I have been receiving some really great feedback on them.",[33,13089,13091],{"id":13090},"building-native-images-in-spring-with-graalvm","Building native images in Spring with GraalVM",[16,13093,13094],{},"In this tutorial you will learn the what, why and how of building native images in Spring Boot with GraalVM. Ahead-of-Time (AoT) compilation is a prerequisite for building native images with GraalVM. You will learn where this makes sense, and then you will build out 2 simple Spring Boot Applications and build a native image from them.",[47,13096],{"id":13097},"FjRBHKUP-NA",[33,13099,13101],{"id":13100},"java-class-design-primitive-vs-reference-types","Java Class Design: Primitive vs Reference Types",[16,13103,13104],{},"In this video I will discuss when to use a primitive vs reference type when designing Java classes. I will also answer some questions I have received around immutability and record types.",[47,13106],{"id":13107},"bQG5lzlzo6I",[33,13109,13111],{"id":13110},"upgrading-your-java-and-spring-boot-apps-with-openrewrite","Upgrading your Java and Spring Boot apps with OpenRewrite",[16,13113,13114],{},"In this tutorial we will take a look at a project called OpenRewrite that allows you to automate your upgrades. We are going to look at the newly bundled plugin in IntelliJ for running your recipes right in your IDE. We will look at both a simple Java example and then how to upgrade a Spring Boot 2.7.x app to 3.0.",[47,13116],{"id":13117},"e4R6AZHpAD8",[28,13119,8048],{"id":8047},[16,13121,13122,13123,184],{},"Last week I gave a really great presentation to (You know who you are) on Spring Boot 3 and I have a bunch of really great events lined up over the next month. As always if you’re ever interested in finding out where I will be next you can check out my ",[23,13124,3517],{"href":3515,"rel":13125},[101],[1271,13127,13128,13135,13141],{},[1274,13129,13130],{},[23,13131,13134],{"href":13132,"rel":13133},"https:\u002F\u002Fwww.meetup.com\u002Fatlantajug\u002Fevents\u002F298455293\u002F",[101],"Tuesday, March 19 - Atlanta Java User Group",[1274,13136,13137],{},[23,13138,13140],{"href":12845,"rel":13139},[101],"Wednesday, March 20 - O’Reilly Learning Platform",[1274,13142,13143],{},[23,13144,13146],{"href":12938,"rel":13145},[101],"Thursday, March 28 - IntelliJ Live Stream",[28,13148,172],{"id":171},[16,13150,11327,13151,11333],{},[23,13152,11332],{"href":11330,"rel":13153},[101],[16,13155,9630,13156,191,13158,13160,13162,13164],{},[189,13157],{},[189,13159],{},[23,13161,11491],{"href":11490},[189,13163],{},[23,13165,198],{"href":198,"rel":13166},[101],{"title":200,"searchDepth":201,"depth":201,"links":13168},[13169,13170,13171,13172,13177,13178],{"id":12917,"depth":201,"text":12918},{"id":13015,"depth":201,"text":13016},{"id":8202,"depth":201,"text":8203},{"id":13083,"depth":201,"text":13084,"children":13173},[13174,13175,13176],{"id":13090,"depth":206,"text":13091},{"id":13100,"depth":206,"text":13101},{"id":13110,"depth":206,"text":13111},{"id":8047,"depth":201,"text":8048},{"id":171,"depth":201,"text":172},{"_id":13180,"path":13181,"title":13182,"description":13183,"meta":13184,"body":13187},"newsletter\u002Fnewsletter\u002F2024\u002F03\u002F11\u002Ffree-code-camp.md","\u002Fnewsletter\u002F2024\u002F03\u002F11\u002Ffree-code-camp","Resources for learning Spring and Java is NOT slow and verbose","Happy Monday and welcome to another edition of the newsletter. If you follow me you know this weekend was a big one for me as we hit Daylight Savings which is a big milestone around here. This means that our days are going to get longer, and it will stay light out later. This means it will start to get warmer here (it already has) and that long days of winter are over.",{"slug":13185,"date":13186},"resources-learning-spring","2024-03-11T07:00:00.000Z",{"type":13,"value":13188,"toc":13295},[13189,13191,13194,13201,13205,13213,13216,13223,13226,13229,13233,13236,13239,13242,13245,13249,13252,13255,13261,13267,13275,13277,13282],[16,13190,13183],{},[16,13192,13193],{},"Seasonal depression is a real thing, and I’m excited to get back to running outside. This also means I will be able to start golfing again, and I’m very excited about that. I tell you this because it makes me happy and I think we should all celebrate whatever makes us happy.",[16,13195,13196,13197,13200],{},"Today I want to share want to share with you a resource for learning spring, tell you that Java is ",[161,13198,13199],{},"NOT"," slow and verbose.",[28,13202,13204],{"id":13203},"resources-for-learning-spring","Resources for learning Spring",[16,13206,13207,13208,13212],{},"Last week on ",[23,13209,93],{"href":13210,"rel":13211},"https:\u002F\u002Fspring-office-hours.transistor.fm\u002Fepisodes\u002Fspring-office-hours-s3e8-resources-for-learning-spring",[101]," we built out a list of resources for learning Spring live on the show. It was a lot of fun because we got to collaborate with the audience and we put a pretty solid list together in an hour.",[47,13214],{"id":13215},"W0u9XaCyWPo",[16,13217,13218,13219,13222],{},"After the show I took what we did and turned it into a ",[23,13220,7908],{"href":13022,"rel":13221},[101]," complete with categories and links to all the resources we discussed. When I was done with it I let everyone know that PRs are welcomed, and we got a lot of really great additions to the repo.",[16,13224,13225],{},"I also thought it might be a good idea to have a bookmarks file that you could just import into your browser and get all of these great links. I was able to manually put this together, but I would really love to find a way to automate this.",[16,13227,13228],{},"Finally, I have been on GitHub forever and I think the most stars a repo of mine has ever seen is 335. As of the time of writing this on Sunday night we have 420 stars on the repo which is just crazy considering it’s not even a week old yet. Thank you to everyone for the contributions and support, and we are going to talk more about this on this week's episode of Office Hours.",[28,13230,13232],{"id":13231},"java-is-slow-and-verbose","Java is slow and verbose",[16,13234,13235],{},"I've worked with JVM for most of my 23-year career, and it seems like every week someone declares Java as dead, calling it ancient, verbose, and slow. However, these claims couldn't be further from the truth.",[16,13237,13238],{},"Such comments often come from people who haven't written any Java since their introductory computer science course 20 years ago. Yes, Java has evolved over the years, but that's expected of a language that has been around for 28 years. The world relies heavily on Java, and it remains one of the most popular programming languages, regardless of the metric or survey you consider.",[16,13240,13241],{},"I decided to make a video talking about some features that make Java fast and concise.",[47,13243],{"id":13244},"lGAYLVk5HaY",[28,13246,13248],{"id":13247},"youtube-studio","YouTube Studio",[16,13250,13251],{},"I have been really unhappy with some of my recent videos because I felt like they haven’t been looking good. Mainly I thought I had some lighting issues and I decided it was time to fix them. The best way I could think of doing this is to pull a lot of stuff out of my office and start with a blank cavas.",[16,13253,13254],{},"This meant to turn off all the lights and start introducing lights to see if I could get a better result than I was before. Here is an example of the before and after.",[16,13256,13257],{},[74,13258],{"alt":13259,"src":13260},"Before","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F11\u002Fbefore.png",[16,13262,13263],{},[74,13264],{"alt":13265,"src":13266},"After","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F11\u002Fafter.png",[16,13268,13269,13270,184],{},"If you’re interested in following the progress of this I put together a ",[23,13271,13274],{"href":13272,"rel":13273},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1765746519427121276",[101],"Twitter thread",[28,13276,172],{"id":171},[16,13278,11327,13279,11333],{},[23,13280,11332],{"href":11330,"rel":13281},[101],[16,13283,9630,13284,191,13286,13288,13290,13292],{},[189,13285],{},[189,13287],{},[23,13289,11491],{"href":11490},[189,13291],{},[23,13293,198],{"href":198,"rel":13294},[101],{"title":200,"searchDepth":201,"depth":201,"links":13296},[13297,13298,13299,13300],{"id":13203,"depth":201,"text":13204},{"id":13231,"depth":201,"text":13232},{"id":13247,"depth":201,"text":13248},{"id":171,"depth":201,"text":172},{"_id":13302,"path":13303,"title":13304,"description":13305,"meta":13306,"body":13309},"newsletter\u002Fnewsletter\u002F2024\u002F03\u002F04\u002Ffebruary-2024.md","\u002Fnewsletter\u002F2024\u002F03\u002F04\u002Ffebruary-2024","February Update - ConFoo, freeCodeCamp, YouTube and Upcoming Talks","Happy Monday and welcome to another edition of the newsletter. February was an amazing month and I’m excited to tell you what I have been up to. I also want to look ahead to a busy month of March and talk about some of my upcoming talks.",{"slug":13307,"date":13308},"february-2024","2024-03-04T07:00:00.000Z",{"type":13,"value":13310,"toc":13480},[13311,13313,13316,13319,13321,13324,13330,13333,13336,13339,13342,13345,13348,13353,13356,13359,13362,13365,13368,13370,13373,13377,13380,13383,13387,13390,13393,13397,13400,13403,13407,13410,13414,13417,13421,13430,13434,13441,13445,13453,13457,13460,13462,13467],[16,13312,13305],{},[16,13314,13315],{},"But first I want to start with the fact that we are into the month of March. This is one of my favorite times of the year because January and February are tough to get through around here. It’s freezing outside combined with gray skies and the fact that it gets dark out early makes it the dog days of winter.",[16,13317,13318],{},"When we get into March around here it starts to get warmer out and we know the short depressing days are behind us. One of the days I look forward to the most will happen this weekend when we Spring our clocks forward for Daylight Savings. This means that it will stay lighter out longer, and we can enjoy being outside.",[28,13320,1888],{"id":1887},[16,13322,13323],{},"I was lucky enough to be invited to speak at this year's ConFoo conference in Montreal Canada. I have never been to this conference or to Montreal, so I was particularly excited about the unknown and visiting a new location. I checked in to the hotel only to be greeted by a rooftop pool that was heated 🤩",[16,13325,13326],{},[74,13327],{"alt":13328,"src":13329},"Hot Pool","\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F04\u002Fhot_pool.jpeg",[16,13331,13332],{},"The conference kicked off with a Java User Group Meeting at the Hotel where the conference was being held. Free food and drinks is always a great way to invite me to your parties. I also decided to get checked into the conference at this point because I heard from Yann (The conference organizer) that it would be pretty busy the next morning. After the user group meeting I got to bed knowing that the first day of the conference was going to be a busy one.",[16,13334,13335],{},"I woke up ready to go knowing that there was going to be a keynote and I had 2 talks to give. My first talk was right after the keynote, and it was in a pretty big room. No time or need to get nervous though, this talk was on GraphQL and a variation of one that I have given a lot. During the talk the projector decided to keep going out, and we ended up figuring out that it was the USB cable. Technical difficulties are never fun especially when they throw off your timing, but it is part of the deal and you need to learn to deal with them. I thought I did a good job and I thought the presentation went really well. I especially appreciated the feedback I got where people pointed out that I handled the technical issues well and I promise you that made me really happy.",[16,13337,13338],{},"My 2nd talk came later in the day and it was on Spring Boot 3 and beyond. I decided that in this talk I was going to show slides for half of the presentation and live code for the other half. All the rooms that I was in that morning had tables, so I thought I was going to luck out and have a nice environment to live code in. I got to my room though and realized I only had a podium, and I’m not a big fan of live coding on thos, but I made it work.",[16,13340,13341],{},"I thought both talks went really well, but I learned something at this conference, and it’s something I will use to improve on going forward. I try to pack way too much information into a talk. I need to get a little more specific with my talks and try not to pack so much into them, so I can slow down and explain things better.",[16,13343,13344],{},"I want to thank Yann and everyone at ConFoo for inviting me to this conference. The food was some of the best I have ever had at a conference, the speaker dinner was top-notch and the sessions were amazing. I had a great time in Montreal and I really hope to make it back one day.",[28,13346,13001],{"id":13347},"freecodecamp",[16,13349,13350],{},[74,13351],{"alt":13001,"src":13352},"\u002Fimages\u002Fnewsletter\u002F2024\u002F03\u002F04\u002FfreeCodeCamp.png",[16,13354,13355],{},"I have been a big fan of freeCodeCamp for a long time now. When I was doing curriculum development at a coding bootcamp we use to refer some of the students to their materials as prerequisites for day 1, and I think it really helped give them a good foundation.",[16,13357,13358],{},"I noticed that there wasn’t a ton of Java \u002F Spring content on the channel and nothing with a lot of the recent updates in Spring Boot 3.2, so I thought it would be great to publish a course there. I reached out to a few people I knew and even asked on Twitter if anyone could me in touch with the right people. Thanks to a couple of people they were able to put me in touch with the right people in charge.",[16,13360,13361],{},"After talking to them they decided that I would be a good instructor for the platform so I pitched them my idea, and they gave me their blessing. With an initial outline for a course I decided to flush it out a little bit more and figure out exactly what was in scope and more inmportantly what was going to be out of scope.",[16,13363,13364],{},"I wanted to make this course, but I realized that I don’t have time to put together a 15-hour course which is probably where I would be If I put everything in that I wanted to. I also can’t speak for everyone but these really long courses are a little bit intimidating as a student. I don’t want to learn every possible feature, I just want to learn what I need to know to perform certain tasks.",[16,13366,13367],{},"With the code and the readme ready to go I sat down this past week to record and edit the course. I ended up with somehwere around 4 hours of content that I trimmed down to 3.5 for the final product. I did this all in about 3 days which I was really proud of. I am really happy with how this turned out and I can’t wait for this to get published on freeCodeCamp’s YouTube channel, so I can share it with you.",[28,13369,3363],{"id":4557},[16,13371,13372],{},"I only produced 3 videos over the last month because of everything else I was working on with the conference and freeCodeCamp course but I thought they were good ones and based on the numbers and comments you really enjoyed them.",[33,13374,13376],{"id":13375},"spring-boot-starter","Spring Boot Starter",[16,13378,13379],{},"In this tutorial you will learn how to create your own custom Spring Boot Starter. Spring Boot has a number of pre-built starters that are great for bootstrapping your applications but how can you create your own? We will walk through the process of building a starter from scratch and talk about some of the processes for doing so.",[47,13381],{"id":13382},"9m1bC57oWrc",[33,13384,13386],{"id":13385},"common-mistakes","Common Mistakes",[16,13388,13389],{},"In this tutorial we will look at 5 common mistakes we make as Spring Developers and how we can improve on them. This isn't in any specific order but just 5 mistakes that I notice often when looking at the code of Spring Boot applications.",[47,13391],{"id":13392},"PbkROQPTBao",[33,13394,13396],{"id":13395},"http-interfaces-in-spring-mvc","Http Interfaces in Spring MVC",[16,13398,13399],{},"In this tutorial you will learn how to use Http Interfaces in Spring MVC. In Spring Boot 3.2 Http Interfaces will use the new Rest Client allowing you take advantage of Http Interfaces without having to pull in any other dependencies.",[47,13401],{"id":13402},"aR580OCEp7w",[28,13404,13406],{"id":13405},"upcoming-talks","Upcoming Talks",[16,13408,13409],{},"Conference season has officially begun and this is going to be a busy few months for me. I was bummed out that I didn’t get accepted to any of the Devoxx conferences I submitted to (UK, Greece and Paris) because I still haven’t been to any of those conferences but hopefully I will make it there one day.",[33,13411,13413],{"id":13412},"atlanta-java-user-group","Atlanta Java User Group",[16,13415,13416],{},"Instead of dwelling on that I am going to focus on the positives. This month I am honored to be speaking at the Atlanta Java Users Group on Spring Boot 3. I love visiting my friends in Atlanta, and I am really looking forward to hanging out there.",[33,13418,13420],{"id":13419},"intellij-live-stream","IntelliJ Live Stream",[16,13422,13423,13424,13429],{},"Later this month I will be sitting down with my good friends at ",[23,13425,13428],{"href":13426,"rel":13427},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002Fcategory\u002Flivestreams\u002F",[101],"IntelliJ,"," and we will be talking about Spring AI. I’m really looking forward to talking about generative AI and how Spring can help you write intelligent applications.",[33,13431,13433],{"id":13432},"kcdc-conference","KCDC Conference",[16,13435,13436,13437,13440],{},"I am so excited to say that I had one of my talks accepted to ",[23,13438,4963],{"href":4961,"rel":13439},[101]," and this will be my 3rd year in a row presenting at this amazing conference. I’m really looking forward to catching up with friends, having some amazing BBQ and attending all the great sessions.",[33,13442,13444],{"id":13443},"dev2next-conference","dev2Next Conference",[16,13446,13447,13448,13452],{},"Last but not least I had a couple of my sessions accepted to the inaugural ",[23,13449,13451],{"href":6518,"rel":13450},[101],"dev2Next"," conference in Colorado. This conference is put on by Venkat and it looks like its going to be an amazing lineup of speakers.",[33,13454,13456],{"id":13455},"customer-talks","Customer Talks",[16,13458,13459],{},"I have a few talks this month with customers around GraphQL, Spring Boot 3 and Spring AI. If you would like to have me and our team speak at your company please feel free to reach out about a SpringOne Tour stop at your place.",[28,13461,172],{"id":171},[16,13463,11327,13464,11333],{},[23,13465,11332],{"href":11330,"rel":13466},[101],[16,13468,9630,13469,191,13471,13473,13475,13477],{},[189,13470],{},[189,13472],{},[23,13474,11491],{"href":11490},[189,13476],{},[23,13478,198],{"href":198,"rel":13479},[101],{"title":200,"searchDepth":201,"depth":201,"links":13481},[13482,13483,13484,13489,13496],{"id":1887,"depth":201,"text":1888},{"id":13347,"depth":201,"text":13001},{"id":4557,"depth":201,"text":3363,"children":13485},[13486,13487,13488],{"id":13375,"depth":206,"text":13376},{"id":13385,"depth":206,"text":13386},{"id":13395,"depth":206,"text":13396},{"id":13405,"depth":201,"text":13406,"children":13490},[13491,13492,13493,13494,13495],{"id":13412,"depth":206,"text":13413},{"id":13419,"depth":206,"text":13420},{"id":13432,"depth":206,"text":13433},{"id":13443,"depth":206,"text":13444},{"id":13455,"depth":206,"text":13456},{"id":171,"depth":201,"text":172},{"_id":13498,"path":13499,"title":13500,"description":13501,"meta":13502,"body":13505},"newsletter\u002Fnewsletter\u002F2024\u002F01\u002F29\u002Fjanuary-2024.md","\u002Fnewsletter\u002F2024\u002F01\u002F29\u002Fjanuary-2024","Java Champion, REST Client and Conferences","Hello and welcome to another edition of the newsletter. It's been a while since our last update, so there's a lot to catch up on. I decided to take a break in January, using it as a sort of \"scream test.\" This is a term from software development where we shut down a service to see if anyone is still using it. If anyone reacts, it shows us who is still engaged with that service. I applied this principle here, and while no one responded, I'm perfectly fine with that. I plan to continue sending this newsletter but may introduce some changes. For now, let's dive into some of the exciting things that happened in January.",{"slug":13503,"date":13504},"january-2024","2024-01-28T07:00:00.000Z",{"type":13,"value":13506,"toc":13694},[13507,13509,13513,13522,13528,13532,13535,13543,13547,13549,13552,13561,13563,13566,13572,13576,13579,13581,13610,13612,13648,13651,13674,13676,13681],[16,13508,13501],{},[28,13510,13512],{"id":13511},"java-champion","Java Champion",[16,13514,13515,13516,13521],{},"Earlier this month, I was named a Java Champion, a career goal I've had for a long time. I'm incredibly grateful for this honor as it's a recognition from my peers, whose opinions I highly value. I've decided to write a ",[23,13517,13520],{"href":13518,"rel":13519},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fjava-champion",[101],"detailed blog post"," about my career and what this award means to me. I was eager to receive my polo and jacket, which I decided to wear to church this week. 🤩",[16,13523,13524],{},[74,13525],{"alt":13526,"src":13527},"Dan's Java Champion Jacket","\u002Fimages\u002Fnewsletter\u002F2024\u002F01\u002F29\u002Fdan-java-champion.jpeg",[28,13529,13531],{"id":13530},"rest-client","Rest Client",[16,13533,13534],{},"I'm a big fan of the new Rest Client in Spring Framework 6.1 and Spring Boot 3.2. I've mentioned it in presentations and on Twitter. I started receiving many questions that dove deeper into the subject matter, questions I didn't initially know the answers to. So, I decided to take a deep dive into the Rest Client.",[16,13536,13537,13538,13542],{},"I've spent some time learning about all the things you can do with the Rest Client and created a ",[23,13539,7908],{"href":13540,"rel":13541},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Frest-client-examples",[101]," to share these examples. I've also made a few videos which you'll find in the section below. If there's anything else you'd like me to cover about the Rest Client or clients in general, please don't hesitate to reach out.",[28,13544,13546],{"id":13545},"conferences-events","Conferences & Events",[33,13548,3404],{"id":9000},[16,13550,13551],{},"Earlier this month, I participated in CodeMash in Sandusky, OH, where I presented two talks. The first one was on 'Building GraphQL APIs in Java with Spring for GraphQL', which had a fantastic turnout and received amazing feedback.",[16,13553,13554,13555,13560],{},"The second talk was on 'Developer Advocacy', a topic I was presenting for the first time. I believe it went well, and I'm excited to present it again. If you're in the Cleveland area and interested in hearing this talk, please consider attending a ",[23,13556,13559],{"href":13557,"rel":13558},"https:\u002F\u002Fwww.meetup.com\u002Fmake-the-internet\u002Fevents\u002F298629881\u002F",[101],"meetup"," on Wednesday, February 7th.",[33,13562,1888],{"id":1887},[16,13564,13565],{},"Next month I’m heading to Montreal Canada to attend and speak at my first ConFoo. I’m excited about this conference because it will be my first time there and there are so many amazing speakers in the lineup. I will be giving 2 talks, one on Spring for GraphQL and one on Spring Boot 3. If you plan on attending please stop by and say hello 👋🏻",[16,13567,13568,13569,3518],{},"If you’re ever interested in seeing what events or conferences I am speaking at you can check out the ",[23,13570,3517],{"href":3515,"rel":13571},[101],[28,13573,13575],{"id":13574},"my-content","My Content",[16,13577,13578],{},"A collection of content I worked on in January.",[33,13580,11453],{"id":11452},[1271,13582,13583,13590,13597,13604],{},[1274,13584,13585],{},[23,13586,13589],{"href":13587,"rel":13588},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023-year-in-review",[101],"2023 Year in Review",[1274,13591,13592],{},[23,13593,13596],{"href":13594,"rel":13595},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fhappy-new-year-2024",[101],"Happy New Year 2024",[1274,13598,13599],{},[23,13600,13603],{"href":13601,"rel":13602},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fdeveloper-advocate",[101],"What is Developer Relations (DevRel)",[1274,13605,13606],{},[23,13607,13609],{"href":13518,"rel":13608},[101],"I’m a Java Champion",[33,13611,11465],{"id":30},[1271,13613,13614,13621,13627,13634,13641],{},[1274,13615,13616],{},[23,13617,13620],{"href":13618,"rel":13619},"https:\u002F\u002Fyoutu.be\u002F9M0NggD6Mbw",[101],"Spring Boot Rest Client (Underlying Http Client)",[1274,13622,13623],{},[23,13624,13626],{"href":13618,"rel":13625},[101],"Spring Boot Rest Client Test",[1274,13628,13629],{},[23,13630,13633],{"href":13631,"rel":13632},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1750539660886004093",[101],"Rest Client Instance",[1274,13635,13636],{},[23,13637,13640],{"href":13638,"rel":13639},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1750560170785054887",[101],"IntelliJ Live Templates",[1274,13642,13643],{},[23,13644,13647],{"href":13645,"rel":13646},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1750891115178234046",[101],"Java Build Tools (Maven)",[33,13649,13650],{"id":973},"🎙 Podcasts",[1271,13652,13653,13660,13667],{},[1274,13654,13655],{},[23,13656,13659],{"href":13657,"rel":13658},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=9zUaIiI47nc&t=2088s",[101],"Spring Office Hours S3E1 - Spring into the New Year",[1274,13661,13662],{},[23,13663,13666],{"href":13664,"rel":13665},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lpJRW45v5qQ&t=1125s",[101],"Spring Office Hours S3E2 - Developer Advocacy",[1274,13668,13669],{},[23,13670,13673],{"href":13671,"rel":13672},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=KLQqK03TziI&t=36s",[101],"Spring Office Hours S3E3 - Spring Data JPA vs JDBC vs REST",[28,13675,172],{"id":171},[16,13677,11327,13678,11333],{},[23,13679,11332],{"href":11330,"rel":13680},[101],[16,13682,9630,13683,191,13685,13687,13689,13691],{},[189,13684],{},[189,13686],{},[23,13688,11491],{"href":11490},[189,13690],{},[23,13692,198],{"href":198,"rel":13693},[101],{"title":200,"searchDepth":201,"depth":201,"links":13695},[13696,13697,13698,13702,13707],{"id":13511,"depth":201,"text":13512},{"id":13530,"depth":201,"text":13531},{"id":13545,"depth":201,"text":13546,"children":13699},[13700,13701],{"id":9000,"depth":206,"text":3404},{"id":1887,"depth":206,"text":1888},{"id":13574,"depth":201,"text":13575,"children":13703},[13704,13705,13706],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":171,"depth":201,"text":172},{"_id":13709,"path":13710,"title":13711,"description":13712,"meta":13713,"body":13716},"newsletter\u002Fnewsletter\u002F2023\u002F12\u002F25\u002Fhappy-holidays-2024.md","\u002Fnewsletter\u002F2023\u002F12\u002F25\u002Fhappy-holidays-2024","Happy Holidays, Frontends for Java Developers and What’s new in Spring Boot 3.2","Happy Monday and welcome to a special edition of the newsletter. Today is Christmas here in the Vega house so I want to start out by saying Merry Christmas and Happy Holidays to all of you out there. It’s hard to believe that we are 1 week away from the new year but here we are. I’m working on some blog posts \u002F thoughts around how my year looked and what I plan on focusing on next year so stay tuned for that.",{"slug":13714,"date":13715},"happy-holidays-2024","2023-12-25T07:00:00.000Z",{"type":13,"value":13717,"toc":13886},[13718,13720,13723,13727,13730,13733,13742,13748,13757,13763,13766,13770,13776,13784,13787,13790,13797,13804,13808,13814,13816,13819,13821,13824,13829,13833,13836,13842,13844,13846,13854,13858,13864,13866,13871,13873,13878],[16,13719,13712],{},[16,13721,13722],{},"In today’s newsletter I want to talk to you about Frontend Development for Java Developers, What’s New in Spring Boot 3.2 and Upcoming Presentations.",[28,13724,13726],{"id":13725},"frontends-for-java-developers","Frontends for Java Developers",[16,13728,13729],{},"I am not just a Java developer, although that is what I consider myself most proficient in. I actually like to consider myself a polyglot developer and enjoy working with HTML, CSS, JavaScript, TypeScript, and more. There is something gratifying about building for the web and it’s been a passion of mine all throughout my career.",[16,13731,13732],{},"This made me contemplate the options available to Java developers when they need to develop a frontend for their application. I realize that this statement is quite broad, as different requirements call for different solutions to address specific problems.",[16,13734,13735,13736,13741],{},"I decided to sit down and start creating different scenarios or buckets, listing out available options. I like to use the application ",[23,13737,13740],{"href":13738,"rel":13739},"https:\u002F\u002Fexcalidraw.com\u002F",[101],"Excalidraw"," for this. When I was done, I had a wonderful idea: turning this into a live collaboration and allowing others to contribute. It was really great to see so many people jump in and add to it.",[16,13743,13744],{},[74,13745],{"alt":13746,"src":13747},"Excalidraw Collaboration","\u002Fimages\u002Fblog\u002F2023\u002F12\u002F25\u002Fcolloboration.png",[16,13749,13750,13751,13756],{},"After everyone was done contributing to it I cleaned it up a bit. Some added other buckets like developing a CLI or Desktop Application in Java but I decided to narrow this down to building web applications. This is what we ",[23,13752,13755],{"href":13753,"rel":13754},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1737936945982972409",[101],"ended up"," with and I think this is a really great start.",[16,13758,13759],{},[74,13760],{"alt":13761,"src":13762},"Java Frontends","\u002Fimages\u002Fblog\u002F2023\u002F12\u002F25\u002Fjava_frontends.png",[16,13764,13765],{},"My plan is to turn this into a blog post that the community can use as a resource to stay up to date with what options are available. If you have any thoughts on this or feedback I would love to hear from you.",[28,13767,13769],{"id":13768},"whats-new-in-spring-boot-32","What’s New In Spring Boot 3.2",[16,13771,13772],{},[74,13773],{"alt":13774,"src":13775},"What's new in Spring Boot 3.2","\u002Fimages\u002Fblog\u002F2023\u002F12\u002F25\u002Fwhats-new.jpeg",[16,13777,13778,13779,13783],{},"I have been talking a lot about Spring Boot 3.2 lately and decided to sit down and write a blog post. Instead of simply duplicating the ",[23,13780,7253],{"href":13781,"rel":13782},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.2-Release-Notes",[101],", I want to highlight the major themes in this release: Runtime Efficiency, New Client Abstractions, and Observability Improvements.",[16,13785,13786],{},"Spring Boot 3 introduced runtime efficiency with features like Ahead-of-Time (AOT) compilation and support for creating GraalVM native images. In Spring Framework 6.1 and Spring Boot 3.2, we now have support for Java 21 and first-class support for Virtual Threads. Additionally, this release includes initial support for Project CRaC, which helps improve startup time.",[16,13788,13789],{},"I'm particularly excited about the new JDBC and REST Client features in this release. These two features will greatly benefit developers by providing easier and more fluent APIs, improving code readability and making coding more enjoyable.",[16,13791,13792,13793,13796],{},"Observability was a significant focus in Spring Boot 3.0. One of the key features was the Observability API, which allows both the framework and developers to add their own observations. In Spring Boot 3.2, support for a few annotations has been added, including ",[469,13794,13795],{},"@Observed",". Previously, some configuration was required to enable this feature, but now, as long as the Spring Boot AOP Starter is on the classpath, it will work seamlessly.",[16,13798,13799,13800,184],{},"I hope you enjoy reading the blog post, which can be found ",[23,13801,742],{"href":13802,"rel":13803},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fspring-boot-3-2",[101],[28,13805,13807],{"id":13806},"conferences-in-2024","Conferences in 2024",[16,13809,13810,13811,184],{},"I am preparing for several conferences in the new year, and I am starting to feel really excited. If you are interested in staying up to date with my upcoming speaking engagements or accessing a list of past presentations, you can visit my ",[23,13812,3517],{"href":3515,"rel":13813},[101],[33,13815,3404],{"id":9000},[16,13817,13818],{},"When the new year begins, I will have two presentations at CodeMash in Sandusky, Ohio. I am excited to present on GraphQL and a new presentation on DevRel titled \"The Developer Relations Playbook: How to build bridges by putting people first\". I love this conference because I get to see my friend Chris Judd where he and Manifest Solutions puts on a great speaker dinner at a local pizzeria every year.",[33,13820,1888],{"id":1887},[16,13822,13823],{},"In February, I will be speaking at and attending my first ever ConFoo conference in Montreal, Canada. I am honored to have the opportunity to speak alongside many respected individuals in the community. I have heard only positive feedback about this conference, and I am thrilled to experience it firsthand. This week, I visited the conference's blog and was ecstatic to find my presentation listed there.",[16,13825,13826],{},[74,13827],{"alt":1888,"src":13828},"\u002Fimages\u002Fblog\u002F2023\u002F12\u002F25\u002Fconfoo.png",[33,13830,13832],{"id":13831},"great-international-developer-summit-gids","Great International Developer Summit (GIDS)",[16,13834,13835],{},"In April, I will be heading to India for the first time ever to attend and speak at the Great International Developer Summit. While browsing their website, I noticed that my talk is listed on the home page. It always serves as a reminder of how fortunate I am to be able to do what I love. I am also incredibly grateful and excited to reunite with old friends and make new acquaintances in India.",[16,13837,13838],{},[74,13839],{"alt":13840,"src":13841},"Great International Developer Summit","\u002Fimages\u002Fblog\u002F2023\u002F12\u002F25\u002Fgids.png",[28,13843,11191],{"id":10953},[33,13845,11453],{"id":11452},[16,13847,13848,13849,13853],{},"While we often refer to Project Loom as Virtual Threads it’s actually made up of a few different JEPs. I really enjoyed ",[23,13850,10979],{"href":13851,"rel":13852},"https:\u002F\u002Frealjenius.com\u002F2023\u002F11\u002F10\u002Fscoped-values\u002F",[101]," about Scoped Values which is an important piece to the Loom puzzle.",[33,13855,13857],{"id":13856},"conferences","👨🏼‍💻 Conferences",[16,13859,13860,13861,184],{},"The Java Champions Virtual Conference is coming in January and will be free 1\u002F25\u002F2024 - 1\u002F30\u002F2024. If you want to find out more about it you can check it out ",[23,13862,742],{"href":2989,"rel":13863},[101],[33,13865,12149],{"id":12148},[2238,13867,13868],{},[16,13869,13870],{},"“It’s a funny thing about life, once you begin to take note of the things you are grateful for, you begin to lose sight of the things that you lack.”― Germany Kent",[28,13872,172],{"id":171},[16,13874,11327,13875,11333],{},[23,13876,11332],{"href":11330,"rel":13877},[101],[16,13879,13880,13881,13883],{},"Happy Coding\nDan Vega\n",[23,13882,11491],{"href":11490},[23,13884,198],{"href":198,"rel":13885},[101],{"title":200,"searchDepth":201,"depth":201,"links":13887},[13888,13889,13890,13895,13900],{"id":13725,"depth":201,"text":13726},{"id":13768,"depth":201,"text":13769},{"id":13806,"depth":201,"text":13807,"children":13891},[13892,13893,13894],{"id":9000,"depth":206,"text":3404},{"id":1887,"depth":206,"text":1888},{"id":13831,"depth":206,"text":13832},{"id":10953,"depth":201,"text":11191,"children":13896},[13897,13898,13899],{"id":11452,"depth":206,"text":11453},{"id":13856,"depth":206,"text":13857},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":13902,"path":13903,"title":13904,"description":13905,"meta":13906,"body":13909},"newsletter\u002Fnewsletter\u002F2023\u002F12\u002F18\u002Fmultiple-datasources-spring.md","\u002Fnewsletter\u002F2023\u002F12\u002F18\u002Fmultiple-datasources-spring","Multiple DataSources in Spring, Vaadin and Spring Boot 3.2","Happy Monday and welcome to another edition of the newsletter. It's hard to believe, but we have 1 week until Christmas and 2 weeks until the new year. It was a pretty crazy weekend around here where we saw weather in the mid-50s in the middle of December, which is not normal.",{"slug":13907,"date":13908},"multiple-datasources-spring","2023-12-18T07:00:00.000Z",{"type":13,"value":13910,"toc":14025},[13911,13913,13921,13936,13939,13943,13946,13949,13953,13960,13963,13966,13970,13973,13979,13981,13983,13997,13999,14005,14007,14012],[16,13912,13905],{},[16,13914,13915,13916,13920],{},"Last week, I spent some more time cleaning up the newest edition of my website over at ",[23,13917,13919],{"href":198,"rel":13918},[101],"danvega.dev",". I did some work optimizing pages to improve their search rankings, and I even cleaned up my URL scheme. All of my blog posts are now under the folder \u002Fblog\u002Fslug, instead of the previous \u002Fblog\u002Fyear\u002Fmonth\u002Fday\u002Fslug structure. I also set up redirects for the longer URLs to redirect to the shorter ones.",[16,13922,13923,13924,13929,13930,13935],{},"After making these changes, I sat down and wrote a new blog post with search in mind. I knew that my latest video on Virtual threads was doing well, so I wanted to make sure there was an accompanying blog post. Instead of just writing whatever came to mind, I decided to be a little more strategic about it. I downloaded the ",[23,13925,13928],{"href":13926,"rel":13927},"https:\u002F\u002Fkeywordseverywhere.com\u002F",[101],"Keywords Everywhere"," Chrome Plugin, which provides stats on what people are searching for and the volume of those keywords. While I'm not an SEO expert, I believe the few things I did with this post worked, as I received about 7k views on ",[23,13931,13934],{"href":13932,"rel":13933},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fvirtual-threads-spring-boot",[101],"this post"," in a week. If you have any suggestions on tools or techniques that I can use to improve old posts or maximize the reach of new ones, I would love to hear from you.",[16,13937,13938],{},"In today's newsletter, I want to discuss using the JDBC client with multiple datasources, Vaadin Flow, and Spring Boot 3.2.",[28,13940,13942],{"id":13941},"multiple-jdbc-clients","Multiple JDBC Clients",[16,13944,13945],{},"I answered a question from a subscriber last week on how to use multiple JDBC Clients when you’re talking to multiple datasources. I thought this was a great question because if you’re only using a single datasource then auto-configuration kicks in and creates a datasource and JDBC Client for you. As soon as you need more than one you have to define both a datasource and JDBC Client for each connection. I thought this was a fun tutorial to go through and I hope you enjoy it.",[47,13947],{"id":13948},"ZKYFGuukhT4",[28,13950,13952],{"id":13951},"vaadin-flow-and-hilla","Vaadin Flow and Hilla",[16,13954,13207,13955,13959],{},[23,13956,93],{"href":13957,"rel":13958},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZCGg8MSuEGY",[101],", we had the opportunity to interview Lawrence Lockhart, a developer advocate with Vaadin. This was exciting for me on a couple of different levels. First off I have long been an admirer of Lawrence and his story on how he got started in tech. I have also had Vaadin on my long list of things I want to try \u002F learn.",[16,13961,13962],{},"During the show I was able to get some clarification on Vaadin the company and the different products they offer. Vaadin Flow is server side UI framework that allows you build full-stack applications completely in Java. Hilla is there full-stack framework for building web applications with React + Java. I really enjoyed this conversation with Lawrence and I hope you do too.",[47,13964],{"id":13965},"ZCGg8MSuEGY",[28,13967,13969],{"id":13968},"getting-up-to-speed-with-spring-boot-32","Getting up to speed with Spring Boot 3.2",[16,13971,13972],{},"I’m really excited about my upcoming talk on Tuesday with my friend Pratik Patel at Azul. We are going to be talking all about Spring Boot 3.2 but I have a hunch we will spend some time talking about Project CRaC (Coordinated Restore at Checkpoint). If you’re interested in attending this talk online for free please visit the link below to register.",[16,13974,13975],{},[23,13976,13977],{"href":13977,"rel":13978},"https:\u002F\u002Fwww.azul.com\u002Fwebinar\u002F20231219-spring-boot-updates\u002F",[101],[28,13980,11191],{"id":10953},[33,13982,11453],{"id":11452},[16,13984,13985,13986,13991,13992,184],{},"I was really excited to see that my friends at ",[23,13987,13990],{"href":13988,"rel":13989},"https:\u002F\u002Ftechcrunch.com\u002F2023\u002F12\u002F11\u002Fdocker-acquires-atomicjar-a-testing-startup-that-raised-25m-in-january\u002F",[101],"AtomicJar got acquired by Docker",". If you don’t know AtomcJar is the company behind the amazing project ",[23,13993,13996],{"href":13994,"rel":13995},"https:\u002F\u002Ftestcontainers.com\u002F",[101],"Testcontainers",[33,13998,12488],{"id":2235},[16,14000,14001],{},[23,14002,14003],{"href":14003,"rel":14004},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1735017607479083047",[101],[28,14006,172],{"id":171},[16,14008,11327,14009,11333],{},[23,14010,11332],{"href":11330,"rel":14011},[101],[16,14013,9630,14014,191,14016,14018,14020,14022],{},[189,14015],{},[189,14017],{},[23,14019,11491],{"href":11490},[189,14021],{},[23,14023,198],{"href":198,"rel":14024},[101],{"title":200,"searchDepth":201,"depth":201,"links":14026},[14027,14028,14029,14030,14034],{"id":13941,"depth":201,"text":13942},{"id":13951,"depth":201,"text":13952},{"id":13968,"depth":201,"text":13969},{"id":10953,"depth":201,"text":11191,"children":14031},[14032,14033],{"id":11452,"depth":206,"text":11453},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":14036,"path":14037,"title":14038,"description":14039,"meta":14040,"body":14043},"newsletter\u002Fnewsletter\u002F2023\u002F12\u002F11\u002Fsanta-baby.md","\u002Fnewsletter\u002F2023\u002F12\u002F11\u002Fsanta-baby","What is the difference between JDBC Client and Spring Data and Http Interfaces","Happy Monday and welcome to another edition of the newsletter. I hope you had an amazing weekend and are refreshed and ready to tackle another week. As we approach the end of the year, many of us are thinking about wrapping things up and planning for the new year. Personally, I'm excited to start setting my goals for the upcoming year, and I'll be sure to share them with all of you once I have them finalized. But I'm also curious to hear about your technical goals for the new year. Are you looking to build something new or learn something new?",{"slug":14041,"date":14042},"santa-baby","2023-12-11T07:00:00.000Z",{"type":13,"value":14044,"toc":14182},[14045,14047,14050,14053,14059,14062,14066,14069,14072,14075,14078,14082,14085,14088,14090,14093,14098,14100,14102,14109,14111,14119,14123,14126,14129,14133,14142,14144,14149,14151,14154,14160,14162,14167],[16,14046,14039],{},[16,14048,14049],{},"Last week, I had a quick trip to Cincinnati where I had the opportunity to meet with a customer and engage with some incredible developers. While I can't disclose the customer's name, I can say that I have been a long-time customer of theirs and it was truly exciting for me to visit their location. During my visit, I gave two presentations, one of which focused on the new features in Spring Boot 3 and Beyond. The presentation covered the exciting enhancements in Spring Boot 3.2, with Virtual Threads being particularly well-received. It seems that many in the community are eager to leverage Virtual Threads and deploy their blocking applications on Java 21 and Spring Boot 3.2. If you missed it, I recently did a video showcasing the scalability benefits of Spring Boot 3.2 using Virtual Threads.",[16,14051,14052],{},"The holiday season is a special time for my family, and we have a number of traditions that we hold dear. This past weekend, we took the kids to see Santa and enjoyed a meal at one of our favorite restaurants, The Cheesecake Factory. I wanted to share a memorable moment with you: both of my kids sat with Santa and actually smiled for the photo. This has never happened before and may never happen again, so it was a special moment for us.",[16,14054,14055],{},[74,14056],{"alt":14057,"src":14058},"My girls with Santa","\u002Fimages\u002Fnewsletter\u002F2023\u002F12\u002F11\u002Fsanta.jpeg",[16,14060,14061],{},"In this weeks newsletter I want to talk to you about a video I made this week on Spring Data, Spring Office Hours where I interviewed 2 members of the Spring Team and an upcoming talk with Azul.",[28,14063,14065],{"id":14064},"jdbc-client-vs-spring-data","JDBC Client vs Spring Data",[16,14067,14068],{},"I created a video about the new JDBC Client in Spring Boot 3.2, and it received excellent feedback. One of the questions that arose from that was, \"What is the difference between JDBC Client and Spring Data?\"",[16,14070,14071],{},"I thought this was a good opportunity to explore the various options available in Java and Spring for accessing and persisting data to a database. This led me to create an example where we connect to a database in Java and explain the origins of the original JDBC Template abstraction in Spring. Then, I demonstrated how to access the same database in Spring using the JDBC Template. After discussing some of the issues with the JDBC Template, I introduced the new JDBC Client in Spring Boot 3.2 and highlighted how its simple and fluent API simplifies database access. Finally, we delved into Spring Data and how the repository pattern can handle the mundane CRUD functionality, allowing you to focus on your business requirements.",[47,14073],{"id":14074},"qLDrfebeXS0",[16,14076,14077],{},"I hope you enjoyed that video and by the look of the comments you did. I got a really good question around multiple datasources and the JDBC Client that I hope to make a video on this week.",[28,14079,14081],{"id":14080},"http-interfaces-in-spring","Http Interfaces in Spring",[16,14083,14084],{},"Last week on the Spring Office Hours Podcast, I had the opportunity to interview Olga Maciaszek-Sharma and Rossen Stoyanchev from the Spring Team. We discussed the history of clients in the Spring Framework and Spring Cloud. Additionally, we had a great conversation about Http Interfaces, their origin, and when to use them. I thoroughly enjoyed this discussion, and I hope you did too. If you are listening to these conversations on your favorite podcast player, please consider leaving us a review. It would greatly help us. Thank you!",[47,14086],{"id":14087},"OgyBTbsNIjo",[28,14089,13969],{"id":13968},[16,14091,14092],{},"I’m really excited about an upcoming talk with my friend Pratik Patel at Azul. We are going to be talking all about Spring Boot 3.2 but I have a hunch we will spend some time talking about Project CRaC (Coordinated Restore at Checkpoint). If you’re interested in attending this talk online for free please visit the link below to register.",[16,14094,14095],{},[23,14096,13977],{"href":13977,"rel":14097},[101],[28,14099,11191],{"id":10953},[33,14101,11453],{"id":11452},[16,14103,10983,14104,14108],{},[23,14105,10979],{"href":14106,"rel":14107},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F12\u002F04\u002Fcds-with-spring-framework-6-1",[101]," that discusses the introduction of Class Data Sharing (CDS) support in Spring Framework 6.1, which aims to optimize the startup time and memory footprint of Java applications. CDS is highlighted as a mature technology that can offer startup improvements with  relatively little effort compared to alternatives like GraalVM. The article also mentions that combining CDS with Spring AOT optimizations can further reduce startup times, and it seeks feedback from the Spring community for future enhancements and integration possibilities.",[33,14110,11465],{"id":30},[16,14112,14113,14114,14118],{},"The newest version of IntelliJ 2023.3 is out and it’s packed full of features. I really enjoyed ",[23,14115,9888],{"href":14116,"rel":14117},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=zYvfIMrcpt8",[101]," where Maria Kosukhina walked us through all the highlights.",[33,14120,14122],{"id":14121},"books","📚 Books",[16,14124,14125],{},"I spent a lot of time in the car last week and it enabled me to get through 2 audio books, both by Jesse Itzler. The first one was Living with a Seal where Jesse had none other than David Goggins live with him for a month. The workouts were insane but at the end of the day I think the moral of the story was consistency and becoming mentally tough.",[16,14127,14128],{},"The next was Living with the Monks where he spent 15 days, living with the monks. 2 weeks might not seem like a long time but try to imagine living without phones, internet or tv for even a day. I really enjoyed this book as it got me to think about what’s important and how to be thankful and present.",[33,14130,14132],{"id":14131},"spring-projects","🍃 Spring Projects",[16,14134,14135,14136,14141],{},"It was really exciting to see ",[23,14137,14140],{"href":14138,"rel":14139},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F12\u002F06\u002Fspring-cloud-2023-0-0-aka-leyton-is-now-available",[101],"the release of Spring Cloud 2023.0",". I know this is something a lot of folks were waiting for before they could move to Spring Boot 3.2 and now it is there. There are a lot of exciting features in the release but the star of the show has to be Spring MVC Gateway. Thanks to Virtual Threads we now have a Gateway that supports imperative style programming.",[33,14143,12149],{"id":12148},[2238,14145,14146],{},[16,14147,14148],{},"Everyone wants to live on top of the mountain, but all the happiness and growth occurs while you’re climbing it. - Andy Rooney",[33,14150,12488],{"id":2235},[16,14152,14153],{},"I got access to Grok on X (Twitter) last week and asked it to roast me based on my Tweets. Not going to lie, that was pretty accurate 🤷‍♂️",[16,14155,14156],{},[23,14157,14158],{"href":14158,"rel":14159},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1733177769083666505",[101],[28,14161,172],{"id":171},[16,14163,11327,14164,11333],{},[23,14165,11332],{"href":11330,"rel":14166},[101],[16,14168,9630,14169,191,14171,14173,14175,14177,14180],{},[189,14170],{},[189,14172],{},[23,14174,11491],{"href":11490},[189,14176],{},[23,14178,198],{"href":198,"rel":14179},[101],[189,14181],{},{"title":200,"searchDepth":201,"depth":201,"links":14183},[14184,14185,14186,14187,14195],{"id":14064,"depth":201,"text":14065},{"id":14080,"depth":201,"text":14081},{"id":13968,"depth":201,"text":13969},{"id":10953,"depth":201,"text":11191,"children":14188},[14189,14190,14191,14192,14193,14194],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":14121,"depth":206,"text":14122},{"id":14131,"depth":206,"text":14132},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":14197,"path":14198,"title":14199,"description":14200,"meta":14201,"body":14204},"newsletter\u002Fnewsletter\u002F2023\u002F12\u002F04\u002Fruntime-efficiency.md","\u002Fnewsletter\u002F2023\u002F12\u002F04\u002Fruntime-efficiency","Runtime Efficiency in Spring Boot 3","Happy Monday and welcome to another edition of the newsletter. This week, I have a quick trip to Cincinnati to spend a day with a customer. I'll be discussing everything that's happening in Spring Boot 3, including some of the newest features in Spring Boot 3.2. It's also that time of the year where we are starting to wind down and look forward to the holidays and the new year.",{"slug":14202,"date":14203},"runtime-efficiency","2023-12-04T07:00:00.000Z",{"type":13,"value":14205,"toc":14330},[14206,14208,14211,14214,14217,14221,14224,14227,14230,14233,14237,14240,14243,14247,14250,14253,14257,14260,14263,14265,14267,14274,14276,14284,14286,14295,14297,14302,14304,14310,14312,14317],[16,14207,14200],{},[16,14209,14210],{},"When it comes to scheduling, I tend to be meticulous and detail-oriented. I enjoy carefully planning and organizing my time to ensure it is well-structured and efficiently managed. As the new year approaches, I like to start fresh with a new calendar and a list of things I would like to accomplish over the year, which I then break down into quarters.",[16,14212,14213],{},"I’m starting to put together some things I would like to learn in the new year and some goals I would like to accomplish. I plan on sharing those with you in the new year but until then I would like to hear from you. How do you go about planning for the new year?",[16,14215,14216],{},"In this edition of the newsletter I want to talk to you about runtime efficiency in Spring Boot 3.",[28,14218,14220],{"id":14219},"runtime-efficiency-in-spring-boot-3","Runtime Efficiency In Spring Boot 3",[16,14222,14223],{},"Over the past year, I have had the opportunity to travel to conferences and meet with customers, discussing the impressive features of Spring Boot 3 and beyond. One of the prominent themes in Spring Boot 3 is Runtime Efficiency. But what does that really mean, and which features are contributing to it?",[16,14225,14226],{},"Runtime efficiency is focused on addressing the challenges that arise when dealing with various workloads in production. Traditionally, a typical Java-based application would be a long-running process designed to handle high throughput. In this scenario, the JVM excels at optimizing for such workloads. It identifies \"hot spots\" or frequently executed areas of the code and compiles them for further optimizations.",[16,14228,14229],{},"Today, we are developing a wide range of applications with diverse requirements. Some of these applications demand lower memory usage and faster startup times. For others, which involve blocking requests like communication with a database or an HTTP service, scalability is essential.",[16,14231,14232],{},"Java and Spring now provide solutions for building various types of applications. In Spring Boot 3.0, we introduced Ahead-of-Time (AoT) compilation as a prerequisite for creating native images with GraalVM. In Spring Boot 3.2, we are introducing support for Virtual Threads and Project CRaC (Coordinated Restore at Checkpoint).",[33,14234,14236],{"id":14235},"spring-boot-32","Spring Boot 3.2",[16,14238,14239],{},"In last week's episode of Spring Office Hours, we discussed the new release of Spring Boot 3.2. DaShaun and I had the opportunity to talk about the new features at a high level. We reviewed the release notes, which is a great resource for learning about the upgrade path, new features, and any deprecations. You can find the live stream below and listen to it on your favorite podcast player.",[47,14241],{"id":14242},"opji4Hue4xM",[33,14244,14246],{"id":14245},"virtual-threads","Virtual Threads",[16,14248,14249],{},"Virtual Threads were finalized in JDK 21, and now Spring has first-class support for them with the release of Spring Boot 3.2. In this tutorial I discuss what Virtual Threads are and how to enable them in a Spring Boot Application. We take a look at some benchmarks using Apache Benchmark to understand how Virtual Threads will provide significant scalability benefits.",[47,14251],{"id":14252},"THavIYnlwck",[33,14254,14256],{"id":14255},"project-crac-coordinated-restore-at-checkpoint","Project CRaC (Coordinated Restore at Checkpoint)",[16,14258,14259],{},"Last but not least I recorded a tutorial on Project CRaC with my good friend DaShaun. In this tutorial we take a look at what CRaC is and how it will help us improve startup times in our Spring Applications.",[47,14261],{"id":14262},"sVXUx_Y4hRU",[28,14264,11191],{"id":10953},[33,14266,11453],{"id":11452},[16,14268,10983,14269,14273],{},[23,14270,10979],{"href":14271,"rel":14272},"https:\u002F\u002Ffoojay.io\u002Ftoday\u002Fspringboot-3-2-crac\u002F",[101]," from Azul Developer Advocate and Java Champion Gerrit Grunwald. In this article Gerrit dives in CRaC support in Spring Boot 3.2.",[33,14275,13650],{"id":973},[16,14277,10983,14278,14283],{},[23,14279,14282],{"href":14280,"rel":14281},"https:\u002F\u002Fthenewstack.io\u002Fhey-programming-language-developer-get-over-yourself\u002F",[101],"this podcast"," episode of The New Stack with Jean Yang of Akita Software. This episode got a little philosphical and I absolutely loved it.",[33,14285,14122],{"id":14121},[16,14287,14288,14289,14294],{},"I got an advanced copy of ",[23,14290,14293],{"href":14291,"rel":14292},"https:\u002F\u002Famzn.to\u002F3sTnI8P",[101],"Spring Security in Action, The Second Edition"," by Laurentiu Splica. If you haven’t had a chance to check out the first edition you really should. In the meantime I am really looking forward to diving into this one.",[33,14296,12149],{"id":12148},[2238,14298,14299],{},[16,14300,14301],{},"It’s not the load that breaks you down. It’s the way you carry it. – Lou Holtz",[33,14303,12488],{"id":2235},[16,14305,14306],{},[23,14307,14308],{"href":14308,"rel":14309},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1730676167487737950",[101],[28,14311,172],{"id":171},[16,14313,11327,14314,11333],{},[23,14315,11332],{"href":11330,"rel":14316},[101],[16,14318,9630,14319,191,14321,14323,14325,14327],{},[189,14320],{},[189,14322],{},[23,14324,11491],{"href":11490},[189,14326],{},[23,14328,198],{"href":198,"rel":14329},[101],{"title":200,"searchDepth":201,"depth":201,"links":14331},[14332,14337,14344],{"id":14219,"depth":201,"text":14220,"children":14333},[14334,14335,14336],{"id":14235,"depth":206,"text":14236},{"id":14245,"depth":206,"text":14246},{"id":14255,"depth":206,"text":14256},{"id":10953,"depth":201,"text":11191,"children":14338},[14339,14340,14341,14342,14343],{"id":11452,"depth":206,"text":11453},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":14346,"path":14347,"title":14348,"description":14349,"meta":14350,"body":14353},"newsletter\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fspring-boot-3-2.md","\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fspring-boot-3-2","Spring Boot 3.2, VMware by Broadcom and Conference Planning for 2024","Happy Monday and welcome to another edition of the newsletter. If you celebrated Thanksgiving, I hope you had a wonderful holiday filled with family, food, laughter, and love. Even if you're not in the US, I wish the same for you. We had a wonderful Thanksgiving feast in my home as we hosted over 20 people. My wife did an amazing job on putting together a great day filled with amazing food and ambiance. I successfully deep fried my first turkey and did it without burning the house down 🤣",{"slug":14351,"date":14352},"spring-boot-3-2","2023-11-27T07:00:00.000Z",{"type":13,"value":14354,"toc":14683},[14355,14357,14363,14366,14368,14376,14382,14386,14395,14398,14510,14512,14521,14534,14537,14541,14548,14551,14555,14567,14576,14580,14589,14594,14597,14600,14603,14607,14610,14616,14619,14625,14631,14633,14635,14647,14649,14655,14657,14663,14665,14670],[16,14356,14349],{},[16,14358,14359],{},[74,14360],{"alt":14361,"src":14362},"Deep Fried Turkey","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fturkey.png",[16,14364,14365],{},"Today, I have a lot to discuss, including Spring Boot 3.2, VMware by Broadcom, and conference planning for 2024.",[28,14367,14236],{"id":14235},[16,14369,14370,14371,14375],{},"Last week, Spring Boot 3.2 was released, bringing with it a host of exciting new features. If you visit ",[23,14372,2090],{"href":14373,"rel":14374},"http:\u002F\u002Fstart.spring.io\u002F",[101]," and attempt to create a new project, you will see that the current version is now 3.2. Additionally, you will notice that only Java versions 17 and 21 are supported. This is because Spring Boot 3.0 is based on Java 17, and the latest release includes support for Java 21.",[16,14377,14378],{},[74,14379],{"alt":14380,"src":14381},"Spring Initializr","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fspring-init.png",[33,14383,14385],{"id":14384},"java-21","Java 21",[16,14387,14388,14389,14392,14393,184],{},"Speaking of Java 21, Spring Boot 3.2 introduces support for Virtual Threads. I created a video on Virtual Threads during the preview phase, but I plan on making an updated video soon to cover all the exciting changes in Spring Boot 3.2. To use Virtual Threads, you need to run Java 21 and set the property ",[469,14390,14391],{},"spring.threads.virtual.enabled"," to ",[469,14394,3224],{},[16,14396,14397],{},"While Project Loom and Virtual Threads are the highlights of Java 21, there are other great features as well. As I start using Java 21, I'm excited to take advantage of all its amazing features. Here are a few of my favorites:",[1613,14399,14400,14409],{},[1616,14401,14402],{},[1619,14403,14404,14406],{},[1622,14405,1624],{},[1622,14407,14408],{},"Feature",[1629,14410,14411,14422,14433,14444,14455,14466,14477,14488,14499],{},[1619,14412,14413,14416],{},[1634,14414,14415],{},"430:",[1634,14417,14418],{},[23,14419,14420],{"href":14420,"rel":14421},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F430",[101],[1619,14423,14424,14427],{},[1634,14425,14426],{},"431:",[1634,14428,14429],{},[23,14430,14431],{"href":14431,"rel":14432},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F431",[101],[1619,14434,14435,14438],{},[1634,14436,14437],{},"440:",[1634,14439,14440],{},[23,14441,14442],{"href":14442,"rel":14443},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F440",[101],[1619,14445,14446,14449],{},[1634,14447,14448],{},"441:",[1634,14450,14451],{},[23,14452,14453],{"href":14453,"rel":14454},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F441",[101],[1619,14456,14457,14460],{},[1634,14458,14459],{},"443:",[1634,14461,14462],{},[23,14463,14464],{"href":14464,"rel":14465},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F443",[101],[1619,14467,14468,14471],{},[1634,14469,14470],{},"444:",[1634,14472,14473],{},[23,14474,14475],{"href":14475,"rel":14476},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F444",[101],[1619,14478,14479,14482],{},[1634,14480,14481],{},"445:",[1634,14483,14484],{},[23,14485,14486],{"href":14486,"rel":14487},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F445",[101],[1619,14489,14490,14493],{},[1634,14491,14492],{},"446:",[1634,14494,14495],{},[23,14496,14497],{"href":14497,"rel":14498},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F446",[101],[1619,14500,14501,14504],{},[1634,14502,14503],{},"453:",[1634,14505,14506],{},[23,14507,14508],{"href":14508,"rel":14509},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F453",[101],[33,14511,13531],{"id":13530},[16,14513,14514,14515,14517,14518,184],{},"Spring Boot 3.2 includes support for the new",[469,14516,585],{},"interface which has been introduced in Spring Framework 6.1. This interface provides a functional style blocking HTTP API with a similar to design to",[469,14519,14520],{},"WebClient",[16,14522,14523,14524,14526,14527,14530,14531,14533],{},"Existing and new application might want to consider using",[469,14525,585],{},"as an alternative to",[469,14528,14529],{},"RestTemplate",". If you want to learn more about the ",[469,14532,585],{}," you can check out the following video I did on it.",[47,14535],{"id":14536},"UDNrJAvKc0k",[33,14538,14540],{"id":14539},"jdbc-client","JDBC Client",[16,14542,14543,14544,14547],{},"The JDBC Template abstraction has been around since the early stages of Spring. Spring Framework 6.1 introduced a new JDBC Client that gives us a new fluent API for talking to a database. What I love about this is that everything lines up you need longer need to write your own RowMapper which always felt like boiler plate code I didn’t need to be writing and now I don’t. Spring Boot 3.2 adds auto-configuration for a ",[469,14545,14546],{},"JdbcClient"," . If you want to learn more about you can check out the following video I did on it.",[47,14549],{"id":14550},"JBu5GibEJ4k",[33,14552,14554],{"id":14553},"spring-boot-32-release-notes","Spring Boot 3.2 Release Notes",[16,14556,14557,14558,14561,14562,14566],{},"There are many other topics we can discuss regarding Spring Boot 3.2. A great resource to learn about all of this is the comprehensive ",[23,14559,7253],{"href":13781,"rel":14560},[101]," compiled by the Spring Team. If you want to learn more about Spring Boot 3.2 you can join me and DaShaun tomorrow on ",[23,14563,93],{"href":14564,"rel":14565},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0058\u002F",[101]," as we go through everything.",[16,14568,14569,14570,14575],{},"This is also a gentle reminder that ",[23,14571,14574],{"href":14572,"rel":14573},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot#support",[101],"Spring Boot 2.7 support"," officially ends today. If you or your organization needs help upgrading to Spring Boot 3 please feel free to reach out to me.",[28,14577,14579],{"id":14578},"vmware-by-broadcom","VMware by Broadcom",[16,14581,14582,14583,14588],{},"VMware is now VMware by Broadcom as the ",[23,14584,14587],{"href":14585,"rel":14586},"https:\u002F\u002Fwww.broadcom.com\u002Fblog\u002Fbroadcom-announces-successful-acquisition-of-vmware",[101],"acquisition has closed",". A little after I started here, which is almost 2 years the acquisition was announced and 18 months later it has finally closed. I would be lying if I didn’t say it has been a stressful few months.",[16,14590,14591],{},[74,14592],{"alt":14579,"src":14593},"\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fvmware-by-broadcom.png",[16,14595,14596],{},"The uncertainty about my future has been the hardest part. I know a lot of people who left so that they didn’t have to go through it but for me that was never an option. I landed my dream job and I love the people that I work with so I was going to ride this out as long as I could.",[16,14598,14599],{},"I’m very thankful for my time at VMware and I happy to say that I will continue to do what I love at VMware by Broadcom 🥳 I love the community that I serve and if there is anything I can do to help please don’t hesitate to reach out. I’m excited about the future and have already started putting some big plans together for the new year.",[16,14601,14602],{},"While that is the good news for me, acquisitions are never easy on everyone. I know many people are currently finding out there fate and my thoughts are with them. We have some of the smartest people I have ever had the joy of working with and I hope it works out here but If it doesn’t I know they will move on to bigger and better things. 💔",[28,14604,14606],{"id":14605},"conference-planning-for-2024","Conference Planning for 2024",[16,14608,14609],{},"If you aren't new around here you already know that I am a huge fan of Notion and being organized. I have a database in Notion where I keep my list of possible conferences by year. I have begun preparing talks and submitting CFPs for conferences in 2024 and this is what my current list looks like",[16,14611,14612],{},[74,14613],{"alt":14614,"src":14615},"Notion CFP","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F27\u002Fnotion-cfp.png",[16,14617,14618],{},"Last week I found out that I got accepted to GIDS and I am beyond excited about attending and speaking here. I have always wanted to visit India and now I will get my opportunity in April.",[16,14620,14621],{},[23,14622,14623],{"href":14623,"rel":14624},"https:\u002F\u002Ftwitter.com\u002Fdevelopersummit\u002Fstatus\u002F1726384860959215665",[101],[16,14626,14627,14628,3518],{},"If you are ever curious about upcoming speaking engagements you can check out my ",[23,14629,3517],{"href":3515,"rel":14630},[101],[28,14632,11191],{"id":10953},[33,14634,13650],{"id":973},[16,14636,10983,14637,14641,14642,14646],{},[23,14638,14282],{"href":14639,"rel":14640},"https:\u002F\u002Fairhacks.fm\u002F#episode_269",[101]," by Adam Bein on why Kotlin is better than Java. This is a very timely episode as I just put out a ",[23,14643,10263],{"href":14644,"rel":14645},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1725531488932737205",[101]," last week asking all of you If I should learn Kotlin.",[33,14648,12149],{"id":12148},[16,14650,14651,14652],{},"\"Gratitude is not only the greatest of virtues, but the parent of all the others.\" - ",[734,14653,14654],{},"Marcus Tullius Cicero",[33,14656,12488],{"id":2235},[16,14658,14659],{},[23,14660,14661],{"href":14661,"rel":14662},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1726962300484296726",[101],[28,14664,172],{"id":171},[16,14666,11327,14667,11333],{},[23,14668,11332],{"href":11330,"rel":14669},[101],[16,14671,9630,14672,191,14674,14676,14678,14680],{},[189,14673],{},[189,14675],{},[23,14677,11491],{"href":11490},[189,14679],{},[23,14681,198],{"href":198,"rel":14682},[101],{"title":200,"searchDepth":201,"depth":201,"links":14684},[14685,14691,14692,14693,14698],{"id":14235,"depth":201,"text":14236,"children":14686},[14687,14688,14689,14690],{"id":14384,"depth":206,"text":14385},{"id":13530,"depth":206,"text":13531},{"id":14539,"depth":206,"text":14540},{"id":14553,"depth":206,"text":14554},{"id":14578,"depth":201,"text":14579},{"id":14605,"depth":201,"text":14606},{"id":10953,"depth":201,"text":11191,"children":14694},[14695,14696,14697],{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":14700,"path":14701,"title":14702,"description":14703,"meta":14704,"body":14707},"newsletter\u002Fnewsletter\u002F2023\u002F11\u002F20\u002Fspring-framework-6-1.md","\u002Fnewsletter\u002F2023\u002F11\u002F20\u002Fspring-framework-6-1","Spring Framework 6.1, Spring Guides in the Cloud and a GraphQL","Happy Monday and welcome to another edition of the newsletter. It's Thanksgiving here in the United States this week, a time to express gratitude. First and foremost, I'm thankful for my family, and everything I do is for them. I'm also grateful for the opportunity to do what I love every single day. I appreciate all of you who support me, and I don't take my position for granted. For those celebrating this week, I hope you have an amazing day filled with family, friends, and food.",{"slug":14705,"date":14706},"spring-framework-6-1","2023-11-20T07:00:00.000Z",{"type":13,"value":14708,"toc":14873},[14709,14711,14714,14718,14721,14765,14768,14771,14774,14778,14785,14788,14792,14800,14803,14805,14808,14814,14816,14818,14832,14834,14842,14844,14847,14853,14855,14860],[16,14710,14703],{},[16,14712,14713],{},"Today, I want to discuss three topics: Spring Framework 6.1, Spring Guides in the Cloud, and my GraphQL presentation at VMware Explore Barcelona.",[28,14715,14717],{"id":14716},"spring-framework-61","Spring Framework 6.1",[16,14719,14720],{},"It's hard to believe, but Spring Framework 6.1 was released last year and will serve as the foundation for Spring Boot 3.2, which is set to be released this week on Thanksgiving. Spring Framework 6.1 ships with a bunch of exciting new features:",[1271,14722,14723,14728,14733,14739,14745,14750],{},[1274,14724,14725],{},[161,14726,14727],{},"Embracing JDK 21 LTS",[1274,14729,14730,14732],{},[161,14731,14246],{}," (Project Loom)",[1274,14734,14735,14738],{},[161,14736,14737],{},"JVM Checkpoint Restore"," (Project CRaC)",[1274,14740,14741,14744],{},[161,14742,14743],{},"Resource Lifecycle Management",", revisited",[1274,14746,14747,14744],{},[161,14748,14749],{},"Data Binding and Validation",[1274,14751,14752],{},[161,14753,14754,14755,14759,14760,14764],{},"New ",[23,14756,585],{"href":14757,"rel":14758},"https:\u002F\u002Fdocs.spring.io\u002Fspring-framework\u002Fdocs\u002F6.1.x\u002Fjavadoc-api\u002Forg\u002Fspringframework\u002Fweb\u002Fclient\u002FRestClient.html",[101]," and ",[23,14761,14546],{"href":14762,"rel":14763},"https:\u002F\u002Fdocs.spring.io\u002Fspring-framework\u002Fdocs\u002F6.1.x\u002Fjavadoc-api\u002Forg\u002Fspringframework\u002Fjdbc\u002Fcore\u002Fsimple\u002FJdbcClient.html",[101]," APIs",[16,14766,14767],{},"I am a big fan of all the features released in JDK 21 and I am really excited to see Spring adopting JDK 21. Although the baseline remains at JDK 17, it is worth considering upgrading your JDK along with Spring to avoid the need for a major upgrade in a few years.",[16,14769,14770],{},"I am particularly excited about Virtual Threads in JDK 21 and I believe Spring Developers should be too. When it comes to developing traditional blocking web applications, Virtual Threads will offer significant scalability benefits with minimal or no code changes.",[16,14772,14773],{},"I am also a big fan of the new client abstractions. The new RestClient provides a simple and fluent API for making API calls, built on top of the RestTemplate. The JDBC Client offers a more user-friendly and fluent API for interacting with databases. I believe both of these improvements will enhance the developer experience.",[28,14775,14777],{"id":14776},"spring-guides-in-the-cloud","Spring Guides in the Cloud",[16,14779,13207,14780,14784],{},[23,14781,93],{"href":14782,"rel":14783},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0057\u002F",[101]," we had a really great discussion about Spring Academy with one of the engineers on the team, Felipe Gutierrez. During the live stream Felipe showed off a really cool feature where you could run a Spring Guide in the cloud. I thought this was so cool that I decided to sit down and put together a video on it.",[47,14786],{"id":14787},"kSSStm6b0Zg",[28,14789,14791],{"id":14790},"graphql-vmware-explore","GraphQL VMware Explore",[16,14793,14794,14795,14799],{},"In last week’s newsletter I mentioned that I did 2 talks at VMware Explore Barcelona. The first talk “Accelerating innovation with Spring” that I did with my coworker Cora was recorded and you can check it out ",[23,14796,742],{"href":14797,"rel":14798},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fvideo-library\u002Fvideo-landing.html?sessionid=1693987326111001vbVK&videoId=6340722423112",[101],". The other talk was a live coding session where I did an introduction to building GraphQL APIs in Java and Spring and that talk was not recorded. I put all of that work into that presentation so I decided to sit down and record it and I hope you enjoy it.",[47,14801],{"id":14802},"1mRK3FeV76I",[28,14804,10014],{"id":10013},[16,14806,14807],{},"One of the reasons I really love having my own personal website is because I feel like it’s my own little corner of the internet. I recently launched a new website but it was missing that personal touch. I have started collecting images for the home page and now have a few that I really like. My plan is to showcase the events I’m attending and the community I get to interact with. If we have a photo together please send the to me so I can add the to the home page. If we don’t have a photo together let’s try and change that the next time we are in the same place.",[16,14809,14810],{},[74,14811],{"alt":14812,"src":14813},"danvega_dev_home.png","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F20\u002Fdanvega_dev_home.png",[28,14815,11191],{"id":10953},[33,14817,13650],{"id":973},[16,14819,10983,14820,14825,14826,14831],{},[23,14821,14824],{"href":14822,"rel":14823},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rUjLf_8HwLk",[101],"this live stream"," on Coffee and Code where Josh Long had a couple of special guests in Rod Johnson and Heather VanCura. They talked about Heathers new book “",[23,14827,14830],{"href":14828,"rel":14829},"https:\u002F\u002Famzn.to\u002F3R5XSHH",[101],"Developer Career Masterplan","” and had some really interesting discussions about it.",[33,14833,13857],{"id":13856},[16,14835,2481,14836,14841],{},[23,14837,14840],{"href":14838,"rel":14839},"https:\u002F\u002Fcloud-builders.tech\u002F",[101],"Cloud Builders Java Conference"," is coming up soon and they have a really great lineup of speakers. This conference is online and free so make sure you register now.",[33,14843,12488],{"id":2235},[16,14845,14846],{},"I had some fun with the new Make Real feature of tldraw this weekend.",[16,14848,14849],{},[23,14850,14851],{"href":14851,"rel":14852},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1725623222207484274",[101],[28,14854,172],{"id":171},[16,14856,11327,14857,11333],{},[23,14858,11332],{"href":11330,"rel":14859},[101],[16,14861,9630,14862,191,14864,14866,14868,14870],{},[189,14863],{},[189,14865],{},[23,14867,11491],{"href":11490},[189,14869],{},[23,14871,198],{"href":198,"rel":14872},[101],{"title":200,"searchDepth":201,"depth":201,"links":14874},[14875,14876,14877,14878,14879,14884],{"id":14716,"depth":201,"text":14717},{"id":14776,"depth":201,"text":14777},{"id":14790,"depth":201,"text":14791},{"id":10013,"depth":201,"text":10014},{"id":10953,"depth":201,"text":11191,"children":14880},[14881,14882,14883],{"id":973,"depth":206,"text":13650},{"id":13856,"depth":206,"text":13857},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":14886,"path":14887,"title":14888,"description":14889,"meta":14890,"body":14893},"newsletter\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fvmware-explore-barcelona.md","\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fvmware-explore-barcelona","VMware Explore Barcelona 2023 Recap","Happy Monday and welcome to another edition of the newsletter. I apologize for the delay in updates as I have been busy with work and traveling.",{"slug":14891,"date":14892},"vmware-explore-barcelona","2023-11-13T07:00:00.000Z",{"type":13,"value":14894,"toc":15067},[14895,14897,14905,14908,14915,14918,14921,14924,14928,14931,14937,14940,14946,14950,14956,14959,14962,14965,14977,14981,14990,14993,14999,15003,15006,15012,15020,15029,15035,15037,15042,15045,15047,15049,15054],[16,14896,14889],{},[16,14898,14899,14900,14904],{},"In a recent newsletter, I mentioned that I upgraded ",[23,14901,14903],{"href":196,"rel":14902},[101],"my personal website"," to Nuxt 3. I am really enjoying this upgrade as it has rejuvenated my excitement for my website.",[16,14906,14907],{},"As I started writing this edition of the newsletter, I realized that my speaking page was already outdated because it was static. To address this, I decided to rewrite the page and transfer all the static data into a JSON data file. Instead of doing this manually, I sought the assistance of my good friend, Chat GPT. This is a prime example of how AI can enhance a developer's capabilities.",[16,14909,14910,14911,14914],{},"Anyway, if you visit my ",[23,14912,3517],{"href":3515,"rel":14913},[101],", you will find a list of upcoming and archived talks. I'm really proud of the migration to my new website and would love to put together some content around it if that's something you're interested in learning about. If you are, please reach out to me and let me know that you're interested.",[16,14916,14917],{},"This week, I am going to recap my trip to Barcelona, Spain for VMware Explore Barcelona.",[28,14919,14920],{"id":14891},"VMware Explore Barcelona",[16,14922,14923],{},"Last week, I had the opportunity to visit Barcelona, Spain for the VMware Barcelona event, and it exceeded my expectations. During the conference, I had the chance to give two presentations, both of which I believe went really well.",[33,14925,14927],{"id":14926},"accelerating-innovation-with-spring","Accelerating Innovation with Spring",[16,14929,14930],{},"The first presentation was co-presented with my coworker, Cora Iberkleid, and it was titled \"Accelerating Innovation with Spring, The Anniversary Edition.\" The idea behind this talk stemmed from the fact that we are celebrating 20 years of Spring and 10 years of Spring Boot this year. We decided to start with a brief history lesson on the origins of Spring and highlight some of the major milestones throughout the years.",[16,14932,14933],{},[74,14934],{"alt":14935,"src":14936},"History of Spring","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fhistory-of-spring.png",[16,14938,14939],{},"We then provided an overview of the major themes of Spring Boot 3 and Spring Framework 6. Following that recap, we delved into what to expect in Spring Boot 3.2 and beyond. Our focus was on improving runtime efficiency with Virtual Threads and CRaC, enhancing developer experience with Docker & Testcontainers, and introducing new client abstractions with RestClient and JDBC Client.",[16,14941,14942,14943,184],{},"If you're interested in watching the recording of this session, you can check it out ",[23,14944,742],{"href":14797,"rel":14945},[101],[33,14947,14949],{"id":14948},"graphql-code-theater","GraphQL - Code Theater",[16,14951,14952],{},[74,14953],{"alt":14954,"src":14955},"Code Theater","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fcode-theater.jpeg",[16,14957,14958],{},"My next presentation was one that included 0 slides which is always fun. I love to live code but in a long session format it can be quite the challenge. This talk however was only 20 minutes and I had to jam a lot of content into those 20 minutes. After saying a quick prayer to the demo gods, I was off and running.",[16,14960,14961],{},"I had to skip a lot of the intro to GraphQL content and when you might want to use it. If you’re interested in that you can check out the recording from my talk at SpringOne in Las Vegas from earlier this year.",[47,14963],{"id":14964},"xprZxH8p0Pg",[16,14966,14967,14968,14972,14973,184],{},"I ended up creating a small application that interacted with a database. I used the posts from my blog to demonstrate its functionality. After setting up the posts, we developed a new GraphQL API and discussed the process of building a schema and connecting it to your Spring Controllers. While there is no recording of this talk, you can refer to the ",[23,14969,6632],{"href":14970,"rel":14971},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fvme-blog",[101]," that contains the agenda and code. This will allow you to follow along and create your own API. Since the talk was not recorded, I may consider recording it for ",[23,14974,14976],{"href":4869,"rel":14975},[101],"my YouTube channel",[33,14978,14980],{"id":14979},"spring-meetup-at-mclaren-barcelona","Spring Meetup at McLaren Barcelona",[16,14982,14983,14984,14989],{},"We recently had a special Spring Meetup at ",[23,14985,14988],{"href":14986,"rel":14987},"https:\u002F\u002Fbarcelona.mclaren.com\u002Fen",[101],"McLaren in Barcelona",". I had the privilege of co-hosting the meetup with my coworker, Cora. We were given a special tour of the three different floors of cars, which was truly amazing.",[16,14991,14992],{},"During the meetup, Cora and I gave a brief introduction to celebrate 20 years of Spring and 10 years of Spring Boot. We shared its history, enjoyed champagne, and indulged in Spring branded cupcakes. I want to express my gratitude to everyone involved for including me in this special event. It was an honor and privilege to be a part of it. 🤩",[16,14994,14995],{},[74,14996],{"alt":14997,"src":14998},"McLaren Barcelona","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fmclaren.jpeg",[33,15000,15002],{"id":15001},"barcelona","Barcelona",[16,15004,15005],{},"During my time in Barcelona, I had the opportunity to have dinner with an amazing group of people on two separate occasions. The picture below was taken on the second night, where they served different steaks that were almost cooked and you finish them off right in front of you.",[16,15007,15008],{},[74,15009],{"alt":15010,"src":15011},"Dinner","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fdinner.jpeg",[16,15013,15014,15015,15019],{},"I was also thrilled to finally meet Sergi Almar in person. He can be seen in the dinner picture above, but I also had dinner with him the night before. In case you're not familiar with Sergi, he is the mastermind behind ",[23,15016,11757],{"href":15017,"rel":15018},"https:\u002F\u002Ftwitter.com\u002Fspring_io\u002Fstatus\u002F1722242942184923475",[101],". I hope to return to Barcelona next year for that event and another dinner with Sergi 🥳",[16,15021,15022,15023,15028],{},"Finally, I had the opportunity to be a tourist and visit ",[23,15024,15027],{"href":15025,"rel":15026},"https:\u002F\u002Fwww.sagradafamilia-tickets.org\u002F",[101],"La Sagrada Familia",". Construction of this church began in 1882 and is still ongoing today. It was an impressive architectural achievement, and seeing it in person was an absolutely amazing experience. I also took the opportunity to say a prayer for my family.",[16,15030,15031],{},[74,15032],{"alt":15033,"src":15034},"la-sagrada-familia","\u002Fimages\u002Fnewsletter\u002F2023\u002F11\u002F13\u002Fla-sagrada-familia.jpeg",[33,15036,12149],{"id":12148},[2238,15038,15039],{},[16,15040,15041],{},"\"Success is the sum of small efforts, repeated day in and day out.\"",[16,15043,15044],{},"Robert Collier",[2238,15046],{},[28,15048,172],{"id":171},[16,15050,11327,15051,11333],{},[23,15052,11332],{"href":11330,"rel":15053},[101],[16,15055,9630,15056,191,15058,15060,15062,15064],{},[189,15057],{},[189,15059],{},[23,15061,11491],{"href":11490},[189,15063],{},[23,15065,198],{"href":198,"rel":15066},[101],{"title":200,"searchDepth":201,"depth":201,"links":15068},[15069,15076],{"id":14891,"depth":201,"text":14920,"children":15070},[15071,15072,15073,15074,15075],{"id":14926,"depth":206,"text":14927},{"id":14948,"depth":206,"text":14949},{"id":14979,"depth":206,"text":14980},{"id":15001,"depth":206,"text":15002},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":15078,"path":15079,"title":15080,"description":15081,"meta":15082,"body":15085},"newsletter\u002Fnewsletter\u002F2023\u002F10\u002F30\u002Fdan-vega-nuxt.md","\u002Fnewsletter\u002F2023\u002F10\u002F30\u002Fdan-vega-nuxt","Website Redesign, VMware Explore Barcelona and Happy Halloween 🎃","Happy Monday and welcome to another edition of the newsletter. My apologies for the recent silence; I've had a busy few weeks of traveling and presenting. Two weeks ago, I was in Seattle with my friend DaShaun for a productive customer meeting where I discussed Spring Boot 3 and the upcoming features in Spring Boot 3.2.",{"slug":15083,"date":15084},"dan-vega-nuxt","2023-10-30T07:00:00.000Z",{"type":13,"value":15086,"toc":15189},[15087,15089,15092,15098,15101,15104,15108,15121,15130,15136,15142,15151,15153,15156,15159,15161,15167,15169,15174],[16,15088,15081],{},[16,15090,15091],{},"Last week, I attended and spoke at Connect Tech in Atlanta, a first-time experience for me. It was really great to see so many familiar faces and learn from some of the best the frontend development community has to offer. I was also lucky enough to grab some dinner and catch up with my friends Jordan and Erik. We had dinner at an amazing restaurant called Blue India thanks to a recommendation from Todd Libby.",[16,15093,15094],{},[74,15095],{"alt":15096,"src":15097},"Blue India","\u002Fimages\u002Fnewsletter\u002F2023\u002F10\u002F30\u002Fblue-india.jpeg",[16,15099,15100],{},"Finally, I want to thank Pratik Patel and Vincent Myers for putting together another amazing conference. They do a bunch of work on the conference scene and in the development community and we are lucky to have them.",[16,15102,15103],{},"Happy Halloween to everyone who celebrates. 🎃",[28,15105,15107],{"id":15106},"website-redesign","Website Redesign",[16,15109,15110,15111,15115,15116,15120],{},"I'm excited to announce that I've updated ",[23,15112,15114],{"href":196,"rel":15113},[101],"my website",". While I've been planning this for some time, I wanted to use Nuxt 3 for the update. It's hard to believe I've been blogging for nearly 20 years now. If you're interested in the origins of this blog, you can read ",[23,15117,13934],{"href":15118,"rel":15119},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F04\u002F11\u002Fdont-call-it-a-comback",[101]," from about four years ago.",[16,15122,15123,15124,15129],{},"For the new blog, I used a template called Spotlight from ",[23,15125,15128],{"href":15126,"rel":15127},"https:\u002F\u002Ftailwindui.com\u002Ftemplates",[101],"Tailwind UI",". The template was designed for React\u002FNext, so I had to convert it. I'm not familiar with either, which made this project interesting. Now that I understand React at a high level, I have a question for those who use it: are you aware of other options, like Vue?",[16,15131,15132],{},[74,15133],{"alt":15134,"src":15135},"Website Redesign Light Theme","\u002Fimages\u002Fnewsletter\u002F2023\u002F10\u002F30\u002Fredesign-light.png",[16,15137,15138],{},[74,15139],{"alt":15140,"src":15141},"Website Redesign Dark Theme","\u002Fimages\u002Fnewsletter\u002F2023\u002F10\u002F30\u002Fredesign-dark.png",[16,15143,15144,15145,15150],{},"I’m really proud with how clean this is and how the initial rollout has been. I put this together pretty quickly and I still have a lot to do but I felt it was good enough to get it out there. I’m going to do a video on this as well where I cover some of the features so stay tuned for that. If there is anything in particular you want to know about you can check out the ",[23,15146,15149],{"href":15147,"rel":15148},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fdanvega-dev-nuxt",[101],"source code"," for this site here and as always feel free to ask questions.",[28,15152,14920],{"id":14891},[16,15154,15155],{},"Next week, I will be in Barcelona, Spain for VMware Explore. My coworker Cora and I will give a presentation on Accelerating Innovation with Spring. In this presentation, we will explore the newest features of the Spring Framework 6.x and Spring Boot 3.x releases.",[16,15157,15158],{},"I am also presenting on GraphQL at the Code Theater. This presentation is unique because it won't include any slides and will feature live coding for about 20 minutes. This will be my first time visiting Barcelona and I'm extremely excited about the conference. If you’re going to be in attendance please be sure to come by and say hi 👋🏻",[33,15160,12149],{"id":12148},[16,15162,15163,15164],{},"“Be kind, for everyone you meet is fighting a harder battle.” ― ",[161,15165,15166],{},"Plato",[28,15168,172],{"id":171},[16,15170,11327,15171,11333],{},[23,15172,11332],{"href":11330,"rel":15173},[101],[16,15175,9630,15176,191,15178,15180,15182,15184,15187],{},[189,15177],{},[189,15179],{},[23,15181,11491],{"href":11490},[189,15183],{},[23,15185,198],{"href":198,"rel":15186},[101],[189,15188],{},{"title":200,"searchDepth":201,"depth":201,"links":15190},[15191,15192,15195],{"id":15106,"depth":201,"text":15107},{"id":14891,"depth":201,"text":14920,"children":15193},[15194],{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":15197,"path":15198,"title":15199,"description":15200,"meta":15201,"body":15204},"newsletter\u002Fnewsletter\u002F2023\u002F10\u002F09\u002Ftesting-spring-boot-applications.md","\u002Fnewsletter\u002F2023\u002F10\u002F09\u002Ftesting-spring-boot-applications","Testing Spring Boot Applications, Spring Cloud Gateway and Devoxx","Happy Monday and welcome to another edition of the newsletter. I’m in the middle of a pretty stressful month some of which I won’t get into here but If I’m being honest I’m struggling a bit but I am doing my best to push forward. I have a bunch of presentations at upcoming events I’m preparing for and I couldn't be more excited about all of them.",{"slug":15202,"date":15203},"testing-spring-boot-applications","2023-10-09T07:00:00.000Z",{"type":13,"value":15205,"toc":15465},[15206,15208,15211,15214,15222,15233,15236,15239,15242,15246,15249,15252,15255,15260,15263,15322,15326,15335,15341,15349,15351,15358,15382,15386,15389,15392,15400,15402,15404,15422,15424,15427,15429,15434,15436,15439,15445,15447,15452],[16,15207,15200],{},[16,15209,15210],{},"In this episode I want to talk to you about testing Spring Boot applications, Spring Cloud Gateway and more.",[28,15212,15213],{"id":15202},"Testing Spring Boot Applications",[16,15215,15216,15217,15221],{},"I recently had a discussion about testing Spring Boot applications during ",[23,15218,93],{"href":15219,"rel":15220},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PdXcInQ1SjA",[101]," with DaShaun. One aspect of Spring Boot that I particularly appreciate is that testing is built-in and doesn't require any additional setup.",[16,15223,15224,15225,15228,15229,15232],{},"When you create a new project on ",[23,15226,2090],{"href":14373,"rel":15227},[101],", the ",[469,15230,15231],{},"spring-boot-starter-test"," is automatically included in your application. In the mentioned episode and the video provided below, I explain what is included in this starter. Understanding the components that come with Spring Boot makes it easier to comprehend the purpose of tests and the resources available to you for writing them.",[47,15234],{"id":15235},"rUbjV3VY1DI",[16,15237,15238],{},"I'm also a big fan of Testcontainers and how it simplifies the process of doing the right thing. We all understand the importance of writing tests, but if integration tests take too long, we are less motivated to write them. In this tutorial, I will guide you on how to get started with Testcontainers in Spring Boot. Additionally, we will explore how the changes in Spring Boot 3.1 make this process even easier.",[47,15240],{"id":15241},"erp-7MCK5BU",[28,15243,15245],{"id":15244},"spring-cloud-gateway","Spring Cloud Gateway",[16,15247,15248],{},"Spring Cloud Gateway is a topic I have wanted to create a tutorial on for ahwile now and last week I finally got around to doing it. I’m building out a service called DanSON Placeholder Service (yes, just like JSON Placeholder Service) and I thought this would be a really good way to show off an API Gateway and specifically Spring Cloud Gateway.",[47,15250],{"id":15251},"EKoq98KqvrI",[16,15253,15254],{},"I put together this graphic and I used it during my tutorial. I thought I would share it here in case you find useful.",[16,15256,15257],{},[74,15258],{"alt":15245,"src":15259},"\u002Fimages\u002Fnewsletter\u002F2023\u002F10\u002F09\u002Fscg-diagram.png",[16,15261,15262],{},"This was an introduction to Spring Cloud Gateway, but it is certainly not the end of this series. I asked you guys on Twitter if you had any questions about API Gateways or SCG, and you came up with some really great questions. Here is a list of those questions, and we still need to answer the majority of them.",[1271,15264,15265,15268,15271,15274,15277,15280,15283,15286,15289,15292,15295,15298,15301,15304,15307,15310,15313,15316,15319],{},[1274,15266,15267],{},"Does it make sense to have a Gateway when deploying on Kubernetes or any other orchestration with some sort of service discovery?",[1274,15269,15270],{},"The company I work for runs Spring Boot services within a Kubernetes cluster. My question is: Is it better to use Ingress (nginx) or Spring Cloud Gateway to route user requests? Thanks.",[1274,15272,15273],{},"Do Virtual Threads make any difference? Does a non-Project Reactor implementation exist that can use Virtual Threads?",[1274,15275,15276],{},"SCG --> Kafka would be exciting",[1274,15278,15279],{},"Hi Dan, can Spring Cloud Gateway be integrated with Microservices written in languages other than Java? Thx",[1274,15281,15282],{},"Can you compare it with other similar tools like Envoy?",[1274,15284,15285],{},"I would love for you to do a tutorial on this and how it links up to event-driven architecture",[1274,15287,15288],{},"Do you need to scale SCG because of the services behind it? Imagine I need to scale one of the services that has very high throughput, does SCG need to scale as well? Otherwise, would it be a bottleneck?",[1274,15290,15291],{},"I've always wanted to leverage Spring Cloud Gateway to build something that validates against an OpenAPI spec and logs req+res with tags on the operations in the OpenAPI spec.",[1274,15293,15294],{},"What are the differences between Spring Cloud Gateway and Netflix Zuul?",[1274,15296,15297],{},"Is it okay to have Spring Cloud Gateway along with microservices as a single repository and single service?",[1274,15299,15300],{},"Integrate role-based access control with API gateway microservice architecture",[1274,15302,15303],{},"How to implement audit logs in SCG?",[1274,15305,15306],{},"Yes, what would be the best way to document my gateway API with OpenAPI? It becomes complicated to implement this so that it works accepting requests from Swagger and from external clients (Postman).",[1274,15308,15309],{},"SCG is great, but I always had a bit of trouble distinguishing the various OAuth2 flows. Resource Server, M2M, browser flow, etc. Some worked examples would be nice.",[1274,15311,15312],{},"Can you spare some thoughts on Inter Web-Services on Microservices design with a few examples?",[1274,15314,15315],{},"Would be awesome if you can implement JWT using spring security on API gateway.",[1274,15317,15318],{},"Open API",[1274,15320,15321],{},"Should you pass JWT token to a microservice, or you can verify it on Gateway and just made a non-secured request to an endpoint?",[28,15323,15325],{"id":15324},"devoxx","Devoxx",[16,15327,15328,15329,15334],{},"Devoxx Belgium took place last week, and I experienced some serious FOMO while watching all the buzz surrounding the conference. It was really cool to see the GraalVM Native Image panel discussion, especially since they used one of my tweets as a talking point. I want to express my gratitude to ",[23,15330,15333],{"href":15331,"rel":15332},"https:\u002F\u002Ftwitter.com\u002Fvitalethomas\u002Fstatus\u002F1709563387267387581\u002Fphoto\u002F1",[101],"Thomas Vitale"," for bringing this to my attention.",[16,15336,15337],{},[74,15338],{"alt":15339,"src":15340},"GraalVM Tweet","\u002Fimages\u002Fnewsletter\u002F2023\u002F10\u002F09\u002Fgraalvm-tweet.png",[16,15342,15343,15344,15348],{},"I was impressed by the quickness with which they posted the conference recordings on their ",[23,15345,2944],{"href":15346,"rel":15347},"https:\u002F\u002Fwww.youtube.com\u002F@DevoxxForever",[101],". There is a lengthy list of talks that I am interested in watching, but I intend to save them for my trip to Barcelona next month.",[28,15350,8501],{"id":8500},[16,15352,15353,15354,15357],{},"This is going to be a busy few months to wrap up the year. Not only do I have everything that’s going on below but I also have bunch of in-person customer meetings that I am really looking forward. I will be ",[23,15355,8221],{"href":3515,"rel":15356},[101]," at the following conferences so if you are in attendance please come say hi 👋🏻",[1271,15359,15360,15368,15376],{},[1274,15361,15362,15367],{},[23,15363,15366],{"href":15364,"rel":15365},"https:\u002F\u002F2023.connect.tech\u002F",[101],"Connect Tech"," - October 24-26 2023",[1274,15369,15370,15375],{},[23,15371,15374],{"href":15372,"rel":15373},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Feu.html",[101],"VMware Barcelona"," - November 6-9 2023",[1274,15377,15378,15381],{},[23,15379,3404],{"href":3402,"rel":15380},[101]," - January 9-12 2024",[33,15383,15385],{"id":15384},"springone-tour-virtual","SpringOne Tour Virtual",[16,15387,15388],{},"We’re still buzzing from the amazing energy at SpringOne at VMware Explore. If you made it out to Las Vegas, we were thrilled to have you be a part of the vibrant Spring developer community. If you weren’t able to make the event, there are still opportunities to learn from industry experts and connect.",[16,15390,15391],{},"The first stop on our SpringOne Tour is a virtual session where we’ll be featuring the latest advancements, best practices, and tools and techniques that are quickly becoming industry-standard. Our technical advocates, Spring engineers, and application development experts will bring you an in-depth look into the beauty of open source, with Spring Framework, Spring Boot 3, Kubernetes, Progressive Delivery and more, so you can innovate faster.",[16,15393,15394,15395,184],{},"Join us virtually on October 17, 2023 by ",[23,15396,15399],{"href":15397,"rel":15398},"https:\u002F\u002Fspringonetour.io\u002F",[101],"registering for free using this link",[28,15401,11191],{"id":10953},[33,15403,11453],{"id":11452},[1271,15405,15406,15413],{},[1274,15407,10983,15408,15412],{},[23,15409,10979],{"href":15410,"rel":15411},"https:\u002F\u002Fglaforge.dev\u002Fposts\u002F2023\u002F10\u002F02\u002Fclient-side-consumption-of-a-rate-limited-api-in-java\u002F",[101]," by Guillaume Laforge where he discusses client-side consumption of rate-limited APIs in Java. Guillaume walks us through how rate limiting works and some libraries in Java that can help us with that such as Bucket4J and Resilience4J.",[1274,15414,15415,15416,15421],{},"There is a really ",[23,15417,15420],{"href":15418,"rel":15419},"https:\u002F\u002Fauth0.com\u002Fblog\u002Fhow-to-build-a-graphql-api-with-spring-boot\u002F",[101],"good article"," on the Auth0 blog  by Jimena Garbarino on How to build a GraphQL API with Spring Boot. This is a complete walkthrough of building a GraphQL API in Spring and consuming it in React with Next.js",[33,15423,11465],{"id":30},[16,15425,15426],{},"I really enjoyed this video by my friend and coworker Josh Long. In this tutorial Josh talks about how different it is to get started with Java today as opposed to when he started. He walks through some of the tooling in the Java ecosystem and how to get started.",[33,15428,12149],{"id":12148},[2238,15430,15431],{},[16,15432,15433],{},"“Work harder on yourself than you do on your job.” – Jim Rohn",[33,15435,12488],{"id":2235},[16,15437,15438],{},"I had testing on my mind last week and decided to put a quick Twitter poll together to see what Assertion library Java users were using and here are the results.",[16,15440,15441],{},[23,15442,15443],{"href":15443,"rel":15444},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1710041316703219883",[101],[28,15446,172],{"id":171},[16,15448,11327,15449,11333],{},[23,15450,11332],{"href":11330,"rel":15451},[101],[16,15453,9630,15454,191,15456,15458,15460,15462],{},[189,15455],{},[189,15457],{},[23,15459,11491],{"href":11490},[189,15461],{},[23,15463,198],{"href":198,"rel":15464},[101],{"title":200,"searchDepth":201,"depth":201,"links":15466},[15467,15468,15469,15470,15473,15479],{"id":15202,"depth":201,"text":15213},{"id":15244,"depth":201,"text":15245},{"id":15324,"depth":201,"text":15325},{"id":8500,"depth":201,"text":8501,"children":15471},[15472],{"id":15384,"depth":206,"text":15385},{"id":10953,"depth":201,"text":11191,"children":15474},[15475,15476,15477,15478],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":15481,"path":15482,"title":15483,"description":15484,"meta":15485,"body":15488},"newsletter\u002Fnewsletter\u002F2023\u002F10\u002F02\u002Fterrific-development-dan.md","\u002Fnewsletter\u002F2023\u002F10\u002F02\u002Fterrific-development-dan","Docker Compose, TDD in Spring and Upcoming Speaking Engagements","Happy Monday and welcome to another edition of the newsletter. This week will be a short week for me as we have a company day off this Friday. I have mentioned this before, but I truly enjoy working for VMware. They truly embody their company culture and pay attention to the small details.",{"slug":15486,"date":15487},"terrific-development-dan","2023-10-02T07:00:00.000Z",{"type":13,"value":15489,"toc":15629},[15490,15492,15495,15499,15502,15505,15508,15512,15527,15530,15533,15536,15539,15542,15544,15549,15566,15568,15570,15572,15577,15579,15581,15589,15591,15596,15598,15601,15607,15609,15614],[16,15491,15484],{},[16,15493,15494],{},"In this episode, I would like to discuss Docker Compose, TDD in Spring, and some upcoming speaking engagements.",[28,15496,15498],{"id":15497},"docker-compose","Docker Compose",[16,15500,15501],{},"Last week, while putting together a small demo, I encountered an interesting issue. I was using the new Docker Compose module in Spring Boot to connect to a PostgreSQL database. The application was functioning perfectly, but when I attempted to connect to the database using the database tools in IntelliJ, I couldn't establish a connection.",[16,15503,15504],{},"Initially, I considered the possibility that the issue was related to Docker. I wondered if I needed to connect to the internal IP address of the containers instead of using localhost. However, that wasn't the problem either. After some head scratching, I eventually identified the cause of the issue. To help you understand what went wrong and how I resolved it, I have created the following tutorial on connecting to a database inside a Docker container.",[47,15506],{"id":15507},"NOrwxSI_VIg",[28,15509,15511],{"id":15510},"spring-boot-testing","Spring Boot Testing",[16,15513,15514,15515,15520,15521,15526],{},"A few weeks ago, I created a tutorial on ",[23,15516,15519],{"href":15517,"rel":15518},"https:\u002F\u002Fyoutu.be\u002FB1d95I7-zsw",[101],"how to structure your code"," in a Spring Boot application. Last week, I had the opportunity to continue the conversation on the ",[23,15522,15525],{"href":15523,"rel":15524},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours",[101],"Podcast"," by inviting my friend Ted Young as a guest.",[16,15528,15529],{},"We started off the podcast by summarizing what I covered in the video, which focused on organizing code by package, either by layer or by feature. I was eager to hear Ted's perspective on this topic, and he provided some valuable insights.",[16,15531,15532],{},"Next, we delved into Hexagonal Architecture, an approach that Ted is a strong advocate for and frequently discusses. Although I haven't personally used this approach in my Spring Boot applications, I can see several benefits, particularly in terms of testing.",[16,15534,15535],{},"Inspired by watching a few videos on Ted's channel, I decided to create some testing videos of my own. The first video in this series, which focuses on Test Driven Development (TDD) in Spring, has already been published.",[47,15537],{"id":15538},"-H5sud1-K5A",[16,15540,15541],{},"I have already recorded a follow up to this video where we will go through integration testing with Testcontainers and that should be released today!",[28,15543,8501],{"id":8500},[16,15545,15353,15546,15357],{},[23,15547,8221],{"href":3515,"rel":15548},[101],[1271,15550,15551,15556,15561],{},[1274,15552,15553,15367],{},[23,15554,15366],{"href":15364,"rel":15555},[101],[1274,15557,15558,15375],{},[23,15559,15374],{"href":15372,"rel":15560},[101],[1274,15562,15563,15381],{},[23,15564,3404],{"href":3402,"rel":15565},[101],[33,15567,15385],{"id":15384},[16,15569,15388],{},[16,15571,15391],{},[16,15573,15394,15574,184],{},[23,15575,15399],{"href":15397,"rel":15576},[101],[28,15578,11191],{"id":10953},[33,15580,11453],{"id":11452},[16,15582,15583,15584,15588],{},"I enjoyed ",[23,15585,10979],{"href":15586,"rel":15587},"https:\u002F\u002Fstuartmarks.wordpress.com\u002F2023\u002F09\u002F22\u002Fmy-favorite-jdk-21-feature-javadoc-search-url\u002F",[101]," by Stuart Marks where he talks about his favorite feature in JDK 21. The Javadoc Search got an upgrade and it’s own URL which means you can easily interact it with it using your own tools.",[33,15590,12149],{"id":12148},[2238,15592,15593],{},[16,15594,15595],{},"“The best way to appreciate your job is to imagine yourself without one.” – Oscar Wilde",[33,15597,12488],{"id":2235},[16,15599,15600],{},"I’m really looking forward to a world where I can stand in a virtual room and teach all of the things I love to those willing to listen 🤩",[16,15602,15603],{},[23,15604,15605],{"href":15605,"rel":15606},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1707458829552685275",[101],[28,15608,172],{"id":171},[16,15610,11327,15611,11333],{},[23,15612,11332],{"href":11330,"rel":15613},[101],[16,15615,9630,15616,191,15618,15620,15622,15624,15627],{},[189,15617],{},[189,15619],{},[23,15621,11491],{"href":11490},[189,15623],{},[23,15625,198],{"href":198,"rel":15626},[101],[189,15628],{},{"title":200,"searchDepth":201,"depth":201,"links":15630},[15631,15632,15633,15636,15641],{"id":15497,"depth":201,"text":15498},{"id":15510,"depth":201,"text":15511},{"id":8500,"depth":201,"text":8501,"children":15634},[15635],{"id":15384,"depth":206,"text":15385},{"id":10953,"depth":201,"text":11191,"children":15637},[15638,15639,15640],{"id":11452,"depth":206,"text":11453},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":15643,"path":15644,"title":15645,"description":15646,"meta":15647,"body":15650},"newsletter\u002Fnewsletter\u002F2023\u002F09\u002F25\u002Fspring-boot-code-structure.md","\u002Fnewsletter\u002F2023\u002F09\u002F25\u002Fspring-boot-code-structure","Spring Boot Code Structure, Java 21, and a Podcast Interview with Java Brains!","Happy Monday and welcome to another edition of the newsletter. Last week was busy as I engaged in activities I love, which I would like to share with all of you. It was an exciting week with the release of Java 21. I spent a lot of time tweeting and discussing this exciting release with all of you. Now that Java 21 is out, we can look forward to the release of Spring Boot 3.2 in November. This will allow us to start using Virtual Threads in production. In the meantime, you can already try out Spring Boot 3.2 Milestones and Java 21 for yourself!",{"slug":15648,"date":15649},"spring-boot-code-structure","2023-09-25T07:00:00.000Z",{"type":13,"value":15651,"toc":15805},[15652,15654,15660,15663,15672,15681,15684,15686,15695,15698,15701,15705,15708,15717,15720,15723,15727,15730,15733,15735,15737,15739,15744,15746,15748,15756,15758,15766,15768,15776,15778,15785,15787,15792],[16,15653,15646],{},[16,15655,15656],{},[74,15657],{"alt":15658,"src":15659},"Java 21 & Spring Boot 3.2","\u002Fimages\u002Fnewsletter\u002F2023\u002F09\u002F25\u002Fspring-init-java-21.png",[28,15661,15662],{"id":15648},"Spring Boot Code Structure",[16,15664,15665,15666,15671],{},"This is a tutorial I had in my backlog for a long time and I finally got around to making it. I decided to throw out a ",[23,15667,15670],{"href":15668,"rel":15669},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1704867889004564622",[101],"tweet last week"," asking everyone how they structure code in their Spring Boot Applications. With over 120 comments I received a lot of really great feedback.",[16,15673,15674,15675,15680],{},"I created the following tutorial to walk through 2 ways that you can structure your code, Package by Layer and Package by Feature. I’m going to be diving into other architecture choices including tomorrow when I sit down with my friend ",[23,15676,15679],{"href":15677,"rel":15678},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0053\u002F",[101],"Ted Young on Spring Office Hours"," to talk about Hexagonal Architecture.",[47,15682],{"id":15683},"B1d95I7-zsw",[28,15685,14385],{"id":14384},[16,15687,15688,15689,15694],{},"Java 21 was released on Tuesday, and I spent most of the day consuming all the content I could. My friends at Oracle had an 8-hour release party on ",[23,15690,15693],{"href":15691,"rel":15692},"http:\u002F\u002Fdev.java\u002F",[101],"dev.java",", and I tried to watch as much as possible. If you missed it, you can check out the recording and catch up on all the exciting news about this release.",[16,15696,15697],{},"I decided to create a quick tutorial on how to get started with Java 21. In this video, I also discuss the JEPs included in this release and how to use preview features. I'm a big fan of Java 21 and plan to create a lot of content about it in the coming months.",[47,15699],{"id":15700},"aqc5YB7TISM",[28,15702,15704],{"id":15703},"spring-boot-observability","Spring Boot Observability",[16,15706,15707],{},"I have been giving talks all over about Spring Boot 3 and beyond. One of the topics I cover is the complete revamp of Observability in Spring Boot 3, marking the beginning of a new Observability story.",[16,15709,15710,15711,15716],{},"In the last newsletter, I introduced ",[23,15712,15715],{"href":15713,"rel":15714},"https:\u002F\u002Fyoutu.be\u002F4OVe0MWgZ4k",[101],"Spring Boot Actuator",", which sets the stage for this tutorial. In this tutorial, we delve deeper into the Actuator by exploring the metrics endpoint.",[16,15718,15719],{},"Through this tutorial, you will learn how to enable observability in your applications by including the Spring Boot Actuator. Additionally, you will discover how to view traces using a tool like Zipkin, and finally, how to utilize the Observation API and create your own observations.",[47,15721],{"id":15722},"exRkiVLyPpc",[28,15724,15726],{"id":15725},"java-brains-podcast","Java Brains Podcast",[16,15728,15729],{},"There are some really great educators in the Java space and I was lucky enough to spend some time last week with one of my favorite content creators Kouth AKA Java Brains. We sat down and recorded an episode of his podcast and wow did I have some fun. I think we ended up talking for close to 90 minutes and probably could have spent the rest of the day talking.",[47,15731],{"id":15732},"HTS8Yfos-Ns",[28,15734,15385],{"id":15384},[16,15736,15388],{},[16,15738,15391],{},[16,15740,15394,15741,184],{},[23,15742,15399],{"href":15397,"rel":15743},[101],[28,15745,11191],{"id":10953},[33,15747,11453],{"id":11452},[16,15749,15750,15751,15755],{},"Shortly after Java 21 was released GraalVM for JDK 21 was released. I enjoyed ",[23,15752,10979],{"href":15753,"rel":15754},"https:\u002F\u002Fmedium.com\u002Fgraalvm\u002Fgraalvm-for-jdk-21-is-here-ee01177dd12d",[101]," by Alina Yurenko and was particularly intrigued by the section that talked about the speed of JIT vs AOT.",[33,15757,11465],{"id":30},[16,15759,10983,15760,15765],{},[23,15761,15764],{"href":15762,"rel":15763},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=U6s2pdxebSo&t=4386s&pp=ygUWdHlwZXNjcmlwdCBkb2N1bWVudGFyeQ%3D%3D",[101],"this documentary on TypeScript",". It was really great to hear behind the scenes stories of how they got started with it Microsoft and how they used it to build VS Code. I’m a big fan of TypeScript and It got me excited to find a way to use it more.",[33,15767,13650],{"id":973},[16,15769,10983,15770,15775],{},[23,15771,15774],{"href":15772,"rel":15773},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F16aff4f7-4a2f-4823-ac21-b9fbf15bd914",[101],"this episode of the Bootiful Podcast"," with Sharat Chander. In this episode 2 legends (and friends of mine) sit down to talk about past, present and future of Java.",[33,15777,12149],{"id":12148},[16,15779,15780],{},[161,15781,15782],{},[161,15783,15784],{},"“Instead of worrying about what you cannot control, shift your energy to what you can create.” – Roy T. Bennett",[28,15786,172],{"id":171},[16,15788,11327,15789,11333],{},[23,15790,11332],{"href":11330,"rel":15791},[101],[16,15793,9630,15794,191,15796,15798,15800,15802],{},[189,15795],{},[189,15797],{},[23,15799,11491],{"href":11490},[189,15801],{},[23,15803,198],{"href":198,"rel":15804},[101],{"title":200,"searchDepth":201,"depth":201,"links":15806},[15807,15808,15809,15810,15811,15812,15818],{"id":15648,"depth":201,"text":15662},{"id":14384,"depth":201,"text":14385},{"id":15703,"depth":201,"text":15704},{"id":15725,"depth":201,"text":15726},{"id":15384,"depth":201,"text":15385},{"id":10953,"depth":201,"text":11191,"children":15813},[15814,15815,15816,15817],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":15820,"path":15821,"title":15822,"description":15823,"meta":15824,"body":15826},"newsletter\u002Fnewsletter\u002F2023\u002F09\u002F18\u002Fjava-21.md","\u002Fnewsletter\u002F2023\u002F09\u002F18\u002Fjava-21","Java 21, The new JDBC Client and the Spring Boot Actuator","Happy Monday and welcome to another edition of the newsletter. Last week, I took a quick trip to Seattle to visit with a customer. While there, Josh Long and I presented on Spring Boot 3 and GraphQL, respectively, in person. It was a great trip and I have been looking forward to meeting this customer in person for a long time.",{"slug":14384,"date":15825},"2023-09-18T07:00:00.000Z",{"type":13,"value":15827,"toc":16217},[15828,15830,15836,15839,15842,15846,15855,16032,16040,16043,16045,16058,16060,16063,16086,16089,16092,16095,16102,16105,16108,16131,16133,16135,16137,16142,16144,16146,16149,16157,16159,16168,16170,16176,16178,16181,16186,16188,16191,16197,16199,16204],[16,15829,15823],{},[16,15831,15832],{},[74,15833],{"alt":15834,"src":15835},"Seattle Waterfront","\u002Fimages\u002Fnewsletter\u002F2023\u002F09\u002F18\u002Fseattle_waterfront.jpeg",[16,15837,15838],{},"I was also pretty excited about the iPhone 15 announcements last week. I am still using a 13 pro and I have been waiting for this one. I am excited about a lot of the new features but none more than the improved camera when it comes to shooting video. This is going to be a big step over my 2 year old phone for shooting video on the road.",[16,15840,15841],{},"In this weeks newsletter I want to talk about the release of Java 21, The JDBC Client and The Spring Boot Actuator.",[28,15843,15845],{"id":15844},"jdk-21-is-here","JDK 21 is here!",[16,15847,15848,15849,15854],{},"This is a really exciting week as ",[23,15850,15853],{"href":15851,"rel":15852},"https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F21\u002F",[101],"JDK 21"," is set to be released tomorrow. There are a total of 15 JEPs (Java Enhancement Proposals) included with this release and they are listed below. If you want to learn more about each of them you can click on the links below. The JEP contains a lot of information such as the history, the motivation behind it and the details for the feature.",[1613,15856,15857,15869],{},[1616,15858,15859],{},[1619,15860,15861,15865],{},[1622,15862,15863],{},[161,15864,1624],{},[1622,15866,15867],{},[161,15868,14408],{},[1629,15870,15871,15881,15891,15903,15913,15923,15935,15945,15954,15964,15974,15986,15998,16010,16022],{},[1619,15872,15873,15875],{},[1634,15874,14415],{},[1634,15876,15877],{},[23,15878,15880],{"href":14420,"rel":15879},[101],"String Templates (Preview)",[1619,15882,15883,15885],{},[1634,15884,14426],{},[1634,15886,15887],{},[23,15888,15890],{"href":14431,"rel":15889},[101],"Sequenced Collections",[1619,15892,15893,15896],{},[1634,15894,15895],{},"439:",[1634,15897,15898],{},[23,15899,15902],{"href":15900,"rel":15901},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F439",[101],"Generational ZGC",[1619,15904,15905,15907],{},[1634,15906,14437],{},[1634,15908,15909],{},[23,15910,15912],{"href":14442,"rel":15911},[101],"Record Patterns",[1619,15914,15915,15917],{},[1634,15916,14448],{},[1634,15918,15919],{},[23,15920,15922],{"href":14453,"rel":15921},[101],"Pattern Matching for switch",[1619,15924,15925,15928],{},[1634,15926,15927],{},"442:",[1634,15929,15930],{},[23,15931,15934],{"href":15932,"rel":15933},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F442",[101],"Foreign Function and Memory API (Third Preview)",[1619,15936,15937,15939],{},[1634,15938,14459],{},[1634,15940,15941],{},[23,15942,15944],{"href":14464,"rel":15943},[101],"Unnamed Patterns and Variables (Preview)",[1619,15946,15947,15949],{},[1634,15948,14470],{},[1634,15950,15951],{},[23,15952,14246],{"href":14475,"rel":15953},[101],[1619,15955,15956,15958],{},[1634,15957,14481],{},[1634,15959,15960],{},[23,15961,15963],{"href":14486,"rel":15962},[101],"Unnamed Classes and Instance Main Methods (Preview)",[1619,15965,15966,15968],{},[1634,15967,14492],{},[1634,15969,15970],{},[23,15971,15973],{"href":14497,"rel":15972},[101],"Scoped Values (Preview)",[1619,15975,15976,15979],{},[1634,15977,15978],{},"448:",[1634,15980,15981],{},[23,15982,15985],{"href":15983,"rel":15984},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F448",[101],"Vector API (Sixth Incubator)",[1619,15987,15988,15991],{},[1634,15989,15990],{},"449:",[1634,15992,15993],{},[23,15994,15997],{"href":15995,"rel":15996},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F449",[101],"Deprecate the Windows 32-bit x86 Port for Removal",[1619,15999,16000,16003],{},[1634,16001,16002],{},"451:",[1634,16004,16005],{},[23,16006,16009],{"href":16007,"rel":16008},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F451",[101],"Prepare to Disallow the Dynamic Loading of Agents",[1619,16011,16012,16015],{},[1634,16013,16014],{},"452:",[1634,16016,16017],{},[23,16018,16021],{"href":16019,"rel":16020},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F452",[101],"Key Encapsulation Mechnaism API",[1619,16023,16024,16026],{},[1634,16025,14503],{},[1634,16027,16028],{},[23,16029,16031],{"href":14508,"rel":16030},[101],"Structured Concurrency (Preview)",[16,16033,16034,16035,16039],{},"If you're interested in hearing my thoughts on this, we will cover the release on ",[23,16036,93],{"href":16037,"rel":16038},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=TAliLDYe20M",[101]," this week. Additionally, I hope to release a few videos on the YouTube channel over the next few weeks.",[16,16041,16042],{},"This is an exciting development for the Java community. As a Spring Developer, I'm particularly enthusiastic about Virtual Threads and how they offer a new way to scale Spring MVC applications.",[28,16044,14540],{"id":14539},[16,16046,16047,16048,16052,16053,16057],{},"Last week I created a tutorial on the new JDBC Client in Spring Framework. Spring Boot 3.2 will add auto-configuration for the new client that is being released in Spring Framework 6.1. This is a follow up to my tutorial on the other new client, the ",[23,16049,13531],{"href":16050,"rel":16051},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F09\u002F08\u002Frest-client-first-look\u002F",[101],". If you want to learn more about it you can check out this ",[23,16054,6034],{"href":16055,"rel":16056},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F09\u002F11\u002Fspring-jdbc-client\u002F",[101]," or the video below.",[47,16059],{"id":14550},[16,16061,16062],{},"And here are the 3 shorts I created for the JDBC Client tutorial:",[1271,16064,16065,16072,16079],{},[1274,16066,16067],{},[23,16068,16071],{"href":16069,"rel":16070},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FSv0-b5rsw08?feature=share",[101],"JDBC Template vs JDBC Client",[1274,16073,16074],{},[23,16075,16078],{"href":16076,"rel":16077},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002F66O-PSw25fU?feature=share",[101],"JDBC Client First Impressions",[1274,16080,16081],{},[23,16082,16085],{"href":16083,"rel":16084},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FIYi2hHpO9W8?feature=share",[101],"Working with JDBC in Java and Spring",[28,16087,15715],{"id":16088},"spring-boot-actuator",[16,16090,16091],{},"I started off this particular piece of content by asking Spring Boot Developers what the #1 Spring Boot Starter is that should be included in every single application. There really is no right answer and it’s purely an opinion but I believe it is the Spring Boot Actuator.",[16,16093,16094],{},"The Spring Boot Actuator gives us a number of features that help us move our applications to production. In this tutorial I take a look at what you get out of the box with the Actuator and what you can do to customize it. I also take a look at how you can customize the info endpoint and create your own to provide whatever data you need to other applications.",[16,16096,16097,16098,16057],{},"If you’re interested you can check out this ",[23,16099,6034],{"href":16100,"rel":16101},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F09\u002F17\u002Fspring-boot-actuator\u002F",[101],[47,16103],{"id":16104},"4OVe0MWgZ4k",[16,16106,16107],{},"As I talked about last week I’m trying to create shorts related to each of my long form videos. Here are the 3 shorts I created for the Spring Boot Actuator tutorial:",[1271,16109,16110,16117,16124],{},[1274,16111,16112],{},[23,16113,16116],{"href":16114,"rel":16115},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002F1otiGkwk76s?feature=share",[101],"The #1 Spring Boot Starter",[1274,16118,16119],{},[23,16120,16123],{"href":16121,"rel":16122},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FPLuqBHzciT4?feature=share",[101],"Spring Boot Actuator helps us move to production",[1274,16125,16126],{},[23,16127,16130],{"href":16128,"rel":16129},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FLCqIQ5YorgI?feature=share",[101],"Create a new app with Spring Boot Actuator",[28,16132,15385],{"id":15384},[16,16134,15388],{},[16,16136,15391],{},[16,16138,15394,16139,184],{},[23,16140,15399],{"href":15397,"rel":16141},[101],[28,16143,11191],{"id":10953},[33,16145,11453],{"id":11452},[16,16147,16148],{},"I really enjoyed this article by Chris Seaton on the 10 things to do with GraalVM. You have probably heard of by GraalVM by now but maybe you aren’t quite sure what the use cases are. Chris has you covered as he walks through 10 things you can do with GraalVM.",[16,16150,16151,16152,184],{},"Java 21 will be released tomorrow and I can’t think of a better way to catch up on all the new features than by reading ",[23,16153,16156],{"href":16154,"rel":16155},"https:\u002F\u002Fblogs.oracle.com\u002Fjavamagazine\u002Fpost\u002Fjava-inside-21-features",[101],"Nicolai Parlog’s Inside article",[33,16158,11465],{"id":30},[16,16160,16161,16162,16167],{},"Speaking of Java 21 there is going to be an ",[23,16163,16166],{"href":16164,"rel":16165},"https:\u002F\u002Fdev.java\u002Fcommunity\u002Fjava-21-launch\u002F",[101],"8 hour live stream release party"," by our friends at Oracle. That is right, 8 hours of everything Java 21 and I can’t wait to check this out. If you want to learn all about Java 21 you need to check this out.",[33,16169,13650],{"id":973},[16,16171,16172,16173,184],{},"I really love to learn and one of my main sources for learning is through podcasts. I love to listen to software and business related podcasts but my feed is becoming pretty stale and I need some new podcasts to listen to. If you have some favorites in these areas or any other ones you find interesting please tell me about them. You can reply to this email or reach out to me on ",[23,16174,183],{"href":181,"rel":16175},[101],[33,16177,12149],{"id":12148},[16,16179,16180],{},"“The truth is that stress doesn’t come from your boss, your kids, your spouse, traffic jams, health challenges, or other circumstances. It comes from your thoughts about your circumstances.”",[16,16182,16183],{},[161,16184,16185],{},"―Andrew Bernstein",[33,16187,12488],{"id":2235},[16,16189,16190],{},"Java is so cool that the most popular YouTuber on the planet is hiring Java developers.",[16,16192,16193],{},[23,16194,16195],{"href":16195,"rel":16196},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1702763200557560217",[101],[28,16198,172],{"id":171},[16,16200,11327,16201,11333],{},[23,16202,11332],{"href":11330,"rel":16203},[101],[16,16205,9630,16206,191,16208,16210,16212,16214],{},[189,16207],{},[189,16209],{},[23,16211,11491],{"href":11490},[189,16213],{},[23,16215,198],{"href":198,"rel":16216},[101],{"title":200,"searchDepth":201,"depth":201,"links":16218},[16219,16220,16221,16222,16223,16230],{"id":15844,"depth":201,"text":15845},{"id":14539,"depth":201,"text":14540},{"id":16088,"depth":201,"text":15715},{"id":15384,"depth":201,"text":15385},{"id":10953,"depth":201,"text":11191,"children":16224},[16225,16226,16227,16228,16229],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":16232,"path":16233,"title":16234,"description":16235,"meta":16236,"body":16239},"newsletter\u002Fnewsletter\u002F2023\u002F09\u002F08\u002Fspring-framework-new-rest-client.md","\u002Fnewsletter\u002F2023\u002F09\u002F08\u002Fspring-framework-new-rest-client","Spring Framework’s new Rest Client, GraphQL in Nuxt and SpringOne videos are now available","Happy Monday and welcome to another edition of the newsletter. This week, I'm heading out to Seattle to meet with a customer and discuss GraphQL, one of my favorite topics. I feel grateful for the opportunity to do what I love every day!",{"slug":16237,"date":16238},"spring-framework-new-rest-client","2023-09-08T07:00:00.000Z",{"type":13,"value":16240,"toc":16419},[16241,16243,16246,16249,16253,16260,16262,16265,16274,16297,16301,16304,16307,16311,16314,16317,16321,16330,16346,16349,16356,16358,16360,16368,16370,16377,16379,16388,16390,16393,16399,16401,16406],[16,16242,16235],{},[16,16244,16245],{},"Before we dive in, I'm excited to announce that I'll be speaking at ConnectTech on October 24-26 in Atlanta. As a huge fan of frontend technology and building for the web, I can't wait to share my real-world experience of building a Nuxt application powered by Notion. If you're attending, please let me know and come say hi 👋🏻. With an amazing lineup of speakers, I'm just as excited to be an attendee as I am to speak.",[16,16247,16248],{},"In this edition of the newsletter I want to talk to you about the new Rest Client in Spring Boot 3.2, working with GraphQL in Nuxt and SpringOne videos are now available on YouTube.",[28,16250,16252],{"id":16251},"spring-frameworks-new-rest-client","Spring Framework’s new Rest Client",[16,16254,16255,16256,16259],{},"Last week I worked on a ",[23,16257,6034],{"href":16050,"rel":16258},[101]," and a video around Spring Framework’s new Rest Client coming in Spring Boot 3.2. What I really enjoy about this new Rest Client is that it works in a Spring MVC app, the fluent API and the simplicity \u002F readability of the resulting code.",[47,16261],{"id":14536},[16,16263,16264],{},"I’m also going to be experimenting with creating multiple YouTube shorts for each of my long form videos to hopefully drive more viewers to the tutorial. This didn’t make a lot of sense in the past because there was no way you could connect a short to a long form video. YouTube rolled out a new feature that allows you to set the related video for a short.",[16,16266,16267,16268,16273],{},"I could create these shorts by hand but one of my favorite services around, ",[23,16269,16272],{"href":16270,"rel":16271},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F31\u002Fvideotap\u002F",[101],"VideoTap"," added this in a recent update. It will automatically create shorts for me or I can go in and select the portion of the video I want to clip and then customize it. This is going to save me a ton of time and I am really excited to utilize this feature. Here are the 3 shorts I clipped from the long form tutorial.",[1271,16275,16276,16283,16290],{},[1274,16277,16278],{},[23,16279,16282],{"href":16280,"rel":16281},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FowD-bIeOYcY",[101],"Spring Rest Client First Look",[1274,16284,16285],{},[23,16286,16289],{"href":16287,"rel":16288},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FjgR9PxeY1mU",[101],"Http Interfaces in Spring using the new Rest Client",[1274,16291,16292],{},[23,16293,16296],{"href":16294,"rel":16295},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FyBUskJd0Qww",[101],"What is a “Client” in Spring?",[28,16298,16300],{"id":16299},"nuxt-graphql-client-spring-for-graphql","Nuxt GraphQL Client + Spring for GraphQL",[16,16302,16303],{},"I work a lot with GraphQL on the server using Spring for GraphQL. I often get questions on how to consume those APIs on the frontend so I thought I would take some time to address this last week. I put together a quick tutorial on using Nuxt + Nuxt GraphQL Client Module to call a GraphQL API written in Java and Spring.",[47,16305],{"id":16306},"GzB-pL7gJcc",[28,16308,16310],{"id":16309},"reading-yaml-in-spring-with-jackson","Reading YAML in Spring with Jackson",[16,16312,16313],{},"We all know how great Jackson is for working with JSON data in Java. Did you know that you can also use it to read in YAML? In this tutorial I give you a quick example of how and why you might want to do this.",[47,16315],{"id":16316},"zy8slvenGxc",[28,16318,16320],{"id":16319},"vmware-explore","VMware Explore",[16,16322,16323,16324,16329],{},"All of the videos for SpringOne are now on the ",[23,16325,16328],{"href":16326,"rel":16327},"https:\u002F\u002Fwww.youtube.com\u002F@SpringSourceDev\u002F",[101],"SpringDeveloper YouTube Channel",". I was at the conference and I didn’t get to catch the sessions I wanted to see because there were so many. I started binging some of the sessions already and they are pure gold. If you want to catch my sessions, 2 of the 3 were recorded and you can find them below",[1271,16331,16332,16339],{},[1274,16333,16334],{},[23,16335,16338],{"href":16336,"rel":16337},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=8LCy662fIHA",[101],"Spring Recipes",[1274,16340,16341],{},[23,16342,16345],{"href":16343,"rel":16344},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=xprZxH8p0Pg",[101],"Does your API Need a REST? Check out GraphQL",[28,16347,15366],{"id":16348},"connect-tech",[16,16350,16351,16352,16355],{},"I’m happy to announce that will be speaking at ",[23,16353,15366],{"href":15364,"rel":16354},[101]," in Atlanta next month. This is my first time attending or speaking at this conference but I have heard nothing but great things about it. The list of speakers looks amazing as well so while I am excited to speak and equally as excited to be an attendee.",[28,16357,11191],{"id":10953},[33,16359,11453],{"id":11452},[16,16361,16362,16363,16367],{},"Java 21 is set to be released next week and it’s packed full of features. In ",[23,16364,10979],{"href":16365,"rel":16366},"https:\u002F\u002Fblogs.oracle.com\u002Fjavamagazine\u002Fpost\u002Fjava-21-sneak-peek?source=:so:tw:or:awr:jav:::&SC=:so:tw:or:awr:jav:::&pcode=",[101]," Mohamed Taman gives a sneak peak at what to expect.",[33,16369,11465],{"id":30},[16,16371,350,16372,16376],{},[23,16373,9888],{"href":16374,"rel":16375},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1g_wuincUdU",[101]," the great Craig Walls talks about the new experimental Spring AI Project. I thought this was a great example of how to get started with the project and how to take advantage of AI capabilities in your Spring Applications.",[33,16378,13650],{"id":973},[16,16380,16381,16382,16387],{},"I’m really enjoying the Working Code Podcast with Adam, Tim Carol and Ben. In the ",[23,16383,16386],{"href":16384,"rel":16385},"https:\u002F\u002Fworkingcode.dev\u002Fepisodes\u002F143-moving-on-rewriting-replatforming\u002F",[101],"latest episode"," they discussed moving on, rewriting and replatforming.",[33,16389,12488],{"id":2235},[16,16391,16392],{},"Victory Monday!",[16,16394,16395],{},[23,16396,16397],{"href":16397,"rel":16398},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1700205200919679193",[101],[28,16400,172],{"id":171},[16,16402,11327,16403,11333],{},[23,16404,11332],{"href":11330,"rel":16405},[101],[16,16407,9630,16408,191,16410,16412,16414,16416],{},[189,16409],{},[189,16411],{},[23,16413,11491],{"href":11490},[189,16415],{},[23,16417,198],{"href":198,"rel":16418},[101],{"title":200,"searchDepth":201,"depth":201,"links":16420},[16421,16422,16423,16424,16425,16426,16432],{"id":16251,"depth":201,"text":16252},{"id":16299,"depth":201,"text":16300},{"id":16309,"depth":201,"text":16310},{"id":16319,"depth":201,"text":16320},{"id":16348,"depth":201,"text":15366},{"id":10953,"depth":201,"text":11191,"children":16427},[16428,16429,16430,16431],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":16434,"path":16435,"title":16436,"description":16437,"meta":16438,"body":16441},"newsletter\u002Fnewsletter\u002F2023\u002F09\u002F04\u002Fworking-with-json-spring.md","\u002Fnewsletter\u002F2023\u002F09\u002F04\u002Fworking-with-json-spring","Working with JSON in Spring & VMware Explore Recordings","Happy Monday and welcome to another edition of the newsletter. It's Labor Day here in the United States, which marks the unofficial end of summer. It's always bittersweet for me. On one hand, it means the end of my favorite time here in the Midwest. I love being outside, grilling, having pool parties, and going for morning runs in my neighborhood. While those won't completely go away yet, they are coming to an end. On the other side of the holiday is fall, football, and the kids are back in school. To get me through the end of summer let me know what some of your favorite fall traditions are.",{"slug":16439,"date":16440},"working-with-json-spring","2023-09-04T07:00:00.000Z",{"type":13,"value":16442,"toc":16606},[16443,16445,16448,16452,16455,16458,16461,16464,16468,16477,16493,16498,16501,16505,16508,16514,16523,16525,16527,16541,16543,16562,16564,16573,16577,16586,16588,16593],[16,16444,16437],{},[16,16446,16447],{},"In this week's newsletter, we're going to talk about working with JSON in Java and Spring.",[28,16449,16451],{"id":16450},"json-in-spring","JSON in Spring",[16,16453,16454],{},"Last week, I spent some time exploring how to work with JSON in Spring applications. I was inspired to dig into this topic by my desire to create a demo GraphQL API for a video project. I wanted to use real-world data for this API and decided to extract it from my personal blog, which uses GraphQL.",[16,16456,16457],{},"I wrote a query to extract the data, which resulted in some JSON data. However, the format of this data was not suitable for importing into my new application. To address this issue, I went down the rabbit hole of reading JSON files in Spring and exploring the various options available for mapping this data to the types used in my application.",[47,16459],{"id":16460},"EumLbf8WjnY",[47,16462],{"id":16463},"cw0TfpcUkao",[28,16465,16467],{"id":16466},"vmware-explore-recordings","VMware Explore Recordings",[16,16469,16470,16471,16476],{},"In last week's newsletter, I talked about my trip to Las Vegas for SpringOne. This week, I'm happy to share the news that all of the breakout sessions have been uploaded to the ",[23,16472,16475],{"href":16473,"rel":16474},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fvideo-library\u002Fvideo-landing.html",[101],"VMware Explore Library",". To access the sessions, simply create a free account and log in. Two out of the three sessions I gave were recorded, and you can check them out below.",[1271,16478,16479,16486],{},[1274,16480,16481,184],{},[23,16482,16485],{"href":16483,"rel":16484},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fvideo-library\u002Fvideo-landing.html?sessionid=1681495955926001D6RA&videoId=6335272726112",[101],"Does your API need a REST, checkout GraphQL",[1274,16487,16488],{},[23,16489,16492],{"href":16490,"rel":16491},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fvideo-library\u002Fvideo-landing.html?sessionid=1680205167648001ZhTy&videoId=6335272438112",[101],"Spring Recipes: Common problems and Solutions",[16,16494,16495],{},[74,16496],{"alt":16475,"src":16497},"\u002Fimages\u002Fnewsletter\u002F2023\u002F09\u002F04\u002Fvmware_explore_library.png",[16,16499,16500],{},"I am still making my way through the recordings. I can’t believe how many great talks there are from both SpringOne and VMware Explore. If you were in attendance or had a chance to go through the library what are some of your must watch sessions?",[28,16502,16504],{"id":16503},"upcoming-content","Upcoming Content",[16,16506,16507],{},"I have been hard at working on cleaning up my backlog of video ideas and planning out what is next. I have a couple videos already recorded and I’m looking forward editing and publishing those soon. This week my plan is to record videos on the new client in Spring Boot 3.2.",[16,16509,16510],{},[74,16511],{"alt":16512,"src":16513},"Video Backlog","\u002Fimages\u002Fnewsletter\u002F2023\u002F09\u002F04\u002Fvideo_backlog.png",[16,16515,16516,16517,16522],{},"It’s hard to believe that I am starting to submit CFPs for next year. I submitted a bunch of talks to Code Mash, JFokus and I am working on my submissions for Devnexus. I spent some time last week updated my abstracts and you can ",[23,16518,16521],{"href":16519,"rel":16520},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fabstracts",[101],"check them out here",". As a reminder you can always reach out to me if you would like me to speak at your user group meeting, lunch and learn or conference.",[28,16524,11191],{"id":10953},[33,16526,11453],{"id":11452},[1271,16528,16529,16532],{},[1274,16530,16531],{},"In this article Jens Schauder discusses the beginning of the end of the N+1 problem. This article walks through the problem and then introductions Single Query loading which can help us solve the problem. Just don’t call it SQL 🤣",[1274,16533,16534,16535,16540],{},"In this ",[23,16536,16539],{"href":16537,"rel":16538},"https:\u002F\u002Fpiotrminkowski.com\u002F2023\u002F08\u002F29\u002Fintroduction-to-grpc-with-spring-boot\u002F",[101],"next article",", you will learn how to implement Spring Boot apps that communicate over gRPC. Piotr Minkowski shows us how to create a new project and a third party library that will help us support gRPC.",[33,16542,11465],{"id":30},[1271,16544,16545,16554],{},[1274,16546,16547,16548,16553],{},"The 2023 JVM Language Summit ",[23,16549,16552],{"href":16550,"rel":16551},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6nRS6UiN7X0&list=PLX8CzqL3ArzW90jKUCf4H6xCKpStxsOzp",[101],"replay records"," are now hosted on the Java YouTube channel.",[1274,16555,16556,16557,16561],{},"I really enjoyed this video from a former coworker Matt Eland. In ",[23,16558,9888],{"href":16559,"rel":16560},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=2ULkQcOW8Y8",[101]," Matt walks us through his first look at GitHub Copilot Chat.",[33,16563,13650],{"id":973},[16,16565,16566,16567,16572],{},"I discovered a new Podcast this week called ",[23,16568,16571],{"href":16569,"rel":16570},"https:\u002F\u002Fwww.devtools.fm\u002Fepisode\u002F63",[101],"devtools.f","m. The episode I listened to featured Daniel Roe, Nuxt Core team lead. I really enjoyed this conversation about Daniel’s career and all things Nuxt.",[33,16574,16576],{"id":16575},"projects","👨🏼‍💻 Projects",[16,16578,16579,16580,16585],{},"It looks like ",[23,16581,16584],{"href":16582,"rel":16583},"https:\u002F\u002Ftwitter.com\u002Fnuxt_js\u002Fstatus\u002F1696157897607061704",[101],"Nuxt Image is about to hit 1.0"," which is certainly exciting news.",[28,16587,172],{"id":171},[16,16589,11327,16590,11333],{},[23,16591,11332],{"href":11330,"rel":16592},[101],[16,16594,9630,16595,191,16597,16599,16601,16603],{},[189,16596],{},[189,16598],{},[23,16600,11491],{"href":11490},[189,16602],{},[23,16604,198],{"href":198,"rel":16605},[101],{"title":200,"searchDepth":201,"depth":201,"links":16607},[16608,16609,16610,16611,16617],{"id":16450,"depth":201,"text":16451},{"id":16466,"depth":201,"text":16467},{"id":16503,"depth":201,"text":16504},{"id":10953,"depth":201,"text":11191,"children":16612},[16613,16614,16615,16616],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":16576},{"id":171,"depth":201,"text":172},{"_id":16619,"path":16620,"title":16621,"description":16622,"meta":16623,"body":16626},"newsletter\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring-one-2023-recap.md","\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring-one-2023-recap","SpringOne 2023 Recap","Welcome to another edition of the newsletter! This is a special edition in which I will be recapping SpringOne and VMware Explore. If you've been following this newsletter, Twitter, or Spring Office Hours, you'll know that I had a busy few months leading up to SpringOne. As I write this on Sunday night, I can say that while it was one of the most amazing conferences I've ever had the opportunity to be a part of, it was also exhausting.",{"slug":16624,"date":16625},"spring-one-2023-recap","2023-08-28T07:00:00.000Z",{"type":13,"value":16627,"toc":16992},[16628,16630,16633,16639,16642,16645,16648,16651,16654,16657,16660,16663,16669,16673,16676,16682,16690,16693,16696,16703,16706,16712,16716,16719,16725,16729,16732,16738,16742,16745,16748,16752,16755,16759,16762,16767,16770,16773,16777,16780,16783,16794,16800,16808,16812,16815,16821,16825,16828,16831,16837,16840,16846,16849,16852,16858,16862,16865,16871,16875,16878,16884,16888,16891,16893,16896,16902,16905,16909,16912,16918,16924,16928,16931,16937,16941,16944,16950,16953,16957,16960,16966,16969,16972,16974,16979],[16,16629,16622],{},[16,16631,16632],{},"This is the first year that we've combined SpringOne and VMware Explore, and the first time we've been in person since 2019. VMware Explore was in person last year at the Moscone Center, and this year it moved to the Venetian Expo Center in Las Vegas. I'm a big fan of Vegas, and I thought it was a perfect setting for the conference, and the Venetian was an excellent host.",[16,16634,16635],{},[74,16636],{"alt":16637,"src":16638},"VMware Registration Desk","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fregistration.jpeg",[16,16640,16641],{},"I arrived late on Saturday night because I was originally going to be part of the keynote speech, and we had a dress rehearsal scheduled for Sunday morning. However, my flight was delayed, and I didn't arrive in Vegas until 1 AM local time. By the time I got to bed, it was already a little after 2 AM. I don't sleep well on planes, so I only managed to get around 5 hours of sleep.",[16,16643,16644],{},"Despite knowing that my part had been cut from the keynote, I still wanted to see everyone and support them in any way I could. I went down to meet the team for rehearsal. When I got registered for the conference, I was in awe of the check-in process. The sheer size of the conference began to sink in; with over 10,000 registrants, it was by far the biggest conference I had ever attended, let alone spoken at. Later that day, I had a chance to play golf with my friends Nate and Sharat at Top Golf Vegas, which was absolutely beautiful.",[16,16646,16647],{},"I went to bed early, feeling like a kid on Christmas Eve, excited for the day that was coming my way!",[28,16649,4968],{"id":16650},"springone",[16,16652,16653],{},"Due to being on East Coast time, I woke up a little after 5:00 AM, ready for the day. After having breakfast sent to my room, I did one last walkthrough of my two talks and prepared for the long day ahead.",[16,16655,16656],{},"The keynote started at 9:00 AM, so I arrived around 8:00 AM, 30 minutes before the doors would open. It was an amazing opportunity to finally meet in person so many people I work with but had never met before.",[16,16658,16659],{},"The keynote room held about 1,000 people, and at one point, I saw people standing on the sides and back of the room. The layout was awesome, with two big screens on the side of the stage and some amazing graphics lining the back wall.",[16,16661,16662],{},"The keynote kicked off with the emcees DaShaun and Tasha, who brought a ton of energy through the keynote. There were so many highlights of the keynote, and I didn't take a lot of notes, so this will be off of memory, which means if I left anything out, I apologize.",[16,16664,16665],{},[74,16666],{"alt":16667,"src":16668},"SpringOne Keynote","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspringone-keynote.jpeg",[33,16670,16672],{"id":16671},"springs-20-years-of-innovation","Spring’s 20 years of Innovation",[16,16674,16675],{},"The first speaker was Purnima Padmanabhan, who discussed Spring's 20 years of innovation. She emphasized how great the community is and how it has been the driving force behind Spring's growth. The impact of Spring is not just about technology, but also about improving human lives. Purnima provided examples of companies such as Netflix, FedEx, and Blue Cross Blue Shield that rely on Spring to power their applications.",[16,16677,16678],{},[74,16679],{"alt":16680,"src":16681},"Tasha and DaShaun introducing Purnima","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Ftasha_dashaun_purnima.png",[16,16683,16684,16685,184],{},"During her presentation, Purnima announced a new set of Spring Solutions, including Spring Consulting. This new service can help companies transition to the latest and greatest version for all of their Spring applications. For more information, see the ",[23,16686,16689],{"href":16687,"rel":16688},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fblog\u002Fspringone-2023-announcements",[101],"official blog post",[33,16691,14935],{"id":16692},"history-of-spring",[16,16694,16695],{},"I really enjoyed Josh Long and Dave Syer's presentation on the history of Spring. They walked us through how Spring has made application development easier over the years.",[16,16697,16698,16699,184],{},"They began with an application that used an old version of Spring and was based on XML. They then resurrected an old version of the Spring Initializr, which can be found at ",[23,16700,16701],{"href":16701,"rel":16702},"https:\u002F\u002Fstart100.spring.io\u002F",[101],[16,16704,16705],{},"They proceeded to show how Spring has simplified application development over the years. Spring Boot provides a way to bootstrap our applications and simplifies everything by removing XML. It also offers powerful features like dependency management and auto-configuration.",[16,16707,16708],{},[74,16709],{"alt":16710,"src":16711},"Dave Syer and Josh Long","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fjosh_dave.png",[33,16713,16715],{"id":16714},"spring-community-video","Spring Community Video",[16,16717,16718],{},"Several individuals from the Spring community shared amazing videos praising Spring for its impact on their careers. It was inspiring to hear from so many people, and I will share the video with the community as soon as I can get my hands on it.",[16,16720,16721],{},[74,16722],{"alt":16723,"src":16724},"Matt Raible","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fmatt_raible.png",[33,16726,16728],{"id":16727},"spring-virtual-threads","Spring + Virtual Threads",[16,16730,16731],{},"During the keynote, my coworker Cora discussed virtual threads in the context of Spring applications. I found her presentation to be an excellent representation of how virtual threads in JDK 21 can enhance performance for blocking applications. What's exciting is that you can easily take advantage of this feature by simply adjusting the settings in Spring Boot 3.2, which will be released later this year.",[16,16733,16734],{},[74,16735],{"alt":16736,"src":16737},"Cora’s Virtual Threads Presentation","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fcora.png",[33,16739,16741],{"id":16740},"scale-your-controllers-to-zero-with-serverless","Scale your @Controllers to Zero with Serverless",[16,16743,16744],{},"Oleg Zhurakousky and Mark Sailes gave a wonderful presentation on building Spring applications for AWS Lambda. In the past, you could build serverless functions in both Java and Spring using Spring Cloud Function. They reminded us about SnapStart, which can increase the performance of your Java functions up to 10 times.",[16,16746,16747],{},"Now, thanks to the collaboration between VMware and AWS, you can deploy your existing Spring MVC applications onto AWS Lambda. There are several scenarios where this makes sense, and they did a great job of explaining how it works.",[33,16749,16751],{"id":16750},"scale-to-zero-with-checkpoint-restore","Scale to Zero with Checkpoint Restore",[16,16753,16754],{},"Violeta Georgieva presented using Project CraC in Spring Applications during the session. This new approach enables scaling applications to zero, which reduces cloud spending and improves scalability for high availability under high loads. She did an excellent job of explaining the Checkpoint Restore process and demonstrated how it would work in Spring through a demo that showcased its performance benefits.",[33,16756,16758],{"id":16757},"leyla-seka","Leyla Seka",[16,16760,16761],{},"It's difficult to summarize Layla's talk in just a couple of sentences. I highly recommend taking 10 minutes to watch her presentation. During the talk, she shared how her parents instilled in her the importance of using her life to help others from an early age.",[16,16763,16764],{},[74,16765],{"alt":16758,"src":16766},"\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fleyla_seka.png",[16,16768,16769],{},"She joined Salesforce early on and enjoyed her time on the product team. However, she noticed that the men in the company were being paid more than her and knew that something was wrong. To address this issue, she led an initiative that included an equal pay audit. This helped to drive change throughout the tech industry.",[16,16771,16772],{},"After leaving Salesforce, she started a venture capital firm for women and BLCK VC to bring more black entrepreneurs into the investing ecosystem. Her story is truly inspiring, and I encourage you to watch her presentation. Thank you, Leyla!",[33,16774,16776],{"id":16775},"spring-unlocks-the-power-of-platforms","Spring unlocks the power of platforms",[16,16778,16779],{},"Adib Saikali and Asir Selvasingh took the stage to talk about platforms and started with the phrase \"You can count on Spring to unlock the power of Platforms\". No application is an island and they depend on many services to run. With so many services available, how do you know which ones to choose and how to combine them all?",[16,16781,16782],{},"There are three app-aware platforms for Spring Applications that you should be aware of:",[1271,16784,16785,16788,16791],{},[1274,16786,16787],{},"VMware Tanzu Application Service",[1274,16789,16790],{},"VMware Tanzu Application Platform",[1274,16792,16793],{},"Azure Spring Apps Enterprise",[16,16795,16796],{},[74,16797],{"alt":16798,"src":16799},"The power of platforms","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fplatforms.png",[16,16801,16802,16803,16807],{},"The presenters walked through an example application and discussed adding AI to it towards the end. If you want to add AI to your Spring-powered applications today, you could start from scratch and develop your own solution. However, this approach is not very efficient. Instead, you can take advantage of a new experimental project called ",[23,16804,8203],{"href":16805,"rel":16806},"https:\u002F\u002Fgithub.com\u002Fspring-projects-experimental\u002Fspring-ai",[101],", which was announced during the presentation. It was impressive to see how easily we could incorporate AI features into our applications.",[33,16809,16811],{"id":16810},"keynote-video-replay","Keynote Video Replay",[16,16813,16814],{},"If you want to watch a replay of the keynote you can do so by visiting the SpringOne conference website below. After you have had a chance to go through it please reach out and let me know what stood out for you.",[16,16816,16817],{},[23,16818,16819],{"href":16819,"rel":16820},"https:\u002F\u002Fspringone.io\u002F",[101],[33,16822,16824],{"id":16823},"graphql","GraphQL",[16,16826,16827],{},"That keynote was amazing but I had no time to soak it in because my first talk of the conference was right after it. I quickly made my way to my session and got setup for my talk titled “Does your API need a REST, check out GraphQL”.",[16,16829,16830],{},"The room was packed with standing room only and I was really excited for this talk. I have been talking about GraphQL for the past couple of years but this was an updated talk packed full of content. I only had 40 minutes and tried to pack in about an hours worth of content into this time slot. I thought the talk went really well but my only criticism of the talk was that it was a lot to take in.",[16,16832,16833],{},[74,16834],{"alt":16835,"src":16836},"GraphQL Talk","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fgraphql_talk.png",[16,16838,16839],{},"If you were at the conference there is a way to watch the replay. I don’t know if this is going to be public but if it is I will be sure to share the link. If it isn’t and you’re interested in seeing this let me know and I can record it for my YouTube channel.",[16,16841,16842],{},[74,16843],{"alt":16844,"src":16845},"GraphQL in Action","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fgraphql_in_action.png",[33,16847,16338],{"id":16848},"spring-recipes",[16,16850,16851],{},"Later in the afternoon Nate Schutta and I presented on Spring Recipes. This is our take on raising awareness of the different projects in the Spring ecosystem. We start off by defining a problem and then walk through a solution and how Spring can solve it. This talk was 70 minutes and honestly it was so much fun sharing the stage with my good friend Nate. We had a lot of really good questions from the audience and I think this talk was a big hit.",[16,16853,16854],{},[74,16855],{"alt":16856,"src":16857},"Spring Recipes in Action","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring_recipes_in_action.png",[33,16859,16861],{"id":16860},"welcome-reception","Welcome Reception",[16,16863,16864],{},"On Monday night, there was a welcome reception in the main expo hall where all the booths were set up. I was working at the Spring portion of the VMware Booth and had the opportunity to talk to many people about the great things we are doing with Spring. To my surprise, our CEO Raghu Raghuram stopped by the booth, and we had a conversation about the morning's keynote and what was on attendees' minds. It was a conversation that I will remember for the rest of my life. Seeing his enthusiasm for what we were doing and being able to share that with him was a great way to cap off Day 1!",[16,16866,16867],{},[74,16868],{"alt":16869,"src":16870},"Raghu Raghuram at VMware Explore","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fraghu.jpeg",[33,16872,16874],{"id":16873},"birthday","Birthday🤩",[16,16876,16877],{},"It was my Birthday and all I did was attend a keynote give 2 talks and work the booth, no big deal. Thank you to my friend Sharat for the Birthday shout out on Twitter",[16,16879,16880],{},[23,16881,16882],{"href":16882,"rel":16883},"https:\u002F\u002Ftwitter.com\u002FSharat_Chander\u002Fstatus\u002F1693754169747017991",[101],[28,16885,16887],{"id":16886},"vmware-exploreconclusion","VMware ExploreConclusion",[16,16889,16890],{},"I will now quickly run through the remaining parts of the conference, as otherwise this newsletter will take me another week to write. Unfortunately I didn’t get much of a chance to attend any of the general sessions because I was working the booth or catching up on other work.",[33,16892,93],{"id":92},[16,16894,16895],{},"We attempted a live version of Spring Office Hours, but unfortunately, we were unsuccessful. However, it was a valuable learning experience that reminded us of the importance of better preparation. The WiFi in the area was unreliable, which was our biggest obstacle. Additionally, we lacked the appropriate equipment. If we attempt this again, we will work on improving our setup to improve the quality of the broadcast.",[16,16897,16898],{},[74,16899],{"alt":16900,"src":16901},"Spring Office Hours Live","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring_office_hours_live.png",[16,16903,16904],{},"On today's show, we will provide a recap of SpringOne. Please join us live or catch the replay or podcast episode.",[33,16906,16908],{"id":16907},"springs-20th-anniversary-celebration","Spring’s 20th Anniversary Celebration",[16,16910,16911],{},"On Wednesday night, we had a 20th Anniversary Spring Celebration get-together, which was one of the highlights for me. It was great to be in a room with so many people who have impacted Spring and so many people from the community. Throughout the event, there were video montages of Spring Conference presentations over the last 20 years, which was really cool to see.",[16,16913,16914],{},[74,16915],{"alt":16916,"src":16917},"Spring’s 20 Anniversary Celebration","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring_20_event.jpeg",[16,16919,16920],{},[74,16921],{"alt":16922,"src":16923},"Dan, Purnima and DaShaun","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fdan_purnima_dashaun.png",[33,16925,16927],{"id":16926},"spring-for-architects","Spring for Architects",[16,16929,16930],{},"On Thursday afternoon, I had my final talk of the conference with my good friend Nate. The presentation focused on what architects of Spring applications should understand. It was held in the Hub area at the code theater, and I wasn't sure if anyone would attend. To my delight, not only did people attend, but the room was packed. It was a lot of fun, and I appreciate all the positive feedback we received.",[16,16932,16933],{},[74,16934],{"alt":16935,"src":16936},"Spring for Architects in Action","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring_architects_in_action.png",[33,16938,16940],{"id":16939},"spring-team-meeting-and-dinner","Spring Team Meeting and Dinner",[16,16942,16943],{},"To conclude the conference, I was invited to a Spring Team Meeting and dinner. During the meeting, we heard from our leadership about the current state of Spring and its future direction. While I cannot divulge too much from the meeting, I can say that I am excited and grateful to be part of such an amazing and talented group of people.",[16,16945,16946],{},[74,16947],{"alt":16948,"src":16949},"Spring Team Dinner","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Fspring_team_dinner.jpeg",[16,16951,16952],{},"After this dinner I caught a redeye flight home and spent the entire weekend recovering from the conference.",[28,16954,16956],{"id":16955},"conclusion","Conclusion",[16,16958,16959],{},"What I will remember most about this conference is the opportunity to hang out with so many amazing people. I had the chance to spend a lot of time with DaShaun, Nate, and Sharat. Sharat, who runs Developer Relations for Java at Oracle, is one of the best people in our community. It was great to see firsthand just how important it is to prioritize people and be kind to everyone. As my friend Sharat likes to say, \"Technology is about people first and technology second.”",[16,16961,16962],{},[74,16963],{"alt":16964,"src":16965},"LOVE","\u002Fimages\u002Fnewsletter\u002F2023\u002F08\u002F28\u002Flove.jpeg",[16,16967,16968],{},"I want to thank everyone who came up and said hello to me. I got so many great comments about Spring Office Hours or my YouTube channel and it really made me smile and remember why I do what I do.",[16,16970,16971],{},"Now that the conference is over I can get back to focusing on producing content, mainly YouTube. I haven’t posted a video in over a month and I have a long list of videos that I am excited to sit down and record. That is as soon as crawl out of the hole I’m about to get in to try and wrangle this expense report 🤣",[28,16973,172],{"id":171},[16,16975,11327,16976,11333],{},[23,16977,11332],{"href":11330,"rel":16978},[101],[16,16980,9630,16981,191,16983,16985,16987,16989],{},[189,16982],{},[189,16984],{},[23,16986,11491],{"href":11490},[189,16988],{},[23,16990,198],{"href":198,"rel":16991},[101],{"title":200,"searchDepth":201,"depth":201,"links":16993},[16994,17009,17015,17016],{"id":16650,"depth":201,"text":4968,"children":16995},[16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008],{"id":16671,"depth":206,"text":16672},{"id":16692,"depth":206,"text":14935},{"id":16714,"depth":206,"text":16715},{"id":16727,"depth":206,"text":16728},{"id":16740,"depth":206,"text":16741},{"id":16750,"depth":206,"text":16751},{"id":16757,"depth":206,"text":16758},{"id":16775,"depth":206,"text":16776},{"id":16810,"depth":206,"text":16811},{"id":16823,"depth":206,"text":16824},{"id":16848,"depth":206,"text":16338},{"id":16860,"depth":206,"text":16861},{"id":16873,"depth":206,"text":16874},{"id":16886,"depth":201,"text":16887,"children":17010},[17011,17012,17013,17014],{"id":92,"depth":206,"text":93},{"id":16907,"depth":206,"text":16908},{"id":16926,"depth":206,"text":16927},{"id":16939,"depth":206,"text":16940},{"id":16955,"depth":201,"text":16956},{"id":171,"depth":201,"text":172},{"_id":17018,"path":17019,"title":17020,"description":17021,"meta":17022,"body":17025},"newsletter\u002Fnewsletter\u002F2023\u002F07\u002F31\u002Fspring-one-announcement.md","\u002Fnewsletter\u002F2023\u002F07\u002F31\u002Fspring-one-announcement","What’s new in Spring, Getting Started with GraphQL and a HUGE announcement","Happy Monday and welcome to another edition of the newsletter! This will be my last week in the office before my family and I head off to San Destin, FL for a little vacation. I absolutely love the white water and amazing beaches there. I’m really looking forward to some rest and relaxation, as well as some golf!",{"slug":17023,"date":17024},"spring-one-announcement","2023-07-31T07:00:00.000Z",{"type":13,"value":17026,"toc":17161},[17027,17029,17037,17041,17060,17063,17066,17070,17073,17079,17083,17092,17097,17099,17102,17121,17123,17125,17130,17132,17135,17141,17143,17148],[16,17028,17021],{},[16,17030,17031,17032,17036],{},"This week, I want to catch up on what’s new in Spring, based on a conversation I had with DaShaun during ",[23,17033,93],{"href":17034,"rel":17035},"https:\u002F\u002Fspringofficehours.io\u002F",[101],". Additionally, I spent all of last week rewriting my slide deck for my GraphQL talk at SpringOne this year, so I’ll touch on some things that are top of mind with that. Finally, be sure to stick around until the end for a huge announcement.",[28,17038,17040],{"id":17039},"whats-new-in-spring","What’s new in Spring",[16,17042,17043,17044,529,17049,17054,17055,17059],{},"DaShaun and I were finally both home to record a new episode of Spring Office Hours. We noted at the beginning of the episode that we have both been traveling a lot for work lately. With some time between episodes, we thought it would be a good opportunity to catch up on all the news in the Spring Ecosystem. There were some big releases in ",[23,17045,17048],{"href":17046,"rel":17047},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F06\u002F15\u002Fspring-framework-6-1-m1-released",[101],"Spring Framework 6.1 M1",[23,17050,17053],{"href":17051,"rel":17052},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.2.0-M1-Release-Notes",[101],"Spring Boot 3.2 M1",". There has also been a lot of talk about the new ",[23,17056,585],{"href":17057,"rel":17058},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F07\u002F13\u002Fnew-in-spring-6-1-restclient",[101]," and Spring Cloud Gateway's support for MVC coming later this year.",[16,17061,17062],{},"It's an exciting time to be a Spring Developer! We have three more shows before we are in Vegas for SpringOne, and we plan on doing an episode live there. This is just a reminder that you can now find the podcast on all your favorite podcast networks. If you're enjoying the show, please do us a favor and leave a review.",[47,17064],{"id":17065},"eUKqjRV1zEE",[28,17067,17069],{"id":17068},"springone-at-vmware-explore","SpringOne at VMware Explore",[16,17071,17072],{},"Last week, I spent most of my time working on my slide deck for my GraphQL talk. Although I have given a similar talk about 20 times before, I felt that I had learned a lot over the past year. Therefore, I decided to start from scratch and incorporate what I had learned. I am pleased with the result and feel that the presentation flows well. Despite only having 40 minutes, I was able to pack a substantial amount of content into it.",[16,17074,17075],{},[74,17076],{"alt":17077,"src":17078},"spring-one-rest-presentation.png","\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F31\u002Fspring-one-rest-presentation.png",[33,17080,17082],{"id":17081},"huge-announcement","Huge Announcement",[16,17084,17085,17086,17091],{},"I can’t believe this is actually happening but yours truly will be on the main stage during this years keynote! I have a small part but couldn’t be more excited to join so many of my amazing colleagues on stage for what should be an amazing presentation. If you are going to SpringOne make sure you take advantage of the ",[23,17087,17090],{"href":17088,"rel":17089},"https:\u002F\u002Fevent.vmware.com\u002Fflow\u002Fvmware\u002Fexplore2023lv\u002Fcontent\u002Fpage\u002Fcatalog?search.sessiontype=1684866685619001w4UD&src=WWW_us_MRC_dqgsrvt1ho7td&cid=7012H000000wtgaQAA",[101],"scheduler"," and sign up for the talks you want to attend.",[16,17093,17094],{},[74,17095],{"alt":16667,"src":17096},"\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F31\u002Fspring-one-keynote.png",[28,17098,16504],{"id":16503},[16,17100,17101],{},"I have a list of videos I want to work on but we all have priorities and right now that’s SpringOne. If I have anytime I will try and get something out but it might be slow until the conference ends.",[1271,17103,17104,17113],{},[1274,17105,17106,17107,17112],{},"I’ll be joining ",[23,17108,17111],{"href":17109,"rel":17110},"https:\u002F\u002Ftwitter.com\u002FMarcoBehler\u002Fstatus\u002F1684858548235198464",[101],"Marco Behler"," on his YouTube channel this week for a live stream. We are going have a good conversation and build something in Spring and I am really looking forward to this.",[1274,17114,17115,17116,17120],{},"I’m excited to announce that on August 17th my friend and coworker Nate Schutta and I will be presenting ",[23,17117,17119],{"href":12845,"rel":17118},[101],"Spring Recipes on the O’Reilly Learning Platform",". If you’re on the platform I hope you can sign up and join us for a morning full of learning Spring!",[28,17122,11191],{"id":10953},[33,17124,11453],{"id":11452},[1271,17126,17127],{},[1274,17128,17129],{},"I really enjoyed this article by my colleague Nick Kuhn on extended Spring Runtime Support. If you’re running Spring Boot 2.7.x in production open source support will end this November. With VMware Spring Runtime support you can get peace of mind through our extended support.",[33,17131,12488],{"id":2235},[16,17133,17134],{},"This is a public service announcement to stop repeating patterns that make no sense.",[16,17136,17137],{},[23,17138,17139],{"href":17139,"rel":17140},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1684951821444435969",[101],[28,17142,172],{"id":171},[16,17144,11327,17145,11333],{},[23,17146,11332],{"href":11330,"rel":17147},[101],[16,17149,9630,17150,191,17152,17154,17156,17158],{},[189,17151],{},[189,17153],{},[23,17155,11491],{"href":11490},[189,17157],{},[23,17159,198],{"href":198,"rel":17160},[101],{"title":200,"searchDepth":201,"depth":201,"links":17162},[17163,17164,17167,17168,17172],{"id":17039,"depth":201,"text":17040},{"id":17068,"depth":201,"text":17069,"children":17165},[17166],{"id":17081,"depth":206,"text":17082},{"id":16503,"depth":201,"text":16504},{"id":10953,"depth":201,"text":11191,"children":17169},[17170,17171],{"id":11452,"depth":206,"text":11453},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":17174,"path":17175,"title":17176,"description":17177,"meta":17178,"body":17181},"newsletter\u002Fnewsletter\u002F2023\u002F07\u002F24\u002Fcontent-creation-cycle.md","\u002Fnewsletter\u002F2023\u002F07\u002F24\u002Fcontent-creation-cycle","The weekly content cycle of stress and Spring Recipes on the O’Reilly Learning Platform","Happy Monday and welcome to another edition of the newsletter. This week I want to talk to you about the current state of content creation for me, a couple of videos I worked on last week and a big announcement about SpringOne at VMware Explore!",{"slug":17179,"date":17180},"content-creation-cycle","2023-07-24T08:00:00.000Z",{"type":13,"value":17182,"toc":17494},[17183,17185,17194,17200,17204,17207,17210,17213,17216,17249,17252,17256,17265,17268,17271,17303,17308,17313,17316,17324,17327,17331,17336,17339,17342,17349,17353,17356,17359,17362,17365,17370,17373,17375,17378,17381,17385,17388,17392,17395,17398,17402,17405,17408,17411,17416,17422,17425,17433,17436,17439,17444,17446,17448,17458,17460,17468,17470,17473,17475,17480],[16,17184,17177],{},[16,17186,17187,17188,17193],{},"Last week I received the photos that were taken at KCDC and wow were these some great action shots. Thanks to the talented ",[23,17189,17192],{"href":17190,"rel":17191},"https:\u002F\u002Ftiffanybuckley.com\u002Faboutme",[101],"Tiffany Buckley"," for the pictures and capturing my session on Spring Boot 3 and Beyond!",[16,17195,17196],{},[74,17197],{"alt":17198,"src":17199},"KCDC Photos","\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F24\u002Fkcdc.png",[28,17201,17203],{"id":17202},"the-content-creation-machine","The Content Creation Machine",[16,17205,17206],{},"I want to take some time this week to discuss the current state of my content creation machine. I'm very fortunate to be where I am in my career and to love what I do every day. However, I also want to be open about the other side of content creation.",[16,17208,17209],{},"People often say that postal workers or couriers have stressful lives because their job never truly ends. Even if they work hard every week, the work just keeps piling up. While they may be rewarded for their hard work, that feeling of never being \"done\" must take a toll.",[16,17211,17212],{},"I have certainly felt this weight of never being done before, and it has been weighing on me even more lately. I'm a big believer in task lists and organizing both my personal and work life in lists. I use Notion for work to plan out my year, quarter, week, and days. I also use it to plan out what content I want to work on and use it to move from idea to production.",[16,17214,17215],{},"When it comes to content creation, there are several things I could be working on at any time:",[1271,17217,17218,17229,17232,17235,17238,17246],{},[1274,17219,17220,17221],{},"Code Demos (GitHub Repo)\n",[1271,17222,17223,17226],{},[1274,17224,17225],{},"A topic I'm learning about",[1274,17227,17228],{},"A README to explain what this repo is for",[1274,17230,17231],{},"Newsletter",[1274,17233,17234],{},"Video",[1274,17236,17237],{},"Blog Post",[1274,17239,17240,17241],{},"Presentation\n",[1271,17242,17243],{},[1274,17244,17245],{},"Customer \u002F Conference \u002F Training",[1274,17247,17248],{},"My Website",[16,17250,17251],{},"With so many mediums to work on, I need to establish a process for reusing the content I'm working on. Without such a process, I become scatterbrained and can't stop thinking about which of these mediums I'm neglecting and how to resolve that.",[33,17253,17255],{"id":17254},"content-reuse","Content Reuse",[16,17257,17258,17259,17264],{},"I realize that one of the reasons I get so stressed out is because I have too many projects and mediums to focus on. If I can simplify and focus on a single piece of content, it might take away some of my stress. Let's take the example of a project I plan to work on soon: creating content around the new and exciting Spring CLI project that ",[23,17260,17263],{"href":17261,"rel":17262},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fteam\u002Fmark-pollack\u002F",[101],"Mark Pollack"," is working on.",[16,17266,17267],{},"To start, I need to create a demo and understand the topic well enough to explain it to others. Once I have the code ready, I can create a GitHub repository to serve as a reference for this topic.",[16,17269,17270],{},"The repository's README is a great place to describe the tutorial and explain its purpose to anyone who comes across it. The README should include:",[1271,17272,17273,17291],{},[1274,17274,17275,17276],{},"About\n",[1271,17277,17278,17280],{},[1274,17279,1627],{},[1274,17281,17282,17283],{},"Description\n",[1271,17284,17285,17288],{},[1274,17286,17287],{},"Used for Blog Post Meta Data (Description)",[1274,17289,17290],{},"Used for YouTube Description",[1274,17292,17293,17294],{},"Links to (future)\n",[1271,17295,17296,17299,17301],{},[1274,17297,17298],{},"Blog post",[1274,17300,17234],{},[1274,17302,17231],{},[16,17304,17305],{},[161,17306,17307],{},"YouTube Tutorial",[16,17309,17310],{},[74,17311],{"alt":17312,"src":17312},"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1594394489098-74ac04c0fc2e?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb",[16,17314,17315],{},"Now that I have code and copy for the tutorial, I can proceed to create a video tutorial. Although I do not script my videos, I like to write out an agenda. Here are the items I plan to cover in the intro, tutorial, and outro. I want to be clear about what viewers will gain from this tutorial so they have a clear understanding of the outcome.",[16,17317,17318,17319,184],{},"I hit the record button and begin capturing my screen and A-roll footage to teach you about the topic at hand. In an effort to grab your attention in the thumbnail, I also record myself in silly poses. Once the footage is captured, it's time to move to the editing floor and create the best video I can with the time I have. In a perfect world, I would have the money to hire someone with more time and skill to work on these videos. Lately, I've had the feeling that my videos have been stale and even ",[23,17320,17323],{"href":17321,"rel":17322},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1681850663125303297",[101],"put out a tweet about it this week",[16,17325,17326],{},"After recording the video, I create a thumbnail and publish it on YouTube. Reusing the title and description we thought about earlier comes in handy, as I do not have to rewrite the same content.",[16,17328,17329],{},[161,17330,17237],{},[16,17332,17333],{},[74,17334],{"alt":17335,"src":17335},"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1499750310107-5fef28a66643?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb",[16,17337,17338],{},"When I first started blogging, it was easy to write for the blog since it was the only medium I had to focus on. However, with so many places to post content these days, it has become almost impossible for me to focus on writing new articles. Nevertheless, I have finally come to terms with this. I can express myself in written form through the newsletter, so writing articles is no longer an itch I need to scratch.",[16,17340,17341],{},"That being said, I still want to post articles. When I'm working on a new tutorial, like the Spring CLI one I'm currently working on, I still want to provide it in written form. Specifically, I want an article that gets picked up by search engines when people search for answers to their questions. When someone lands on this search result, I want to provide the video I have already worked on and include some form of the video in written form.",[16,17343,17344,17345,17348],{},"I previously tried posting the transcript from the video on the blog, but it did not work out well. Therefore, I now use an amazing service called ",[23,17346,16272],{"href":16270,"rel":17347},[101]," that helps me turn a video into a blog post, and it works really well.",[16,17350,17351],{},[161,17352,17231],{},[16,17354,17355],{},"Every week, I put together a newsletter that allows me to write without worrying about analytics. I don't care if it shows up in search rankings or how many views it gets. I write because I enjoy it.",[16,17357,17358],{},"At least, that's what I told myself when I started. These days, however, I have to wonder if I'm spending my time wisely. While I add notes to my newsletter throughout the week, I also end up spending a few hours on my only free weekend day, Sunday, to finish it, as I'm doing right now.",[16,17360,17361],{},"Now that I've put pressure on myself to deliver this newsletter each week, I want to see a reward for my hard work. Although my open rate is okay and there are ways to increase subscribers, I have to question if it's worth my time and effort to focus on these things.",[16,17363,17364],{},"The other part of this process is something that has been bothering me for awhile. Currently I write this newsletter in Notion and then export it to markdown. I pull that into my website and then fix up images, YouTube videos and more to fit within the framework of my site. After that has been pushed to production I need to export the markdown from Notion to ConvertKit which is the tool I use to send out this newsletter. I really need to find a way streamline this process and I think that will make it feel less like a chore.",[16,17366,17367],{},[161,17368,17369],{},"Presentations",[16,17371,17372],{},"The combination of all the content above are the building blocks for my presentations. These are talks that I turn into for customers, conferences and workshops.",[33,17374,16956],{"id":16955},[16,17376,17377],{},"I'm not sure if anyone will find this useful, but I wanted to get it all out. I love what I do every single day, but that doesn't mean it's stress-free. Without a plan, things will continue to be overwhelming. So, I'm trying to make some adjustments. I'll treat each new topic as a project, and each project will have a number of content pieces to create. Once I finish a project, I can move on to a new one instead of being stuck in a never-ending cycle of stressful content creation.",[16,17379,17380],{},"I also realize that I am a problem solver, and I need to spend some time solving the problems in my workflow. Doing so will save me time and reduce stress.",[28,17382,17384],{"id":17383},"new-content","New Content",[16,17386,17387],{},"Speaking of content here are a couple of videos I worked on last week:",[33,17389,17391],{"id":17390},"pgadmin-spring-boot-docker-compose-module","pgAdmin Spring Boot Docker Compose Module",[16,17393,17394],{},"Are you tired of dealing with complex development environments? Look no further than this beginner-friendly tutorial on streamlining your development process with Spring Boot, PostgreSQL, and pgAdmin in Docker. I'll walk you through the steps to set up your environment using Docker Compose, so you can focus on writing code instead of worrying about infrastructure. Join me and discover how to build and deploy faster with this efficient and easy-to-use setup.",[47,17396],{"id":17397},"XDlgWyVfSMA",[33,17399,17401],{"id":17400},"graphql-pagination-support-in-spring-for-graphql","GraphQL Pagination Support in Spring for GraphQL",[16,17403,17404],{},"In this tutorial you are going to learn how to perform pagination in Spring for GraphQL using the cursor connection specification. You will start by building out a GraphQL API and then we will look at when you might want to introduce paging.",[47,17406],{"id":17407},"3YTSh8vJ8eY",[28,17409,17119],{"id":17410},"spring-recipes-on-the-oreilly-learning-platform",[16,17412,17115,17413,17120],{},[23,17414,17119],{"href":12845,"rel":17415},[101],[16,17417,17418],{},[74,17419],{"alt":17420,"src":17421},"SPring Recipes","\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F24\u002Fspring-recipes-olp.png",[28,17423,17424],{"id":17068},"SpringOne at VMWare Explore",[16,17426,17427,17428,17432],{},"SpringOne at VMware Explore is coming up and I couldn't be more excited for this conference! The ",[23,17429,102],{"href":17430,"rel":17431},"https:\u002F\u002Fspringone.io\u002Fschedule",[101]," was just released, and I can finally discuss everything that I am working on for it.",[16,17434,17435],{},"I have three talks scheduled, and I will also be working the booth throughout the week. Make sure to stop by and say hi! On day one, I will be giving a talk on Spring for GraphQL, and later that day, I'll be giving another talk with my good friend Nate Schutta on Spring Recipes. On day four, I will also be joining Nate to discuss Spring for Architects.",[16,17437,17438],{},"We are also planning a 5k run, so if you're interested in running with us, stay tuned for more information. Additionally, we are working on a live session of Spring Office Hours. It's going to be an exciting conference, and I can't wait to see all of you there. If you haven't registered yet, please do so now and join me and all of my friends for what is sure to be the conference of the year!",[16,17440,17441],{},[23,17442,16819],{"href":16819,"rel":17443},[101],[28,17445,11191],{"id":10953},[33,17447,11453],{"id":11452},[16,17449,17450,17451,17454,17455,184],{},"I really enjoyed this article by Brian Vermeer on How to do password hashing in Java applications the right way. There was a nice example of using the ",[469,17452,17453],{},"spring-security-crypto"," dependency and using the ",[469,17456,17457],{},"Argon2PasswordEncoder",[33,17459,16576],{"id":16575},[16,17461,17462,17467],{},[23,17463,17466],{"href":17464,"rel":17465},"https:\u002F\u002Fin.relation.to\u002F2023\u002F07\u002F20\u002Form-63cr1\u002F",[101],"Hibernate 6.3 CR1"," now supports query methods.",[33,17469,12149],{"id":12148},[16,17471,17472],{},"Peace is the result of retraining your mind to process life as it is rather than as you think it should be. – Dr. Wayne W. Dyer",[28,17474,172],{"id":171},[16,17476,11327,17477,11333],{},[23,17478,11332],{"href":11330,"rel":17479},[101],[16,17481,9630,17482,191,17484,17486,17488,17490,17493],{},[189,17483],{},[189,17485],{},[23,17487,11491],{"href":11490},[189,17489],{},[23,17491,198],{"href":198,"rel":17492},[101],"\u003C",{"title":200,"searchDepth":201,"depth":201,"links":17495},[17496,17500,17504,17505,17506,17511],{"id":17202,"depth":201,"text":17203,"children":17497},[17498,17499],{"id":17254,"depth":206,"text":17255},{"id":16955,"depth":206,"text":16956},{"id":17383,"depth":201,"text":17384,"children":17501},[17502,17503],{"id":17390,"depth":206,"text":17391},{"id":17400,"depth":206,"text":17401},{"id":17410,"depth":201,"text":17119},{"id":17068,"depth":201,"text":17424},{"id":10953,"depth":201,"text":11191,"children":17507},[17508,17509,17510],{"id":11452,"depth":206,"text":11453},{"id":16575,"depth":206,"text":16576},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":17513,"path":17514,"title":17515,"description":17516,"meta":17517,"body":17520},"newsletter\u002Fnewsletter\u002F2023\u002F07\u002F17\u002Fspring-one-tour-austin.md","\u002Fnewsletter\u002F2023\u002F07\u002F17\u002Fspring-one-tour-austin","Hello Austin, Spring for GraphQL and the schedule for SpringOne is now live!","Happy Monday and welcome to another edition of the newsletter! In this issue, I'll share my quick trip to Austin, new features in Spring for GraphQL, and updates about SpringOne at VMware Explore.",{"slug":17518,"date":17519},"spring-one-tour-austin","2023-07-17T08:00:00.000Z",{"type":13,"value":17521,"toc":17637},[17522,17524,17527,17530,17536,17542,17546,17549,17552,17559,17561,17566,17568,17570,17575,17577,17579,17589,17591,17601,17603,17606,17608,17611,17617,17619,17624],[16,17523,17516],{},[16,17525,17526],{},"Last week, I visited Austin, TX for a SpringOne Tour stop at a customer's location. As I started packing for the trip, I realized it was going to be 100 degrees all week. Though I packed some clothes to run with, it was still too hot even at 6 AM 🥵.",[16,17528,17529],{},"We had a great team dinner at Vince Young's Steakhouse downtown, which was about a 20-minute drive from where I was staying in the Domain. The Domain is a really cool area with all kinds of shops, and I saw a lot of big tech companies in the area. I would love to go back there one day and spend some time with my family. I was also really close to Top Golf and spent some time hanging out with my coworkers.",[16,17531,17532],{},[74,17533],{"alt":17534,"src":17535},"Top Golf Austin","\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F17\u002Ftop-golf.jpeg",[16,17537,17538],{},[74,17539],{"alt":17540,"src":17541},"SpringOne Tour Austin","\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F17\u002Fspring-one-tour-austin.jpeg",[28,17543,17545],{"id":17544},"spring-for-graphql","Spring for GraphQL",[16,17547,17548],{},"Last week, I spent some time exploring the new features in Spring for GraphQL. I began by examining the new schema mapping inspection report, which can help you identify mapping issues between your schema and data fetchers. I recorded and published a video on this topic, which you can watch below.",[47,17550],{"id":17551},"YBPG0JbHvpY",[16,17553,17554,17555,17558],{},"During the week, I invested a lot of time in exploring the new paging and sorting features added in Spring for GraphQL 1.2. Thanks to this feature, we now have a standard way of doing paging in GraphQL using the Cursor connection specification. I concluded the week by examining the observation support, which provides us with metrics and insights into the performance of our API. I recorded several videos about GraphQL and will be releasing at least two of them this week, so stay tuned. By the way, if you haven't subscribed to my ",[23,17556,2944],{"href":4869,"rel":17557},[101],", what are you waiting for?",[28,17560,17424],{"id":17068},[16,17562,17427,17563,17432],{},[23,17564,102],{"href":17430,"rel":17565},[101],[16,17567,17435],{},[16,17569,17438],{},[16,17571,17572],{},[23,17573,16819],{"href":16819,"rel":17574},[101],[28,17576,11191],{"id":10953},[33,17578,11453],{"id":11452},[1271,17580,17581],{},[1274,17582,17583,17584,17588],{},"I don’t think there is much more to say than Bravo Oracle 👏🏻 Check out ",[23,17585,10979],{"href":17586,"rel":17587},"https:\u002F\u002Fwww.oracle.com\u002Fnews\u002Fannouncement\u002Fblog\u002Fkeep-linux-open-and-free-2023-07-10\u002F",[101]," about keeping Linux open and free.",[33,17590,11465],{"id":30},[1271,17592,17593],{},[1274,17594,17595,17596,17600],{},"I enjoyed watching ",[23,17597,9888],{"href":17598,"rel":17599},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ccj2-FsfnzE",[101]," by Mark Pollack, which showcases the features of the new Spring CLI. This experimental project is designed to help you create new Spring-based projects and add functionality after the application is already up and running.",[33,17602,12149],{"id":12148},[16,17604,17605],{},"“The only person you are destined to become is the person you decide to be.” - Ralph Waldo Emerson",[33,17607,12488],{"id":2235},[16,17609,17610],{},"I wrote a quick appreciation post about where I am in my career while I was finishing this newsletter last night and I thought I would share it with you.",[16,17612,17613],{},[23,17614,17615],{"href":17615,"rel":17616},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1680762913651322880",[101],[28,17618,172],{"id":171},[16,17620,11327,17621,11333],{},[23,17622,11332],{"href":11330,"rel":17623},[101],[16,17625,9630,17626,191,17628,17630,17632,17634],{},[189,17627],{},[189,17629],{},[23,17631,11491],{"href":11490},[189,17633],{},[23,17635,3084],{"href":3084,"rel":17636},[101],{"title":200,"searchDepth":201,"depth":201,"links":17638},[17639,17640,17641,17647],{"id":17544,"depth":201,"text":17545},{"id":17068,"depth":201,"text":17424},{"id":10953,"depth":201,"text":11191,"children":17642},[17643,17644,17645,17646],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":17649,"path":17650,"title":17651,"description":17652,"meta":17653,"body":17656},"newsletter\u002Fnewsletter\u002F2023\u002F07\u002F03\u002Fspring-boot-3-aws-lambda.md","\u002Fnewsletter\u002F2023\u002F07\u002F03\u002Fspring-boot-3-aws-lambda","Spring Boot 3 on AWS Lambda, Spring Cloud Gateway and Oracle GraalVM","Happy Monday and welcome to another edition of the newsletter. Tomorrow is the 4th of July, also known as Independence Day, which is a federal holiday in the United States commemorating the Declaration of Independence. This happens to be a family favorite holiday in our household that kicks with a kids bike parade behind a fire truck in our neighborhood. If you’re celebrating I hope you have an amazing holiday spent with family and friends. In this edition of the newsletter I want to talk to you about deploying Spring Boot 3 applications on AWS Lambda, A quick trip to Detroit and Oracle GraalVM.",{"slug":17654,"date":17655},"spring-boot-3-aws-lambda","2023-07-03T08:00:00.000Z",{"type":13,"value":17657,"toc":17798},[17658,17660,17664,17667,17670,17673,17682,17685,17687,17690,17699,17702,17706,17724,17729,17731,17733,17749,17751,17762,17764,17767,17769,17772,17778,17780,17785],[16,17659,17652],{},[28,17661,17663],{"id":17662},"spring-boot-3-on-aws-lambda","Spring Boot 3 on AWS Lambda",[16,17665,17666],{},"When it comes to deploying frontend applications, there are many great options available, whether you're working on a personal project or just trying to get something up and running. While Java is the 800 lb gorilla in the room and solves problems for some of the biggest enterprises in the world, it may not be the best choice for personal or weekend hacking projects. Recently, I've been exploring AWS Lambda as a solution to this problem, and it turns out to be a really great one.",[16,17668,17669],{},"When you manage your own server, you have to think about things like patching, security, and scaling. When you deploy an application to a server, you have to consider how much traffic your application will receive. If your server is running at 100% utilization, you might need to scale up to handle the load. If it's running at 10% utilization, you might want to scale down to save money.",[16,17671,17672],{},"AWS Lambda is a serverless compute service that lets you run code without provisioning or managing servers. You pay only for the compute time you consume. This means that my personal project, which won't receive a ton of traffic, is an ideal candidate for AWS Lambda. Any applications with variable traffic or that can scale to zero are great candidates for this use case.",[16,17674,17675,17676,17681],{},"I have looked at the concept for deploying functions as a service (FaaS) but in this tutorial we are going to deploy an entire Spring Boot REST API. If you look at the ",[23,17677,17680],{"href":17678,"rel":17679},"https:\u002F\u002Faws.amazon.com\u002Flambda\u002Fpricing\u002F",[101],"AWS Pricing Page"," you will see that The AWS Lambda free tier includes one million free requests per month and 400,000 GB-seconds of compute time per month. This means that for most of the side projects I am working on I can deploy them to AWS Lambda and not have to pay anything.",[47,17683],{"id":17684},"GGPPkUcHleQ",[28,17686,15245],{"id":15244},[16,17688,17689],{},"Last week I had a quick trip to Detroit for a SpringOne Tour stop. This was my first time staying in Downtown Detroit and I have to say that I really enjoyed my stay. I love running in new cities and usually part of my judgement on your city is how friendly of a walking\u002Frunning area you have. I took in some great sights like all 3 stadiums downtown and the river walk where I was able to wave hi 👋🏻 to our friends in Canada.",[16,17691,17692,17693,17698],{},"After day 1 of presentations DaShaun and and sat down to record a new episode of the Spring Office Hours Podcast. We were lucky enough to have ",[23,17694,17697],{"href":17695,"rel":17696},"https:\u002F\u002Ftwitter.com\u002Fspencerbgibb",[101],"Spencer Gibb"," in Detroit so we decided to sit down and talk to him about all things Spring Cloud  + Spring Cloud Gateway. I thought this was a really great level setting conversation on Spring Cloud and some of the use cases for an API Gateway. I want to create some tutorials around Spring Cloud Gateway but would love to hear from you. Is that something you would like to see? What problems are you facing?",[47,17700],{"id":17701},"eq1aO9IpEIM",[28,17703,17705],{"id":17704},"oracle-graalvm","Oracle GraalVM",[16,17707,17708,17709,17714,17715,17720,17721,184],{},"If you haven't heard, GraalVM is now Oracle GraalVM, and there are a few exciting things that come with ",[23,17710,17713],{"href":17711,"rel":17712},"https:\u002F\u002Fmedium.com\u002Fgraalvm\u002Fa-new-graalvm-release-and-new-free-license-4aab483692f5",[101],"this announcement",". The first thing to note is that Oracle GraalVM now supports JDK 17 and 20, and the best part is that it's free. Another update is that if you're using it to generate native images, you no longer need to install a separate tool for that, as it now comes with it. If you want to download it you can do from the ",[23,17716,17719],{"href":17717,"rel":17718},"https:\u002F\u002Fwww.graalvm.org\u002Fdownloads\u002F",[101],"Oracle GraalVM site"," or by using ",[23,17722,11221],{"href":11219,"rel":17723},[101],[16,17725,17726],{},[74,17727],{"alt":17705,"src":17728},"\u002Fimages\u002Fnewsletter\u002F2023\u002F07\u002F03\u002Foracle_graalvm.png",[28,17730,11191],{"id":10953},[33,17732,11453],{"id":11452},[1271,17734,17735],{},[1274,17736,17737,17738,17743,17744,184],{},"There were a lot of exciting announcements from YouTube last week during VidCon. The first was a ",[23,17739,17742],{"href":17740,"rel":17741},"https:\u002F\u002Ftechcrunch.com\u002F2023\u002F06\u002F23\u002Fyoutube-integrates-ai-powered-dubbing-tool\u002F",[101],"new tool"," that could dub your videos into other languages using AI. The next tool was something that creators have been asking for for as long as I can remember. YouTube is now beta testing a tool to ",[23,17745,17748],{"href":17746,"rel":17747},"https:\u002F\u002Fwww.theverge.com\u002F2023\u002F6\u002F23\u002F23771045\u002Fyoutube-test-and-compare-a-b-testing-thumbnails-feature",[101],"A\u002FB test your thumbnails",[33,17750,11465],{"id":30},[1271,17752,17753],{},[1274,17754,17755,17756,17761],{},"While we are talking about Spring Cloud Gateway I really enjoyed this video from Spring I\u002FO 2023 by Iván López on ",[23,17757,17760],{"href":17758,"rel":17759},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=NjqgXzCSu7M",[101],"Dynamic OpenAPIs with Spring Cloud Gateway",". I thought he did a really good job of introducing us to API gateways and some of the use cases.",[33,17763,12149],{"id":12148},[16,17765,17766],{},"“We are what we repeatedly do. Excellence, then, is not an act, but a habit.”",[33,17768,12488],{"id":2235},[16,17770,17771],{},"Marcus Hellberg had an interesting tweet about some of the interesting trends in the Java Ecosystem. No surprise to see some of my favorite topics on there like Spring Boot, Serverless and GraalVM.",[16,17773,17774],{},[23,17775,17776],{"href":17776,"rel":17777},"https:\u002F\u002Ftwitter.com\u002Fmarcushellberg\u002Fstatus\u002F1674458944255959041",[101],[28,17779,172],{"id":171},[16,17781,11327,17782,11333],{},[23,17783,11332],{"href":11330,"rel":17784},[101],[16,17786,9630,17787,191,17789,17791,17793,17795],{},[189,17788],{},[189,17790],{},[23,17792,11491],{"href":11490},[189,17794],{},[23,17796,198],{"href":198,"rel":17797},[101],{"title":200,"searchDepth":201,"depth":201,"links":17799},[17800,17801,17802,17803,17809],{"id":17662,"depth":201,"text":17663},{"id":15244,"depth":201,"text":15245},{"id":17704,"depth":201,"text":17705},{"id":10953,"depth":201,"text":11191,"children":17804},[17805,17806,17807,17808],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":17811,"path":17812,"title":17813,"description":17814,"meta":17815,"body":17818},"newsletter\u002Fnewsletter\u002F2023\u002F06\u002F26\u002Fkcdc-2023.md","\u002Fnewsletter\u002F2023\u002F06\u002F26\u002Fkcdc-2023","KCDC 2023 Recap!","Happy Monday and welcome to another edition of the newsletter. I spent last week in Kansas City for the Kansas City Developers Conference (KCDC) and wow was it a great week. First off I want to thank all of the conference organizers for putting on another amazing conference. They do an amazing job of putting together a really great schedule of presentations and I was honored to have 2 talks there. The swag from the conference was really good my only wish was that the sponsors had more t-shirts because selfishly I would like them for streams \u002F videos.",{"slug":17816,"date":17817},"kcdc-2023","2023-06-26T08:00:00.000Z",{"type":13,"value":17819,"toc":17990},[17820,17822,17828,17837,17843,17846,17852,17858,17861,17867,17873,17879,17882,17888,17892,17895,17898,17900,17903,17908,17910,17912,17915,17959,17961,17964,17970,17972,17977],[16,17821,17814],{},[16,17823,17824],{},[74,17825],{"alt":17826,"src":17827},"EAF0E12D-511C-41F9-B665-8217A8F4BFBE.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002FEAF0E12D-511C-41F9-B665-8217A8F4BFBE.jpeg",[16,17829,17830,17831,17836],{},"First up on Wednesday was a 4 hour Intro to Spring Workshop and this was the 2nd time DaShaun and i gave this one. We learned a lot from the first iteration and I think we made some really nice improvements. I think there were some things we can definitely improve on for the next one but overall I was really happy with how this one turned out. We had a really engaged audience and they asked some really great questions. One attendee (Kevin, up front) even said he just started watching my ",[23,17832,17835],{"href":17833,"rel":17834},"https:\u002F\u002Fyoutu.be\u002FUgX5lgv4uVM",[101],"4 hour intro to Spring Crash Course"," on YouTube and was excited to find out I was teaching this workshop.",[16,17838,17839],{},[74,17840],{"alt":17841,"src":17842},"032C876B-E4BF-413D-B63F-E8A1A3F4F1E8.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002F032C876B-E4BF-413D-B63F-E8A1A3F4F1E8.jpeg",[16,17844,17845],{},"Wednesday night was the speaker dinner and it was great to see so many friendly and familiar faces. The venue was really cool spanning 3 levels and on the top level was some delicious BBQ.",[16,17847,17848],{},[74,17849],{"alt":17850,"src":17851},"F42D198E-0EC4-451D-9A14-3EBEFDFC07DD.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002FF42D198E-0EC4-451D-9A14-3EBEFDFC07DD.jpeg",[16,17853,17854],{},[74,17855],{"alt":17856,"src":17857},"F2F89EE3-FF7F-42B7-80AA-2C710CE5FF8A.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002FF2F89EE3-FF7F-42B7-80AA-2C710CE5FF8A.jpeg",[16,17859,17860],{},"On Thursday I gave my Spring Boot 3 and Beyond talk. In this presentation I covered Spring Boot 3.0, 3.1 and a bonus discussion on Virtual Threads support in Spring Boot 3.2. The room was packed and again a very engaged audience. I was brave and decided on live coding for about 20 minutes to show off some cool features and the demo gods were smiling down on me as everything just worked. Speaking of live coding at conferences what is with the podiums that they give us that have us slouching over with arms at a weird angle to write code with 🤦‍♂️ I found a drink table outside of the room and ended up bringing it in so that I had something usable to code on.",[16,17862,17863],{},[74,17864],{"alt":17865,"src":17866},"44928EAB-EDD8-44C7-8C06-01FD8B1031A4.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002F44928EAB-EDD8-44C7-8C06-01FD8B1031A4.jpeg",[16,17868,17869],{},[74,17870],{"alt":17871,"src":17872},"83C6F292-D692-49F7-B601-2A182129AB3D.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002F83C6F292-D692-49F7-B601-2A182129AB3D.jpeg",[16,17874,17875],{},[74,17876],{"alt":17877,"src":17878},"8A51099A-CA18-438A-BAD9-6EAB655C9564.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F26\u002F8A51099A-CA18-438A-BAD9-6EAB655C9564.jpeg",[16,17880,17881],{},"Finally I want to point out that the Kansas City Airport (MCI) was brand new and It is really nice. It is so great that when I got off the plane I had a moment where I questioned if I was in the right city or not. Thanks for having me KCDC and I hope to back next year!",[16,17883,17884],{},[74,17885],{"alt":17886,"src":17887},"885C16CA-E7D5-4742-8C4D-EBDBEE2FB64A.jpeg","KCDC%20430907aa9497432f86fa37a60f5593e5\u002F885C16CA-E7D5-4742-8C4D-EBDBEE2FB64A.jpeg",[28,17889,17891],{"id":17890},"tales-from-the-jar-side","Tales from the JAR Side",[16,17893,17894],{},"My friend Ken Kousen created a video about the videos I created on HTTP Interfaces. I thought this was an awesome video and Ken had fun with it and added some value on top of what I did. If you haven’t subscribed to Ken’s YouTube channel yet, what are you waiting for?",[47,17896],{"id":17897},"6ayPzBknMpA",[28,17899,17069],{"id":17068},[16,17901,17902],{},"Registration is now open for SpringOne at VMware explore. I invite you to join me at one of the best conferences of the year, where we'll discuss everything Spring. We have some exciting plans for this year's event, and I'm getting really excited about it. If you're curious about the agenda, it has been posted and you can check it out now. I will be giving a talk on GraphQL and Spring Recipes with my friend Nate Schutta.",[16,17904,17905],{},[23,17906,16819],{"href":16819,"rel":17907},[101],[28,17909,11191],{"id":10953},[33,17911,11465],{"id":30},[16,17913,17914],{},"The videos for my series on the NetNinja channel on building a portfolio site with Nuxt \u002F Tailwind CSS \u002F GraphQL have all been released. I really had a lot of fun putting this together and I hope you enjoy it",[1271,17916,17917,17924,17931,17938,17945,17952],{},[1274,17918,17919],{},[23,17920,17923],{"href":17921,"rel":17922},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=b6b2yZZNG6Y&t=1s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 1",[1274,17925,17926],{},[23,17927,17930],{"href":17928,"rel":17929},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eXSVyfBLtnY&t=1s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 2",[1274,17932,17933],{},[23,17934,17937],{"href":17935,"rel":17936},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=oh2KQqtJLhA&t=136s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 3",[1274,17939,17940],{},[23,17941,17944],{"href":17942,"rel":17943},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=GXgWQN_NJnA&t=259s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 4",[1274,17946,17947],{},[23,17948,17951],{"href":17949,"rel":17950},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Vh357OVNSlo&t=373s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 5",[1274,17953,17954],{},[23,17955,17958],{"href":17956,"rel":17957},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=R0hAI0qUvmk&t=9s",[101],"Portfolio Build with Nuxt Content & GraphQL - Part 6",[33,17960,12488],{"id":2235},[16,17962,17963],{},"I can’t believe Google Domains is being sold off to Squarespace 🤦‍♂️",[16,17965,17966],{},[23,17967,17968],{"href":17968,"rel":17969},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1669493112794759169",[101],[28,17971,172],{"id":171},[16,17973,11327,17974,11333],{},[23,17975,11332],{"href":11330,"rel":17976},[101],[16,17978,9630,17979,191,17981,17983,17985,17987],{},[189,17980],{},[189,17982],{},[23,17984,11491],{"href":11490},[189,17986],{},[23,17988,198],{"href":198,"rel":17989},[101],{"title":200,"searchDepth":201,"depth":201,"links":17991},[17992,17993,17994,17998],{"id":17890,"depth":201,"text":17891},{"id":17068,"depth":201,"text":17069},{"id":10953,"depth":201,"text":11191,"children":17995},[17996,17997],{"id":30,"depth":206,"text":11465},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18000,"path":18001,"title":18002,"description":18003,"meta":18004,"body":18007},"newsletter\u002Fnewsletter\u002F2023\u002F06\u002F19\u002Fhttp-interfaces.md","\u002Fnewsletter\u002F2023\u002F06\u002F19\u002Fhttp-interfaces","HTTP Interfaces, Building a portfolio with Nuxt 3 and KCDC!","Happy Monday and welcome to another edition of the newsletter. Today is Monday, June 19th, also known as Juneteenth, a day to celebrate freedom!",{"slug":18005,"date":18006},"http-interfaces","2023-06-19T14:00:00.000Z",{"type":13,"value":18008,"toc":18134},[18009,18011,18014,18017,18020,18023,18026,18029,18033,18036,18039,18041,18044,18047,18049,18051,18056,18058,18060,18067,18069,18078,18080,18089,18093,18102,18104,18106,18109,18114,18116,18121],[16,18010,18003],{},[16,18012,18013],{},"Tomorrow, I will be heading to KCDC, where I will deliver a 4-hour workshop on Getting Started with Spring and a breakout session on Spring Boot 3 and Beyond. If you're attending the conference, please say hello 👋🏻.",[28,18015,3955],{"id":18016},"http-interface-clients",[16,18018,18019],{},"In last week's newsletter, I mentioned that I recently gave a presentation on Spring Boot 3. During that talk, I received some excellent questions about HTTP interfaces in Spring. This prompted me to do a deeper dive and answer those questions. From this effort, I was able to record, edit, and publish two videos on the topic last week.",[16,18021,18022],{},"Since then, I have received a significant number of questions, which tells me that you are very interested in the topic and how it works. I will do my best to answer them as they come in, but for now, enjoy these tutorials.",[47,18024],{"id":18025},"4U0hUyktpvg",[47,18027],{"id":18028},"AOJzm7yFOl0",[28,18030,18032],{"id":18031},"netninja-series","NetNinja Series",[16,18034,18035],{},"I recently recorded a new series on how to build a portfolio site with Nuxt 3. I partnered with the NetNinja who has a really great YouTube channel and you can find the first video in that series below. This was an exciting project because you get to build a really cool portfolio using a variety of technologies like Nuxt 3, Vue 3, Tailwind CSS, GraphQL and Nuxt Content. I hope you enjoy this and I would love to hear what you think of it.",[47,18037],{"id":18038},"b6b2yZZNG6Y",[28,18040,93],{"id":92},[16,18042,18043],{},"In this week's Spring Office Hours Podcast, DaShaun and I discussed a variety of topics, including a great discussion about virtual threads. I’m starting to get really excited about JDK 21 and Spring Framework 6.1 both of which will be released later this year.",[47,18045],{"id":18046},"6QeYgSpntpg",[28,18048,17069],{"id":17068},[16,18050,17902],{},[16,18052,18053],{},[23,18054,16819],{"href":16819,"rel":18055},[101],[28,18057,11191],{"id":10953},[33,18059,11453],{"id":11452},[16,18061,10983,18062,18066],{},[23,18063,10979],{"href":18064,"rel":18065},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F06\u002F19\u002Fspring-boot-31-connectiondetails-abstraction",[101]," on Spring Boot 3.1’s ConnectionDetails abstraction. In this article  Moritz Halbritter breaks down this new feature and how its powering the new Docker Compose and Testcontainers Dev support in Spring Boot 3.1.",[33,18068,11465],{"id":30},[16,18070,18071,18072,18077],{},"I had a lot of fun listening to 2 of my friends chop it up on ",[23,18073,18076],{"href":18074,"rel":18075},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wQJjRbS1pKI",[101],"Tales from the JAR Side with Nate Schutta",". I really enjoyed Ken digging into Nate’s story on speaking how he came up with his style of presentations.",[33,18079,13650],{"id":973},[16,18081,18082,18083,18088],{},"I’m a big fan of the Working code podcast and not just because I happen to know all of the hosts 🤩 In this episode Ben details his process as he is ",[23,18084,18087],{"href":18085,"rel":18086},"https:\u002F\u002Fworkingcode.dev\u002Fepisodes\u002F131-starting-from-scratch\u002F",[101],"starting from scratch"," when it comes to building out his new fitness application.",[33,18090,18092],{"id":18091},"newsletters","📰 Newsletters",[1271,18094,18095],{},[1274,18096,18097],{},[23,18098,18101],{"href":18099,"rel":18100},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F06\u002F13\u002Fthis-week-in-spring-june-13th-2023",[101],"This Week in Spring - June 13th, 2023",[33,18103,12149],{"id":12148},[33,18105,12488],{"id":2235},[16,18107,18108],{},"“Unfortunately, there seems to be far more opportunity out there than ability.... We should remember that good fortune often happens when opportunity meets with preparation.”",[16,18110,18111],{},[161,18112,18113],{},"Thomas A. Edison",[28,18115,172],{"id":171},[16,18117,11327,18118,11333],{},[23,18119,11332],{"href":11330,"rel":18120},[101],[16,18122,9630,18123,191,18125,18127,18129,18131],{},[189,18124],{},[189,18126],{},[23,18128,11491],{"href":11490},[189,18130],{},[23,18132,198],{"href":198,"rel":18133},[101],{"title":200,"searchDepth":201,"depth":201,"links":18135},[18136,18137,18138,18139,18140,18148],{"id":18016,"depth":201,"text":3955},{"id":18031,"depth":201,"text":18032},{"id":92,"depth":201,"text":93},{"id":17068,"depth":201,"text":17069},{"id":10953,"depth":201,"text":11191,"children":18141},[18142,18143,18144,18145,18146,18147],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18150,"path":18151,"title":18152,"description":18153,"meta":18154,"body":18157},"newsletter\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fpnc-developer-days.md","\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fpnc-developer-days","Virtual Threads, Tales from the JAR Side and a quick trip to Pittsburgh","Happy Monday and welcome to another edition of the newsletter. It’s been a few weeks since we last connected and I apologize for that but I have been a busy bee 🐝 June is going to be a pretty busy travel month for me and I hope I get the chance to see some of you on the road this year.",{"slug":18155,"date":18156},"pnc-developer-days","2023-06-12T08:00:00.000Z",{"type":13,"value":18158,"toc":18329},[18159,18161,18164,18170,18174,18177,18180,18183,18185,18188,18191,18194,18198,18201,18204,18207,18210,18213,18219,18225,18230,18232,18234,18239,18243,18246,18248,18250,18272,18274,18290,18292,18298,18300,18303,18309,18311,18316],[16,18160,18153],{},[16,18162,18163],{},"In a previous newsletter I told you that I had taken up golf and my first round ever was played at a beautiful course in Hilton Head SC. Since then I have played 2 more rounds of 18 here in Ohio. I absolutely love the game and love being outside and I’m having fun picking it up. Here is a quick picture my wife took of me heading to the range to try out my new clubs.",[16,18165,18166],{},[74,18167],{"alt":18168,"src":18169},"Dan's new clubs","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fdan-new-golf-clubs.jpeg",[28,18171,18173],{"id":18172},"project-loom-virtual-threads","Project Loom \u002F Virtual Threads",[16,18175,18176],{},"Virtual Threads have been finalized for JDK 21, and there is a lot of excitement building for this long-anticipated feature. Last week, I gave a virtual presentation titled \"Embracing Virtual Threads in Spring Applications\". It was a short, high-level overview, but it was a lot of fun. I’m also spending some time on the subject in a bunch of talks around Spring Boot 3 and Beyond!",[16,18178,18179],{},"I'm really excited about JDK 21 and Spring Framework 6.1 because I think they will bring some really nice improvements to certain types of applications with little to no code changes. If you're interested in learning more, I did a similar video on this back in April.",[47,18181],{"id":18182},"Is5HXJhC3jE",[28,18184,17891],{"id":17890},[16,18186,18187],{},"I recently went on a live stream with my friend Ken Kousen. If you're part of the Java ecosystem, you probably already know Ken. However, in case you don't, he's an author, speaker, trainer, Java Champion, and an all-around great guy. During our conversation, we talked about all things Java, Spring, YouTube, and whatever else came up.",[16,18189,18190],{},"If you have the chance, I highly recommend watching the stream. Additionally, please do me a favor and subscribe to Ken's YouTube channel. He's doing an excellent job creating content, and you won't want to miss out on any more of it.",[47,18192],{"id":18193},"UhCIW3PQHcI",[28,18195,18197],{"id":18196},"hello-pittsburgh","Hello, Pittsburgh!",[16,18199,18200],{},"Last week I traveled to Pittsburgh on what would be a really short trip. I wish I had more time to spend there and I was really hoping to get in a run or catch a Pirates game but sadly I just didn’t have the time, maybe next time.",[16,18202,18203],{},"First up I gave a presentation titled Spring Boot 3 and Beyond to over 250 developers at FedEx Ground headquarters. This was exciting for me because I spent some time working for FedEx (Express) in a consultant role as an Enterprise Architect. I was familiar with the company and how much they have embraced Java and Spring.",[33,18205,18206],{"id":18155},"PNC Developer Days",[16,18208,18209],{},"Next up was PNC Bank’s Developer days. I absolutely love it when a company puts this much thought and work into putting together a conference for their developers. There were a ton of great sessions and demos where employees showed off new features and tools that they could use in their day to day workflows.",[16,18211,18212],{},"I had a chance to work our booth that was there where we helping to spread the word of VMware Tanzu and how our suite of products help modern application development workflows. PNC is a big user of Java and Spring so I had the opportunity to talk to everyone from interns to experienced developers and answered a bunch of really great questions. A+ job PNC and I hope to back for another developer day.",[16,18214,18215],{},[74,18216],{"alt":18217,"src":18218},"PNC Balloons","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fpnc-balloons.jpeg",[16,18220,18221],{},[74,18222],{"alt":18223,"src":18224},"VMware Booth","\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fvmware-booth-01.png",[16,18226,18227],{},[74,18228],{"alt":18223,"src":18229},"\u002Fimages\u002Fnewsletter\u002F2023\u002F06\u002F12\u002Fvmware-booth-02.png",[28,18231,17069],{"id":17068},[16,18233,17902],{},[16,18235,18236],{},[23,18237,16819],{"href":16819,"rel":18238},[101],[28,18240,18242],{"id":18241},"up-next","Up Next",[16,18244,18245],{},"Someone asked me recently if I had quit YouTube. It's only been two weeks, so please give me a little more space! 😅 I have a good queue of videos that I want to record, and my plan is to get two of them done this week. I'm also preparing for KCDC next week, where I will be giving a workshop on Getting Started with Spring and a breakout session on Spring Boot 3.",[28,18247,11191],{"id":10953},[33,18249,11453],{"id":11452},[1271,18251,18252,18259,18266],{},[1274,18253,18254],{},[23,18255,18258],{"href":18256,"rel":18257},"https:\u002F\u002Fdev.to\u002Fjacobandrewsky\u002Fimproving-web-performance-with-lazy-pattern-3eia",[101],"Improve performance with Lazy Pattern",[1274,18260,18261],{},[23,18262,18265],{"href":18263,"rel":18264},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F05\u002F24\u002Fspring-authorization-server-is-on-spring-initializr",[101],"Spring Authorization Server is now on Spring Initializr",[1274,18267,18268],{},[23,18269,18270],{"href":18270,"rel":18271},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2023\u002F06\u002Fintellij-idea-2023-2-eap-3\u002F",[101],[33,18273,11465],{"id":30},[1271,18275,18276,18283],{},[1274,18277,18278],{},[23,18279,18282],{"href":18280,"rel":18281},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=J8nbBiAnI6A",[101],"Bootiful Spring Boot 3 by Josh Long",[1274,18284,18285],{},[23,18286,18289],{"href":18287,"rel":18288},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=IgmeFeTU1a4",[101],"Spring I\u002FO 2023 Keynote",[33,18291,12149],{"id":12148},[16,18293,18294,18295,184],{},"“Success isn't always about greatness. It's about consistency. Consistent hard work leads to success. Greatness will come.” – ",[161,18296,18297],{},"Dwayne Johnson",[33,18299,12488],{"id":2235},[16,18301,18302],{},"I have been working on something that should be coming to a monitor near you very soon!",[16,18304,18305],{},[23,18306,18307],{"href":18307,"rel":18308},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1667235956850565153",[101],[28,18310,172],{"id":171},[16,18312,11327,18313,11333],{},[23,18314,11332],{"href":11330,"rel":18315},[101],[16,18317,9630,18318,191,18320,18322,18324,18326],{},[189,18319],{},[189,18321],{},[23,18323,11491],{"href":11490},[189,18325],{},[23,18327,198],{"href":198,"rel":18328},[101],{"title":200,"searchDepth":201,"depth":201,"links":18330},[18331,18332,18333,18336,18337,18338,18344],{"id":18172,"depth":201,"text":18173},{"id":17890,"depth":201,"text":17891},{"id":18196,"depth":201,"text":18197,"children":18334},[18335],{"id":18155,"depth":206,"text":18206},{"id":17068,"depth":201,"text":17069},{"id":18241,"depth":201,"text":18242},{"id":10953,"depth":201,"text":11191,"children":18339},[18340,18341,18342,18343],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18346,"path":18347,"title":18348,"description":18349,"meta":18350,"body":18353},"newsletter\u002Fnewsletter\u002F2023\u002F05\u002F22\u002Fspring-boot-3-1.md","\u002Fnewsletter\u002F2023\u002F05\u002F22\u002Fspring-boot-3-1","Spring Boot 3.1, 30K Subscribers, and AWS Lambda now supports Java 17!","Happy Monday and welcome to another edition of the newsletter. It’s been a couple of weeks since my last update but it was for a good reason. I was able to take a week off and spend some fun in the sun with the family as we headed down to Hilton Head SC which is becoming a yearly tradition for us. I absolutely love Hilton Head, it’s just so calm and relaxing and fun for the whole family.",{"slug":18351,"date":18352},"spring-boot-3-1","2023-05-22T08:00:00.000Z",{"type":13,"value":18354,"toc":18583},[18355,18357,18363,18366,18372,18375,18379,18387,18407,18410,18413,18415,18418,18422,18425,18428,18431,18433,18436,18442,18446,18455,18492,18494,18497,18502,18504,18506,18534],[16,18356,18349],{},[16,18358,18359],{},[74,18360],{"alt":18361,"src":18362},"Hilton Head Family","\u002Fimages\u002Fnewsletter\u002F2023\u002F05\u002F22\u002Fhilton-head-family.jpeg",[16,18364,18365],{},"I played 18 holes at the Old South Golf course, and it was beautiful. This was the first round of golf I played since I was probably 17. Needless to say, I wasn't very good, but I had fun. I am looking forward to playing more golf this summer and improving my game.",[16,18367,18368],{},[74,18369],{"alt":18370,"src":18371},"Golf in Hilton Head","\u002Fimages\u002Fnewsletter\u002F2023\u002F05\u002F22\u002Fhilton-head-golf.jpeg",[16,18373,18374],{},"Last week, I traveled to Dallas for a customer meeting. Although it was a short trip, it went really well. I had the opportunity to talk to a great group about building GraphQL APIs in Java & Spring. The group was interactive, and there were a ton of really great questions. I have more of these shorter, more focused trips coming up next month, and I'm really excited for them.",[28,18376,18378],{"id":18377},"spring-boot-31-released","Spring Boot 3.1 released",[16,18380,18381,18382,18386],{},"Spring Boot 3.1 was released and it came packed with some exciting features. If you want to learn more about I would suggest diving into the ",[23,18383,7253],{"href":18384,"rel":18385},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.1-Release-Notes",[101],". The new and noteworthy items were:",[1271,18388,18389,18392,18395,18398,18401,18404],{},[1274,18390,18391],{},"Using Testcontainers at Development Time",[1274,18393,18394],{},"Spring Boot Docker Compose Module",[1274,18396,18397],{},"Unified SSL Configuration",[1274,18399,18400],{},"Auto-configuration for Spring Authorization Server",[1274,18402,18403],{},"Docker Image Building Additions",[1274,18405,18406],{},"Spring for GraphQL Improvements",[16,18408,18409],{},"If you missed it I did a video on the new Spring Boot Docker Compose module",[47,18411],{"id":18412},"lS1GwdIfk0c",[28,18414,3363],{"id":4557},[16,18416,18417],{},"While I was on vacation, I reached a nice milestone of 30,000 subscribers on my YouTube channel. The channel is gaining traction, and my plan is to continue producing the same content. I am also looking for sponsors for the channel. If you're interested in partnering with me, please reply to this message with an email.",[33,18419,18421],{"id":18420},"aws-lambda-meet-java-17","AWS Lambda 🤝 Meet Java 17",[16,18423,18424],{},"AWS recently announced support for Java 17 on Lambda. This is exciting because if you are authoring plain Java functions, you can take advantage of all the new language features from Java 11 to 17. If you are a Spring Developer, this means that you can now write your functions in Spring Boot 3 + Spring Cloud Function.",[16,18426,18427],{},"I was thrilled when I heard the news, and I created a tutorial covering these two scenarios.",[47,18429],{"id":18430},"bxK4GscuVgs",[28,18432,12205],{"id":12204},[16,18434,18435],{},"After a week off we were back to the podcast last week where discussed all things GraphQL. This was the 3rd episode that we released as a podcast and we are continuing to iterate and improve on it. I think the next big step is to get a hook and an outro and those are on my list for this week.",[16,18437,18438],{},[23,18439,18440],{"href":18440,"rel":18441},"https:\u002F\u002Fshare.transistor.fm\u002Fe\u002F1c16ee76",[101],[28,18443,18445],{"id":18444},"devnexus-recordings-available","Devnexus Recordings Available",[16,18447,18448,18449,18454],{},"If you weren’t able to catch ",[23,18450,18453],{"href":18451,"rel":18452},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_jTBKo1qxoA&t=274s",[101],"my talk"," at Devnexus the recordings are now available. I talked about this before but I really enjoyed this conference. I didn’t get a chance to catch a ton of talks though so I was excited to see the recordings made available. I would probably just watch all of them if I were you but if you want a list of a few my favorites here they are:",[1271,18456,18457,18464,18471,18478,18485],{},[1274,18458,18459],{},[23,18460,18463],{"href":18461,"rel":18462},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0GXmTfNoSlY",[101],"Devnexus 2023 - Keynote: Five Skills to Force Multiply Your Technical Talent - Arun Gupta",[1274,18465,18466],{},[23,18467,18470],{"href":18468,"rel":18469},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=EZBHAwuQl_U",[101],"Devnexus 2023 - Kontain Your Spring - Craig Walls",[1274,18472,18473],{},[23,18474,18477],{"href":18475,"rel":18476},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=h7RhUVRxqYY",[101],"Devnexus 2023 - My Children Will Never Deploy Active-Passive - DaShaun Carter",[1274,18479,18480],{},[23,18481,18484],{"href":18482,"rel":18483},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=98cwiZOhoOM",[101],"Devnexus 2023 - Bootiful Spring Boot 3 - Josh Long",[1274,18486,18487],{},[23,18488,18491],{"href":18489,"rel":18490},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=zoAG1oatOS0",[101],"Devnexus 2023 - Live Diagramming of Knative - Core Concepts - Whitney Lee",[28,18493,17069],{"id":17068},[16,18495,18496],{},"Registration is now open for SpringOne at VMware explore. I’’m hoping you join me at one of the best conferences of the year as we talk everything Spring. I am going to be a busy Spring bee there and I can’t wait to tell you more about what I’ll be doing as we get closer.",[16,18498,18499],{},[23,18500,16819],{"href":16819,"rel":18501},[101],[28,18503,11191],{"id":10953},[33,18505,11453],{"id":11452},[1271,18507,18508,18517,18532],{},[1274,18509,18510,18511,18516],{},"This is a really great introduction to ",[23,18512,18515],{"href":18513,"rel":18514},"https:\u002F\u002Fwww.atomicjar.com\u002F2023\u002F05\u002Fspring-boot-3-1-0-testcontainers-for-testing-and-local-development\u002F",[101],"Spring Boot Application Testing and Development with Testcontainers",". If you didn’t hear Spring Boot 3.1 was released and in that release we adde support for using Testcontainers at development. This article does a great job of diving into this new feature.",[1274,18518,18519,18520,18525,18526],{},"Vue 3.3 has been released and in ",[23,18521,18524],{"href":18522,"rel":18523},"https:\u002F\u002Fblog.vuejs.org\u002Fposts\u002Fvue-3-3",[101],"this blog post"," you will learn all about it.This release is focused on developer experience improvements - in particular, SFC ",[161,18527,18528,18531],{},[18529,18530],"script",{"setup":200}," usage with TypeScript.",[161,18533],{},[161,18535,18536,18538,18548,18550,18557,18563,18565,18570],{},[33,18537,11465],{"id":30},[1271,18539,18540],{},[1274,18541,10983,18542,18547],{},[23,18543,18546],{"href":18544,"rel":18545},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jnNQEiPs5r0",[101],"this video by Colin and Samir"," where they interviewed the Deep fake Tom Cruise. I thought it was really great insight into who Miles Fisher is and I honestly can’t remember walking away from an interview pulling for a person more than I have here with Miles. He is funny, creative, super talented and I can’t wait to see what he does next.",[33,18549,12488],{"id":2235},[16,18551,18552,18553,18556],{},"I’m getting really excited for KCDC next month! If you haven’t registered yet you can do so using the code ",[161,18554,18555],{},"FriendOfDanVega"," for an extra 10% off. I hope to see you there!",[16,18558,18559],{},[23,18560,18561],{"href":18561,"rel":18562},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1659182193762082817",[101],[28,18564,172],{"id":171},[16,18566,11327,18567,11333],{},[23,18568,11332],{"href":11330,"rel":18569},[101],[16,18571,9630,18572,191,18574,18576,18578,18580],{},[189,18573],{},[189,18575],{},[23,18577,11491],{"href":11490},[189,18579],{},[23,18581,198],{"href":198,"rel":18582},[101],{"title":200,"searchDepth":201,"depth":201,"links":18584},[18585,18586,18589,18590,18591,18592,18597],{"id":18377,"depth":201,"text":18378},{"id":4557,"depth":201,"text":3363,"children":18587},[18588],{"id":18420,"depth":206,"text":18421},{"id":12204,"depth":201,"text":12205},{"id":18444,"depth":201,"text":18445},{"id":17068,"depth":201,"text":17069},{"id":10953,"depth":201,"text":11191,"children":18593},[18594,18595,18596],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18599,"path":18600,"title":18601,"description":18602,"meta":18603,"body":18605},"newsletter\u002Fnewsletter\u002F2023\u002F05\u002F01\u002Fspring-office-hours-podcast.md","\u002Fnewsletter\u002F2023\u002F05\u002F01\u002Fspring-office-hours-podcast","Spring Office Hours Podcast, Spring Boot Docker Compose & More!","Happy Monday and welcome to another edition of the newsletter. I just want to let you know that there will be no newsletter next week as I will be on vacation in Hilton Head SC with my family. We are really looking forward to some fun in the sun and I am even going to get some golf in. I haven’t golfed in 20 years so I’m just hoping I don’t embarrass myself 🤦‍♂️",{"slug":12204,"date":18604},"2023-05-01T07:30:00.000Z",{"type":13,"value":18606,"toc":18756},[18607,18609,18612,18614,18617,18620,18629,18635,18641,18644,18648,18651,18655,18658,18661,18664,18667,18670,18674,18677,18679,18683,18686,18689,18691,18693,18713,18715,18723,18725,18728,18730,18736,18738,18743],[16,18608,18602],{},[16,18610,18611],{},"In this weeks edition I want to tell you about the Spring Office Hours Podcast and the content I worked on last week.",[28,18613,12205],{"id":12204},[16,18615,18616],{},"DaShaun and I created the Spring Office Hours live stream a little over a year ago as a way to help answer questions from the community. We began talking about converting this over to a podcast at the end of last year but never got around to doing it.",[16,18618,18619],{},"I think my reservations were the same we all experience when we want to start something new. We want everything to be perfect and if we are honest with ourselves, they never will be. I decided to that this weeks show would be our first “Podcast” and we can always iterate and improve on it each week.",[16,18621,18622,18623,18628],{},"With that we recorded our livestream and tried to keep our audio only friends in mind. From there I signed up for a service called ",[23,18624,18627],{"href":18625,"rel":18626},"http:\u002F\u002FTransistor.fm",[101],"Transistor.fm"," which helps you manage and distribute podcasts. I extracted the audio from the livestream using Adobe Premiere Pro and uploaded it to Transistor. They handle distributing your podcasts to all of the networks and at the time of this writing we are on all of the major providers.",[16,18630,18631],{},[74,18632],{"alt":18633,"src":18634},"Spotify Podcasts","\u002Fimages\u002Fnewsletter\u002F2023\u002F05\u002F01\u002Fspotify-podcast.png",[16,18636,18637],{},[74,18638],{"alt":18639,"src":18640},"Apple Podcasts","\u002Fimages\u002Fnewsletter\u002F2023\u002F05\u002F01\u002Fapple-podcast.png",[16,18642,18643],{},"It would mean the world to me if you would subscribe to our podcast wherever you listen. I absolutely love podcasts and I’m already trying to think of the next one I could do 😜",[28,18645,18647],{"id":18646},"content-creation-machine","Content Creation Machine",[16,18649,18650],{},"Here are the highlights of the content I worked on last week.",[28,18652,18654],{"id":18653},"youtube-cli","YouTube CLI",[16,18656,18657],{},"I absolutely love being a software developer because it gives me this superpower ability to solve my own problems. Part of my job requires me track the content that I am working on. This is for reporting purposes but also helps me figure out what content is doing well over a longer period of time.",[16,18659,18660],{},"Last year I tracked all of my YouTube videos in a very manual process. Once I month I would go into a spreadsheet and manually enter each video along with some details about it including number of views. This doesn’t scale very well because it’s such a manual process and I’m not updating the number of views so it’s not very accurate either.",[16,18662,18663],{},"I decided to sit down and write a command-line-interface in Java that I could run on my local machine and get these stats. I could have written this using something like bash but to be honest I don’t use it enough and it would have taken me forever to Google (or Chat GPT) everything. I decided to write this using Spring Shell so that I could be in a familiar environment and with Spring Boot 3 I could compile this down to a native executable.",[16,18665,18666],{},"Not only did I have a lot of fun building out this project for myself but I feel like you might get a lot out of it as well. I hope you enjoy this and I would love to hear your thoughts on it.",[47,18668],{"id":18669},"Oi8JeTswYVI",[28,18671,18673],{"id":18672},"spring-boot-docker-compose","Spring Boot Docker Compose",[16,18675,18676],{},"Spring Boot 3.1 RC 1 was released a little over a week ago. I had a chance to dig through the release notes and was really excited about a few of the new features. In this video I took a look at one of those features which was the Spring Boot Docker Compose Module.",[47,18678],{"id":18412},[28,18680,18682],{"id":18681},"spring-security-social-login","Spring Security Social Login",[16,18684,18685],{},"Last but not least I have received a few requests for this one. In this tutorial I look at how you can provide a social login for your Spring Boot applications using Spring Security. In the example that I worked on you can login via form login with a username \u002F password or Google & GitHub.",[47,18687],{"id":18688},"us0VjFiHogo",[28,18690,11191],{"id":10953},[33,18692,11453],{"id":11452},[1271,18694,18695,18704],{},[1274,18696,18697,18698,18703],{},"I can’t even begin to tell you how excited I was to find out that ",[23,18699,18702],{"href":18700,"rel":18701},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fjava-17-runtime-now-available-on-aws-lambda\u002F",[101],"AWS Lambda now supports Java 17",". In this article my friend Mark Sailes explains what this means for Lambda developers. I can tell you that I have been waiting for this and you can expect some content around this in the near future!",[1274,18705,18706,18707,18712],{},"I really enjoyed this article on ",[23,18708,18711],{"href":18709,"rel":18710},"https:\u002F\u002Ffoojay.io\u002Ftoday\u002Fcreating-scalable-openai-gpt-applications-in-java\u002F",[101],"Creating Scalable OpenAI GPT applications in Java"," by Denis Magda. This article walks you through how to send prompts to GPT and how to scale your application by storing data in YugabyteDB.",[33,18714,11465],{"id":30},[16,18716,17595,18717,18722],{},[23,18718,18721],{"href":18719,"rel":18720},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=--TsEhxgRfg",[101],"this presentation"," by Alina Yurenko at Voxxed days Bucharest. Alina is a Developer Advocate for GraalVM and walks us through how to Supercharge your Native Image Applications using GraalVM.",[33,18724,12149],{"id":12148},[16,18726,18727],{},"“The best time to plant a tree was 20 years ago. The second best time is now” - Chinese Proverb",[33,18729,12488],{"id":2235},[16,18731,18732],{},[23,18733,18734],{"href":18734,"rel":18735},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1651717016473018370",[101],[28,18737,172],{"id":171},[16,18739,11327,18740,11333],{},[23,18741,11332],{"href":11330,"rel":18742},[101],[16,18744,9630,18745,191,18747,18749,18751,18753],{},[189,18746],{},[189,18748],{},[23,18750,11491],{"href":11490},[189,18752],{},[23,18754,198],{"href":198,"rel":18755},[101],{"title":200,"searchDepth":201,"depth":201,"links":18757},[18758,18759,18760,18761,18762,18763,18769],{"id":12204,"depth":201,"text":12205},{"id":18646,"depth":201,"text":18647},{"id":18653,"depth":201,"text":18654},{"id":18672,"depth":201,"text":18673},{"id":18681,"depth":201,"text":18682},{"id":10953,"depth":201,"text":11191,"children":18764},[18765,18766,18767,18768],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18771,"path":18772,"title":18773,"description":18774,"meta":18775,"body":18778},"newsletter\u002Fnewsletter\u002F2023\u002F04\u002F17\u002Fvirtual-threads-spring.md","\u002Fnewsletter\u002F2023\u002F04\u002F17\u002Fvirtual-threads-spring","Virtual Threads in Spring & Launching a New Blog!","Happy Monday and welcome to another edition of the newsletter. The weather in Northeast Ohio was amazing last week, just what my mental health needed. After spending a week in Atlanta for Devnexus, the continuation of good weather was a welcome change. I was able to run outside and it instantly put me in a better mood.",{"slug":18776,"date":18777},"virtual-threads-spring","2023-04-17T10:30:00.000Z",{"type":13,"value":18779,"toc":18955},[18780,18782,18785,18789,18793,18801,18804,18812,18814,18818,18821,18824,18828,18831,18847,18851,18854,18857,18863,18866,18875,18878,18881,18884,18893,18895,18897,18904,18906,18916,18920,18927,18929,18935,18937,18942],[16,18781,18774],{},[16,18783,18784],{},"In this edition, I will discuss my latest video on Virtual Threads in Spring and introduce a new website I launched using Nuxt 3 + Notion.",[28,18786,18788],{"id":18787},"content","Content",[33,18790,18792],{"id":18791},"virtual-threads-in-spring-boot","Virtual Threads in Spring Boot",[16,18794,18795,18796,18800],{},"It's been announced that ",[23,18797,18799],{"href":14475,"rel":18798},[101],"virtual threads are targeted for JDK 21",", which is exciting news as it means they might show up in Spring Framework 6.1 (also targeted for later this year). So it's about time we all learn about virtual threads and why we might care about them as Spring developers.",[16,18802,18803],{},"Project Loom aims to reduce the effort of writing, maintaining, and observing high-throughput concurrent applications. It introduces virtual threads as a solution to improve performance and scalability, particularly when dealing with blocking APIs commonly found in Spring MVC applications.",[16,18805,18806,18807,18811],{},"I wrote a ",[23,18808,6034],{"href":18809,"rel":18810},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F04\u002F12\u002Fvirtual-threads-spring\u002F",[101]," and created a video that walks through the thread-per-request model and how Virtual Threads are going to improve performance in our Spring MVC applications.",[47,18813],{"id":18182},[33,18815,18817],{"id":18816},"graphql-client","GraphQL Client",[16,18819,18820],{},"I have been talking a lot lately about how to build GraphQL APIs but what happens when you need to call a GraphQL API within your Spring applications? It turns out that the Spring for GraphQL gives us an easy to use client based on the Web Client. You can use the appropriate version for whatever server transport you are using such as HTTP, WebSocket, RSocket.",[47,18822],{"id":18823},"BuPItqaVeGo",[33,18825,18827],{"id":18826},"youtube-shorts","YouTube Shorts",[16,18829,18830],{},"I love creating YouTube shorts because they are a different format and because they come in under 60 seconds they take much less time to produce. I’m still playing with different formats. Last week I created 2 shorts around some basic concepts in Java.",[1271,18832,18833,18840],{},[1274,18834,18835],{},[23,18836,18839],{"href":18837,"rel":18838},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FWtWbR6UrT8E?feature=share",[101],"How to convert a String into an Integer in Java",[1274,18841,18842],{},[23,18843,18846],{"href":18844,"rel":18845},"https:\u002F\u002Fstudio.youtube.com\u002Fvideo\u002FHuGWdsHGcm4\u002Fedit",[101],"Master Java String Comparison: Unlock the Power of the Equals Method in Under 60 Seconds!",[28,18848,18850],{"id":18849},"nuxt-notion","Nuxt + Notion",[16,18852,18853],{},"Before I dive into the specifics I want to give you a little back story on this new project. When my wife and I had our first daughter we decided early on that she was going to stay home to take care of her. We feel very fortunate to be a position to have done this but my wife did need to leave her career behind. She graduated college as an english major and has always had a passion for writing.",[16,18855,18856],{},"This past Christmas I bought her a laptop and a book on writing and encouraged her to pursue her passion. I introduced her to Notion and all of the amazing features you get out of the box and showed her how to organize her content. She began writing about what she is passionate about and she happens to pretty amazing at all of them as well. She wanted to document her time being a Mom and everything that goes into that. With that she came up with the name Momoir (A memoir in Mom form) and This is My Momoir was born.",[16,18858,18859],{},[74,18860],{"alt":18861,"src":18862},"This is my Momoir","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F17\u002Fmomoir.png",[16,18864,18865],{},"Initially, I expected her to write a few blog posts before I started building the site. However, a couple of months passed, and she managed to write 50 blog posts! 🤯 She is incredibly productive, which made me rethink how I should approach building the site.",[16,18867,18868,18869,18874],{},"All the posts were already in Notion, so it didn't make sense to export them to another CMS. Additionally, I wanted her to be able to publish new content without me being a bottleneck. Therefore, I decided to use the ",[23,18870,18873],{"href":18871,"rel":18872},"https:\u002F\u002Fdevelopers.notion.com\u002F",[101],"Notion API"," and make Notion the CMS for the site.",[16,18876,18877],{},"I chose Nuxt 3 because of my previous experience using it and because I find it to be a fantastic tool. The Nuxt team has thought of everything, and the developer experience is excellent.",[16,18879,18880],{},"The biggest challenge I faced was with Notion being so customizable. Everything in the API is returned as \"blocks\", which meant that for everything from paragraphs to images and videos, I had to write a custom component to render that block.",[16,18882,18883],{},"I have a lot to share with you about this project, so if you're interested in hearing the details, please let me know.",[16,18885,18886,18887,18892],{},"Recently, my wife celebrated her birthday and decided that it was a great time to launch the site. If you want to read more about it, you can visit her \"",[23,18888,18891],{"href":18889,"rel":18890},"https:\u002F\u002Fwww.thisismymomoir.com\u002Fblog\u002Fits-our-birthday",[101],"It's Our Birthday","\" post. I just want to publicly say how proud I am of you, Jen (I know you're reading this). It takes a lot to put yourself out there, and I absolutely love what you did with this project. I can't wait to see where it takes you!",[28,18894,11191],{"id":10953},[33,18896,11465],{"id":30},[16,18898,10983,18899,18903],{},[23,18900,9888],{"href":18901,"rel":18902},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=oKYeGfZnznk",[101]," by Sean Cannel with Think Media where he discusses the painful truths about YouTube Short.",[33,18905,16576],{"id":16575},[16,18907,18908,18909,18913,18914,522],{},"I thought ",[23,18910,4722],{"href":18911,"rel":18912},"https:\u002F\u002Fgithub.com\u002Fmaciej-scratches\u002Fspring-boot-3.1-service-connection-demo",[101]," from Maciej was really interesting. This repository shows multiple ways how to set up and use Testcontainers in a Spring Boot application, including the new ",[469,18915,6368],{},[33,18917,18919],{"id":18918},"️podcasts","🎙️ Podcasts",[16,18921,10983,18922,18926],{},[23,18923,14282],{"href":18924,"rel":18925},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=aMD0zdlrH-o",[101]," from Greg Turnquist on the Spring Boot Learning channel. In this episode Greg walks us through 5 of his pro tips for professional coders in 2023. Greg is a pro and it was great to hear his insight.",[33,18928,12488],{"id":2235},[16,18930,18931],{},[23,18932,18933],{"href":18933,"rel":18934},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1646867149766443008",[101],[28,18936,172],{"id":171},[16,18938,11327,18939,11333],{},[23,18940,11332],{"href":11330,"rel":18941},[101],[16,18943,9630,18944,191,18946,18948,18950,18952],{},[189,18945],{},[189,18947],{},[23,18949,11491],{"href":11490},[189,18951],{},[23,18953,198],{"href":198,"rel":18954},[101],{"title":200,"searchDepth":201,"depth":201,"links":18956},[18957,18962,18963,18969],{"id":18787,"depth":201,"text":18788,"children":18958},[18959,18960,18961],{"id":18791,"depth":206,"text":18792},{"id":18816,"depth":206,"text":18817},{"id":18826,"depth":206,"text":18827},{"id":18849,"depth":201,"text":18850},{"id":10953,"depth":201,"text":11191,"children":18964},[18965,18966,18967,18968],{"id":30,"depth":206,"text":11465},{"id":16575,"depth":206,"text":16576},{"id":18918,"depth":206,"text":18919},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":18971,"path":18972,"title":18973,"description":18974,"meta":18975,"body":18977},"newsletter\u002Fnewsletter\u002F2023\u002F04\u002F24\u002Fspring-boot-3-1-first-look.md","\u002Fnewsletter\u002F2023\u002F04\u002F24\u002Fspring-boot-3-1-first-look","🔥 What’s new in Spring Boot 3.1","Happy Monday and welcome to the start of another work week. I hope you had a wonderful weekend. Mine was great - this past weekend I had my first daddy-daughter dance with my oldest daughter, Bella (5). It was an amazing night and she was so excited to get “fancied up”, as she says. We had a delicious meal with friends, an ice cream bar, hula hoops, and of course, we danced the night away.",{"slug":18976,"date":18777},"spring-boot-3-1-first-look",{"type":13,"value":18978,"toc":19162},[18979,18981,18987,18990,18994,19002,19044,19056,19058,19060,19064,19072,19075,19079,19082,19085,19089,19092,19108,19110,19112,19121,19123,19131,19133,19136,19142,19144,19149],[16,18980,18974],{},[16,18982,18983],{},[74,18984],{"alt":18985,"src":18986},"Daddy Daughter Dance 2023","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F17\u002Fdaddy-daughter-dance.png",[16,18988,18989],{},"This week, I want to talk to you about the newly released Spring Boot 3.1 RC1. Additionally, I will discuss what I worked on last week, which includes Spring Beans, Spring Security, and YouTube Shorts.",[28,18991,18993],{"id":18992},"spring-boot-310-rc-1","Spring Boot 3.1.0 RC 1",[16,18995,18996,18997,19001],{},"Spring Boot 3.1.0 RC 1 has just been released. If you want to learn more about it, you can check out the ",[23,18998,7253],{"href":18999,"rel":19000},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.1.0-RC1-Release-Notes",[101],". I will highlight some of the new features in this release.",[1271,19003,19004,19009,19020,19032,19038],{},[1274,19005,19006,19008],{},[161,19007,13996],{}," - I’m a big fan of using Testcontainers in my integration tests to provide a lightweight throwaway database or any other container that I need. In Spring Boot 3.1 it’s also possible to use them at development time.",[1274,19010,19011,19013,19014,19016,19017,184],{},[161,19012,15498],{}," - A new module ",[469,19015,18672],{}," provides integration with Docker Compose. When your app is starting up, the Docker Compose integration will look for a configuration file in the current working directory. No more starting your application only to see an error because you forgot to run ",[469,19018,19019],{},"docker compose up",[1274,19021,19022,19025,19026,19028,19029,19031],{},[161,19023,19024],{},"SSL Configuration"," - SSL trust material such as Java KeyStores and PEM-encoded certificates can now be configured using properties and applied to connections of various types such as embedded web servers, data services, ",[469,19027,14529],{},"\n and ",[469,19030,14520],{},"\n in a more consistent manner.",[1274,19033,19034,19037],{},[161,19035,19036],{},"Docker Images"," - There are some nice improvements to customizing the Docker Image using Maven or Gradle.",[1274,19039,19040,19043],{},[161,19041,19042],{},"Dependency Upgrades"," - Spring Boot 3.1.0-RC1 moves to new versions of several Spring projects",[16,19045,19046,19047,19051,19052,19055],{},"We plan to discuss this topic in more depth during ",[23,19048,12882],{"href":19049,"rel":19050},"https:\u002F\u002Fyoutube.com\u002Flive\u002FlLykB3GI1Cs?feature=share",[101],". Please join us live or watch the replay. I also plan to create one or two videos for my ",[23,19053,2944],{"href":4869,"rel":19054},[101],". If you haven't subscribed yet, what are you waiting for?",[28,19057,18647],{"id":18646},[16,19059,18650],{},[33,19061,19063],{"id":19062},"spring-beans","Spring Beans",[16,19065,19066,19067,19071],{},"In a recent video, I discussed Spring Beans and how to create them using @Component vs @Bean annotations. Have you ever come across a term that seemed confusing, only to realize later that it was quite simple? For me, Spring Beans was one of those terms when I first started out. In this video, I delve deeper into the topic. I also covered Spring Beans in my ",[23,19068,19070],{"href":17833,"rel":19069},[101],"Spring Boot Crash Course",", but that is a four-hour long video.",[47,19073],{"id":19074},"CWEQ-1vff1o",[33,19076,19078],{"id":19077},"multiple-spring-security-configs","Multiple Spring Security Configs",[16,19080,19081],{},"Recently, I have discussed how to configure Spring Security using the new component model. This video covers a couple of scenarios where you may need multiple security configurations and how to create them. In previous versions of Spring Security, this was difficult, but it is now much easier.",[47,19083],{"id":19084},"PczgM2L3w60",[33,19086,19088],{"id":19087},"shorts","Shorts",[16,19090,19091],{},"I love making YouTube shorts because they allow me to produce videos in a shorter time cycle. They also provide an opportunity for me to try out new ideas and editing techniques. Last week, I produced a short video on how to pronounce \"char\" in Java, and it was so much fun. I was literally laughing out loud in between takes. Moreover, they have been receiving a good number of views, which is encouraging. So, be on the lookout for more videos this week!",[1271,19093,19094,19101],{},[1274,19095,19096],{},[23,19097,19100],{"href":19098,"rel":19099},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FYTcoGEIuRUQ?feature=share",[101],"How to pronounce char in Java",[1274,19102,19103],{},[23,19104,19107],{"href":19105,"rel":19106},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FnSYpFhlUFzM?feature=share",[101],"Java String .contains() method",[28,19109,11191],{"id":10953},[33,19111,11465],{"id":30},[16,19113,19114,19115,19120],{},"I really enjoyed this 60 Minutes piece on ",[23,19116,19119],{"href":19117,"rel":19118},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=880TBXMuzmk",[101],"The AI revolution",". Google's CEO, Sundar Pichai, believes AI's impact will depend on human nature and that the AI revolution is coming quickly.",[33,19122,16576],{"id":16575},[16,19124,19125,19126,19130],{},"As a huge fan of Vue and Nuxt, it was great to see the Nuxt team release another really impressive minor update. Check out this ",[23,19127,6034],{"href":19128,"rel":19129},"https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv3-4",[101]," to learn about the new features in Nuxt 3.4.",[33,19132,12488],{"id":2235},[16,19134,19135],{},"I’m really enjoying this BenQ ScreenBar Plus. I thought it would just be for nighttime productivity but ever since I added blackout curtains to my office It comes in handy at all times of the day!",[16,19137,19138],{},[23,19139,19140],{"href":19140,"rel":19141},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1650292153535324160",[101],[28,19143,172],{"id":171},[16,19145,11327,19146,11333],{},[23,19147,11332],{"href":11330,"rel":19148},[101],[16,19150,9630,19151,191,19153,19155,19157,19159],{},[189,19152],{},[189,19154],{},[23,19156,11491],{"href":11490},[189,19158],{},[23,19160,198],{"href":198,"rel":19161},[101],{"title":200,"searchDepth":201,"depth":201,"links":19163},[19164,19165,19170,19175],{"id":18992,"depth":201,"text":18993},{"id":18646,"depth":201,"text":18647,"children":19166},[19167,19168,19169],{"id":19062,"depth":206,"text":19063},{"id":19077,"depth":206,"text":19078},{"id":19087,"depth":206,"text":19088},{"id":10953,"depth":201,"text":11191,"children":19171},[19172,19173,19174],{"id":30,"depth":206,"text":11465},{"id":16575,"depth":206,"text":16576},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":19177,"path":19178,"title":19179,"description":19180,"meta":19181,"body":19184},"newsletter\u002Fnewsletter\u002F2023\u002F04\u002F11\u002Fdevnexus-2023.md","\u002Fnewsletter\u002F2023\u002F04\u002F11\u002Fdevnexus-2023","Devnexus 2023","Happy Tuesday and welcome to another edition of the newsletter. In this episode I want to tell you all about my trip to Atlanta for Devnexus 2023. Spring is now in full swing here in Northeast Ohio and I couldn’t be happier. It’s amazing how much getting out for a run or a trip to the park with the family can help your mental well being.",{"slug":19182,"date":19183},"devnexus-2023","2023-04-11T10:30:00.000Z",{"type":13,"value":19185,"toc":19355},[19186,19188,19190,19205,19208,19214,19217,19223,19231,19234,19240,19244,19247,19253,19256,19262,19268,19271,19277,19280,19286,19290,19293,19299,19308,19314,19317,19323,19325,19328,19332,19335,19337,19342],[16,19187,19180],{},[28,19189,19179],{"id":19182},[16,19191,19192,19193,19198,19199,19204],{},"I attended Devnexus for the first time last week and wow what an incredible week it was. I got in Monday afternoon and started the trip off right with a run with my friend DaShaun. This would be the first of 3 runs on the trip all focused around the beautiful ",[23,19194,19197],{"href":19195,"rel":19196},"https:\u002F\u002Fwww.gwcca.org\u002Fcentennial-olympic-park",[101],"Centennial Olympic Park"," in downtown Atlanta. Monday night I had some dinner with friends and then we went to meet a group at a local pub. This was my first chance to meet so many people including ",[23,19200,19203],{"href":19201,"rel":19202},"https:\u002F\u002Ftwitter.com\u002FSharat_Chander",[101],"Sharat Chander"," who is one of the great people and leaders in our community.",[16,19206,19207],{},"Tuesday afternoon we checked in for the conference at the Georgia World Congress Center and were immediately met by Pratik, and Glenn who are 2 of the amazing organizers who help make this conference happen.",[16,19209,19210],{},[74,19211],{"alt":19212,"src":19213},"80D9E858-6FDA-41F8-A4FC-3F4C5C043A18.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002F80D9E858-6FDA-41F8-A4FC-3F4C5C043A18.jpeg",[16,19215,19216],{},"I got a really cool bag as a speaker gift and whole bunch of cool swag by the time the conference was over.",[16,19218,19219],{},[74,19220],{"alt":19221,"src":19222},"2B260C5C-98A9-47A2-8D59-AAAB99E2D2D2.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002F2B260C5C-98A9-47A2-8D59-AAAB99E2D2D2.jpeg",[16,19224,19225,19226,19230],{},"After we were checked in DaShaun and I got setup in one of the presentation rooms and held a ",[23,19227,93],{"href":19228,"rel":19229},"https:\u002F\u002Fyoutube.com\u002Flive\u002Fkkq-FdLzXQk?feature=share",[101]," live from Devnexus. We ended up using a tripod, iPhone and a USB microphone and I thought the live stream was pretty good quality. I believe this is the first time we have ever done Office Hours live so that was pretty cool.",[16,19232,19233],{},"Tuesday night was the speaker dinner and it was a great way to kick off the conference. I had the opportunity to meet so many people I have talked to over the years. I really can’t describe just how cool it was to see so many people I have looked up to over the years in the same room. I called it an early night because the 1st day of the conference would be a busy one for me.",[16,19235,19236],{},[74,19237],{"alt":19238,"src":19239},"0A367485-629D-4C24-9174-6EE36AF03994.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002F0A367485-629D-4C24-9174-6EE36AF03994.jpeg",[33,19241,19243],{"id":19242},"day-1","Day 1",[16,19245,19246],{},"I was up early for day 1 like a kid on Christmas morning. DaShaun and I walked over early to the conference early to grab some breakfast. We ate in the speaker room with my good friend Todd Sharp. The 3 of us went into the keynote early so we could get front row seats 🤓",[16,19248,19249],{},[74,19250],{"alt":19251,"src":19252},"F1C7E511-FD9D-4DB6-94A5-0F6620011D8B.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002FF1C7E511-FD9D-4DB6-94A5-0F6620011D8B.jpeg",[16,19254,19255],{},"The keynote was given by Arun Gupta from IBM and it would be my favorite presentation of the entire conference. Arun talked about the importance of soft skills and 5 in particular. I’m still not sure if the presentations will be available online to everyone but if they are this is a must watch in my books. Thank you Arun for putting together such a thoughtful and impactful presentation!",[16,19257,19258],{},[23,19259,19260],{"href":19260,"rel":19261},"https:\u002F\u002Ftwitter.com\u002Farungupta\u002Fstatus\u002F1643663149675970580",[101],[16,19263,19264],{},[74,19265],{"alt":19266,"src":19267},"474A0F8B-BA2D-45F9-975B-C4F8686D045C.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002F474A0F8B-BA2D-45F9-975B-C4F8686D045C.jpeg",[16,19269,19270],{},"I had to dip out of the keynote a few minutes early and get setup for my presentation. My friend Nate Schutta and I presented on Spring Recipes, common sense solutions with Spring. The idea is that there are a vast number of projects in the ecosystem and you might not realize that Spring can do that. We presented a problem and then a way to solve it using Spring. Overall I thought the presentation went well and I’m very appreciative of everyone who came out to watch us.",[16,19272,19273],{},[74,19274],{"alt":19275,"src":19276},"D80D9F1E-46B2-4029-AFD2-A4C76E403487.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002FD80D9F1E-46B2-4029-AFD2-A4C76E403487.jpeg",[16,19278,19279],{},"It was also really great to see and catch up with my friend Ken Kousen who was in the room for our presentation 🤩",[16,19281,19282],{},[74,19283],{"alt":19284,"src":19285},"338A27FA-EE43-4F55-B1F3-CF07C9445871.jpeg","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002F338A27FA-EE43-4F55-B1F3-CF07C9445871.jpeg",[28,19287,19289],{"id":19288},"day-2","Day 2",[16,19291,19292],{},"Day 1 was a wonderful experience but it was also a really long day. I decided to sleep in a little, got up and went for an amazing morning run! After I got ready and checked out of my room I went over to the conference to catch a little bit of DaShaun’s talk.",[16,19294,19295],{},[74,19296],{"alt":19297,"src":19298},"IMG_6372.HEIC","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002FIMG_6372.jpeg",[16,19300,19301,19302,19307],{},"After that I was on booth duty and it was my first time working a booth so I didn’t know what to expect. This was a chance for me to tell everyone about this amazing new product we have called ",[23,19303,19306],{"href":19304,"rel":19305},"http:\u002F\u002Fspring.academy",[101],"spring.academy",". I honestly had a blast talking to so many developers and learning about where they work and what they use Spring for.",[16,19309,19310],{},[74,19311],{"alt":19312,"src":19313},"IMG_6426.JPG","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F11\u002FIMG_6426.jpg",[16,19315,19316],{},"After booth duties I had to head to the airpot and head back to Cleveland.",[16,19318,19319],{},[23,19320,19321],{"href":19321,"rel":19322},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1644040591020310528",[101],[28,19324,16956],{"id":16955},[16,19326,19327],{},"As with every conference my favorite track was the hallway track. I had the opportunity to talk with so many people and I honestly came away from the conference with a huge sense of pride. I had so many people come up to me and tell me how much my content has helped them over the years. It’s one thing to see a comment on the internet from someone you don’t know, its another level when someone tells you that in person. If my producing content tank was a little empty heading into Devnexus, it’s now filled up! I love this community and I’m thankful for the opportunity to be a part of it. 🙏",[28,19329,19331],{"id":19330},"springone-vmware-explore","SpringOne @VMware Explore",[16,19333,19334],{},"This year, SpringOne is teaming up with VMware Explore in Las Vegas from August 21st-24th. The Spring community is essential, and without your voice, there is no Spring. If you didn’t hear the CFP deadline for VMware Explore has been extend until April 14th. If you’re interested in speaking please submit a talk, we would love to hear from you. See you in Vegas!",[28,19336,172],{"id":171},[16,19338,11327,19339,11333],{},[23,19340,11332],{"href":11330,"rel":19341},[101],[16,19343,9630,19344,191,19346,19348,19350,19352],{},[189,19345],{},[189,19347],{},[23,19349,11491],{"href":11490},[189,19351],{},[23,19353,198],{"href":198,"rel":19354},[101],{"title":200,"searchDepth":201,"depth":201,"links":19356},[19357,19360,19361,19362,19363],{"id":19182,"depth":201,"text":19179,"children":19358},[19359],{"id":19242,"depth":206,"text":19243},{"id":19288,"depth":201,"text":19289},{"id":16955,"depth":201,"text":16956},{"id":19330,"depth":201,"text":19331},{"id":171,"depth":201,"text":172},{"_id":19365,"path":19366,"title":19367,"description":19368,"meta":19369,"body":19372},"newsletter\u002Fnewsletter\u002F2023\u002F04\u002F03\u002Fvideotap.md","\u002Fnewsletter\u002F2023\u002F04\u002F03\u002Fvideotap","Heading to Devnexus, VideoTap and SpringOne CFP extended","Happy Monday and welcome to another edition of the newsletter. As I send this out, I am heading to the airport to fly down to Atlanta for Devnexus. If you're attending the conference, please let me know and be sure to say hi! 👋🏻",{"slug":19370,"date":19371},"videotap","2023-04-03T07:30:00.000Z",{"type":13,"value":19373,"toc":19544},[19374,19382,19385,19388,19392,19395,19398,19401,19408,19415,19421,19424,19454,19463,19469,19471,19473,19475,19477,19486,19488,19497,19499,19508,19510,19513,19515,19518,19524,19526,19531],[16,19375,19376,19377,19381],{},"Happy Monday and welcome to another edition of the newsletter. As I send this out, I am heading to the airport to fly down to Atlanta for ",[23,19378,19380],{"href":2651,"rel":19379},[101],"Devnexus",". If you're attending the conference, please let me know and be sure to say hi! 👋🏻",[16,19383,19384],{},"This is my first time attending this conference, and everyone has told me how amazing it is. Needless to say, I am beyond excited for this week. My friend Nate and I will be giving a talk on Spring Recipes, and we are scheduled right after the keynote on Wednesday, so you have no excuses.",[16,19386,19387],{},"After the talk, I am really looking forward to catching up with friends, learning new things, and enjoying a good meal or two. Additionally, I will be working at the VMware booth, so feel free to stop by and catch a demo while saying hello.",[28,19389,19391],{"id":19390},"video-tap","Video Tap",[16,19393,19394],{},"I want to start this week by introducing a new service that I'm really excited about. But before I dive into the details of the service, let me explain the problem it solves for me.",[16,19396,19397],{},"As a content creator, I have several mediums through which I can produce content. I write articles for my blog, create content for this newsletter, and produce articles and guides for the Tanzu Developer Center. I also enjoy creating short and long-form videos, as well as entire video courses.",[16,19399,19400],{},"The problem for me is that there is only 1 of me and I have to be very focused on where I spend my time. A big goal of mine is to grow my YouTube channel and so that is where I have been focusing my efforts. I’m not sure many people understand the time that goes into creating a single video but there is a lot that goes into it.",[16,19402,19403,19404,184],{},"By the time I publish that video I am ready to move on to the next one and don’t have the energy to write a full blog post to go along with the video. I know the argument to that and what some creators do is create the blog post first and use that to drive the video. That sounds great but again I don’t have the time for that and If I did it I think it would take away from ",[23,19405,14976],{"href":19406,"rel":19407},"http:\u002F\u002Fwww.youtube.com\u002F@danvega",[101],[16,19409,19410,19414],{},[23,19411,16272],{"href":19412,"rel":19413},"https:\u002F\u002Fvideotapit.com\u002F?via=dan",[101]," is a service that transcribes and converts videos into blog posts. They recently increased their video length limit to 25 minutes, which is ideal for most videos. What sets VideoTap apart is the quality of their blog post output. Instead of simply dumping the transcription, they use GPT-4 to generate high-quality blog posts that include code blocks, making them much more compelling articles. Here is a screenshot of a blog post I am currently working on.",[16,19416,19417],{},[74,19418],{"alt":19419,"src":19420},"VideoTap - Convert Videos to Blog Posts with ease","\u002Fimages\u002Fnewsletter\u002F2023\u002F04\u002F03\u002Fvideotap.png",[16,19422,19423],{},"If you want to read through a few blog posts that I have recently created using VideoTap you can check out these:",[1271,19425,19426,19433,19440,19447],{},[1274,19427,19428],{},[23,19429,19432],{"href":19430,"rel":19431},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F20\u002Fgraphql-mutations\u002F",[101],"GraphQL Mutations",[1274,19434,19435],{},[23,19436,19439],{"href":19437,"rel":19438},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F15\u002Fspring-security-lambda-dsl\u002F",[101],"Spring Security Configuration - Lambda DSL",[1274,19441,19442],{},[23,19443,19446],{"href":19444,"rel":19445},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F02\u002Fspring-shell-intro\u002F",[101],"Building Command Line Applications with Spring",[1274,19448,19449],{},[23,19450,19453],{"href":19451,"rel":19452},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F02\u002F03\u002Fnative-images-graalvm\u002F",[101],"Building Native Images with GraalVM",[16,19455,19456,19457,19462],{},"The service costs $1 per minute of video and this is reasonably priced. I was thinking about hiring someone to do this and I know this would have cost me 3-4x as much and I’m not sure how they would have turned out. If you’re interested they also have a professional service for $3.00 a minute where they will take all of your videos, convert them and send you back the markdown. They also have a free ",[23,19458,19461],{"href":19459,"rel":19460},"https:\u002F\u002Fvideotapit.com\u002Fyoutube-chapters-generator?ref=dan",[101],"YouTube chapters generator"," which I have found really useful.",[16,19464,19465,19468],{},[23,19466,16272],{"href":19412,"rel":19467},[101]," is one of those services that have come along at the perfect time. I can only imagine this service getting better and I’m excited about using it more in my creator workflow.",[28,19470,19331],{"id":19330},[16,19472,19334],{},[28,19474,11191],{"id":10953},[33,19476,11453],{"id":11452},[16,19478,19479,19480,19485],{},"I’m a big fan of Nuxt and I enjoyed this article introducing ",[23,19481,19484],{"href":19482,"rel":19483},"https:\u002F\u002Fnuxt.com\u002Fblog\u002Fintroducing-nuxt-devtools",[101],"Nuxt DevTools",". Nuxt really does a great job of putting the developer experience first and this is just another example of that.",[33,19487,11465],{"id":30},[16,19489,19490,19491,19496],{},"I really enjoyed this panel discussion about ",[23,19492,19495],{"href":19493,"rel":19494},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=G1tR2bF1Geg",[101],"Continuous Learning as a Developer",". This is a subject that is near and dear to me as someone who considers himself a life long learner. I thought there panel was great and Layla did a great job running the show.",[33,19498,13650],{"id":973},[16,19500,19501,19502,19507],{},"I’m a big fan of the podcast My First Million. In ",[23,19503,19506],{"href":19504,"rel":19505},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gbDl28Hx9TA",[101],"this episode"," the guys talk with Hubspot Co-founder and CTO Dharmesh Shah about Chat GPT and AI. Dharmesh shares his excitement around AI and says that its the most disruptive technology since the internet became mainstream. I share his enthusiasm for what AI is going to do and how it will amplify us as developers.",[33,19509,12149],{"id":12148},[16,19511,19512],{},"“Comparison is the thief of joy” - Teddy Roosevelt",[33,19514,12488],{"id":2235},[16,19516,19517],{},"If you weren’t aware you can now use Java 20 in your Spring Boot projects 🤩",[16,19519,19520],{},[23,19521,19522],{"href":19522,"rel":19523},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1640346550378414080",[101],[28,19525,172],{"id":171},[16,19527,11327,19528,11333],{},[23,19529,11332],{"href":11330,"rel":19530},[101],[16,19532,9630,19533,191,19535,19537,19539,19541],{},[189,19534],{},[189,19536],{},[23,19538,11491],{"href":11490},[189,19540],{},[23,19542,198],{"href":198,"rel":19543},[101],{"title":200,"searchDepth":201,"depth":201,"links":19545},[19546,19547,19548,19555],{"id":19390,"depth":201,"text":19391},{"id":19330,"depth":201,"text":19331},{"id":10953,"depth":201,"text":11191,"children":19549},[19550,19551,19552,19553,19554],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":19557,"path":19558,"title":19559,"description":19560,"meta":19561,"body":19564},"newsletter\u002Fnewsletter\u002F2023\u002F03\u002F27\u002Fproject-loom.md","\u002Fnewsletter\u002F2023\u002F03\u002F27\u002Fproject-loom","Project Loom, GraphQL Mutations, and a very special Birthday!","Happy Monday and welcome to another edition of the newsletter. If you're enjoying these conversations, please consider sharing my newsletter with a friend.",{"slug":19562,"date":19563},"project-loom","2023-03-27T07:30:00.000Z",{"type":13,"value":19565,"toc":19720},[19566,19575,19578,19581,19584,19592,19598,19601,19604,19607,19610,19613,19617,19626,19632,19634,19636,19645,19647,19649,19657,19659,19667,19669,19676,19689,19691,19694,19700,19702,19707],[16,19567,19568,19569,19574],{},"Happy Monday and welcome to another edition of the newsletter. If you're enjoying these conversations, please consider sharing ",[23,19570,19573],{"href":19571,"rel":19572},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002F",[101],"my newsletter"," with a friend.",[16,19576,19577],{},"In this edition of \"Dan Rambles About What He's Been Up To,\" I want to talk about Project Loom, GraphQL Mutations, and a very special birthday.",[28,19579,19580],{"id":18172},"Project Loom & Virtual Threads",[16,19582,19583],{},"Last week, I spent a lot of time catching up on Project Loom and Virtual Threads. I wanted to give them a test drive in a Spring Boot application for a demo I am putting together. Before discussing the benefits of embracing virtual threads in a Spring application, it's important to provide some context about what they are and why they are needed.",[16,19585,19586,19587,19591],{},"I shared a graphic on ",[23,19588,183],{"href":19589,"rel":19590},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1638646601295044608",[101]," which, as of writing this newsletter, has over 55,000 views. This is amazing and indicates a high level of interest in this topic. Based on feedback, many people have questions about what Project Loom is and what problems it will solve for Spring developers. I hope to answer these and other questions in the near future.",[16,19593,19594],{},[74,19595],{"alt":19596,"src":19597},"Embracing Virtual Threads in Spring Applications","\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F27\u002Fembracing-virtual-threads.png",[16,19599,19600],{},"If you have any questions about this, please feel free to reach out and let me know.",[28,19602,19432],{"id":19603},"graphql-mutations",[16,19605,19606],{},"If you follow me, you know I am a huge fan of GraphQL. If you're interested in getting started with GraphQL, I have a ton of resources on my blog and YouTube channel. However, I don't have much content on mutations in GraphQL, so I decided to change that.",[16,19608,19609],{},"If you aren't aware, there are three main operation types in GraphQL: query, mutation, and subscription. A mutation is used any time you want to change data, such as creating, updating, or deleting a record. In this tutorial, I will show you a few examples of how to create a new resource using a mutation. I will walk you through using simple scalar types, such as strings, a complex object type, and a way to bulk create using a List. I hope you enjoy this tutorial and if you had questions about mutations I hope I answered them.",[47,19611],{"id":19612},"u3FFRq3-0CM",[28,19614,19616],{"id":19615},"happy-birthday-spring","Happy Birthday Spring",[16,19618,19619,19620,19625],{},"It’s kind of hard to believe but The Spring Framework celebrated it’s 19th birthday last week. If you want you can read the blog post announcing ",[23,19621,19624],{"href":19622,"rel":19623},"https:\u002F\u002Fspring.io\u002Fblog\u002F2004\u002F03\u002F24\u002Fspring-framework-1-0-final-released",[101],"Spring Framework 1.0"," back on March 24, 2004.",[16,19627,19628],{},[74,19629],{"alt":19630,"src":19631},"Happy 19th Birthday Spring!","\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F27\u002Fhappy-birthday-spring.jpeg",[16,19633,19630],{},[28,19635,19331],{"id":19330},[16,19637,19638,19639,19644],{},"This year, SpringOne is teaming up with VMware Explore in Las Vegas from August 21st-24th. The Spring community is essential, and without your voice, there is no Spring. If you are interested in speaking, please ",[23,19640,19643],{"href":19641,"rel":19642},"https:\u002F\u002Fevent.vmware.com\u002Fflow\u002Fvmware\u002Fexplore2023lv\u002Fcfp\u002FcfpHome",[101],"submit a talk"," by April 14th. We would love to hear from you. See you in Vegas!",[28,19646,11191],{"id":10953},[33,19648,11453],{"id":11452},[16,19650,19651,19656],{},[23,19652,19655],{"href":19653,"rel":19654},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F03\u002F23\u002Fspring-boot-3-0-5-available-now",[101],"Spring 3.0.5"," was just released and with it comes Java 20 support.",[33,19658,11465],{"id":30},[16,19660,19661,19662,19666],{},"I had the pleasure of hosting a new episode of The Golden Path to SpringOne. In ",[23,19663,19506],{"href":19664,"rel":19665},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VgfNCrIVll8",[101],", I sat down with Maciej Walkowiak, a great member of our community and an all-around good guy. He spoke about the open-source project he runs, called Spring Cloud AWS, and its newest release, 3.0.",[33,19668,13650],{"id":973},[16,19670,350,19671,19675],{},[23,19672,19506],{"href":19673,"rel":19674},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=L_Guz73e6fw",[101]," of the Lex Friedman Podcast Lex sits down with Sam Altman. If you don’t know Sam is the CEO of OpenAI and they talk about GPT-4, Chat GPT, and the future of AI.",[16,19677,19678,19679,4201,19684,19688],{},"In this episode of the ",[23,19680,19683],{"href":19681,"rel":19682},"https:\u002F\u002Finside.java\u002F2023\u002F03\u002F23\u002Fnewscast-44\u002F",[101],"Inside Java Newscast",[23,19685,11431],{"href":19686,"rel":19687},"https:\u002F\u002Finside.java\u002Fu\u002FBillyKorando",[101]," walks us through an unboxing of Java 20. That’s right Java 20 was just released and if you want to find out what’s new this is a great video to get caught up on.",[33,19690,12488],{"id":2235},[16,19692,19693],{},"I was able to unbox the BenQ ScreenBar plus last week and so far I’m very impressed.",[16,19695,19696],{},[23,19697,19698],{"href":19698,"rel":19699},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1638993071898611731",[101],[28,19701,172],{"id":171},[16,19703,11327,19704,11333],{},[23,19705,11332],{"href":11330,"rel":19706},[101],[16,19708,9630,19709,191,19711,19713,19715,19717],{},[189,19710],{},[189,19712],{},[23,19714,11491],{"href":11490},[189,19716],{},[23,19718,198],{"href":198,"rel":19719},[101],{"title":200,"searchDepth":201,"depth":201,"links":19721},[19722,19723,19724,19725,19726,19732],{"id":18172,"depth":201,"text":19580},{"id":19603,"depth":201,"text":19432},{"id":19615,"depth":201,"text":19616},{"id":19330,"depth":201,"text":19331},{"id":10953,"depth":201,"text":11191,"children":19727},[19728,19729,19730,19731],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":19734,"path":19735,"title":19736,"description":19737,"meta":19738,"body":19741},"newsletter\u002Fnewsletter\u002F2023\u002F03\u002F20\u002Fchat-gpt-4.md","\u002Fnewsletter\u002F2023\u002F03\u002F20\u002Fchat-gpt-4","Chat GPT-4, Spring News, and Nuxt + Notion","Welcome to another edition of \"Dan tells you what he's been up to lately\"! This week's big news was the release of GPT-4, and I was excited to explore the new features of this tool, which plays a significant role in my daily workflow.",{"slug":19739,"date":19740},"chat-gpt-4","2023-03-20T07:30:00.000Z",{"type":13,"value":19742,"toc":19959},[19743,19745,19748,19756,19762,19765,19769,19773,19776,19782,19789,19793,19823,19826,19830,19851,19855,19858,19861,19870,19873,19875,19881,19883,19885,19892,19900,19903,19910,19919,19921,19926,19928,19931,19937,19939,19946],[16,19744,19737],{},[16,19746,19747],{},"GPT-4 is a state-of-the-art language model developed by OpenAI. It is an advanced version of its predecessor, GPT-3, designed to improve performance in natural language understanding and generation tasks. Key features of GPT-4 include its large scale, better training data, and improvements in model architecture. These enhancements contribute to its superior capabilities for generating human-like text, answering questions, and completing a wide range of tasks.",[16,19749,19750,19751,19755],{},"In case you were wondering I asked Chat GPT-4 to summarize ",[23,19752,10979],{"href":19753,"rel":19754},"https:\u002F\u002Fopenai.com\u002Fresearch\u002Fgpt-4",[101]," and it gave me the previous paragraph. If you’re a ChatGPT Plus user you will be able to select GPT-4 and it’s currently capped at 50 messages every 4 hours.",[16,19757,19758],{},[74,19759],{"alt":19760,"src":19761},"chat-gpt-4.png","\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F20\u002Fchat-gpt-4.png",[16,19763,19764],{},"In my opinion, the biggest highlights of this model are that it now supports multiple inputs and can process images, which opens up a whole new set of possibilities. Additionally, it can handle larger datasets as input, and although it runs slightly slower than GPT-3, I have found the results to be more accurate. The model training data is also supposed to be better, but a downside is that it still only goes up until September 2021.",[28,19766,19768],{"id":19767},"what-im-working-on","What I’m working on…",[33,19770,19772],{"id":19771},"spring-security-lambda-dsl","Spring Security Lambda DSL",[16,19774,19775],{},"This week I worked on YouTube Tutorial that explained what the Spring Security Lambda DSL was. I would often post Spring Security configuration that looked like the screenshot below and I would get questions about the syntax of that configuration.",[16,19777,19778],{},[74,19779],{"alt":19780,"src":19781},"lambda-dsl-example.png","\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F20\u002Flambda-dsl-example.png",[16,19783,19784,19785,184],{},"If you’re confused about what this syntax is or why it was introduced please check out ",[23,19786,9888],{"href":19787,"rel":19788},"https:\u002F\u002Fyoutu.be\u002FPWnEZh_t0WI",[101],[33,19790,19792],{"id":19791},"spring-boot-304","Spring Boot 3.0.4",[16,19794,19795,19796,19801,19802,19805,19806,19810,19811,19814,19815,19818,19819,19822],{},"In a ",[23,19797,19800],{"href":19798,"rel":19799},"https:\u002F\u002Fyoutube.com\u002Flive\u002FeRMbHR5LnOc?feature=share",[101],"recent episode"," of ",[23,19803,93],{"href":3060,"rel":19804},[101]," DaShaun and I took a look at the recently released ",[23,19807,19792],{"href":19808,"rel":19809},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F03\u002F03\u002Fspring-boot-3-0-4-available-now",[101],". The reason we wanted to highlight this release is because of a regression that was found. This issue caused problems with Spring applications located in directories with spaces. In these cases, the creation of all ",[469,19812,19813],{},"@Configuration"," classes and ",[469,19816,19817],{},"@RestController","s, along with other ",[469,19820,19821],{},"@ComponentScan","based beans, may be skipped.",[47,19824],{"id":19825},"eRMbHR5LnOc",[33,19827,19829],{"id":19828},"spring-beans-component-vs-bean","Spring Beans - @Component vs @Bean",[16,19831,19832,19833,19838,19839,529,19842,19844,19845,19850],{},"I am revisiting my blog and updating posts that I think could use some improvement. Recently, I published a ",[23,19834,19837],{"href":19835,"rel":19836},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F09\u002Fspring-boot-crash-course\u002F",[101],"Spring Crash Course"," where I briefly discussed the concept of Spring Beans and the use of ",[469,19840,19841],{},"@Component",[469,19843,4446],{},". However, I realized that this topic deserves a more detailed tutorial, so I decided to update my ",[23,19846,19849],{"href":19847,"rel":19848},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2017\u002F05\u002F17\u002Fspring-component-vs-bean\u002F",[101],"original blog post"," dedicated to it.",[28,19852,19854],{"id":19853},"nuxt-3-notion","Nuxt 3 + Notion",[16,19856,19857],{},"If you follow me on Twitter you know that I have been working on a new lifestyle blog for my wife. She is starting a blog called This is my Momoir to share everything she has learned on this beautiful, exhausting, magical journey known as motherhood.",[16,19859,19860],{},"I decided to go with Nuxt 3 on the front end which was the easy decision but I struggled with what I wanted to do for content. After my wife told me she had written 50 blog posts already I knew that I needed to set up some sort of CMS for her so that I didn’t need to convert these to markdown or HTML.",[16,19862,19863,19864,19869],{},"As a big fan of Notion, I decided to use it and its API to pull in content. While its high level of customizability has made ",[23,19865,19868],{"href":19866,"rel":19867},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F03\u002F12\u002Fnotion-api-file-expired\u002F",[101],"this project challenging",", it has also been enjoyable to work with. I would like to express my gratitude to the entire Nuxt team and community for creating such a wonderful framework. They have truly provided an answer to every \"How do I do that?\" question.",[16,19871,19872],{},"We plan to launch it in the next couple of weeks and I look forward to sharing that experience with you. If you have any questions about Nuxt 3, Vue 3, Notion API, or Tailwind CSS, please feel free to ask and I will try to address them.",[28,19874,19331],{"id":19330},[16,19876,19638,19877,19880],{},[23,19878,19643],{"href":19641,"rel":19879},[101]," by March 31st. We would love to hear from you. See you in Vegas!",[28,19882,11191],{"id":10953},[33,19884,11453],{"id":11452},[16,19886,10983,19887,19891],{},[23,19888,10979],{"href":19889,"rel":19890},"https:\u002F\u002Frieckpil.de\u002Fspring-boot-testing-mockmvc-vs-webtestclient-vs-testresttemplate\u002F",[101]," by Philip Riecks on Spring Boot Testing. In this article, he breaks down when you should use Mock MVC, Web Test Client, or Test Rest Template.",[16,19893,19894,19895,184],{},"If you haven’t had a check out Testcontainers yet you’re missing out. I enjoyed reading this guide on ",[23,19896,19899],{"href":19897,"rel":19898},"https:\u002F\u002Ftestcontainers.com\u002Fguides\u002Ftesting-spring-boot-rest-api-using-testcontainers\u002F",[101],"Getting Started with Testcontainers in a Java Spring Boot Project",[33,19901,19902],{"id":16575},"💻 Projects",[16,19904,19905,19909],{},[23,19906,14246],{"href":19907,"rel":19908},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F8303683",[101]," have been submitted to be finalized in JDK 21 🤩 This is exciting and also means that this should be a part of Spring Framework 6.1 in November. This hasn’t finalized on our side yet but if things stay this way you will be able to use virtual threads in your Spring applications this year!",[16,19911,19912,19913,19918],{},"I was just talking about how much I have been enjoying working with Nuxt. Speaking of my friends at Nuxt they just released ",[23,19914,19917],{"href":19915,"rel":19916},"https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv3-3",[101],"version 3.3",". There are a few exciting enhancements and one that caught my eye was better logging support for browser dev tools.",[33,19920,12149],{"id":12148},[2238,19922,19923],{},[16,19924,19925],{},"Attitude is the 'little' thing that makes a big difference. - Winston Churchill",[33,19927,12488],{"id":2235},[16,19929,19930],{},"Added some blue to the background this week. What do you think?",[16,19932,19933],{},[23,19934,19935],{"href":19935,"rel":19936},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1636379016956616704",[101],[28,19938,172],{"id":171},[16,19940,19941,19942,11333],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any links you would like me to include please get ",[23,19943,19945],{"href":11330,"rel":19944},[101],"in touch with me",[16,19947,9630,19948,191,19950,19952,19954,19956],{},[189,19949],{},[189,19951],{},[23,19953,11491],{"href":11490},[189,19955],{},[23,19957,198],{"href":198,"rel":19958},[101],{"title":200,"searchDepth":201,"depth":201,"links":19960},[19961,19966,19967,19968,19974],{"id":19767,"depth":201,"text":19768,"children":19962},[19963,19964,19965],{"id":19771,"depth":206,"text":19772},{"id":19791,"depth":206,"text":19792},{"id":19828,"depth":206,"text":19829},{"id":19853,"depth":201,"text":19854},{"id":19330,"depth":201,"text":19331},{"id":10953,"depth":201,"text":11191,"children":19969},[19970,19971,19972,19973],{"id":11452,"depth":206,"text":11453},{"id":16575,"depth":206,"text":19902},{"id":12148,"depth":206,"text":12149},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":19976,"path":19977,"title":19978,"description":19979,"meta":19980,"body":19983},"newsletter\u002Fnewsletter\u002F2023\u002F03\u002F06\u002Fspring-shell.md","\u002Fnewsletter\u002F2023\u002F03\u002F06\u002Fspring-shell","Live Streaming, Spring Shell & Nuxt 3","Welcome to another edition of the newsletter! First, I want to congratulate anyone who lives in a cold-weather area for making it through the worst part of winter. March is officially here! Today I want to talk to you about Live Streaming, Spring Shell, and Nuxt 3.",{"slug":19981,"date":19982},"spring-shell","2023-03-06T07:30:00.000Z",{"type":13,"value":19984,"toc":20161},[19985,19987,19989,19992,20001,20006,20009,20046,20052,20056,20059,20062,20065,20069,20072,20075,20078,20081,20087,20090,20092,20094,20103,20105,20119,20121,20130,20132,20135,20141,20143,20148],[16,19986,19979],{},[28,19988,10471],{"id":10470},[16,19990,19991],{},"If you’re a regular around here you know that I host a show every week with my friend DaShaun called Spring Office Hours. That show is so much fun and I look forward to it every single week. There is some level of planning that goes into that show and we don’t have the chance to do a ton of live coding on that show.",[16,19993,19994,19995,20000],{},"Recently, I made the decision to incorporate live coding into my regular routine. The idea had been on my mind for the last couple of weeks and I was excited to try it out. For my streaming software, I'm using ",[23,19996,19999],{"href":19997,"rel":19998},"https:\u002F\u002Fwww.ecamm.com\u002Fmac\u002Fecammlive\u002F",[101],"Ecamm Live",", which is different from the software I use on Spring Office Hours. I knew it would take a few episodes to get used to, but I finally feel like I have a handle on it.",[16,20002,20003],{},[74,20004],{"alt":10471,"src":20005},"\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F06\u002Flive-streaming-screenshot.png",[16,20007,20008],{},"It can get lonely working at home in my dungeon (I work out of the basement) so it’s been a lot of fun connecting with you. I want to thank everyone for joining me during my live streams including Simon, Thomas, and Pad 5 who have been amazing supporters. I was able to go live 5 times over the last 2 weeks and if you missed them you can check out the replays below.",[1271,20010,20011,20018,20025,20032,20039],{},[1274,20012,20013],{},[23,20014,20017],{"href":20015,"rel":20016},"https:\u002F\u002Fyoutube.com\u002Flive\u002FuQDa5eNUSyo?feature=share",[101],"Spring Office Hours - Video Editing",[1274,20019,20020],{},[23,20021,20024],{"href":20022,"rel":20023},"https:\u002F\u002Fyoutube.com\u002Flive\u002FFDRfg77MJsk?feature=share",[101],"Introduction to Spring Shell (Part 1)",[1274,20026,20027],{},[23,20028,20031],{"href":20029,"rel":20030},"https:\u002F\u002Fyoutube.com\u002Flive\u002F1xuTqgilNzM?feature=share",[101],"Introduction to Spring Shell (Part 2)",[1274,20033,20034],{},[23,20035,20038],{"href":20036,"rel":20037},"https:\u002F\u002Fyoutube.com\u002Flive\u002FE84E7c7IlAQ?feature=share",[101],"Introduction to Spring Shell (Part 3)",[1274,20040,20041],{},[23,20042,20045],{"href":20043,"rel":20044},"https:\u002F\u002Fyoutube.com\u002Flive\u002Fe8wEcemxcfI?feature=share",[101],"Introduction to Spring Shell (Part 4)",[16,20047,20048,20049,184],{},"My plan is to use these live streams as an opportunity to share some insight into what I am working on next. I have plans for a few live streams this week, but I need to find time in my schedule for them. If you want to be notified when I go live, please make sure you are subscribed to my ",[23,20050,3842],{"href":4869,"rel":20051},[101],[28,20053,20055],{"id":20054},"spring-shell-introduction","Spring Shell Introduction",[16,20057,20058],{},"During those live streams, I worked on the demo that I would ultimately use in my Introduction to Spring Shell. Spring Shell is a great project in the Spring ecosystem that enables you to build command-line applications using the same language, framework, and tools that you use every day.",[16,20060,20061],{},"This tutorial will teach you the basics of Spring Shell by guiding you through the creation of a simple dad joke CLI. You can run this CLI right from your command line whenever you need a good laugh.",[47,20063],{"id":20064},"8B0IjOIzicU",[28,20066,20068],{"id":20067},"nuxt-3","Nuxt 3",[16,20070,20071],{},"I had a great time playing around with Nuxt 3 over the weekend and I'm excited to explore it further. Currently, I have two projects that I'm working on with Nuxt 3. One of them involves moving my website over to Nuxt 3, which I've been planning to do for a while now.",[16,20073,20074],{},"The other is a blog that is driven by a content management system. This isn’t just any CMS though, it’s using Notion. I entertained the idea of moving the content in Notion over to a headless CMS but that just seemed like a bunch of work with no gain.",[16,20076,20077],{},"The author of this blog enjoys writing in Notion so I figured I would just keep it all there. This doesn’t come without its challenges though. A notion page is not simply a dump of content. It’s a highly customizable structure of data so reading data from the API and reconstructing a page back on the nuxt side was a challenge.",[16,20079,20080],{},"Here is a screenshot of a new blog I started in Notion on the left and the Nuxt 3 application displaying those posts on the right. Notice that only the blog posts in the Done column are being displayed. I have a lot more to share on this front including pulling some similar functionality into Spring Boot so stay tuned!",[16,20082,20083],{},[74,20084],{"alt":20085,"src":20086},"Notion + Nuxt Blog","\u002Fimages\u002Fnewsletter\u002F2023\u002F03\u002F06\u002Fnotion_nuxt_blog.png",[16,20088,20089],{},"What I am still working out is how this will perform in production. There will probably be 1-2 new posts a week so this could almost be a statically generated site. I’m trying to understand all of the different build modes Nuxt 3 comes with to make the right choice here. I also need to figure out if I can use something like Nuxt Image with images that are hosted on Notion (AWS S3 Buckets).",[28,20091,11191],{"id":10953},[33,20093,11453],{"id":11452},[16,20095,20096,20097,20102],{},"I enjoyed reading this article by Mark Thomas on ",[23,20098,20101],{"href":20099,"rel":20100},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F02\u002F27\u002Fweb-applications-and-project-loom",[101],"Web Applications and Project Loom",". The article explains what Project Loom is and how it could benefit Spring developers. By switching to a virtual thread-based executor, web applications that currently use classic Spring MVC should see some scalability improvements.",[33,20104,13650],{"id":973},[16,20106,20107,20108,529,20113,20118],{},"I enjoyed listening to two podcasts from a recent episode of the Bootiful Podcast. Josh has started live-streaming the recording of the podcast, which I think is a wonderful addition. In the latest episode, Josh interviewed ",[23,20109,20112],{"href":20110,"rel":20111},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F02\u002F23\u002Fa-bootiful-podcast-its-glenn-renfro-listen-to-this-episode-if-you-want-to",[101],"Glenn Renfro",[23,20114,20117],{"href":20115,"rel":20116},"https:\u002F\u002Fspring.io\u002Fblog\u002F2023\u002F03\u002F02\u002Fa-bootiful-podcast-spring-cloud-stream-and-spring-cloud-function-lead-oleg",[101],"Oleg Zhurakousky",", two amazing members of the Spring Team.",[33,20120,11465],{"id":30},[16,20122,20123,20124,20129],{},"I really enjoyed this video on ",[23,20125,20128],{"href":20126,"rel":20127},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=uy6iN0d6J8E",[101],"How to Best Use Java Records as DTOs in Spring Boot 3"," from Yugabyte. I don’t think I ever knew that you could use a Query and cast the result to a class so I learned something new this weekend!",[33,20131,12488],{"id":2235},[16,20133,20134],{},"I was excited to see a tweet from Mark Sailes about the AWS Lambda team launching a preview of the Java 17 base container image. Although it's not yet production-ready, this development brings us one step closer to using Java 17 on AWS Lambda, and that makes me very happy!",[16,20136,20137],{},[23,20138,20139],{"href":20139,"rel":20140},"https:\u002F\u002Ftwitter.com\u002FMarkSailes3\u002Fstatus\u002F1630654777276215296",[101],[28,20142,172],{"id":171},[16,20144,11327,20145,11333],{},[23,20146,11332],{"href":11330,"rel":20147},[101],[16,20149,9630,20150,191,20152,20154,20156,20158],{},[189,20151],{},[189,20153],{},[23,20155,11491],{"href":11490},[189,20157],{},[23,20159,198],{"href":198,"rel":20160},[101],{"title":200,"searchDepth":201,"depth":201,"links":20162},[20163,20164,20165,20166,20172],{"id":10470,"depth":201,"text":10471},{"id":20054,"depth":201,"text":20055},{"id":20067,"depth":201,"text":20068},{"id":10953,"depth":201,"text":11191,"children":20167},[20168,20169,20170,20171],{"id":11452,"depth":206,"text":11453},{"id":973,"depth":206,"text":13650},{"id":30,"depth":206,"text":11465},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":20174,"path":20175,"title":20176,"description":20177,"meta":20178,"body":20181},"newsletter\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fspring-boot-crash-course.md","\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fspring-boot-crash-course","Spring Boot Crash Course, Chat GPT and YouTube news","Happy Monday and welcome to another edition of my newsletter. In today’s episode, I want to tell you all about the Spring Boot Crash Course I published last week. I also want to answer the question “Can Chat GPT write a Spring Boot application”? Finally, I will wrap up today’s newsletter with some YouTube news.",{"slug":20179,"date":20180},"spring-boot-crash-course","2023-02-20T07:30:00.000Z",{"type":13,"value":20182,"toc":20356},[20183,20185,20187,20190,20193,20198,20201,20204,20207,20210,20216,20220,20223,20226,20229,20240,20243,20245,20248,20251,20254,20263,20266,20268,20277,20283,20289,20295,20301,20303,20305,20314,20316,20325,20327,20330,20336,20338,20343],[16,20184,20177],{},[28,20186,19070],{"id":20179},[16,20188,20189],{},"This is a video that I have wanted to put together for a long time now. This introduction to Spring will teach you how to build a REST API using Spring Boot 3 and deploy it to production. This video ended up coming in under 4 hours and I am really happy with how it turned out.",[16,20191,20192],{},"I think I have talked about almost everything in this video in other videos but I wanted a single video where someone new to Spring could get up and running quickly. I start out by defining the prerequisites for this crash course, defining what The Spring Framework is and where Spring Boot fits in. Finally, we discuss what you will build in this course and what you will learn.",[16,20194,20195],{},[74,20196],{"alt":13740,"src":20197},"\u002Fimages\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fexcalidraw.png",[47,20199],{"id":20200},"UgX5lgv4uVM",[16,20202,20203],{},"While this was a lot of fun to put together and I think a lot of people are going to get some value out of it I’m glad I am done with that. Creating a 4-minute video for YouTube is a lot of work so you can only imagine how much work goes into creating a 4-hour video. You have to plan for hours of waiting for tasks like exporting, uploading, and processing time.",[16,20205,20206],{},"The video had something like 3000 views in the first 24 hours which is just amazing but I have a feeling it’s going to blow up over the next month or so 🤞🏻 If you found value in this please feel free to drop me some feedback.",[16,20208,20209],{},"With that done I will start recording a complete course that will include testing & security and go more in-depth into a few topics. This will be a paid course but should be pretty affordable for most. If this is something you’re interested in please let me know.",[16,20211,20212],{},[74,20213],{"alt":20214,"src":20215},"Spring Boot Course Outline","\u002Fimages\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fspring-boot-course-outline.png",[28,20217,20219],{"id":20218},"chat-gpt-spring-boot","Chat GPT & Spring Boot",[16,20221,20222],{},"I released another video last week where I set out to answer the question “Can Chat GPT create a Spring Boot Application?”. This was a lot of fun to work on and if you have been following this newsletter you know I am a big fan of AI and Chat GPT.",[47,20224],{"id":20225},"CXbXoMIVpRg",[16,20227,20228],{},"I started off this experiment by asking Chat GPT for a list of high-level steps needed to write a REST API in Spring Boot. For the most part, it did a really great job of giving us an outline of what we needed to do to accomplish that task. As I stated in the video I think Chat GPT is really good at 3 things when it comes to code:",[3943,20230,20231,20234,20237],{},[1274,20232,20233],{},"Providing an outline on how to solve a particular problem.",[1274,20235,20236],{},"Writing specific code when given the proper details.",[1274,20238,20239],{},"Explaining a certain block of code.",[16,20241,20242],{},"In the end, you still need to understand Java and Spring but I thought it did an excellent job of helping us write our application. There were many times when my knowledge helped me correct some things and I think that was a big takeaway for me. It’s not going to replace developers but it is a valuable tool that you should have in your toolbox.",[28,20244,3363],{"id":4557},[16,20246,20247],{},"Towards the end of last year, I crossed a pretty big milestone on YouTube when I hit 20,000 subscribers. Last week I crossed 25,000 and I want to thank all of you for your support. In particular, the Java and Spring community has shown me so much love over the last year and I’m very thankful 🙏",[16,20249,20250],{},"Speaking of YouTube I hired 2 editors from Upwork a couple of weeks ago and I wanted to let you know how that little experiment was going. This is coming out of my pocket so I don’t have much of a budget for this. I ended up using Chat GPT to craft a job description and I soon had a number of great candidates.",[16,20252,20253],{},"The first editor was really responsive and while he did a good job I just felt like it wasn’t providing a ton of value. These were edits that I could have made and they honestly took him about 2x as long as they would have taken me.",[16,20255,20256,20257,20262],{},"The 2nd editor provided me with a 1st cut of the video on a service called ",[23,20258,20261],{"href":20259,"rel":20260},"http:\u002F\u002Fframe.io",[101],"frame.io"," where I was able to watch it and leave comments with timestamps. I never heard of this service and I thought it was a wonderful way to provide feedback during the editing process. The only problem was he absolutely nailed the video and I only had 1 small comment. He is the one that did the Chat GPT & Spring Boot video I talked about above.",[16,20264,20265],{},"I have a ton of work I would like to give this person but again it comes back to budgeting. This is why I want to put together some paid courses so that I can feed that money back into the video creation process. Also if you or your business is interested in sponsoring an upcoming video please feel free to reach out. I’m 25,000 subscribers in and have yet to take any brand deals on my channel.",[28,20267,11577],{"id":11576},[16,20269,20270,20271,20276],{},"I’m a big fan of ",[23,20272,20275],{"href":20273,"rel":20274},"https:\u002F\u002Fmidjourney.com\u002F",[101],"Midjourney"," and recently signed up for a monthly membership that gets me access to 200 images a month and faster response times. I’m still learning how to craft good prompts to get the desired outcomes but so far it's really impressive. Here are 2 images I was experimenting with this week.",[16,20278,20279,20280],{},"A ",[161,20281,20282],{},"person reading a book RGB --ar 16:9 --stylize 100 --s 5000",[16,20284,20285],{},[74,20286],{"alt":20287,"src":20288},"Girl Reading a Book","\u002Fimages\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fgirl-reading-book.png",[16,20290,20291,20292],{},"L",[161,20293,20294],{},"as Vegas if it were taken over by zombies",[16,20296,20297],{},[74,20298],{"alt":20299,"src":20300},"Zombies in Vegas","\u002Fimages\u002Fnewsletter\u002F2023\u002F02\u002F20\u002Fzombies-in-vegas.png",[28,20302,11191],{"id":10953},[33,20304,13650],{"id":973},[16,20306,20307,20308,20313],{},"I was recently on the ",[23,20309,20312],{"href":20310,"rel":20311},"https:\u002F\u002Fwww.notion.so\u002Fmomoir-com-a10c4d2dc1494cd0a68be2121cdc4b93",[101],"Java PubHouse"," podcast with Freddy and Bob and we talked all about Spring Boot 3. This was a really fun conversation and I’m really looking forward to meeting both of them at Devnexus in April.",[33,20315,11465],{"id":30},[16,20317,20318,20319,20324],{},"I really enjoyed this video ",[23,20320,20323],{"href":20321,"rel":20322},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=LeoCh7VK9cg",[101],"Demystifying Spring Internals"," by Madhura Bhave who is an Engineer on the Spring team. She did an excellent job revealing some of the things that occur in your Spring application that you may not be aware of.",[33,20326,12488],{"id":2235},[16,20328,20329],{},"I had some free time (a whole hour) on Saturday night so I did what any self-respecting programmer would do. I decided to dive in and learn a completely new language and wrote my first Rust application.",[16,20331,20332],{},[23,20333,20334],{"href":20334,"rel":20335},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1627122138850246656",[101],[28,20337,172],{"id":171},[16,20339,11327,20340,11333],{},[23,20341,11332],{"href":11330,"rel":20342},[101],[16,20344,9630,20345,191,20347,20349,20351,20353],{},[189,20346],{},[189,20348],{},[23,20350,11491],{"href":11490},[189,20352],{},[23,20354,198],{"href":198,"rel":20355},[101],{"title":200,"searchDepth":201,"depth":201,"links":20357},[20358,20359,20360,20361,20362,20367],{"id":20179,"depth":201,"text":19070},{"id":20218,"depth":201,"text":20219},{"id":4557,"depth":201,"text":3363},{"id":11576,"depth":201,"text":11577},{"id":10953,"depth":201,"text":11191,"children":20363},[20364,20365,20366],{"id":973,"depth":206,"text":13650},{"id":30,"depth":206,"text":11465},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":20369,"path":20370,"title":20371,"description":20372,"meta":20373,"body":20376},"newsletter\u002Fnewsletter\u002F2023\u002F02\u002F13\u002Fsuper-monday-2023.md","\u002Fnewsletter\u002F2023\u002F02\u002F13\u002Fsuper-monday-2023","Super Monday, Chat GPT, Spring Office Hours and I’m kind of a big deal.","Happy Monday! Welcome to another week of me visiting your inbox for a few minutes. Last night was a thrilling Super Bowl, with Kansas City coming out on top 🎉 I'm not a huge fan of the referees' decisions, but I won't blame the players for that. My biggest takeaway is the same one I have every year: when are we going to move the Super Bowl to Saturday night?",{"slug":20374,"date":20375},"super-monday-2023","2023-02-13T08:30:00.000Z",{"type":13,"value":20377,"toc":20569},[20378,20380,20383,20386,20389,20392,20398,20401,20406,20410,20413,20420,20423,20426,20428,20435,20438,20441,20444,20467,20469,20476,20502,20506,20515,20517,20519,20528,20530,20539,20541,20547,20549,20554],[16,20379,20372],{},[16,20381,20382],{},"It's been two weeks since we last spoke, which is a reminder that we should make this a weekly event. In this edition, I want to discuss YouTube Shorts and Chat GPT, and I’ll share with you a major milestone that I crossed yesterday.",[16,20384,20385],{},"I was disappointed to learn that I wasn't accepted to Devoxx UK or Devoxx France. Even though I know rejection is part of the process, it never gets any easier. I was really hoping to get an invitation to one of them, so I could make the trip across the pond. However, I'll try again next year. I still have CFPs out to many conferences, so let's cross our fingers 🤞🏻 and wish the conference committees luck in making their tough decisions.",[16,20387,20388],{},"In better news, we're less than a month away from March 12th - one of my favorite days of the year. It's Daylight Saving Time when we move our clocks forward an hour. January and February can be long, cold, depressing months here, so this is a welcome change. It means the days will be longer and we'll soon be through Winter. Plus, I can start running outside again as the weather warms up - I'm not a fan of running at 30°F!",[16,20390,20391],{},"I hit a big milestone yesterday as I crossed 10,000 followers on the bird app. Thank you to everyone who follows me there and I hope I am providing value to your timeline.",[16,20393,20394],{},[23,20395,20396],{"href":20396,"rel":20397},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1624840872977113094",[101],[16,20399,20400],{},"I was really just excited about that milestone so I could share this 🤣",[16,20402,20403],{},[74,20404],{"alt":20405,"src":20405},"https:\u002F\u002Fmedia.giphy.com\u002Fmedia\u002F9LFBOD8a1Ip2M\u002Fgiphy.gif",[28,20407,20409],{"id":20408},"chat-gpt","Chat GPT",[16,20411,20412],{},"I worked on 2 new videos around Chat GPT. The first one was one that I was really excited to put together and I hope you enjoy watching as much fun as I had to put it together. In this tutorial, I built a CLI in Java called WTF GPT.",[16,20414,20415,20416,20419],{},"This application connects to the Open AI API (the same people behind Chat GPT) and responds to questions. I imagined it as a command line tool to help me remember commands I couldn't recall. Thanks to GraalVM, I was able to create a native image. Now, from the command line, I can type ",[469,20417,20418],{},"wtfgpt What is the command to list all docker images"," and get the correct response.",[47,20421],{"id":20422},"6RXtDxapKX8",[16,20424,20425],{},"I recently worked on a video to demonstrate how Chat GPT can write a Spring Boot application. It was recorded and is awaiting editing and publication. I'm pleased with the outcome and believe it showcases some of the tasks Chat GPT excels at. Ultimately, I'm a big fan of Chat GPT and think it could be a great addition to any developer's toolkit.",[28,20427,93],{"id":92},[16,20429,20430,20431,184],{},"In the latest edition of Spring Office Hours, we had a mailbag show where we planned to answer as many questions as possible. However, due to the high number of live questions, we didn't get to any of the mailbag questions. This is great news, as it shows that you enjoy these types of shows. Therefore, we will try to do them more often. In fact, the one we were supposed to do last week has been moved to ",[23,20432,20434],{"href":3060,"rel":20433},[101],"this week",[47,20436],{"id":20437},"iX8bMlR8Nsw",[16,20439,20440],{},"I created a few YouTube Shorts from this week's Spring Office Hours episode. I believe that taking a 1-minute clip of me answering a question is an excellent way to produce short-form content and provides me with an opportunity to repurpose content for YouTube Shorts.",[16,20442,20443],{},"Here are the 3 shorts I made from last week's episode:",[1271,20445,20446,20453,20460],{},[1274,20447,20448],{},[23,20449,20452],{"href":20450,"rel":20451},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FJZu94r1CTYI?feature=share",[101],"Will virtual threads render WebFlux Obsolete?",[1274,20454,20455],{},[23,20456,20459],{"href":20457,"rel":20458},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002Fvas12Uao1UQ?feature=share",[101],"Spring RestTemplate vs WebClient vs Java HttpClient",[1274,20461,20462],{},[23,20463,20466],{"href":20464,"rel":20465},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FRW6DsRQV_4M?feature=share",[101],"What does it take to become a Developer Advocate?",[28,20468,18788],{"id":18787},[16,20470,20471,20472,20475],{},"If you aren’t following me on Twitter or haven’t subscribed to my ",[23,20473,2944],{"href":4869,"rel":20474},[101]," here is some of my latest content that you missed:",[1271,20477,20478,20486,20494],{},[1274,20479,20480,20485],{},[23,20481,20484],{"href":20482,"rel":20483},"https:\u002F\u002Fyoutu.be\u002Fooknmgr4WiA",[101],"GraphQL Custom Scalars"," - Learn what the default scalars in GraphQL are defined by the specification and how you can use custom scalars in Spring for GraphQL.",[1274,20487,20488,20493],{},[23,20489,20492],{"href":20490,"rel":20491},"https:\u002F\u002Fyoutu.be\u002Fg78is10FjF0",[101],"My IntelliJ Setup"," - Everyone always asks me what theme I’m using in IntelliJ so I decided to go through and document my look and feel and some of my favorite features of IntelliJ.",[1274,20495,20496,20501],{},[23,20497,20500],{"href":20498,"rel":20499},"https:\u002F\u002Fyoutu.be\u002FRk4zfvVvRks",[101],"Native Images in Java using GraalVM"," - I took this opportunity to look at how GraalVM works when dealing with dynamic features of the JVM.",[16,20503,20504],{},[161,20505,19088],{},[1271,20507,20508],{},[1274,20509,20510],{},[23,20511,20514],{"href":20512,"rel":20513},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002Fm3MkJQ_Hn0k?feature=share",[101],"Will Artificial Intelligence (AI) replace Software Developers",[28,20516,11191],{"id":10953},[33,20518,11453],{"id":11452},[16,20520,20521,20522,20527],{},"I was aware that YouTube Shorts was gaining traction, but I was surprised to learn that it had reached ",[23,20523,20526],{"href":20524,"rel":20525},"https:\u002F\u002Ftechcrunch.com\u002F2023\u002F02\u002F03\u002Fgoogle-says-youtube-shorts-has-crossed-50-billion-daily-views\u002F",[101],"50 billion daily views",". If you're interested in creating short-form content, now is a great time to get involved, as this impressive figure is only set to increase.",[33,20529,11465],{"id":30},[16,20531,20532,20533,20538],{},"My friend and colleague Josh Long has been producing a lot of live streams on his ",[23,20534,20537],{"href":20535,"rel":20536},"https:\u002F\u002Fwww.youtube.com\u002F@coffeesoftware",[101],"new channel"," recently. I particularly enjoyed his videos on integrating with the YouTube API, as I recently went through this process myself.",[33,20540,12488],{"id":2235},[16,20542,20543],{},[23,20544,20545],{"href":20545,"rel":20546},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1623459242920255489",[101],[28,20548,172],{"id":171},[16,20550,11327,20551,11333],{},[23,20552,11332],{"href":11330,"rel":20553},[101],[16,20555,9630,20556,191,20558,20560,20562,20564,20567],{},[189,20557],{},[189,20559],{},[23,20561,11491],{"href":11490},[189,20563],{},[23,20565,198],{"href":198,"rel":20566},[101],[189,20568],{},{"title":200,"searchDepth":201,"depth":201,"links":20570},[20571,20572,20573,20574,20579],{"id":20408,"depth":201,"text":20409},{"id":92,"depth":201,"text":93},{"id":18787,"depth":201,"text":18788},{"id":10953,"depth":201,"text":11191,"children":20575},[20576,20577,20578],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":2235,"depth":206,"text":12488},{"id":171,"depth":201,"text":172},{"_id":20581,"path":20582,"title":20583,"description":20584,"meta":20585,"body":20588},"newsletter\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fspring-one-essentials.md","\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fspring-one-essentials","SpringOne Essentials, Jakarta EE 10, and Upcoming Content","Happy Monday and welcome to another edition of the newsletter! Last week, I had the opportunity to attend the SpringOne Essentials virtual conference in San Francisco. Today, I'd like to share with you some of the announcements made during the event. I also want to tell you about a new video I made last week as well as what I will be working on in the near future. With only one day left in January, we are getting ever closer to the eventual end of winter and that makes me smile.",{"slug":20586,"date":20587},"spring-one-essentials","2023-01-30T08:30:00.000Z",{"type":13,"value":20589,"toc":20782},[20590,20598,20604,20607,20614,20617,20631,20639,20646,20652,20658,20661,20665,20668,20674,20682,20685,20688,20694,20697,20703,20705,20708,20717,20720,20722,20724,20733,20736,20742,20744,20757,20759,20762,20764,20769],[16,20591,20592,20593,20597],{},"Happy Monday and welcome to another edition of the newsletter! Last week, I had the opportunity to attend the ",[23,20594,20596],{"href":16819,"rel":20595},[101],"SpringOne Essentials"," virtual conference in San Francisco. Today, I'd like to share with you some of the announcements made during the event. I also want to tell you about a new video I made last week as well as what I will be working on in the near future. With only one day left in January, we are getting ever closer to the eventual end of winter and that makes me smile.",[16,20599,20600],{},[74,20601],{"alt":20602,"src":20603},"VMware office San Francisco","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fvmware-sign.jpeg",[28,20605,20596],{"id":20606},"springone-essentials",[16,20608,20609,20610,20613],{},"I was able to make the trip out to San Francisco for our virtual event called ",[23,20611,20596],{"href":16819,"rel":20612},[101],". This is the event that replaced SpringOne last year which we, unfortunately, had to cancel. It was a great few days and I really enjoyed the energy I get from being back in the office around people.",[16,20615,20616],{},"DaShaun and I were there to watch the day 1 event and then give a presentation on What’s new in Spring Framework 6 and Spring Boot 3. I thought it was packed full of some really great presentations along with some awesome announcements. I really enjoyed our in-person presentation and I thought we got some really great questions from everyone in attendance.",[16,20618,20619,20620,20625,20626,20630],{},"The release of Spring Framework 6, Spring Boot 3, and all its accompanying features was the talk of the town. I really enjoyed Juergen Hoeller's comprehensive overview of what to expect with this new release and beyond. I also enjoyed the fact that everyone can get their hands on the ",[23,20621,20624],{"href":20622,"rel":20623},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Febooks\u002Fthe-state-of-spring-2022",[101],"State of Spring 2022"," report. This report is packed full of information on what developers are doing with Spring and how they feel about the current state of the framework. If you want to hear some more insights into this you can join us for ",[23,20627,93],{"href":20628,"rel":20629},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F",[101]," on Tuesday as we take a deep dive into the report.",[16,20632,20633,20634,20638],{},"We also announced the launch of ",[23,20635,12432],{"href":20636,"rel":20637},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fblog\u002Fintroducing-spring-academy",[101],". This is a valuable new resource to help developers of all levels improve their skills with Spring. Spring Academy provides an accessible way to start learning Spring and to grow skills with Spring at every level of your career as a developer. Created and curated by the Spring team, the foremost experts on all things Spring, Spring Academy delivers on-demand training so you can invest in yourself and your understanding of the latest developments in the Spring ecosystem.",[16,20640,20641,20642,184],{},"Finally, my colleague Rita Manachi has put together a great roundup of all the exciting announcements from SpringOne Essentials. Check it out ",[23,20643,742],{"href":20644,"rel":20645},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fblog\u002Fspringone-essentials-2023-news",[101],[16,20647,20648],{},[74,20649],{"alt":20650,"src":20651},"SpringOne Essentials Ballons","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fbaloons.jpeg",[16,20653,20654],{},[74,20655],{"alt":20656,"src":20657},"Full Snack Developers","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fsnack-bar.jpeg",[16,20659,20660],{},"I also just want to point out that it was great to be in San Francisco with my friend DaShaun. We got to have a couple of really great dinners together, we went on a nice run down by the pier and we even caught the new Avatar movie on a 3D IMAX screen which was incredible. I guess what I am trying to say is it’s really great working with people you love to be around and I highly recommend it 🥳",[28,20662,20664],{"id":20663},"jakarta-ee-10-in-spring-framework-6","Jakarta EE 10 in Spring Framework 6",[16,20666,20667],{},"As I was waiting to board my plane in San Francisco on Wednesday I decided to send out a tweet about Jakarta EE 10 support in Spring Boot 3 and how you can use a UUID as an auto-generated primary key. Little did I know that this last-minute tweet would garner so much attention 🤩",[16,20669,20670],{},[23,20671,20672],{"href":20672,"rel":20673},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1618310057699213314",[101],[16,20675,20676,20677,20681],{},"With a strong interest in the subject, I moved this video to the top of my queue and worked on it towards the end of the week. I also wrote an accompanying ",[23,20678,6034],{"href":20679,"rel":20680},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F01\u002F27\u002Fjakarta-ee-10-uuid\u002F",[101],", if you'd like to read it.",[16,20683,20684],{},"To stay true to my goal of creating better content, I followed my own advice and focused on improving one aspect of the video. I wanted to learn when and where to use adjustment layers. Adjustment layers are an excellent way to apply effects to only a part of a clip, without affecting the entire clip. You could split the clip and add effects directly, but the effects would be limited to that clip. The great thing about adjustment layers is that they can be reused in the future.",[16,20686,20687],{},"I added an adjustment layer to this video to blur it and bring some text to the foreground, to draw the viewer's attention. It's not the most thrilling thing, but I'm gaining new skills to help me tell stories more effectively.",[16,20689,20690],{},[74,20691],{"alt":20692,"src":20693},"Premiere Pro Timeline","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fpremiere-pro.png",[16,20695,20696],{},"In this tutorial, I demonstrated how to use the new UUID generator type in a Spring Data JPA application. It's exciting to start taking advantage of the new features available in Jakarta.",[16,20698,20699],{},[23,20700,20701],{"href":20701,"rel":20702},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZWwqcH__kr4",[101],[28,20704,16504],{"id":16503},[16,20706,20707],{},"My schedule is actually pretty clear all things considered for the next couple of months. The next conference I have on the schedule is Devnexus which takes place April 4-6 in Atlanta. I’m looking forward to presenting on Spring Recipes with my friend Nate Schutta.",[16,20709,20710,20711,20716],{},"I’m also going to be sitting down to record an episode of the ",[23,20712,20715],{"href":20713,"rel":20714},"https:\u002F\u002Fwww.javapubhouse.com\u002F",[101],"Java Pub House"," this week. We are going to talk about all things Spring Framework 6 and Spring Boot 3 and I am really looking forward to that. I am not sure when that will come out but I will be sure to let you know.",[16,20718,20719],{},"Other than that, I will be working on YouTube videos and have a large queue of videos to create. I'm also considering becoming a course creator again. I have three courses in mind and will likely start talking about them soon. The big question is where to publish them. I don't have an answer yet, but I'm leaning toward Udemy since I already have an audience there. I was waiting for YouTube to launch its course platform in the US, but that hasn't happened yet.",[28,20721,11191],{"id":10953},[33,20723,14122],{"id":14121},[16,20725,20726,20727,20732],{},"I started reading ",[23,20728,20731],{"href":20729,"rel":20730},"https:\u002F\u002Famzn.to\u002F3WP7whD",[101],"SuperIntelligence"," by Nick Bostrom on my way out to San Francisco and I’m almost done with it. This book is an exploration of the potential consequences of creating machines that are more intelligent than humans. This was an eye-opening book that examined the likely outcomes of a world where machines can think faster and more accurately than humans and the ethical implications of such a world.",[16,20734,20735],{},"While we are on the subject of books I saw this cheerful, color-coordinated bookshelf at the VMware office in San Francisco. Few things bring me more joy than a well-organized book collection 🤩",[16,20737,20738],{},[74,20739],{"alt":20740,"src":20741},"VMware Office Bookshelf","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F30\u002Fbookshelf.jpeg",[33,20743,13650],{"id":973},[16,20745,10983,20746,20751,20752,20756],{},[23,20747,20750],{"href":20748,"rel":20749},"https:\u002F\u002Faws.amazon.com\u002Fpodcasts\u002F567-introducing-aws-lambda-snapstart\u002F",[101],"this AWS podcast"," with Mark Sailes on AWS Lambda SnapStart. I did a ",[23,20753,7270],{"href":20754,"rel":20755},"https:\u002F\u002Fyoutu.be\u002FisS6m6aj_Ak",[101]," on AWS Lambda SnapStart for Spring Developers and I am really impressed with the technology. It was really great to hear a detailed explanation of the product and some of the edge cases you need to look out for.",[33,20758,12149],{"id":12148},[16,20760,20761],{},"“This is quite possibly the most important and most daunting challenge humanity has ever faced. And—whether we succeed or fail—it is probably the last challenge we will ever face.” - Nick Bostrom",[28,20763,172],{"id":171},[16,20765,11327,20766,11333],{},[23,20767,11332],{"href":11330,"rel":20768},[101],[16,20770,9630,20771,191,20773,20775,20777,20779],{},[189,20772],{},[189,20774],{},[23,20776,11491],{"href":11490},[189,20778],{},[23,20780,198],{"href":198,"rel":20781},[101],{"title":200,"searchDepth":201,"depth":201,"links":20783},[20784,20785,20786,20787,20792],{"id":20606,"depth":201,"text":20596},{"id":20663,"depth":201,"text":20664},{"id":16503,"depth":201,"text":16504},{"id":10953,"depth":201,"text":11191,"children":20788},[20789,20790,20791],{"id":14121,"depth":206,"text":14122},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":20794,"path":20795,"title":20796,"description":20797,"meta":20798,"body":20801},"newsletter\u002Fnewsletter\u002F2023\u002F01\u002F16\u002Fcodemash-2023.md","\u002Fnewsletter\u002F2023\u002F01\u002F16\u002Fcodemash-2023","CodeMash 2023","Happy Monday and welcome to another edition of the newsletter. This week I want to talk to you about my week in Sandusky Ohio for CodeMash 2023 and an upcoming presentation at the Cleveland Java User Group. I always feel so refreshed and excited to get back to work after a conference and this week is no different.",{"slug":20799,"date":20800},"codemash-2023","2023-01-15T07:30:00.000Z",{"type":13,"value":20802,"toc":20999},[20803,20805,20817,20819,20826,20835,20838,20841,20845,20848,20853,20856,20876,20879,20882,20885,20894,20900,20909,20913,20916,20922,20926,20929,20935,20937,20939,20947,20949,20958,20967,20969,20972,20978,20980,20986],[16,20804,20797],{},[16,20806,20807,20808,20813,20814,184],{},"I’m glad to be back home and in my office before a short trip to San Francisco next week for a ",[23,20809,20812],{"href":20810,"rel":20811},"https:\u002F\u002Fconnect.tanzu.vmware.com\u002FSpringOne-Essentials-Watch-Parties-2023.html",[101],"SpringOne Essentials Watch Party",". That’s right SpringOne has moved to an online experience to bring together the Spring Community. This is a virtual event that is taking place January 24-26 and you can ",[23,20815,8559],{"href":16819,"rel":20816},[101],[28,20818,3404],{"id":9000},[16,20820,20821,20825],{},[23,20822,3404],{"href":20823,"rel":20824},"https:\u002F\u002Fwww.codemash.org\u002F",[101]," is an annual developer conference that takes place in Sandusky Ohio and is attended by thousands of developers from all over the world. This year's conference featured a variety of talks and workshops on various topics related to software development.",[16,20827,20828,20829,20834],{},"This was my 2nd time attending and speaking at the conference and like the 1st it didn’t disappoint. I remember my ",[23,20830,20833],{"href":20831,"rel":20832},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2020\u002F01\u002F13\u002Fcodemash-2020-recap\u002F",[101],"first CodeMash"," very well because it took place in January of 2020. This would be the last conference and public event of any kind for me because shortly after the pandemic happened and we were locked indoors for the next 2 years.",[16,20836,20837],{},"This year's event was pretty special because I had a few of my teammates there with me. I was able to bring my family and our daughter Juliana who is 2 now wasn’t at the last one. The whole family loves going to Kalahari and it's a great way to break up the miserable cold weather that takes place in Cleveland in January.",[16,20839,20840],{},"I honestly didn’t have a ton of time to attend many sessions because I was busy with my own talks so I will give you a quick rundown of those.",[33,20842,20844],{"id":20843},"spring-workshop","Spring Workshop",[16,20846,20847],{},"My coworker DaShaun and I gave a 4-hour Introduction to Spring workshop. Overall I thought it went pretty well but this was the first time we gave this one and we learned a few things from it that we will take into the next one. Thank you to our coworker Whitney for grabbing this 📸",[16,20849,20850],{},[74,20851],{"alt":20844,"src":20852},"\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F15\u002Fspring_workshop_talk.jpeg",[16,20854,20855],{},"When you go into a workshop you think that 4 hours is a long time and it turns out that it's never enough time. We knew going in that we couldn’t cover everything but we were still pretty ambitious with what we did want to cover. This was the agenda that we ended up going through:",[1271,20857,20858,20861,20864,20867,20870,20873],{},[1274,20859,20860],{},"Introduction",[1274,20862,20863],{},"Getting Started with Spring",[1274,20865,20866],{},"Core Features and Fundamentals",[1274,20868,20869],{},"Spring MVC",[1274,20871,20872],{},"Data",[1274,20874,20875],{},"Production",[16,20877,20878],{},"I hope we get the chance to give this workshop again so if you’re interested in us doing so please feel free to reach out to me.",[33,20880,16835],{"id":20881},"graphql-talk",[16,20883,20884],{},"Next up was my solo talk titled “Give your APIs a REST and make the move to GraphQL”. This talk was an introduction to GraphQL in Java using Spring for GraphQL but a lot of the content was applicable to anyone getting started with it.",[16,20886,20887,20888,20893],{},"The room was packed out and it was great to see some familiar faces in the crowd. It was also my first time testing out my new ",[23,20889,20892],{"href":20890,"rel":20891},"https:\u002F\u002Famzn.to\u002F3IRkCrw",[101],"Logitech Spotlight pointer"," (thanks Nate) and I have to say that it worked out great!",[16,20895,20896],{},[74,20897],{"alt":20898,"src":20899},"GraphQL Presentation","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F15\u002Fdan_graphql_talk.jpeg",[16,20901,20902,20903,20908],{},"This presentation was a mix of slides and live coding and the pacing took me right up to my allotted time of 1 hour. The crowd was amazing and asked some really great questions during the presentation. I had to jot a couple of them down because they were really good and I need to get some answers to them. A huge Thank you to ",[23,20904,20907],{"href":20905,"rel":20906},"https:\u002F\u002Ftwitter.com\u002Ftoddlibby\u002Fstatus\u002F1613604500203532288",[101],"Todd"," for shaping this 📸 during my talk.",[33,20910,20912],{"id":20911},"speaker-dinner","Speaker Dinner",[16,20914,20915],{},"There is no official speaker dinner at CodeMash but since the beginning of time, Chris Judd and his company, Manifest Solutions have held a dinner down the street at Danny Boys. This was a chance to eat some good pizza and hang out with some really bright people. It’s really hard to grab people for meaningful conversations in a crowd of 2,000+ attendees at the conference so this setting did just that. Huge shoutout to Chris Judd and Manifest for putting this on!",[16,20917,20918],{},[74,20919],{"alt":20920,"src":20921},"Pizza Dinner","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F15\u002Fpizza-dinner.jpeg",[28,20923,20925],{"id":20924},"cleveland-java-user-group","Cleveland Java User Group",[16,20927,20928],{},"If you weren’t able to attend my talk at CodeMash I will be giving it to the Cleveland Java User Group this Tuesday, January 17th at 5:30 PM. If you want to learn what GraphQL is and why you might want to reach for it in your next Java application please consider checking this out. There will be free pizza and really great group of people to hang out with.",[16,20930,20931],{},[23,20932,20933],{"href":20933,"rel":20934},"https:\u002F\u002Fwww.meetup.com\u002Fcleveland-java\u002Fevents\u002F290716282\u002F",[101],[28,20936,11191],{"id":10953},[33,20938,11453],{"id":11452},[16,20940,18706,20941,20946],{},[23,20942,20945],{"href":20943,"rel":20944},"https:\u002F\u002Fwww.notion.so\u002FCodeMash-2023-9cd7c45af51e49599259039500526505",[101],"Getting Started with Java Development in 2023"," by Java Champion Gunnar Morling. The idea for this blog post is to provide an opinionated guide for folks getting started with Java development in 2023, helping you with your very first steps with that amazing platform.",[33,20948,14122],{"id":14121},[16,20950,20951,20952,20957],{},"I had a chance to start reading ",[23,20953,20956],{"href":20954,"rel":20955},"https:\u002F\u002Famzn.to\u002F3H52uJi",[101],"Greg Turnquist’s new book Learning Spring Boot 3.0"," and so far I am really enjoying it. It’s not just another dump of every single thing you need to learn in Spring which can be overwhelming. Instead, he offers a practical set of information to get you up and running with Spring. I was reading this on my iPad but I just got the physical copy and will switch over to that as soon as I can get back to it.",[16,20959,20960,20961,20966],{},"At the same time, I am currently reading ",[23,20962,20965],{"href":20963,"rel":20964},"https:\u002F\u002Famzn.to\u002F3iBJrgn",[101],"Can’t hurt me by David Goggins",". David has led an interesting life and his story is inspiring, to say the least. What I really love about this book is his message that we are all leaving so much potential on the table. The conversations about mindset have me waking up every morning ready to run through a brick wall.",[33,20968,12149],{"id":12148},[16,20970,20971],{},"“I don’t drink coffee to wake up. I wake up to drink coffee.” ― Starbucks at Kalahari 🤣",[16,20973,20974],{},[74,20975],{"alt":20976,"src":20977},"Coffee","\u002Fimages\u002Fnewsletter\u002F2023\u002F01\u002F15\u002Fcoffee.jpeg",[28,20979,172],{"id":171},[16,20981,20982,20983,11333],{},"I hope you enjoyed this installment of the newsletter and I will talk to you in the next one. If you have any links you would like me to include please ",[23,20984,11332],{"href":11330,"rel":20985},[101],[16,20987,9630,20988,191,20990,20992,20994,20996],{},[189,20989],{},[189,20991],{},[23,20993,11491],{"href":11490},[189,20995],{},[23,20997,198],{"href":198,"rel":20998},[101],{"title":200,"searchDepth":201,"depth":201,"links":21000},[21001,21006,21007,21012],{"id":9000,"depth":201,"text":3404,"children":21002},[21003,21004,21005],{"id":20843,"depth":206,"text":20844},{"id":20881,"depth":206,"text":16835},{"id":20911,"depth":206,"text":20912},{"id":20924,"depth":201,"text":20925},{"id":10953,"depth":201,"text":11191,"children":21008},[21009,21010,21011],{"id":11452,"depth":206,"text":11453},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":21014,"path":21015,"title":21016,"description":21017,"meta":21018,"body":21021},"newsletter\u002Fnewsletter\u002F2023\u002F01\u002F01\u002Fhappy-new-year-2023.md","\u002Fnewsletter\u002F2023\u002F01\u002F01\u002Fhappy-new-year-2023","Wishing you a Happy New Year!","Happy Monday and welcome to another edition of my newsletter. I want to start out by wishing you a Happy New Year. I hope your holidays were spent with family and friends and you were able to sneak in some rest, relaxation, learning, or all of the above. I have a couple of blog posts to share with you today and I’m preparing for a busy month of presentations.",{"slug":21019,"date":21020},"happy-new-year-2023","2023-01-01T09:00:00.000Z",{"type":13,"value":21022,"toc":21153},[21023,21025,21029,21032,21048,21051,21053,21060,21062,21065,21070,21076,21080,21083,21086,21089,21091,21093,21101,21103,21111,21113,21128,21130,21133,21135,21140],[16,21024,21017],{},[28,21026,21028],{"id":21027},"reflections-and-goals","Reflections and Goals",[16,21030,21031],{},"I enjoy taking some time over the holidays to reflect on the previous year and think about what I want to focus on in the new year. I wrote 2 new blog posts that I hope you’ll find interesting as you prepare for a new year.",[1271,21033,21034,21041],{},[1274,21035,21036],{},[23,21037,21040],{"href":21038,"rel":21039},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F12\u002F29\u002F2022-reflections\u002F",[101],"2022 Reflections",[1274,21042,21043],{},[23,21044,21047],{"href":21045,"rel":21046},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2023\u002F01\u002F01\u002Fhappy-new-year-2023\u002F",[101],"Happy New Year 2023",[28,21049,17369],{"id":21050},"presentations",[33,21052,3404],{"id":9000},[16,21054,21055,21056,21059],{},"I am heading to ",[23,21057,3404],{"href":20823,"rel":21058},[101]," next week to present, learn, and connect with the community. I am giving a talk on GraphQL in Java as well as an Introduction to Spring Workshop. This week will be spent fine-tuning those presentations and making sure I cover everything I want to talk about. I am beyond excited to see many friends I haven’t seen in a while as well and to connect with others in the community. If you are going to be there please make sure you stop me and say hi 👋🏻",[33,21061,20925],{"id":20924},[16,21063,21064],{},"If you can’t make it to CodeMash and you’re in the Cleveland area I will be giving my GraphQL talk in person on Tuesday, January 17th at Tech Elevator. The title of this talk is “Give your APIs a REST & Make the move to GraphQL” and here is a description of what I plan to cover.",[16,21066,21067],{},[734,21068,21069],{},"In a world where multiple applications and devices are calling your APIs, you end up having to create custom endpoints for different views of your data. What if you could provide fewer endpoints and let the consumer decide on which data they need? GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools. In this session, you will learn the basic concepts of GraphQL. You will then learn how to use GraphQL in your Java applications with Spring for GraphQL. By the end of this presentation, you will be able to write and validate queries, create your own GraphQL API and write automated tests against them.",[16,21071,21072],{},[23,21073,21074],{"href":21074,"rel":21075},"https:\u002F\u002Fwww.meetup.com\u002Fcleveland-java\u002F",[101],[28,21077,21079],{"id":21078},"spring-boot-3","Spring Boot 3",[16,21081,21082],{},"I am giving 3 presentations in January on Spring Boot 3. I believe 2 of them will be internal but the 3rd one should be public. That means as soon as I have a link to that presentation I will be sure to share it.",[16,21084,21085],{},"I have been having so much fun learning about all the new features in Spring Boot 3 and sharing what I have learned with the community. If you haven’t had a chance to check it out yet here is my video on What’s new in Spring Framework 6 and Spring Boot 3.",[47,21087],{"id":21088},"TR254zh-f3c",[28,21090,11191],{"id":10953},[33,21092,11453],{"id":11452},[16,21094,18706,21095,21100],{},[23,21096,21099],{"href":21097,"rel":21098},"https:\u002F\u002Fthegreatapi.com\u002Fblog\u002Fcreate-a-library-from-scratch\u002F",[101],"How to create a Java Library from scratch to Maven Central",". This article walks you step by step through how to create a library and then publish it a library on Maven Central. If you have never gone through this process this is a great place to start.",[33,21102,11465],{"id":30},[16,21104,20123,21105,21110],{},[23,21106,21109],{"href":21107,"rel":21108},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=JVPHSdHViMg",[101],"7 Awesome Libraries for Java Unit & Integration Testing"," by Marco Behler. Marco produces some of the best content around and I really enjoy his video tutorials. In this one, Marco walks through 7 awesome libraries and explains what they are and when you would want to use them.",[33,21112,13650],{"id":973},[16,21114,21115,21116,21121,21122,21127],{},"I have come to learn that not everyone knows about ",[23,21117,21120],{"href":21118,"rel":21119},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002F",[101],"A Bootiful Podcast"," with Josh Long. This is a podcast dedicated to the people behind Spring and its ecosystem. In this episode, Josh interviews ",[23,21123,21126],{"href":21124,"rel":21125},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Fee1262fe-d0a4-4d3b-9f8d-1e6510fedd1a",[101],"DaShaun Carter: an amazing human being, father, friend, engineer, and fellow Spring Developer Advocate",". This episode not only featured 2 of my coworkers and friends but it was also a great conversation around Spring.",[33,21129,12149],{"id":12148},[16,21131,21132],{},"“Not all readers are leaders, but all leaders are readers.” ― Harry S. Truman",[28,21134,172],{"id":171},[16,21136,20982,21137,11333],{},[23,21138,11332],{"href":11330,"rel":21139},[101],[16,21141,9630,21142,191,21144,21146,21148,21150],{},[189,21143],{},[189,21145],{},[23,21147,11491],{"href":11490},[189,21149],{},[23,21151,198],{"href":198,"rel":21152},[101],{"title":200,"searchDepth":201,"depth":201,"links":21154},[21155,21156,21160,21161,21167],{"id":21027,"depth":201,"text":21028},{"id":21050,"depth":201,"text":17369,"children":21157},[21158,21159],{"id":9000,"depth":206,"text":3404},{"id":20924,"depth":206,"text":20925},{"id":21078,"depth":201,"text":21079},{"id":10953,"depth":201,"text":11191,"children":21162},[21163,21164,21165,21166],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":21169,"path":21170,"title":21171,"description":21172,"meta":21173,"body":21176},"newsletter\u002Fnewsletter\u002F2022\u002F12\u002F19\u002Fhappy-holidays.md","\u002Fnewsletter\u002F2022\u002F12\u002F19\u002Fhappy-holidays","Happy Holidays, Spring Workshop, and new content","Happy Monday and welcome to the last edition of the newsletter in 2022. I’m sure we say this every single year but it’s really hard to believe that another year is almost behind us. Before we get to the good stuff I want to take this opportunity to thank you. This has been one of the best professional years of my career and I owe a lot of that to the support that you have given to me. I hope you and your family have a Happy Holiday and a wonderful time ringing in the new year.",{"slug":21174,"date":21175},"happy-holidays","2022-12-19T19:00:00.000Z",{"type":13,"value":21177,"toc":21418},[21178,21180,21186,21189,21193,21201,21204,21207,21240,21248,21252,21255,21264,21267,21271,21291,21297,21305,21313,21321,21333,21340,21343,21352,21355,21373,21376,21379,21385,21387,21395,21398,21400,21405],[16,21179,21172],{},[16,21181,21182],{},[74,21183],{"alt":21184,"src":21185},"Happy Holidays","\u002Fimages\u002Fnewsletter\u002F2022\u002F12\u002F19\u002Fclint-patterson-1-wBnPhsmJY-unsplash.jpg",[16,21187,21188],{},"I am working a few days this week and then I am out until the new year. During that time I hope to work on my end-of-the-year reflections as well as goals \u002F what I want to focus on in the new year. In today’s newsletter, I want to talk to you about the workshop I am currently working on, new content, and some travel plans for 2023.",[28,21190,21192],{"id":21191},"getting-started-with-spring-workshop","Getting Started with Spring Workshop",[16,21194,21195,21196,21200],{},"I’m currently working on a workshop that I will be delivering the 2nd week of January at CodeMash. I have talked about this before but this will be a 4-hour workshop which I think is the longest live presentation I have ever given. I have created a few 12-14 hour courses but those are totally different animals. DaShaun and I had another ",[23,21197,93],{"href":21198,"rel":21199},"https:\u002F\u002Fyoutu.be\u002FRx-qq3likgM",[101]," last week where we discussed our plans for the workshop.",[16,21202,21203],{},"In this episode, we had a chance to talk about the application we are going to build in the workshop which is called Runnerz. We both love to run and needed a domain to speak on so we figured this would be perfect. We had a chance to discuss what part of the domain model we would cover without getting too far into it and off-topic.",[16,21205,21206],{},"I also had a chance to really start diving into each of the sections that I am going to deliver and come up with a plan. The first section I went through was the core fundamentals and features of Spring & Spring Boot. I want to keep this section around an hour long so I had to be selective with what I wanted to teach and this is what I settled on:",[1271,21208,21209],{},[1274,21210,21211,21212],{},"Core Fundamentals & Features\n",[1271,21213,21214,21217,21220,21222,21225,21228,21231,21234,21237],{},[1274,21215,21216],{},"Structuring your code",[1274,21218,21219],{},"Spring IoC Container \u002F Application Context",[1274,21221,19063],{},[1274,21223,21224],{},"Dependency Injection",[1274,21226,21227],{},"Configuration",[1274,21229,21230],{},"Profiles",[1274,21232,21233],{},"Actuator",[1274,21235,21236],{},"Logging",[1274,21238,21239],{},"DevTools",[16,21241,21242,21243,21247],{},"I have a video on ",[23,21244,21224],{"href":21245,"rel":21246},"https:\u002F\u002Fyoutu.be\u002FaX-bgylmprA",[101]," that comes in at 30 minutes so even getting through this list is going to be a challenge. This week I will be doing some dry runs of each of my sections and getting everything ready to go. When I get back from break I only have a week to have this workshop and my talk on GraphQL polished up and ready to go. I’m beyond excited about CodeMash and I hope to see some of you there!",[28,21249,21251],{"id":21250},"presentations-in-2023","Presentations in 2023",[16,21253,21254],{},"I have spent a lot of time lately identifying what conferences, meetups, or anyone that will have me present next year. This involved going through past conferences as well as asking my friends on the bird app for some resources on upcoming conferences. I have also spent a lot of time working on abstracts of topics that I am interested in focusing on next year.",[16,21256,21257,21258,21263],{},"I’m happy to announce that some of that hard work has already paid off I have been accepted to speak at Devnexus in Atlanta. I will be presenting with my friend Nate Schutta on ",[23,21259,21262],{"href":21260,"rel":21261},"https:\u002F\u002Fdevnexus.com\u002Fpresentations\u002Fspring-recipes-a-collection-of-common-sense-solutions",[101],"Spring Recipes - A collection of common sense solutions",". We gave this talk to KCDC last year but we are working on a major update so even if you had a chance to see this talk please consider checking it out as it will be different.",[16,21265,21266],{},"I was also excited to find out that DaShaun and I will be traveling to San Francisco in January for an event. We will be talking about Spring Framework 6 and Spring Boot 3. I actually have 3 talks so far in January on the same subject so it’s going to be a fun month talking to everyone about the next generation of The Spring Framework.",[33,21268,21270],{"id":21269},"️upcoming-talks","🎙️Upcoming Talks",[1271,21272,21273,21279,21285],{},[1274,21274,21275,21278],{},[23,21276,20796],{"href":20823,"rel":21277},[101],": Give your APIs a REST & Make the move to GraphQL",[1274,21280,21281,21284],{},[23,21282,20796],{"href":20823,"rel":21283},[101],": Getting Started with Spring",[1274,21286,21287,21290],{},[23,21288,19179],{"href":21260,"rel":21289},[101],": Spring Recipes - A collection of common-sense solutions",[33,21292,21294],{"id":21293},"my-new-videos",[161,21295,21296],{},"🎬 My New Videos",[16,21298,21299,21304],{},[23,21300,21303],{"href":21301,"rel":21302},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FwOYTJLQ0xNM?feature=share",[101],"IntelliJ Postfix"," - Learn about a quick tip in IntelliJ called postfix autocompletion. This postfix allows you to create a new variable from a statement in Java.",[16,21306,21307,21312],{},[23,21308,21311],{"href":21309,"rel":21310},"https:\u002F\u002Fyoutu.be\u002FdyA_Pbtbn_E",[101],"Google reCaptcha + Spring Security"," - In this tutorial, you will learn how to integrate Google reCaptcha v3 in a Spring Boot application using Spring Security. If you want to learn how to create your own Spring Security Filter and write custom code to integrate with a third-party service like Google reCaptcha this is the tutorial for you.",[16,21314,21315,21320],{},[23,21316,21319],{"href":21317,"rel":21318},"https:\u002F\u002Fyoutu.be\u002F6kFzJZCW1Qw",[101],"Spring Security JWT Client"," - I have created a bunch of tutorials lately on Spring Security and the feedback has been amazing. The one suggestion I kept hearing was that you wanted to see how a front-end (client) would use the Spring Security JWT authentication. In this tutorial, I created a client from scratch using Vite + Vue 3.",[16,21322,21323,21328,21329,21332],{},[23,21324,21327],{"href":21325,"rel":21326},"https:\u002F\u002Fyoutu.be\u002FB5Zrn1Tzyqw",[101],"Response Entity"," - In this tutorial, I discuss what the ",[469,21330,21331],{},"ResponseEntity"," class is in Spring and when you might want to reach for it. This is in response to code samples that I have seen lately that automatically use the response entity as the return type when there was no manipulation of the response headers or status.",[16,21334,21335,21339],{},[23,21336,21338],{"href":21198,"rel":21337},[101],"Spring Office Hours Episode 23"," - In this episode DaShaun and I discussed the plans for the upcoming workshop “Getting Started with Spring”. We had a great discussion about the domain of the application we are building for the workshop.",[28,21341,21342],{"id":10953},"🌎 Around the web",[16,21344,21345,21346,21351],{},"As I hinted at in an earlier newsletter I am going to change the format of this section a bit. Part of my anxiety in putting this newsletter together is making sure I have enough links to interesting things around the web. Going forward I am going to share a few items but give a little more commentary on each. If I don’t happen to come across anything interesting this section will be empty 🤷‍♂️ I am drawing this inspiration from ",[23,21347,21350],{"href":21348,"rel":21349},"https:\u002F\u002Faliabdaal.com\u002Fnewsletter\u002F",[101],"Ali Abdaal’s Sunday Snippets Newsletter"," which I am a huge fan of. As always your feedback is welcome.",[33,21353,21354],{"id":16575},"👨‍💻 Projects",[16,21356,21357,21362,21363,21368,21369,21372],{},[23,21358,21361],{"href":21359,"rel":21360},"https:\u002F\u002Fjust.maciejwalkowiak.com\u002F",[101],"Just"," is a command-line tool for developing Spring Boot applications by ",[23,21364,21367],{"href":21365,"rel":21366},"https:\u002F\u002Ftwitter.com\u002Fmaciejwalkowiak",[101],"Maciej Walkowiak",". While I haven’t had a chance to give this a try myself the video he made is amazing. This tool will give you single commands like ",[469,21370,21371],{},"just run"," which will run your application regardless of what build tool you’re using and offers live reloading. I’m not doing it justice here and you need to head over to the website (which is beautiful by the way) and check out everything Just has to offer.",[33,21374,21375],{"id":384},"🐦 Tweets",[16,21377,21378],{},"There are rumors going around that the crazy spaceman wants to increase the character limit from 280 to 4000. This tweet was a great visual representation of what that change would mean. I’m not a big fan of this because it would require way more time to scroll through information 🤦‍♂️",[16,21380,21381],{},[23,21382,21383],{"href":21383,"rel":21384},"https:\u002F\u002Ftwitter.com\u002FBasicAppleGuy\u002Fstatus\u002F1602032985611833344",[101],[33,21386,12149],{"id":12148},[16,21388,21389,21390],{},"“Don’t stop when you’re tired, stop when you’re done.” - ",[23,21391,21394],{"href":21392,"rel":21393},"https:\u002F\u002Ftwitter.com\u002Fdavidgoggins",[101],"@davidgoggins",[16,21396,21397],{},"I have consumed a lot of content from David over the past month and wow what an interesting human being. I need to pick up his book but I also have a whole bookshelf full of books I want to read 🤔",[28,21399,172],{"id":171},[16,21401,20982,21402,11333],{},[23,21403,11332],{"href":11330,"rel":21404},[101],[16,21406,9630,21407,191,21409,21411,21413,21415],{},[189,21408],{},[189,21410],{},[23,21412,11491],{"href":11490},[189,21414],{},[23,21416,198],{"href":198,"rel":21417},[101],{"title":200,"searchDepth":201,"depth":201,"links":21419},[21420,21421,21425,21430],{"id":21191,"depth":201,"text":21192},{"id":21250,"depth":201,"text":21251,"children":21422},[21423,21424],{"id":21269,"depth":206,"text":21270},{"id":21293,"depth":206,"text":21296},{"id":10953,"depth":201,"text":21342,"children":21426},[21427,21428,21429],{"id":16575,"depth":206,"text":21354},{"id":384,"depth":206,"text":21375},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":21432,"path":21433,"title":21434,"description":21435,"meta":21436,"body":21439},"newsletter\u002Fnewsletter\u002F2022\u002F12\u002F12\u002Fwhats-new-spring-boot-3.md","\u002Fnewsletter\u002F2022\u002F12\u002F12\u002Fwhats-new-spring-boot-3","What’s new in Spring Boot 3","Happy Monday and welcome to another edition of the newsletter. In today’s newsletter, I want to talk to you about the newest release of Spring Framework 6 and Spring Boot 3. I also want to spend a little time talking to you about a 4-hour workshop I’m working on for CodeMash on Getting Started with Spring.",{"slug":21437,"date":21438},"whats-new-spring-boot-3","2022-12-12T19:00:00.000Z",{"type":13,"value":21440,"toc":21635},[21441,21443,21445,21448,21451,21460,21463,21468,21470,21488,21491,21494,21500,21502,21514,21517,21520,21522,21545,21547,21569,21571,21587,21591,21601,21603,21606,21609,21615,21617,21622],[16,21442,21435],{},[28,21444,21079],{"id":21078},[16,21446,21447],{},"In case you have been living under a rock Spring Framework 6 and Spring Boot 3 have been released. I have spent some time over the last couple of months really trying to understand everything that has gone into this release.",[16,21449,21450],{},"While I still have a lot to learn I feel like I have a good handle on the key features of these releases. Last week (alongside my colleagues Nate and DaShaun) I gave a presentation internally to a large group of coworkers about what is new in Spring Boot 3. I thought it was a great high-level discussion about what we were excited about in the next generation of Spring.",[16,21452,21453,21454,21459],{},"A lot of the questions we received were about what customers would need to do to Upgrade from 2.x to 3.0. I think the biggest advice we had in this area was to make the upgrade incrementally. If you aren't already on 2.7.x try and make this upgrade first. The latest 2.7 versions support Java 17 so make the move to Java 17 in that version if possible. Once you are there it’s a much smoother process to get to 3. Finally, there is a really great ",[23,21455,21458],{"href":21456,"rel":21457},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.0-Migration-Guide",[101],"migration guide"," that you can go through that will help you with this process.",[16,21461,21462],{},"I have been building a tutorial that would show off a lot of these features in a video tutorial for a few weeks now. I was finally able to record and edit this video that ended up coming in at 1 hour and 10 minutes. In this tutorial, I will walk you through some of the major features in Spring Framework 6 and Spring Boot as well as some of my favorite features that are flying in under the radar.",[16,21464,21465],{},[469,21466,21467],{},"youtube:https:\u002F\u002Fwww.youtu.be\u002FTR254zh-f3c",[28,21469,21192],{"id":21191},[16,21471,21472,21477,21478,21482,21483,21487],{},[23,21473,21476],{"href":21474,"rel":21475},"https:\u002F\u002Ftwitter.com\u002Fdashaun",[101],"DaShaun"," and I are building a workshop for ",[23,21479,3404],{"href":21480,"rel":21481},"https:\u002F\u002Fwww.codemash.org\u002Fsession-details\u002F?id=380331",[101]," and we thought we would discuss our plan for the 4-hour workshop on the latest episode of ",[23,21484,93],{"href":21485,"rel":21486},"https:\u002F\u002Fyoutu.be\u002FOtaQZij3emQ",[101],". We broke down the agenda we came up for the workshop and discussed some of the decisions we had to make.",[16,21489,21490],{},"I think when you hear 4 hours you generally think that is a long time to learn something. The problem with that thinking is that Spring is large and there is a lot to cover. When you’re doing an in person workshop you also have to take into account helping attendees work through any issues and built-in breaks every hour or so.",[16,21492,21493],{},"We had to end up cutting testing, security and some of details in the Spring to Production section. With that said I am really happy with our initial outline. We are going to work through our presentation over the next few weeks and this will probably changed based on our dry runs but its a great start. If you’re interested in what we came up with you can check out the agenda in the GitHub repository below that will be changing over the next month.",[16,21495,21496],{},[23,21497,21498],{"href":21498,"rel":21499},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fgetting-started-spring-workshop",[101],[28,21501,13406],{"id":13405},[1271,21503,21504,21509],{},[1274,21505,21506,21278],{},[23,21507,20796],{"href":20823,"rel":21508},[101],[1274,21510,21511,21284],{},[23,21512,20796],{"href":20823,"rel":21513},[101],[28,21515,21516],{"id":10953},"Around the Web",[16,21518,21519],{},"These are a few of the links I found interesting around the web. In the new year I am going to condense this list to just a few items but give you more details on my thoughts on each of them. I hope you’re enjoying this newsletter and if you are please consider sharing it with a friend 🙏",[33,21521,11453],{"id":11452},[1271,21523,21524,21531,21538],{},[1274,21525,21526],{},[23,21527,21530],{"href":21528,"rel":21529},"https:\u002F\u002Ffirebase.blog\u002Fposts\u002F2022\u002F11\u002Finvesting-in-vuefire-nuxt-vue",[101],"Investing in Vue, Nuxt, and VueFire",[1274,21532,21533],{},[23,21534,21537],{"href":21535,"rel":21536},"https:\u002F\u002Fwww.wimdeblauwe.com\u002Fblog\u002F2022\u002F12\u002F11\u002Frelease-1.0.0-and-2.0.0-of-htmx-spring-boot-thymeleaf\u002F",[101],"Release 1.0.0 and 2.0.0 of htmx-spring-boot-thymeleaf",[1274,21539,21540],{},[23,21541,21544],{"href":21542,"rel":21543},"https:\u002F\u002Fticketguy.dev\u002Fblogs\u002F2022-12-05-cold-start-java\u002F",[101],"Serverless cold start for the rest of us",[33,21546,11465],{"id":30},[1271,21548,21549,21556,21562],{},[1274,21550,21551],{},[23,21552,21555],{"href":21553,"rel":21554},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZbnAithBNYY",[101],"AWS re:Invent 2022 - AWS Lambda SnapStart: Fast cold starts for your Java functions",[1274,21557,21558],{},[23,21559,21560],{"href":21560,"rel":21561},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qHI8E92W9ZA&t=1s",[101],[1274,21563,21564],{},[23,21565,21568],{"href":21566,"rel":21567},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eUPejYY1B3U",[101],"How to build a Google Photos Clone in Java - Part 1",[33,21570,14122],{"id":14121},[1271,21572,21573,21580],{},[1274,21574,21575],{},[23,21576,21579],{"href":21577,"rel":21578},"https:\u002F\u002Fwww.manning.com\u002Fbooks\u002Fcloud-native-spring-in-action",[101],"Cloud Native Spring in Action",[1274,21581,21582],{},[23,21583,21586],{"href":21584,"rel":21585},"https:\u002F\u002Famzn.to\u002F3iZVRhy",[101],"Learning Spring Boot 3",[33,21588,21590],{"id":21589},"️newsletters","🗞️ Newsletters",[1271,21592,21593],{},[1274,21594,21595,21600],{},[23,21596,21599],{"href":21597,"rel":21598},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-spring-6",[101],"Tales from the Jar Side"," - Thanks for the mention Ken 👋🏻",[33,21602,12149],{"id":12148},[16,21604,21605],{},"“I’ve used enough programming languages to understand there is no perfect language and I’m ok using the one I prefer vs the one that is better” - Kelsey Hightower",[33,21607,21608],{"id":384},"🐦 Tweets",[16,21610,21611],{},[23,21612,21613],{"href":21613,"rel":21614},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1600291708486307840",[101],[28,21616,172],{"id":171},[16,21618,20982,21619,11333],{},[23,21620,11332],{"href":11330,"rel":21621},[101],[16,21623,9630,21624,191,21626,21628,21630,21632],{},[189,21625],{},[189,21627],{},[23,21629,11491],{"href":11490},[189,21631],{},[23,21633,198],{"href":198,"rel":21634},[101],{"title":200,"searchDepth":201,"depth":201,"links":21636},[21637,21638,21639,21640,21648],{"id":21078,"depth":201,"text":21079},{"id":21191,"depth":201,"text":21192},{"id":13405,"depth":201,"text":13406},{"id":10953,"depth":201,"text":21516,"children":21641},[21642,21643,21644,21645,21646,21647],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":14121,"depth":206,"text":14122},{"id":21589,"depth":206,"text":21590},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":21650,"path":21651,"title":21652,"description":21653,"meta":21654,"body":21657},"newsletter\u002Fnewsletter\u002F2022\u002F12\u002F05\u002Faws-lambda-snapstart.md","\u002Fnewsletter\u002F2022\u002F12\u002F05\u002Faws-lambda-snapstart","AWS Lambda SnapStart, Spring Security 6 & IntelliJ 2022.3","Happy Monday and welcome to another edition of the newsletter. It’s hard to believe that we have crossed into December and that the new year is right around the corner. Today I would like to talk to you about AWS SnapStart, Spring Security 6, and IntelliJ 2022.3",{"slug":21655,"date":21656},"aws-lambda-snapstart","2022-12-05T19:00:00.000Z",{"type":13,"value":21658,"toc":21927},[21659,21661,21665,21674,21689,21692,21695,21704,21713,21716,21721,21725,21732,21737,21741,21748,21751,21757,21760,21766,21769,21775,21777,21806,21808,21824,21826,21828,21865,21867,21882,21884,21907,21909,21914],[16,21660,21653],{},[28,21662,21664],{"id":21663},"aws-snapstart","AWS SnapStart",[16,21666,21667,21668,21673],{},"Last week was Amazon’s big conference ",[23,21669,21672],{"href":21670,"rel":21671},"https:\u002F\u002Freinvent.awsevents.com\u002F",[101],"re:Invent 2022"," which took place in Las Vegas. There were a ton of really exciting announcements that came out of the conference but for me, Lambda SnapStart really got my attention. What is AWS Lambda SnapStart you ask?",[2238,21675,21676],{},[16,21677,21678,21683,21684,21688],{},[23,21679,21682],{"href":21680,"rel":21681},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fdg\u002Fsnapstart.html",[101],"AWS Lambda SnapStart"," is a new performance optimization developed by AWS that can significantly improve the startup time for applications. Announced at ",[23,21685,21687],{"href":21670,"rel":21686},[101],"AWS re:Invent","\n 2022, the first capability to feature SnapStart is Lambda SnapStart for Java. This feature delivers up to 10x faster function startup times for latency-sensitive Java applications at no extra cost, and with minimal or no code changes.",[16,21690,21691],{},"This is huge because one of the only problems with writing serverless functions in Java is the cold start times. Each subsequent request of the function is never really an issue so this promise of up to 10x faster is huge. This is currently only supported for Java and is available in certain regions.",[16,21693,21694],{},"The one limitation is that currently it only supports Java 11 (Corretto) so you won’t be able to use Spring Boot 3 because that requires a baseline of Java 17. I did reach out to someone and they said they are working on support for Java 17 in Lambda but it isn’t available at this time.",[16,21696,21697,21698,21703],{},"I decided to give this a try with plain old Java at first and it worked out really great. It is easy to enable and I could see the performance improvements right away. I created a ",[23,21699,21702],{"href":21700,"rel":21701},"https:\u002F\u002Fwww.youtube.com\u002Fshorts\u002FL2oJ-nL-Zfk",[101],"YouTube short"," talking about how to enable this in your Lambda Function.",[16,21705,21706,21707,21712],{},"After that, I wanted to see what this meant for Spring developers. I decided to create a new Spring Boot project using 2.7.6 and Java 11 with Spring Web and Spring Cloud Function. If you’re new to ",[23,21708,21711],{"href":21709,"rel":21710},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-cloud-function",[101],"Spring Cloud Function"," it allows you to use a uniform programming model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).",[16,21714,21715],{},"I created a very simple function that takes in a String and reverses it. While this was a trivial example it allowed me to see that the performance improvements were HUGE for Spring developers. The initial cold start time for my function before enabling SnapStart was almost 5 seconds and 312 ms after enabling it. I decided to create a video on this which you can check out below.",[16,21717,21718],{},[469,21719,21720],{},"youtube:https:\u002F\u002Fwww.youtu.be\u002FisS6m6aj_Ak",[28,21722,21724],{"id":21723},"spring-security-6","Spring Security 6",[16,21726,21727,21728,21731],{},"With the release of Spring Boot 3 comes the shiny and new Spring Security 6. There are a number of breaking changes in this version that include some deprecations that have been removed. If you want to learn more about these changes you can read through the ",[23,21729,9038],{"href":9102,"rel":21730},[101],". If you are updating your Spring Boot projects from 2.7.x to 3 and you use Spring Security these are changes that you will need to take a look at. I decided to pick out 3 of those changes and create a tutorial on them.",[16,21733,21734],{},[469,21735,21736],{},"youtube:https:\u002F\u002Fwww.youtu.be\u002FTDOHbK39Oxg",[28,21738,21740],{"id":21739},"intellij-20223","IntelliJ 2022.3",[16,21742,21743,21744,184],{},"If you follow me you know that I am a huge fan of IntelliJ. They just released a new version of IntelliJ IDEA and it comes packed with some really great features. If you want to learn more about it you can check out the ",[23,21745,7253],{"href":21746,"rel":21747},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F11\u002Fintellij-idea-2022-3\u002F",[101],[16,21749,21750],{},"There were 3 changes that really stood out for me. First was the new UI that you can enable by going into Settings > Appearance & Behavior > New UI and enabling the new UI. My initial thoughts on the UI are WOW 🤩 I love the new look, icons shiny buttons at the top. I also go asked about my new setup a lot and I am using the new UI with the GitHub Dark (Experimental) theme.",[16,21752,21753],{},[74,21754],{"alt":21755,"src":21756},"IntelliJ New UI","\u002Fimages\u002Fnewsletter\u002F2022\u002F12\u002F05\u002Fintellij_new_ui_2.jpeg",[16,21758,21759],{},"As a Spring Developer, I really love the new feature that allows you to add a dependency to the class you’re working on. To show off this feature I created a quick short-form video and posted it to Twitter.",[16,21761,21762],{},[23,21763,21764],{"href":21764,"rel":21765},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1598421479846285314",[101],[16,21767,21768],{},"Finally, I am a big fan of Vue and Vite. You can now create a new Vite project right within IntelliJ using the new project generator",[16,21770,21771],{},[74,21772],{"alt":21773,"src":21774},"IntelliJ Vite Project","\u002Fimages\u002Fnewsletter\u002F2022\u002F12\u002F05\u002Fintellij_vite.jpeg",[28,21776,18788],{"id":18787},[1271,21778,21779,21786,21792,21799],{},[1274,21780,21781],{},[23,21782,21785],{"href":21783,"rel":21784},"https:\u002F\u002Fwww.youtube.com\u002Fshorts\u002FC_njlumpFc4",[101],"Spring Framework 6 Trailing Slash Changes #shorts",[1274,21787,21788],{},[23,21789,21791],{"href":21700,"rel":21790},[101],"AWS Lambda SnapStart for Java #shorts",[1274,21793,21794],{},[23,21795,21798],{"href":21796,"rel":21797},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=TDOHbK39Oxg",[101],"What’s new in Spring Security 6",[1274,21800,21801],{},[23,21802,21805],{"href":21803,"rel":21804},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=isS6m6aj_Ak",[101],"AWS Lambda SnapStart for Spring Developers",[33,21807,13406],{"id":13405},[1271,21809,21810,21817],{},[1274,21811,21812,21816],{},[23,21813,21815],{"href":21480,"rel":21814},[101],"CodeMash 2023: Getting Started with Spring"," (Workshop)",[1274,21818,21819],{},[23,21820,21823],{"href":21821,"rel":21822},"https:\u002F\u002Fwww.codemash.org\u002Fsession-details\u002F?id=380324",[101],"CodeMash 2023: Give your APIs a REST & Make the move to GraphQL",[28,21825,21516],{"id":10953},[33,21827,11453],{"id":11452},[1271,21829,21830,21837,21844,21851,21858],{},[1274,21831,21832],{},[23,21833,21836],{"href":21834,"rel":21835},"https:\u002F\u002Fmaciejwalkowiak.com\u002Fblog\u002Fwhats-new-in-spring\u002F",[101],"What's new in Spring?",[1274,21838,21839],{},[23,21840,21843],{"href":21841,"rel":21842},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fjava\u002Ftwo-million-java-developers-on-visual-studio-code-november-2022-update\u002F",[101],"Two million Java developers on Visual Studio Code! November 2022 Update",[1274,21845,21846],{},[23,21847,21850],{"href":21848,"rel":21849},"https:\u002F\u002Fmedium.com\u002Fjavarevisited\u002Fmy-first-javafx-application-ee70a1d48cb3",[101],"My first JavaFX application",[1274,21852,21853],{},[23,21854,21857],{"href":21855,"rel":21856},"https:\u002F\u002Faws.amazon.com\u002Fde\u002Fblogs\u002Faws\u002Fnew-accelerate-your-lambda-functions-with-lambda-snapstart\u002F",[101],"New – Accelerate Your Lambda Functions with Lambda SnapStart",[1274,21859,21860],{},[23,21861,21864],{"href":21862,"rel":21863},"https:\u002F\u002Fwww.moderne.io\u002Fblog\u002Fspeed-your-spring-boot-3-0-migration",[101],"Speed Your Spring Boot 3.0 Migration",[33,21866,11465],{"id":30},[1271,21868,21869,21876],{},[1274,21870,21871],{},[23,21872,21875],{"href":21873,"rel":21874},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ypN-Uwshc5M",[101],"Why Container Queries Will Revolutionize Responsive Web Dev",[1274,21877,21878],{},[23,21879,21880],{"href":21880,"rel":21881},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AgxvrZLI1mc",[101],[33,21883,13650],{"id":973},[1271,21885,21886,21893,21900],{},[1274,21887,21888],{},[23,21889,21892],{"href":21890,"rel":21891},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WP0063oIyJ0",[101],"Between Chair and Keyboard with Ekaterina Novoseltseva",[1274,21894,21895],{},[23,21896,21899],{"href":21897,"rel":21898},"https:\u002F\u002Fwww.tanzutalk.com\u002Fe\u002Fwhat-is-graavm-what-is-spring-native-and-why-do-you-need-native-java\u002F",[101],"What is GraalVM? What is Spring Native? And why do you need native Java?",[1274,21901,21902],{},[23,21903,21906],{"href":21904,"rel":21905},"https:\u002F\u002Fhubermanlab.com\u002Fdr-lex-fridman-navigating-conflict-finding-purpose-and-maintaining-drive\u002F",[101],"Huberman Lab - Dr. Lex Fridman: Navigating Conflict, Finding Purpose & Maintaining Drive",[28,21908,172],{"id":171},[16,21910,20982,21911,11333],{},[23,21912,11332],{"href":11330,"rel":21913},[101],[16,21915,9630,21916,191,21918,21920,21922,21924],{},[189,21917],{},[189,21919],{},[23,21921,11491],{"href":11490},[189,21923],{},[23,21925,198],{"href":198,"rel":21926},[101],{"title":200,"searchDepth":201,"depth":201,"links":21928},[21929,21930,21931,21932,21935,21940],{"id":21663,"depth":201,"text":21664},{"id":21723,"depth":201,"text":21724},{"id":21739,"depth":201,"text":21740},{"id":18787,"depth":201,"text":18788,"children":21933},[21934],{"id":13405,"depth":206,"text":13406},{"id":10953,"depth":201,"text":21516,"children":21936},[21937,21938,21939],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":171,"depth":201,"text":172},{"_id":21942,"path":21943,"title":21944,"description":21945,"meta":21946,"body":21948},"newsletter\u002Fnewsletter\u002F2022\u002F11\u002F28\u002Fspring-boot-3.md","\u002Fnewsletter\u002F2022\u002F11\u002F28\u002Fspring-boot-3","Spring Boot 3, Conference Talks and 20,000 Subscribers","Happy Monday and welcome to another edition of my newsletter. I hope everyone who celebrated Thanksgiving had a great holiday week spent with great food and family. In this week's newsletter, I am going to talk about Spring Boot 3, submitting conference talks, and hitting a big milestone on YouTube.",{"slug":21078,"date":21947},"2022-11-28T19:00:00.000Z",{"type":13,"value":21949,"toc":22326},[21950,21952,21956,21959,21962,21965,21968,21971,21973,21981,21984,21990,22003,22040,22043,22046,22049,22052,22058,22061,22105,22108,22114,22118,22121,22127,22130,22133,22136,22139,22141,22157,22159,22177,22179,22181,22218,22220,22264,22266,22282,22285,22308,22310,22313],[16,21951,21945],{},[28,21953,21955],{"id":21954},"current-status","Current Status",[16,21957,21958],{},"As I mentioned in the open last week we celebrated Thanksgiving last week. I absolutely love this holiday because it’s all about my favorite things, family, friends, and food. I also turned to my wife during the week with a revelation that is absolutely the longest most stressful week of the whole entire year.",[16,21960,21961],{},"We host a pretty large group every year so I end up taking off of work so we can prepare for that. It takes us all week of running around, preparing food, and getting the house ready for company. All of this while trying to make sure our little ones have a fun week amidst the chaos.",[16,21963,21964],{},"Thanksgiving finally comes around and the whirlwind of family, food and fun is gone way to fast in comparison to the time it took to put together. Then when you finally make it through the day and you have to quickly regroup and turn your attention towards Christmas.",[16,21966,21967],{},"We get all of our decorations from storage and then get the inside decorated along with setting up the tree. The little ones love putting up the tree and hanging the ornaments so we put on some Christmas music and made a morning of it. Finally, I had to get on the roof and hang up all of the outside lights up.",[16,21969,21970],{},"I love Thanksgiving but I am really glad to see the calendar turn and get back to work this week. I have a busy week ahead of me as I am working on a bunch of videos and preparing for a Spring Boot workshop at CodeMash in early January.",[28,21972,21079],{"id":21078},[16,21974,21975,21976,21980],{},"Spring Framework 6 and Spring Boot 3 are now both GA and what an exciting time it is to be a Spring Developer. If you head over to ",[23,21977,2090],{"href":21978,"rel":21979},"http:\u002F\u002Fstart.spring.io",[101]," and create a new project the default will now be Spring Boot 3 which includes Spring Framework 6 under the hood.",[16,21982,21983],{},"If you need further proof run the project you downloaded and there in plain ASCII art you can see the new version and I don’t know if you know this but ASCII art never lies 😜",[16,21985,21986],{},[74,21987],{"alt":21988,"src":21989},"hello-spring-boot-3.png","\u002Fimages\u002Fnewsletter\u002F2022\u002F11\u002F28\u002Fhello-spring-boot-3.png",[16,21991,21992,21993,21997,21998,22002],{},"If you want to find out more I encourage you to check out the Spring Boot 3 ",[23,21994,7253],{"href":21995,"rel":21996},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-3.0-Release-Notes",[101]," or ",[23,21999,10979],{"href":22000,"rel":22001},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F11\u002F24\u002Fspring-boot-3-0-goes-ga",[101]," by the Spring Team. This release includes over 5700 commits by 151 individuals. I am excited about so much when it comes to Spring Framework 6 and Spring Boot 3 but here are a few of my favorites.",[1271,22004,22005,22008,22011,22020,22023,22026,22029,22031,22034,22037],{},[1274,22006,22007],{},"Java 17 Baseline - This is exciting to me because so many projects are going to get an instant upgrade in security and performance just by moving to Java 17.",[1274,22009,22010],{},"Jakarta EE 9\u002F10 - Moving from javax → jakarta namespace means we now get to take advantage of an evolving API.",[1274,22012,22013,22014,22019],{},"Support for generating ",[23,22015,22018],{"href":22016,"rel":22017},"https:\u002F\u002Fdocs.spring.io\u002Fspring-boot\u002Fdocs\u002F3.0.0\u002Freference\u002Fhtml\u002Fnative-image.html#native-image",[101],"Native Images"," with GraalVM.",[1274,22021,22022],{},"Improved observability with Micrometer and Micrometer Tracing",[1274,22024,22025],{},"Problem Detail Support",[1274,22027,22028],{},"Declarative HTTP Clients",[1274,22030,21724],{},[1274,22032,22033],{},"Spring Data 2022",[1274,22035,22036],{},"Spring for GraphQL 1.1",[1274,22038,22039],{},"Spring Authorization Server 1.0",[16,22041,22042],{},"I am working on a few videos around Spring Boot 3 and I am just trying to figure out how I want to structure some of this content. You should see at least 1 video get published on my YouTube channel this week. If there is anything you are struggling with when it comes to Spring Framework 6 and Spring Boot 3 please let me know.",[28,22044,22045],{"id":13856},"Conferences",[16,22047,22048],{},"I have begun putting together a list of conferences that I would like to submit proposals for next year. To do so I need to put a list of available conferences, locations, dates, and when the Call for Papers (CFP) closes. With that list in place I could take a look at my schedule and decide which conferences I would be able to submit to.",[16,22050,22051],{},"I had some resources that I was using to pull this list together which started with what conferences my team attended last year. After that, I wasn’t sure where I could find up-to-date lists. I am looking for anything in Java, Spring, Web Development, and JavaScript space. I decided to ask Twitter and I got a lot of really great responses",[16,22053,22054],{},[23,22055,22056],{"href":22056,"rel":22057},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1592246011803897856",[101],[16,22059,22060],{},"Here is a collection of links I compiled from those responses.",[1271,22062,22063,22069,22075,22081,22087,22093,22099],{},[1274,22064,22065],{},[23,22066,22067],{"href":22067,"rel":22068},"https:\u002F\u002Fdev.java\u002Fcommunity\u002Fevents\u002F",[101],[1274,22070,22071],{},[23,22072,22073],{"href":22073,"rel":22074},"https:\u002F\u002Fgithub.com\u002Fjavaconferences\u002Fjavaconferences.github.io",[101],[1274,22076,22077],{},[23,22078,22079],{"href":22079,"rel":22080},"https:\u002F\u002Fgithub.com\u002Fscraly\u002Fdevelopers-conferences-agenda",[101],[1274,22082,22083],{},[23,22084,22085],{"href":22085,"rel":22086},"https:\u002F\u002Fconfs.tech\u002F",[101],[1274,22088,22089],{},[23,22090,22091],{"href":22091,"rel":22092},"https:\u002F\u002Fwww.papercall.io\u002F",[101],[1274,22094,22095],{},[23,22096,22097],{"href":22097,"rel":22098},"https:\u002F\u002Ftwitter.com\u002FTechDailyCFP",[101],[1274,22100,22101],{},[23,22102,22103],{"href":22103,"rel":22104},"https:\u002F\u002Ftrello.com\u002Fb\u002FI263Hm5u\u002Fevents-for-speakers",[101],[16,22106,22107],{},"If you have any lists that I am missing in the Java, JavaScript, Web space please let me know. I put together a list based on those links and I have identified some conferences I will begin submitting to as the Call For Papers opens up. This is still a work in progress but here is a screenshot of that list in Notion.",[16,22109,22110],{},[74,22111],{"alt":22112,"src":22113},"Notion Conference List","\u002Fimages\u002Fnewsletter\u002F2022\u002F11\u002F28\u002Fnotion-conference-list.png",[28,22115,22117],{"id":22116},"_20000-subscriber-milestone-on-youtube","20,000 Subscriber Milestone on YouTube",[16,22119,22120],{},"I hit a huge milestone last week on YouTube passing 20,000 subscribers.",[16,22122,22123],{},[23,22124,22125],{"href":22125,"rel":22126},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1596340618917076993",[101],[16,22128,22129],{},"It’s crazy to me even writing that number after all the work that I have done producing videos over the years. It’s crazy to look back on your career after all this time and see that the signs were there even in the beginning. In 2001 I was doing technical support for a VoIP call center software that was written in Java. I got tired of answering the same questions over and over and decided to put together videos showing customers how to perform common tasks. This might seem as normal as walking these days but back in 2001 YouTube hadn’t even been created yet. I still remember to this day enjoying putting those videos and documentation together to help people. Like I said, the signs were there.",[16,22131,22132],{},"I want to start off by saying thank you to everyone who has supported me and the channel over the years. I appreciate your support and your feedback and you push me every single day to get better. I remember struggling early on in my career to learn new things and it's my hope that through my tutorials something clicks and you are able to learn a new language, framework, product, or skill. I hope you can use these new skills to build something amazing or land that dream job of yours.",[16,22134,22135],{},"I sat down and made a video talking about this huge milestone. In this video, I decided to go back and take a look at some of my earlier videos on the channel and provide some feedback. I hope you enjoy this and I look forward to making a couple more of these at 50,000 and 100,000 🤯",[47,22137],{"id":22138},"hsMKOirkLZU",[28,22140,18788],{"id":18787},[1271,22142,22143,22150],{},[1274,22144,22145],{},[23,22146,22149],{"href":22147,"rel":22148},"https:\u002F\u002Fyoutu.be\u002F0i6Xu3Pf83Q",[101],"Spring Office Hours with Daniel Garnier on Spring Security",[1274,22151,22152],{},[23,22153,22156],{"href":22154,"rel":22155},"https:\u002F\u002Fyoutu.be\u002Fgj1DDymw5iY",[101],"Serverless Spring",[33,22158,13406],{"id":13405},[1271,22160,22161,22167,22172],{},[1274,22162,22163],{},[23,22164,22166],{"href":22147,"rel":22165},[101],"Spring Office Hours with Daniel",[1274,22168,22169,21278],{},[23,22170,20796],{"href":20823,"rel":22171},[101],[1274,22173,22174,21284],{},[23,22175,20796],{"href":20823,"rel":22176},[101],[28,22178,21516],{"id":10953},[33,22180,11453],{"id":11452},[1271,22182,22183,22190,22197,22204,22211],{},[1274,22184,22185],{},[23,22186,22189],{"href":22187,"rel":22188},"https:\u002F\u002Fwww.notion.so\u002Fblog\u002Fintroducing-notion-ai",[101],"Introducing Notion AI",[1274,22191,22192],{},[23,22193,22196],{"href":22194,"rel":22195},"https:\u002F\u002Fdashaun.com\u002Fposts\u002Fspring-boot-3-buildpacks-with-testcontainers-cloud\u002F",[101],"Spring Boot 3 Buildpacks with Testcontainers Cloud",[1274,22198,22199],{},[23,22200,22203],{"href":22201,"rel":22202},"https:\u002F\u002Fdashaun.com\u002Fposts\u002Fpaketo-aarch64-builder-spring-boot-3-rc1\u002F",[101],"A new builder for Spring Boot 3 RC1 on ARM64",[1274,22205,22206],{},[23,22207,22210],{"href":22208,"rel":22209},"https:\u002F\u002Fspringbootlearning.medium.com\u002Ftwas-the-night-before-spring-boot-3-0-went-ga-f0b51c1b0a7b",[101],"Twas the night before Spring Boot 3.0 went GA…",[1274,22212,22213],{},[23,22214,22217],{"href":22215,"rel":22216},"https:\u002F\u002Fbetterprogramming.pub\u002Fgoing-native-with-spring-boot-3-ga-4e8d91ab21d3",[101],"Going Native With Spring Boot 3 GA",[33,22219,11465],{"id":30},[1271,22221,22222,22229,22236,22243,22250,22257],{},[1274,22223,22224],{},[23,22225,22228],{"href":22226,"rel":22227},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qaK6N21tbVQ",[101],"6 WAYS to be a SPRING CODER",[1274,22230,22231],{},[23,22232,22235],{"href":22233,"rel":22234},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=aUm5WZjh8RA",[101],"Spring Tips: the road to Spring Boot 3: Spring Framework 6",[1274,22237,22238],{},[23,22239,22242],{"href":22240,"rel":22241},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=TOfYlLjXufw&t=731s",[101],"Spring Tips: the road to Spring Boot 3: ahead-of-time compilation and GraalVM",[1274,22244,22245],{},[23,22246,22249],{"href":22247,"rel":22248},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VWdNfvNFXUc",[101],"Spring boot 3.0 - The full migration guide",[1274,22251,22252],{},[23,22253,22256],{"href":22254,"rel":22255},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=4YyJUS_7rQE&t=691s",[101],"Spring 6 and Problem Details",[1274,22258,22259],{},[23,22260,22263],{"href":22261,"rel":22262},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QXgq_e7etXc&t=33s",[101],"Spring 6 and Declarative Clients",[33,22265,13650],{"id":973},[1271,22267,22268,22275],{},[1274,22269,22270],{},[23,22271,22274],{"href":22272,"rel":22273},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F3259c661-0524-46dc-805d-2388011030b9",[101],"Java Champion, legendary engineer, and author Trisha Gee",[1274,22276,22277],{},[23,22278,22281],{"href":22279,"rel":22280},"https:\u002F\u002Ffoojay.io\u002Ftoday\u002Ffoojay-podcast-6\u002F",[101],"Foojay Podcast #6: Welcome to Foojay!",[33,22283,22284],{"id":16575},"💻 Projects",[1271,22286,22287,22294,22301],{},[1274,22288,22289],{},[23,22290,22293],{"href":22291,"rel":22292},"https:\u002F\u002Fpolypane.app\u002F",[101],"Polypane",[1274,22295,22296],{},[23,22297,22300],{"href":22298,"rel":22299},"https:\u002F\u002Fwww.descript.com\u002Fblog\u002Farticle\u002Fall-new-descript-backed-by-openai-startup-fund",[101],"It's here: the all-new Descript, backed by OpenAI Startup Fund",[1274,22302,22303],{},[23,22304,22307],{"href":22305,"rel":22306},"https:\u002F\u002Fwww.notion.so\u002Fai",[101],"Notion AI",[28,22309,172],{"id":171},[16,22311,22312],{},"I hope you enjoyed this installment of the newsletter and I will talk to you in the next one. I hope you have a great week and as always friends...",[16,22314,9630,22315,191,22317,22319,22321,22323],{},[189,22316],{},[189,22318],{},[23,22320,11491],{"href":11490},[189,22322],{},[23,22324,198],{"href":198,"rel":22325},[101],{"title":200,"searchDepth":201,"depth":201,"links":22327},[22328,22329,22330,22331,22332,22335,22341],{"id":21954,"depth":201,"text":21955},{"id":21078,"depth":201,"text":21079},{"id":13856,"depth":201,"text":22045},{"id":22116,"depth":201,"text":22117},{"id":18787,"depth":201,"text":18788,"children":22333},[22334],{"id":13405,"depth":206,"text":13406},{"id":10953,"depth":201,"text":21516,"children":22336},[22337,22338,22339,22340],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":171,"depth":201,"text":172},{"_id":22343,"path":22344,"title":22345,"description":22346,"meta":22347,"body":22350},"newsletter\u002Fnewsletter\u002F2022\u002F11\u002F14\u002Fcreate-something-awesome.md","\u002Fnewsletter\u002F2022\u002F11\u002F14\u002Fcreate-something-awesome","Create Something Awesome, Twitter, SpringOne, and the march to 20,000 subscribers","Happy Monday and welcome to another edition of the newsletter. It’s hard to believe that it is the middle of November and Thanksgiving is next week. We had our first snowfall over the weekend and I can say with confidence that I am not ready for this 🤦‍♂️",{"slug":22348,"date":22349},"create-something-awesome","2022-11-14T19:00:00.000Z",{"type":13,"value":22351,"toc":22695},[22352,22354,22360,22363,22365,22385,22394,22397,22400,22403,22406,22409,22412,22415,22418,22420,22428,22431,22437,22439,22453,22496,22498,22515,22519,22522,22525,22528,22531,22534,22540,22544,22547,22555,22557,22559,22582,22584,22600,22602,22618,22620,22629,22631,22660,22662,22665,22667,22673,22675,22682],[16,22353,22346],{},[16,22355,22356],{},[74,22357],{"alt":22358,"src":22359},"First Snowfall in Ohio","\u002Fimages\u002Fnewsletter\u002F2022\u002F11\u002F14\u002Ffirst_snowfall.jpeg",[16,22361,22362],{},"In this week's edition, I want to talk to you about creating something awesome, Twitter, SpringOne, and what I have been working on lately.",[28,22364,21955],{"id":21954},[16,22366,22367,22368,22373,22374,22379,22380,184],{},"The last time I checked in with you I told you that I finished 2 new books on my quick trip to Ocean Isle NC for a friend's wedding. I gave you a ",[23,22369,22372],{"href":22370,"rel":22371},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fdeep-work\u002F",[101],"quick review"," of the first book ",[23,22375,22378],{"href":22376,"rel":22377},"https:\u002F\u002Famzn.to\u002F3WWSrMh",[101],"Deep work"," and today I want to talk quickly about the other book, ",[23,22381,22384],{"href":22382,"rel":22383},"https:\u002F\u002Famzn.to\u002F3O5aQ5p",[101],"Create Something Awesome by Roberto Blake",[16,22386,22387,22388,22393],{},"I have followed ",[23,22389,22392],{"href":22390,"rel":22391},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCovtFObhY9NypXcyHxAS7-Q",[101],"Roberto’s work"," for a while now so I was really excited to pick this up when it came out. Roberto is a creative entrepreneur, YouTuber, and Keynote Speaker. I have learned a lot about YouTube from Roberto’s channel so my mindset going into this book was that it was going to be an extension of that.",[16,22395,22396],{},"This book is really geared towards someone who is interested in turning their passion into profits in the creator economy. I think this book is packed with real-world case studies, personal experiences as well as actionable advice. Even if you have been in the content creation game for a while I think there is still a lot you can and I certainly picked up some tips and motivation that I was looking for.",[16,22398,22399],{},"The message that runs throughout the book is that there is no better time to monetize your passion. This starts with understanding what the creator economy is, how to build a powerful brand and how to monetize by providing value first. The chapter on authenticity and boundaries and why being yourself is so important in this game really stood out to me. So much so that I went back and read it again before writing this review.",[16,22401,22402],{},"Roberto is a great person that embodies what creators should aspire to and it’s apparent that he poured his experience and passion into this book. If you are a creator looking to turn your passion into a career this is a must-read. Thank you, Roberto, 👏🏻",[28,22404,183],{"id":22405},"twitter",[16,22407,22408],{},"If you’re on Twitter you don’t need me to tell you what’s been going on. Instead, I want to offer a bit of a different insight. I went back and looked and I have been on Twitter since 2008 and have authored over 30,000 tweets. I have discussed with you my desire to rid myself of social media platforms like Facebook and Instagram in the past because I believe they do more harm than good.",[16,22410,22411],{},"Twitter for me a place where I connect with people like me. I get to talk with people who live near me, creators who like to create content, and the biggest community of all, developers. I don’t ever look at Twitter as toxic because as soon as someone becomes that way to me I stop following and will go as far as I need to to make sure those individuals don’t show up on my feed.",[16,22413,22414],{},"Like other social media platforms, there is still a problem with Twitter that I try and work on often. I am constantly comparing myself to other creators, developers, and people I look up to. On some level, it’s good to look up to others but the constant need to prove your worth to yourself because of something or someone you saw online is no way to live life. We all have to remember that the majority of what we see on social networks is the best view of them. Not many people rush to Twitter to tell you how hard life is and how they are dealing with it.",[16,22416,22417],{},"With all that said I don’t want to give up on Twitter. Yes, they are going through a pretty rough transition right now and I’m not sure what the future holds for them. I love the people I learn from every day and all of the new tech, software, and products I learn about on the platform. I saw an influx of people scrambling to create accounts on other platforms and I won’t be one of them. I’m hopefully optimistic that some good will come out of this change.",[28,22419,4968],{"id":16650},[16,22421,22422,22423,22427],{},"By now I am sure that you heard but SpringOne in December was canceled. I was so sad when I heard this because I was looking forward to so many things. I was looking forward to giving a workshop on how to get started with Spring Boot. I was also giving a breakout session on Spring for GraphQL. I was really looking forward to the amazing lineup of speakers and getting a chance to meet so many of you in person for the first time. There is now a free ",[23,22424,22426],{"href":16819,"rel":22425},[101],"virtual conference"," happening in January so if you’re interested please signup now.",[16,22429,22430],{},"As sad as I am about SpringOne, the show must go on. I know there will be many more opportunities to connect with all of you. I am speaking at CodeMash in January where I will be giving a talk on GraphQL as well as a workshop with my friend DaShaun. I am submitting to a lot of conferences in 2023 so if you would like me to speak at your event please reach out.",[16,22432,22433],{},[23,22434,22435],{"href":22435,"rel":22436},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1591094107530731520",[101],[28,22438,18788],{"id":18787},[16,22440,22441,22442,22447,22448,22452],{},"I wrote a guide for the ",[23,22443,22446],{"href":22444,"rel":22445},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002F",[101],"Tanzu Developer Center"," called ",[23,22449,22156],{"href":22450,"rel":22451},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fguides\u002Fserverless-spring\u002F",[101],". Prior to working on this article, I didn’t have a ton of experience building serverless applications so I was excited to jump in and learn from the ground floor. Before I could start writing serverless applications with Spring I wanted to start with just Java and experience what that was like and experience some of the pain points to understand where something like Spring Cloud Function would help me. That is why you will find 3 new videos on YouTube related to creating your first lambda functions on AWS with Java.",[1271,22454,22455,22461,22468,22475,22482,22489],{},[1274,22456,22457],{},[23,22458,22460],{"href":22450,"rel":22459},[101],"Serverless Spring Guide",[1274,22462,22463],{},[23,22464,22467],{"href":22465,"rel":22466},"https:\u002F\u002Fyoutu.be\u002FMjq9g8hRaoI",[101],"Spring Office Hours with Greg Turnquist",[1274,22469,22470],{},[23,22471,22474],{"href":22472,"rel":22473},"https:\u002F\u002Fyoutu.be\u002FMaHxZEBRcT4",[101],"Hello AWS Lambda",[1274,22476,22477],{},[23,22478,22481],{"href":22479,"rel":22480},"https:\u002F\u002Fyoutu.be\u002FkyWllXOGMWQ",[101],"AWS Lambda Java Core",[1274,22483,22484],{},[23,22485,22488],{"href":22486,"rel":22487},"https:\u002F\u002Fyoutu.be\u002FK1OI-S0ET70",[101],"AWS Lambda RDS PostgreSQL",[1274,22490,22491],{},[23,22492,22495],{"href":22493,"rel":22494},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=4cRbPH_GkBQ",[101],"Code on the Beach - Dan Vega - Full Stack Java Development with Spring Boot",[33,22497,13406],{"id":13405},[1271,22499,22500,22505,22510],{},[1274,22501,22502],{},[23,22503,22166],{"href":22147,"rel":22504},[101],[1274,22506,22507,21278],{},[23,22508,20796],{"href":20823,"rel":22509},[101],[1274,22511,22512,21284],{},[23,22513,20796],{"href":20823,"rel":22514},[101],[28,22516,22518],{"id":22517},"office-hours-repository","Office Hours Repository",[16,22520,22521],{},"There is something that has been weighing on me heavily lately. I receive a lot of comments, questions, suggestions, and feedback from a variety of sources. A big source of this is YouTube, Spring Office Hours, and Twitter but I also get notifications through my website, email, and LinkedIn.",[16,22523,22524],{},"When it’s a comment I usually reply and thank that person for taking time out of their day to leave me a comment. When it’s a question and there is a simple answer to it I will reply to it. The problem is what if it isn’t an easy question to answer? What If I don’t have the answer and it will take some time to investigate? What if it's a suggestion for a future video?",[16,22526,22527],{},"I realize that I simply can’t reply to every single comment, suggestion, or question but I also don’t want to ignore people. With a variety of mediums, where do I store these questions so they don’t get lost? This is something that I have been thinking about lately and I have come up with an answer. Well, I have a solution and we shall see in the long term if it’s the answer.",[16,22529,22530],{},"I started a Github Repository called Office Hours. There is no code in this repository but there are some discussion boards. These boards are split up into content suggestions, Q&A, general chat, and polls. If you have a comment, question, or suggestion that falls into one of these buckets please consider submitting it below. I am going to find a good cadence to try and respond to what comes in there.",[16,22532,22533],{},"I know others who use Discord for this but I have to say, I am just not a big fan of Discord. For as much slack as Slack gets (see what I did there) it is just so much more of an enjoyable user experience for me. I find Discord clunky, and hard to use and the lack of threads gives me a headache. You can find the repository below and I would love your feedback on this going forward.",[16,22535,22536],{},[23,22537,22538],{"href":22538,"rel":22539},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Foffice-hours\u002Fdiscussions",[101],[28,22541,22543],{"id":22542},"youtube-20000","YouTube 20,000",[16,22545,22546],{},"Speaking of YouTube I’m currently sitting around 19,500 subscribers on YouTube. This means that I will hopefully hit 20k before the end of the month. I haven’t really celebrated any milestones lately but I have been super excited about this one. I’m trying to figure out what I should do for this huge milestone. I will at the very least put together a video and thank all of you who have supported me over the years and helped me reach this huge goal of mine. Maybe we can do a giveaway? How about free Spring Boot 3 licenses for everyone 🤣",[16,22548,22549,22550,22554],{},"If you haven’t ",[23,22551,5781],{"href":22552,"rel":22553},"http:\u002F\u002Fyoutube.com\u002F@danvega",[101]," yet, what are you waiting for 🤦‍♂️",[28,22556,21516],{"id":10953},[33,22558,11453],{"id":11452},[1271,22560,22561,22568,22575],{},[1274,22562,22563],{},[23,22564,22567],{"href":22565,"rel":22566},"https:\u002F\u002Fmedium.com\u002Ftinder\u002Fhow-we-built-the-tinder-api-gateway-831c6ca5ceca",[101],"How we built the Tinder API Gateway",[1274,22569,22570],{},[23,22571,22574],{"href":22572,"rel":22573},"https:\u002F\u002Fmaciejwalkowiak.com\u002Fblog\u002Fguide-java-publish-to-maven-central\u002F",[101],"How to publish a Java library to Maven Central - Complete Guide",[1274,22576,22577],{},[23,22578,22581],{"href":22579,"rel":22580},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fopensource\u002Fimproving-developer-productivity-at-disney-with-serverless-and-open-source\u002F?tag=mochaglobal19-20",[101],"Improving Developer Productivity at Disney with Serverless and Open Source",[33,22583,11465],{"id":30},[1271,22585,22586,22593],{},[1274,22587,22588],{},[23,22589,22592],{"href":22590,"rel":22591},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=zr7pEWKtVy4&t=348s",[101],"What You Need to Know About Java Text Blocks",[1274,22594,22595],{},[23,22596,22599],{"href":22597,"rel":22598},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=TMQZ921XvLg",[101],"A video for anyone feeling behind in life",[33,22601,13650],{"id":973},[1271,22603,22604,22611],{},[1274,22605,22606],{},[23,22607,22610],{"href":22608,"rel":22609},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Fb7f51cf1-6fac-4b11-9a75-ed35bda273f2",[101],"Java Champion, legend, and prolific open-source contributor Andres Almiray",[1274,22612,22613],{},[23,22614,22617],{"href":22615,"rel":22616},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fbcak\u002F70\u002F",[101],"Between Chair and Keyboard - with Billy Korando",[33,22619,22284],{"id":16575},[1271,22621,22622],{},[1274,22623,22624],{},[23,22625,22628],{"href":22626,"rel":22627},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F10\u002Fintellij-idea-2022-3-eap-5",[101],"IntelliJ IDEA 2022.3 EAP 5",[33,22630,14122],{"id":14121},[1271,22632,22633,22640,22646,22653],{},[1274,22634,22635],{},[23,22636,22639],{"href":22637,"rel":22638},"https:\u002F\u002Famzn.to\u002F3TRc8TC",[101],"Deep Work by Cal Newport",[1274,22641,22642],{},[23,22643,22384],{"href":22644,"rel":22645},"https:\u002F\u002Famzn.to\u002F3SKBilz",[101],[1274,22647,22648],{},[23,22649,22652],{"href":22650,"rel":22651},"https:\u002F\u002Famzn.to\u002F3zunHYN",[101],"Give and Take by Adam Grant",[1274,22654,22655],{},[23,22656,22659],{"href":22657,"rel":22658},"https:\u002F\u002Fleanpub.com\u002FgettingtoknowIntelliJIDEA",[101],"Getting to Know IntelliJ IDEA",[33,22661,12149],{"id":12148},[16,22663,22664],{},"“It’s easier to win if everybody wants you to win. If you don’t make enemies out there it’s easier to succeed.” - Randy Komisar",[33,22666,21608],{"id":384},[16,22668,22669],{},[23,22670,22671],{"href":22671,"rel":22672},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1590796343710453760",[101],[28,22674,172],{"id":171},[16,22676,22677,22678,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of the newsletter and I will talk to you in the next one. If you have any links you would like me to include please get i",[23,22679,22681],{"href":11330,"rel":22680},[101],"n touch with me",[16,22683,9630,22684,191,22686,22688,22690,22692],{},[189,22685],{},[189,22687],{},[23,22689,11491],{"href":11490},[189,22691],{},[23,22693,198],{"href":198,"rel":22694},[101],{"title":200,"searchDepth":201,"depth":201,"links":22696},[22697,22698,22699,22700,22703,22704,22705,22714],{"id":21954,"depth":201,"text":21955},{"id":22405,"depth":201,"text":183},{"id":16650,"depth":201,"text":4968},{"id":18787,"depth":201,"text":18788,"children":22701},[22702],{"id":13405,"depth":206,"text":13406},{"id":22517,"depth":201,"text":22518},{"id":22542,"depth":201,"text":22543},{"id":10953,"depth":201,"text":21516,"children":22706},[22707,22708,22709,22710,22711,22712,22713],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":22716,"path":22717,"title":22718,"description":22719,"meta":22720,"body":22723},"newsletter\u002Fnewsletter\u002F2022\u002F10\u002F31\u002Fdeep-work.md","\u002Fnewsletter\u002F2022\u002F10\u002F31\u002Fdeep-work","Deep Work, Spring Office Hours, and YouTube’s Redesign","Happy Monday and welcome to another edition of my newsletter. I want to wish all of you a very happy and spooky Halloween 🎃 If you’re enjoying this newsletter and wouldn’t mind sharing it with a friend that would mean the world to me. In today’s episode, I want to talk about some books I’m currently reading, YouTube, and Spring Office Hours. I will also give you a little bit of a peek into what I am working on this week.",{"slug":22721,"date":22722},"deep-work","2022-10-31T17:00:00.000Z",{"type":13,"value":22724,"toc":23123},[22725,22733,22735,22738,22750,22756,22759,22762,22765,22768,22771,22774,22788,22791,22796,22816,22820,22828,22830,22837,22840,22843,22845,22848,22854,22857,22863,22865,22868,22913,22915,22961,22963,22972,22975,22980,22988,22990,22992,23008,23010,23038,23040,23056,23058,23075,23077,23086,23088,23091,23093,23096,23102,23104,23110],[16,22726,22727,22728,22732],{},"Happy Monday and welcome to another edition of my newsletter. I want to wish all of you a very happy and spooky Halloween 🎃 If you’re enjoying this newsletter and wouldn’t mind ",[23,22729,22731],{"href":19571,"rel":22730},[101],"sharing"," it with a friend that would mean the world to me. In today’s episode, I want to talk about some books I’m currently reading, YouTube, and Spring Office Hours. I will also give you a little bit of a peek into what I am working on this week.",[28,22734,21955],{"id":21954},[16,22736,22737],{},"I took a short little trip to Ocean Isle, NC last weekend for a friend's wedding. I ended up having to go by myself because my wife and I couldn’t find anyone to watch the kids. I decided that I would take this opportunity to get some running in along the ocean, which by the way is one of the most therapeutic things I have ever had the pleasure of doing and something I recommend to everyone.",[16,22739,22740,22741,22744,22745,22749],{},"I also decided to take this opportunity to do a little reading. I decided to take 2 books with me not knowing how much I would get done but to my surprise, I was able to finish them both. I forgot that traveling without kids, especially little ones can actually be relaxing. I ended up taking ",[23,22742,22639],{"href":22637,"rel":22743},[101]," which I was already 30 pages into and ",[23,22746,22748],{"href":22644,"rel":22747},[101],"Create Something by Roberto Blake",". I will start by giving a mini-review of Deep Work this week and in the next newsletter, I will talk about Create Something awesome. Mini spoiler, I thought they were both really great. 👏🏻",[16,22751,22752],{},[74,22753],{"alt":22754,"src":22755},"Books","\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F31\u002Fbooks.jpeg",[33,22757,22758],{"id":22721},"Deep Work",[16,22760,22761],{},"I was really excited to get through this book as I believe it found me at an appropriate time in life. Deep work is a productivity book on how to be focused in a distracted world. I was already a big fan of Cal Newport's when I happened to come across his Podcast which I have been binging on lately.",[16,22763,22764],{},"The first part of the book went into describing what deep work is. Deep work is all about the ability to focus with distraction on a cognitively demanding task. This becomes especially true when you have little ones in the house every day all day. For me, my meaningful work is creating content that includes articles, videos, courses, this newsletter you’re reading, or a presentation for an upcoming conference.",[16,22766,22767],{},"If that is Deep work shallow work is everything else that is not contributing to the goals you have set out for yourself. This could be anything from meetings, catching up on emails, or those pesky expense reports. It’s not to say that these things are not important but we need to find ways to batch these tasks and create time blocks to focus on our deep work.",[16,22769,22770],{},"Cal talks extensively about creating time blocks for your work day and being more proactive than reactive. If you wake up on Monday and ask what should I work on today there is too much room for distractions to creep in. Each Sunday I take a look at my quarterly goals, what items I would like to complete this week, and plan out my week.",[16,22772,22773],{},"The rest of the book is all about the rules to deep work:",[1271,22775,22776,22779,22782,22785],{},[1274,22777,22778],{},"Work Deeply",[1274,22780,22781],{},"Embrace Boredom",[1274,22783,22784],{},"Quit Social Media",[1274,22786,22787],{},"Drain the shallows",[16,22789,22790],{},"Each of these rules is well thought out and backed up by case studies and real-world experiences. I think what really stood out for me was the ability to embrace boredom. Once your brain becomes accustomed to on-demand distractions (like looking at your smartphone while standing in line at the grocery store) it’s harder to shake the addiction, even when you want to concentrate.",[16,22792,22793],{},[161,22794,22795],{},"My Takeaways from the book",[1271,22797,22798,22801,22804,22807,22810,22813],{},[1274,22799,22800],{},"I know my cutoff is 5 PM each day. I take each day and plan backward from there based on the tasks I want to accomplish that day.",[1274,22802,22803],{},"As I mentioned earlier I spend a little bit of time on Sunday reflecting on the previous week, what my quarterly goals are and what I would like to accomplish this week.",[1274,22805,22806],{},"I have turned off all notifications from my phone for anything that is urgent. This includes personal email, Twitter, YouTube, etc…",[1274,22808,22809],{},"Both my personal and work email are not open on my computer. I will spend time blocks checking email but I don’t want the distraction of the notification each time I receive an email.",[1274,22811,22812],{},"I want to quit all social media but I just can’t. I took the first step by getting rid of TikTok which was just mindless scrolling. I run a Facebook group for Spring Developer and for my non-profit that I run so for now that will have to stick around. I would love to get rid of Facebook and Instagram so I will try and convince myself to do that next.",[1274,22814,22815],{},"Spend a few minutes in my shallow work blocks unsubscribing from spam and cleaning out my email boxes.",[33,22817,22819],{"id":22818},"next-up","Next Up",[16,22821,22822,22823,22827],{},"Next up on the reading list is actually something I was referred to by Cal Newport. The book is by Adam Grant and it’s called ",[23,22824,22826],{"href":22650,"rel":22825},[101],"Give and Take",", Why helping others drive our success. I have already started this one and I can’t wait to make my way through it.",[28,22829,93],{"id":92},[16,22831,22832,22833,22836],{},"If you haven’t been paying attention my coworker and friend DaShaun and I have been running a weekly live stream called ",[23,22834,93],{"href":20628,"rel":22835},[101],". This is a chance for us to share with you what is new in the world of Spring. We also like to show off demos of whatever we are currently working on and most importantly it’s a chance for you to ask your questions and hopefully, we can answer them. Not only has this show been extremely helpful to the community but it’s the thing I look to most every week.",[16,22838,22839],{},"Lately, we have gotten more consistent with the show which airs every Tuesday at 3:30 EDT. With that, we have seen a rise in our viewers where almost 100 people joined us live last week, and thousands on the replay. In the latest episode, which you can find below, we talked all about the release of Spring Boot 3.0 RC1.",[47,22841],{"id":22842},"WgcP00BOs5I",[28,22844,3363],{"id":4557},[16,22846,22847],{},"YouTube launched a redesign of its desktop and mobile applications. I am a big fan of the new look which is cleaner and the slightly rounded corners on the thumbnails. I’m also a big fan of the tabs across the top where they have split out the video, shorts, and live streams. This makes it easier for viewers to consume the appropriate content. I’m also pretty proud of how my page looks with my current thumbnail design. I am not a designer but these turned out well. 🥳",[16,22849,22850],{},[74,22851],{"alt":22852,"src":22853},"YouTube Redesign","\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F31\u002Fyoutube_redesign.png",[16,22855,22856],{},"Speaking of those thumbnails, I updated to macOS Ventura this week. There is a really great feature that allows you to copy just the subject from an image in your photos app.",[16,22858,22859],{},[23,22860,22861],{"href":22861,"rel":22862},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1585102836312203264",[101],[28,22864,18788],{"id":18787},[16,22866,22867],{},"I released a bunch of content over the last 2 weeks and I hope you enjoy them. I have talked about this in the past but I am having a lot of fun creating YouTube shorts. If you have randomly come across one of my short-form videos and are enjoying them please let me know 🤩",[1271,22869,22870,22878,22885,22892,22899,22906],{},[1274,22871,22872,22877],{},[23,22873,22876],{"href":22874,"rel":22875},"https:\u002F\u002Fyoutu.be\u002F53T_R3xAPTg",[101],"Spring Boot Azure"," - In this tutorial",[1274,22879,22880],{},[23,22881,22884],{"href":22882,"rel":22883},"https:\u002F\u002Fyoutu.be\u002FTBlB2_4_Sqo",[101],"Dependency Injection in Spring",[1274,22886,22887],{},[23,22888,22891],{"href":22889,"rel":22890},"https:\u002F\u002Fyoutu.be\u002Fm40_FKUCbq0",[101],"Spring Office Hours: Spring to Production Part 2",[1274,22893,22894],{},[23,22895,22898],{"href":22896,"rel":22897},"https:\u002F\u002Fyoutu.be\u002FWgcP00BOs5I",[101],"Spring Office Hours: Spring Boot 3.0 RC1",[1274,22900,22901],{},[23,22902,22905],{"href":22903,"rel":22904},"https:\u002F\u002Fyoutu.be\u002F_Gdb-jK3Sr4",[101],"Docker PostgreSQL Spring Boot",[1274,22907,22908],{},[23,22909,22912],{"href":22910,"rel":22911},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FzPg4z5d3WVo?feature=share",[101],"Spring Boot 3.0 Short",[28,22914,16504],{"id":16503},[1271,22916,22917,22931,22934,22937,22944,22951,22956],{},[1274,22918,22919,22924,22925,22930],{},[23,22920,22923],{"href":22921,"rel":22922},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0018\u002F",[101],"Spring Office Hours 18: Testing with Ted"," - We are excited to be joined by Ted Young AKA ",[23,22926,22929],{"href":22927,"rel":22928},"https:\u002F\u002Ftwitter.com\u002Fjitterted",[101],"JitterTed"," to talk all about testing in Spring.",[1274,22932,22933],{},"Serverless Spring - I wrote a new guide for the Tanzu Developer Center which should be published by the time you read this on Serverless Spring Boot. In this tutorial, you will learn how to build and deploy serverless functions using Spring Boot and Spring Cloud Function. I should be able to record a video version of this guide for my YouTube channel very soon.",[1274,22935,22936],{},"Spring Boot 3 - First Look: I am working on a video that introduces you to a lot of the new features in Spring Boot 3.",[1274,22938,22939],{},[23,22940,22943],{"href":22941,"rel":22942},"https:\u002F\u002Fspringone.io\u002F2022\u002Fsessions\u002Fa-gentle-introduction-to-spring-for-graphql",[101],"SpringOne - A Gentle Introduction to Spring for GraphQL",[1274,22945,22946],{},[23,22947,22950],{"href":22948,"rel":22949},"https:\u002F\u002Fspringone.io\u002F2022\u002Fworkshops\u002Fspring-boot-beginner",[101],"SpringOne - Getting Started with Spring Boot Workshop",[1274,22952,22953,21278],{},[23,22954,20796],{"href":20823,"rel":22955},[101],[1274,22957,22958,21284],{},[23,22959,20796],{"href":20823,"rel":22960},[101],[28,22962,4968],{"id":16650},[16,22964,22965,22966,22971],{},"This week we made the last of our announcements around speakers, workshops, and sessions. If you haven’t had a chance you should head over to ",[23,22967,22970],{"href":22968,"rel":22969},"http:\u002F\u002Fwww.springone.io",[101],"www.springone.io"," and check out the content. The list of speakers, sessions, and workshops is one of the best I have ever seen. I seriously can’t wait to be in San Francisco and learn from some of the best in our community.",[16,22973,22974],{},"In that list of speakers and sessions, you will find me presenting on Spring for GraphQL. I’m so excited to be giving this presentation at SpringOne and have already begun working on it. I have a lot of content on GraphQL and spent the year talking about it on the SpringOne tour but this presentation will be an updated one.",[16,22976,22977],{},[74,22978],{"alt":4968,"src":22979},"\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F31\u002Fspring_one_talk.png",[16,22981,22982,22983,22987],{},"I’m also giving a workshop on getting started with Spring Boot which you can now ",[23,22984,22986],{"href":22948,"rel":22985},[101],"register for",". You can get $200 off when registering if you use the code S1VM22_Advocate_200.",[28,22989,21516],{"id":10953},[33,22991,11453],{"id":11452},[1271,22993,22994,23001],{},[1274,22995,22996],{},[23,22997,23000],{"href":22998,"rel":22999},"https:\u002F\u002Fmedium.com\u002Fgraalvm\u002Fgraalvm-22-3-is-here-jdk-19-builds-jlink-support-new-monitoring-features-and-more-f6e2b2eeff95",[101],"GraalVM 22.3 is here: JDK 19 builds, jlink support, new monitoring features, and more!",[1274,23002,23003],{},[23,23004,23007],{"href":23005,"rel":23006},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F10\u002Fintellij-idea-2022-3-eap-4\u002F",[101],"IntelliJ IDEA 2022.3 EAP 4 is out!",[33,23009,11465],{"id":30},[1271,23011,23012,23017,23024,23031],{},[1274,23013,23014],{},[23,23015,22235],{"href":22233,"rel":23016},[101],[1274,23018,23019],{},[23,23020,23023],{"href":23021,"rel":23022},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BzsdYIOuNWQ",[101],"GraalVM 22.3 Release stream 🚀",[1274,23025,23026],{},[23,23027,23030],{"href":23028,"rel":23029},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=LlVy9Roh_bQ",[101],"Laurențiu Spilcă - The new Spring Security",[1274,23032,23033],{},[23,23034,23037],{"href":23035,"rel":23036},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rT4fJNbfe14",[101],"Prometheus: The Documentary",[33,23039,13650],{"id":973},[1271,23041,23042,23049],{},[1274,23043,23044],{},[23,23045,23048],{"href":23046,"rel":23047},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F8240ea1e-1084-47a7-bfd8-9210bb4d837c",[101],"Spring mad scientist Andy Clement on a Bootiful Podcast",[1274,23050,23051],{},[23,23052,23055],{"href":23053,"rel":23054},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fbcak\u002F69\u002F",[101],"Between Chair and Keyboard - The one with Billy Williams",[33,23057,14122],{"id":14121},[1271,23059,23060,23065,23070],{},[1274,23061,23062],{},[23,23063,22639],{"href":22637,"rel":23064},[101],[1274,23066,23067],{},[23,23068,22384],{"href":22644,"rel":23069},[101],[1274,23071,23072],{},[23,23073,22652],{"href":22650,"rel":23074},[101],[33,23076,13857],{"id":13856},[1271,23078,23079],{},[1274,23080,23081],{},[23,23082,23085],{"href":23083,"rel":23084},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Znd11rVHQOE",[101],"ViteConf 2022 | Full day | 42 talks about the tools and frameworks innovating in the Vite Ecosystem",[33,23087,12149],{"id":12148},[16,23089,23090],{},"The principle of give and take; that is diplomacy — give one and take ten.",[33,23092,21608],{"id":384},[16,23094,23095],{},"I updated to macOS Ventura this week and so far, no issues. 🤞🏻",[16,23097,23098],{},[23,23099,23100],{"href":23100,"rel":23101},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1585090917991870464",[101],[28,23103,172],{"id":171},[16,23105,23106,23107,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of the newsletter and I will talk to you in the next one. If you have any links you would like me to include please ",[23,23108,11332],{"href":11330,"rel":23109},[101],[16,23111,9630,23112,191,23114,23116,23118,23120],{},[189,23113],{},[189,23115],{},[23,23117,11491],{"href":11490},[189,23119],{},[23,23121,198],{"href":198,"rel":23122},[101],{"title":200,"searchDepth":201,"depth":201,"links":23124},[23125,23129,23130,23131,23132,23133,23134,23143],{"id":21954,"depth":201,"text":21955,"children":23126},[23127,23128],{"id":22721,"depth":206,"text":22758},{"id":22818,"depth":206,"text":22819},{"id":92,"depth":201,"text":93},{"id":4557,"depth":201,"text":3363},{"id":18787,"depth":201,"text":18788},{"id":16503,"depth":201,"text":16504},{"id":16650,"depth":201,"text":4968},{"id":10953,"depth":201,"text":21516,"children":23135},[23136,23137,23138,23139,23140,23141,23142],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":13856,"depth":206,"text":13857},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":23145,"path":23146,"title":23147,"description":23148,"meta":23149,"body":23152},"newsletter\u002Fnewsletter\u002F2022\u002F10\u002F17\u002Fspring-to-production.md","\u002Fnewsletter\u002F2022\u002F10\u002F17\u002Fspring-to-production","Spring Data, Security, and taking your apps to Production","Happy Monday and welcome to another edition of the newsletter. After missing a week I’m excited to be back and sharing some updates with you. In today’s newsletter I want to talk about Spring Data, Spring Security, A GraphQL testing tip, and taking your Spring apps to Production.",{"slug":23150,"date":23151},"spring-to-production","2022-10-17T17:00:00.000Z",{"type":13,"value":23153,"toc":23561},[23154,23156,23158,23161,23170,23173,23179,23184,23187,23196,23203,23210,23214,23217,23230,23233,23237,23246,23255,23272,23275,23278,23282,23291,23294,23300,23304,23317,23329,23333,23336,23406,23408,23430,23432,23434,23471,23473,23503,23505,23528,23530,23533,23535,23541,23543,23548],[16,23155,23148],{},[28,23157,21955],{"id":21954},[16,23159,23160],{},"I’m writing this status update on Friday while I am enjoying a random day off. VMware gives us an EPIC (Execution\u002FPassion\u002FIntegrity\u002FCustomers\u002FCommunity) day off each quarter. This is a chance for us to unplug, unwind and spend the day doing something that makes us happy. My wife is currently spending some time in Arizona which means I am solo for a few days and enjoying some alone time with my daughters. I’m mentioning this because I absolutely love the company I work for. They really look out for you and where core values might have been some words in a document in the past I feel like they really stand for them here.",[16,23162,23163,23164,23169],{},"While I am talking about VMware I was able to purchase a new ",[23,23165,23168],{"href":23166,"rel":23167},"https:\u002F\u002Famzn.to\u002F3eCJcQ3",[101],"NordicTrack Treadmill"," this year thanks to our well-being benefit. I prefer to run outside but as soon as it's raining or it is cold I turn into a baby and would much rather be inside. This treadmill is my absolute favorite piece of fitness equipment I have ever owned. I really love the iFit program where I can run with a coach in amazing places all over the world. This is mostly why I joined CrossFit way back in the day so that someone else could tell me what to do. I’m currently going through a 10k training series with my sight set on a half or full marathon next year.",[16,23171,23172],{},"I wanted to bring up running for a couple of reasons. This weekend I am heading down to Ocean Isle NC for a wedding so if you have any running recommendations please let me know. I am staying on the ocean so my plan is to run along the ocean but you never know if the sand is going to be runnable or too deep. The other reason is that DaShaun and I are throwing around the idea of putting together a run at SpringOne. This will probably be a 5k but you can run at your own pace or walk. If you’re interested please let me know.",[16,23174,23175,23176,184],{},"Finally, YouTube rolled out handles this week which is a new way to identify your YouTube channel. If you want to visit my YouTube channel you can now get to it using my handle, ",[161,23177,23178],{},"danvega",[16,23180,23181],{},[23,23182,4869],{"href":4869,"rel":23183},[101],[28,23185,22884],{"id":23186},"dependency-injection-in-spring",[16,23188,23189,23190,23195],{},"I recently had the opportunity to collaborate on a guide with my coworker ",[23,23191,23194],{"href":23192,"rel":23193},"https:\u002F\u002Ftwitter.com\u002Fmariogray",[101],"Mario Gray",". With some upcoming workshops on Getting Started with Spring Boot, I thought this would be a great opportunity to talk about some of the core concepts in Spring starting with Dependency Injection.",[16,23197,23198,23199,23202],{},"The guide is available at the ",[23,23200,22446],{"href":22444,"rel":23201},[101]," where you will find tons of free guides, articles, videos, and workshops. The guide starts off by explaining what Dependency Injection is and why you should care about it. From there you will go into building a real application that will demonstrate the issues you will run into without DI and how to solve them in Spring using Dependency Injection.",[16,23204,23205,23206,23209],{},"I also have the video version of this recorded so if you haven’t already subscribed to my ",[23,23207,2944],{"href":4869,"rel":23208},[101]," you should do so now and hit that notification icon!",[28,23211,23213],{"id":23212},"spring-data-jdbc","Spring Data JDBC",[16,23215,23216],{},"If you have been following my tutorials you will know that I have used Spring Data JDBC in the past. I have to admit that while I have used it I only did it at a basic level by defining a single model. This is because I didn’t understand some of the core features and how to model relationships between objects. I thought it was time to sit down and learn all about Spring Data JDBC and over the past month that's exactly what I did.",[16,23218,23219,23220,23225,23226,23229],{},"In this tutorial, I discuss Domain Driven Design, aggregates, and aggregate roots which are core to understanding where to start. When it comes to defining relationships something ",[23,23221,23224],{"href":23222,"rel":23223},"https:\u002F\u002Ftwitter.com\u002Fjensschauder",[101],"Jens Schauder"," said has really helped ",[734,23227,23228],{},"“There are 2 types of relationships you have to define and those are the ones between aggregates and the ones within aggregate roots”."," I hope you enjoy this tutorial where you will create a Spring Boot project from scratch and learn how to use Spring Data JDBC.",[47,23231],{"id":23232},"l_T0nQNbFiM",[28,23234,23236],{"id":23235},"spring-security-jwt","Spring Security JWT",[16,23238,23239,23240,23245],{},"I recently created a ",[23,23241,23244],{"href":23242,"rel":23243},"https:\u002F\u002Fyoutu.be\u002FKYNR5js2cXE",[101],"tutorial"," on using JSON Web Tokens (JWTs) with Spring Security. I received a lot of really good feedback from that video. The one question I heard the most was how can we authenticate against a username and password that is sent in the request body and remove HTTP Basic.",[16,23247,23248,23249,23254],{},"This was a great question and I know this is something I have done in the past but I wasn’t quite sure how to do it in the newer versions of Spring Security. I did what anyone with access to the Spring Security team would do, I asked them. ",[23,23250,23253],{"href":23251,"rel":23252},"https:\u002F\u002Ftwitter.com\u002Fkehrlann",[101],"Daniel Garnier-Moiroux"," reached out and was able to help me solve all of my problems.",[16,23256,23257,23258,23261,23262,23265,23266,23268,23269],{},"My biggest question was how to get an instance of the ",[469,23259,23260],{},"AuthenticationManager",". I know that I needed an instance of that to be able to use the ",[469,23263,23264],{},"authenticate()"," method so that was my starting point. After searching the web I found some answers but a lot of them involved getting an instance of the ",[469,23267,23260],{}," from the ",[469,23270,23271],{},"AuthenticationConfiguration.",[16,23273,23274],{},"After speaking with the Spring Security team I was informed that we should avoid this approach and instead create our own Authentication Manager. Once I was armed with that knowledge I had what I needed to complete this tutorial. If you want to see me walk through how to authenticate and return a JWT from a single endpoint check out the video below.",[47,23276],{"id":23277},"UaB-0e76LdQ",[28,23279,23281],{"id":23280},"graphql-testing-tip","GraphQL Testing Tip",[16,23283,23284,23285,23290],{},"I created a ",[23,23286,23289],{"href":23287,"rel":23288},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002F7qdyalH7mf4?feature=share",[101],"YouTube Short"," on a really handy tip I picked up for testing your GraphQL APIs. When you’re writing tests you usually start with a document which is the query, mutation, or subscription you would like to execute.",[16,23292,23293],{},"You will find that you end up writing these over and over and usually, they are duplicated from a previous test. Whenever you start copying\u002Fpasting code an alarm should go off in your head that there might be an easier way. I found out that you can move these queries into a file which will now allow you to reuse them in multiple tests.",[16,23295,23296],{},[23,23297,23298],{"href":23298,"rel":23299},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1577653689996742658",[101],[28,23301,23303],{"id":23302},"azure-spring-apps","Azure Spring Apps",[16,23305,23306,23307,23311,23312,23316],{},"In a recent episode of ",[23,23308,93],{"href":23309,"rel":23310},"https:\u002F\u002Fyoutu.be\u002F1cLu3sz56wY",[101]," DaShaun and I covered how to get your Spring Applications to production. Since that live stream, I have had some time to dive into ",[23,23313,23303],{"href":23314,"rel":23315},"https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fproducts\u002Fspring-apps\u002F",[101]," and I have to say I am really impressed with the platform. It makes moving enterprise applications to production and where it really gets interesting is if you work with distributed architectures. With built-in support for configuration and service registration deploying Microservices just got easy.",[16,23318,9551,23319,23324,23325,23328],{},[23,23320,23323],{"href":23321,"rel":23322},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-blog",[101],"Github repository"," that has a sample application I am going to use to deploy to a number of hosting providers. I also have a Github Workflow in there to show off how you can automatically build and deploy your applications on Azure Spring Apps. The first platform is Azure and I should have a video out this week we will discuss it further during ",[23,23326,93],{"href":20628,"rel":23327},[101],". If there is anything specific you would like to see me cover feel free to reach out to me on Twitter or reply to this email.",[28,23330,23332],{"id":23331},"content-links","Content Links",[16,23334,23335],{},"I talked about a few of the things I worked on above but here is the entire collection of things that got my attention over the last 2 weeks.",[1271,23337,23338,23357,23376,23394],{},[1274,23339,23340,23341],{},"YouTube\n",[1271,23342,23343,23350],{},[1274,23344,23345],{},[23,23346,23349],{"href":23347,"rel":23348},"https:\u002F\u002Fyoutu.be\u002Fl_T0nQNbFiM",[101],"Spring Data JDBC Introduction",[1274,23351,23352],{},[23,23353,23356],{"href":23354,"rel":23355},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=UaB-0e76LdQ",[101],"Spring Security JWT with username and password auth",[1274,23358,23359,23360],{},"YouTube Shorts\n",[1271,23361,23362,23369],{},[1274,23363,23364],{},[23,23365,23368],{"href":23366,"rel":23367},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FJetJaKkDLoE?feature=share",[101],"The best way to learn spring boot",[1274,23370,23371],{},[23,23372,23375],{"href":23373,"rel":23374},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002F7qdyalH7mf4?",[101],"Spring for GrqphQL Testing Tip",[1274,23377,23378,23379],{},"Spring Office Hours\n",[1271,23380,23381,23388],{},[1274,23382,23383],{},[23,23384,23387],{"href":23385,"rel":23386},"https:\u002F\u002Fyoutu.be\u002FQPTSDrEJztg",[101],"Episode 14 - Ahead of Time (AOT) Compilation",[1274,23389,23390],{},[23,23391,23393],{"href":23309,"rel":23392},[101],"Episode 15 - Spring to Production",[1274,23395,23396,23397],{},"Tanzu Developer Center\n",[1271,23398,23399],{},[1274,23400,23401],{},[23,23402,23405],{"href":23403,"rel":23404},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fguides\u002Fdependency-injection\u002F",[101],"Spring Dependency Injection",[28,23407,13406],{"id":13405},[1271,23409,23410,23415,23420,23425],{},[1274,23411,23412],{},[23,23413,22943],{"href":22941,"rel":23414},[101],[1274,23416,23417],{},[23,23418,22950],{"href":22948,"rel":23419},[101],[1274,23421,23422,21278],{},[23,23423,20796],{"href":20823,"rel":23424},[101],[1274,23426,23427,21284],{},[23,23428,20796],{"href":20823,"rel":23429},[101],[28,23431,21516],{"id":10953},[33,23433,11453],{"id":11452},[1271,23435,23436,23443,23450,23457,23464],{},[1274,23437,23438],{},[23,23439,23442],{"href":23440,"rel":23441},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F10\u002F12\u002Fspring-framework-6-0-goes-rc1",[101],"Spring Framework 6.0 goes RC1",[1274,23444,23445],{},[23,23446,23449],{"href":23447,"rel":23448},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fguides\u002Fgraalvm-with-spring\u002F",[101],"Getting Started with GraalVM and Spring Native",[1274,23451,23452],{},[23,23453,23456],{"href":23454,"rel":23455},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F10\u002F11\u002Fembracing-virtual-threads",[101],"Embracing Virtual Threads",[1274,23458,23459],{},[23,23460,23463],{"href":23461,"rel":23462},"https:\u002F\u002Fmedium.com\u002F@mlvandijk\u002Fkeeping-dependencies-up-to-date-with-maven-be8f7fb6441e",[101],"Keeping dependencies up to date with Maven",[1274,23465,23466],{},[23,23467,23470],{"href":23468,"rel":23469},"https:\u002F\u002Fvladmihalcea.com\u002Flog-sql-spring-boot\u002F",[101],"The best way to log SQL statements with Spring Boot",[33,23472,11465],{"id":30},[1271,23474,23475,23482,23489,23496],{},[1274,23476,23477],{},[23,23478,23481],{"href":23479,"rel":23480},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Q_0XW46IlHY",[101],"Getting modules right with Domain-driven Design by Michael Plöd - Spring I\u002FO 2022 Sessions",[1274,23483,23484],{},[23,23485,23488],{"href":23486,"rel":23487},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=-VmhytwBZVs",[101],"Let's build components, not layers by Tom Hombergs @ Spring I\u002FO 2022",[1274,23490,23491],{},[23,23492,23495],{"href":23493,"rel":23494},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F10\u002F10\u002Fspring-tips-spring-boot-apache-kafka",[101],"Spring Tips: Spring Boot & Apache Kafka",[1274,23497,23498],{},[23,23499,23502],{"href":23500,"rel":23501},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=g_Y6VqKVjuM&list=PLRsbF2sD7JVolUH45EkGXsT-3spU7cqnS",[101],"Devoxx Belgium 2022",[33,23504,13650],{"id":973},[1271,23506,23507,23514,23521],{},[1274,23508,23509],{},[23,23510,23513],{"href":23511,"rel":23512},"https:\u002F\u002Fgotopia.tech\u002Fbookclub\u002Fepisodes\u002Fspring-boot-up-and-running",[101],"goto; book club - Thomas Vitale & Mark Heckler",[1274,23515,23516],{},[23,23517,23520],{"href":23518,"rel":23519},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F5b6eea77-d792-4856-8770-2719844ef01d",[101],"Google mad scientist Josh Suereth",[1274,23522,23523],{},[23,23524,23527],{"href":23525,"rel":23526},"https:\u002F\u002Fplayer.fm\u002Fseries\u002Fcompressedfm\u002Fep-088-breaking-into-dev-rel-featuring-tessa-mero",[101],"Compressed.fm - Breaking into DevRel",[33,23529,12149],{"id":12148},[16,23531,23532],{},"\"We are what we repeatedly do. Excellence, then, is not an act, but a habit.\" — Aristotle",[33,23534,21608],{"id":384},[16,23536,23537],{},[23,23538,23539],{"href":23539,"rel":23540},"https:\u002F\u002Ftwitter.com\u002Fspringcentral\u002Fstatus\u002F1577314901525204992",[101],[28,23542,172],{"id":171},[16,23544,23106,23545,11333],{},[23,23546,11332],{"href":11330,"rel":23547},[101],[16,23549,9630,23550,191,23552,23554,23556,23558],{},[189,23551],{},[189,23553],{},[23,23555,11491],{"href":11490},[189,23557],{},[23,23559,198],{"href":198,"rel":23560},[101],{"title":200,"searchDepth":201,"depth":201,"links":23562},[23563,23564,23565,23566,23567,23568,23569,23570,23571,23578],{"id":21954,"depth":201,"text":21955},{"id":23186,"depth":201,"text":22884},{"id":23212,"depth":201,"text":23213},{"id":23235,"depth":201,"text":23236},{"id":23280,"depth":201,"text":23281},{"id":23302,"depth":201,"text":23303},{"id":23331,"depth":201,"text":23332},{"id":13405,"depth":201,"text":13406},{"id":10953,"depth":201,"text":21516,"children":23572},[23573,23574,23575,23576,23577],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":23580,"path":23581,"title":23582,"description":23583,"meta":23584,"body":23587},"newsletter\u002Fnewsletter\u002F2022\u002F10\u002F03\u002Faccepted-to-codemash.md","\u002Fnewsletter\u002F2022\u002F10\u002F03\u002Faccepted-to-codemash","Accepted to CodeMash, Learning Spring, and new content","Happy Monday and welcome to another edition of the newsletter. Are you reading this? If so and you have any feedback for me on ways to improve this newsletter please feel free to reply to this email or reach out to me on Twitter. Today I want to talk to you about being accepted to CodeMash, How to learn Spring, and lots of new content.",{"slug":23585,"date":23586},"accepted-to-codemash","2022-10-03T17:00:00.000Z",{"type":13,"value":23588,"toc":24079},[23589,23591,23593,23596,23599,23605,23608,23611,23614,23618,23621,23624,23635,23638,23641,23644,23667,23670,23673,23696,23705,23708,23711,23726,23729,23732,23735,23738,23741,23744,23746,23780,23782,23785,23787,23796,23823,23826,23830,23833,23836,23840,23846,23849,23853,23856,23859,23861,23869,23876,23883,23889,23891,23894,23900,23904,23907,23913,23915,23940,23942,23944,23974,23976,23999,24001,24010,24012,24025,24027,24043,24045,24048,24050,24053,24059,24061,24066],[16,23590,23583],{},[28,23592,21955],{"id":21954},[16,23594,23595],{},"Throughout the week I collect things I want to talk about in Notion. This is the tool I use to collect all of my thoughts, write articles and newsletters, plan videos, and schedule all of the content I am working on. I tell you this because it’s currently Friday afternoon and this is when I begin to collect these thoughts and turn them into the newsletter you’re reading now.",[16,23597,23598],{},"As I began typing this out I received the exciting news that I have been accepted to speak at CodeMash 2023. I will be giving a talk on GraphQL and I’m also giving a workshop on Getting Started with Spring. I immediately brought this excellent graphic into Notion and so I am sharing that with you.",[16,23600,23601],{},[74,23602],{"alt":23603,"src":23604},"Codemash 2023","\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F03\u002Fcodemash.jpeg",[16,23606,23607],{},"I am beginning to submit to conferences for next year and it’s always tough. You have to put yourself out there and unless you’re a top speaker in our industry you’re going to get more declines than acceptances. It is a really competitive space right now and I get that, it comes with the position I am in.",[16,23609,23610],{},"However when I do get accepted to talk you can bet I am going to celebrate them. Make sure you stop to celebrate your wins friends. A big thank you to CodeMash for having me back and accepting my talks. I haven’t given a precompiled at CodeMash before and I am beyond excited to talk about my favorite topic, Spring!",[16,23612,23613],{},"I can’t wait to be back at Kalahari Resort next year surrounded by some amazing people. I’m also looking forward to telling the kids, they love that place 🤩",[28,23615,23617],{"id":23616},"learning-spring","Learning Spring",[16,23619,23620],{},"I often get asked at conferences, meetups, on Twitter, or via email “What is the best way to learn Spring?”. This is one of those questions that I get often and I need to work on some content so I can point people towards that as my official answer. I’m going to brain dump some initial thoughts here but I would love to hear your feedback.",[16,23622,23623],{},"I think when someone tells me they want to learn Spring my first question to them is why do you want to Spring? There isn’t a wrong answer here but it's a pretty loaded question so I need a little more information to answer it.  The answers I usually get look something like this:",[3943,23625,23626,23629,23632],{},[1274,23627,23628],{},"I’m new to Java and I want to learn how to build web applications.",[1274,23630,23631],{},"My job has asked me to learn it.",[1274,23633,23634],{},"I want to get a job and Spring is in demand.",[16,23636,23637],{},"The reason I ask this is that Spring can be used to build a wide range of applications and provide solutions to a variety of problems. When I want to learn something new I start with my why? Why do I want to learn this thing? This allows me to narrow my focus. If you wanted to learn to speak another language to visit a country vs learning another a language to become a teacher those are 2 entirely different paths.",[16,23639,23640],{},"When I want to learn a new programming language, framework or tool having an end goal gives me clarity and makes the path towards that goal a straight one. Let’s say for example I wanted to learn Go. Learning an entire programming language can be a little overwhelming but if my goal was focused on learning Go to so that I could write a REST API that seems more manageable.",[16,23642,23643],{},"The reason you want to narrow your focus is that Spring as a solution to a number of problems. You can use Spring to build :",[1271,23645,23646,23649,23652,23655,23658,23661,23664],{},[1274,23647,23648],{},"Web Applications (Synchronous & Asynchronous)",[1274,23650,23651],{},"Cloud Applications",[1274,23653,23654],{},"Microservices (Distributed Applications)",[1274,23656,23657],{},"Serverless",[1274,23659,23660],{},"Event Driven Applications",[1274,23662,23663],{},"Batch",[1274,23665,23666],{},"CLIs",[16,23668,23669],{},"When you have it narrowed down to what you’re going to learn Spring for I like to tackle this problem like I do any other problem, by breaking it down into a series of smaller problems. Let’s say that for example, you wanted to learn Spring to build a REST API. While this might seem like a simple problem statement we can actually break this down into a series of problems.",[16,23671,23672],{},"Your first tasks might be to learn the mechanics of how to build out a REST Controller in Spring. As you start building this out you might realize you also need to understand the following:",[1271,23674,23675,23678,23681,23684,23687,23690,23693],{},[1274,23676,23677],{},"How to add logging to your application.",[1274,23679,23680],{},"How Dependency Injection works in Spring.",[1274,23682,23683],{},"How to validate incoming data.",[1274,23685,23686],{},"How to connect to a database.",[1274,23688,23689],{},"How to configure properties in your application.",[1274,23691,23692],{},"How to write Unit & Integration tests.",[1274,23694,23695],{},"and more…",[16,23697,23698,23699,23704],{},"As you start learning about Spring you will hear the terms Spring Framework and Spring Boot. This might be pretty confusing at first, are these 2 different frameworks? These are valid questions and I promise this will make more sense in time. My friend Mark Heckler has a ",[23,23700,23703],{"href":23701,"rel":23702},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Spzug_SjJnM",[101],"really great video"," on this and I suggest starting there.",[16,23706,23707],{},"Most people like to jump into official documentation and while our documentation is really good this can be overwhelming with a project as large as Spring. Not to mention now that you know there is the Spring Framework, Spring Boot and all of the projects in the ecosystem that is a lot of documentation to go through.",[16,23709,23710],{},"I like to start with a guide that tells me how to perform a specific task. We have 2 collections of guides that you can use for free and I think are a great place to get started:",[1271,23712,23713,23720],{},[1274,23714,23715],{},[23,23716,23719],{"href":23717,"rel":23718},"https:\u002F\u002Fspring.io\u002Fguides",[101],"Spring IO Guides",[1274,23721,23722],{},[23,23723,22446],{"href":23724,"rel":23725},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fguides\u002F",[101],[16,23727,23728],{},"You can find a specific guide for creating a REST API.  This will walk you through step-by-step on the mechanics of creating a REST API and what to expect along the way. Once you have that down you can find guides for each of the other tasks you have identified to complete your application.",[16,23730,23731],{},"If you get stuck on any of these guides you could always look for another tutorial either in written form or on YouTube. Just make sure that you are searching for the exact thing you are trying to do and not go down the rabbit hole of watching hours and hours of videos.",[16,23733,23734],{},"My biggest problem with tutorials is that you can’t just follow along with the author and then call it day. Take what you have just learned and build something completely different. If the tutorial you were watching used the domain of a ToDo list build something related to something you’re interested in. The constant repetition of taking what you learn, applying it, failing and figuring out what went wrong is where you will learn the most.",[16,23736,23737],{},"After you have spent some time building some of the different parts to your application this is now a good time to check out the official documentation. For me personally this is where I will usually jump all the way in.",[16,23739,23740],{},"I will pick up a book or 2 but I treat these as reference materials and read specific chapters to accomplish a task but I avoid reading it cover to cover. I also find some YouTubers who are big in that space and binge on their content. Finally, I am big on consuming content on Twitter so I will find people I can connect with there. This will also lead me to other blogs, videos, podcasts etc..",[16,23742,23743],{},"As I said from the start, this is just my initial brain dump of thoughts on the subject. I will try and put together a more thought out response to this question but for now I will leave you with a few resources go get you started.",[33,23745,6462],{"id":6461},[1271,23747,23748,23755,23762,23768,23773],{},[1274,23749,23750],{},[23,23751,23754],{"href":23752,"rel":23753},"https:\u002F\u002Fdocs.spring.io\u002Fspring-framework\u002Fdocs\u002Fcurrent\u002Freference\u002Fhtml\u002F",[101],"Spring Framework Reference Documentation",[1274,23756,23757],{},[23,23758,23761],{"href":23759,"rel":23760},"https:\u002F\u002Fdocs.spring.io\u002Fspring-boot\u002Fdocs\u002Fcurrent\u002Freference\u002Fhtml\u002F",[101],"Spring Boot Reference Documentation",[1274,23763,23764],{},[23,23765,1778],{"href":23766,"rel":23767},"https:\u002F\u002Fspring.io\u002Fblog",[101],[1274,23769,23770],{},[23,23771,22446],{"href":22444,"rel":23772},[101],[1274,23774,23775],{},[23,23776,23779],{"href":23777,"rel":23778},"https:\u002F\u002Fgithub.com\u002FThomasVitale\u002Fawesome-spring",[101],"Awesome Spring",[28,23781,18788],{"id":18787},[16,23783,23784],{},"Another busy week for me producing content. We had a great guest during Spring Office hours this week and I feel like this show is really starting to take off. If you count the replay of that show (I do) I was able to post 5 videos to YouTube this week. Yes, 1 was a YouTube Short and 1 was a replay of a live stream but that is impressive and unsustainable. I’m really just trying to find my feet here and find a number that",[33,23786,93],{"id":92},[16,23788,23789,23790,23795],{},"Last week during Spring Office Hours we welcomed in our guest, ",[23,23791,23794],{"href":23792,"rel":23793},"https:\u002F\u002Ftwitter.com\u002Fjonatan_ivanov",[101],"Jonatan Ivanov",". Jonatan is on the Spring Engineering team and focuses on Observability. I was really interested in chatting with him because I feel like this is an area in Spring that I need to learn more about. A few things stuck out for me.",[1271,23797,23798,23811,23814],{},[1274,23799,23800,23801],{},"The 3 pillars of observability are:\n",[3943,23802,23803,23805,23808],{},[1274,23804,21236],{},[1274,23806,23807],{},"Metrics",[1274,23809,23810],{},"Distributed Tracing",[1274,23812,23813],{},"If you're currently using Spring Cloud Sleuth that will be going away in Spring Boot 3 and the core of that project is being moved to Micrometer Tracing.",[1274,23815,23816,23817,23822],{},"If you want to learn more check out the following ",[23,23818,23821],{"href":23819,"rel":23820},"https:\u002F\u002Fgithub.com\u002Fmicrometer-metrics\u002Fmicrometer-samples",[101],"repository on Github"," to see some of the examples Jonatan went through during our live stream.",[47,23824],{"id":23825},"zgaAEZ4Y_uI",[33,23827,23829],{"id":23828},"spring-security-cors","Spring Security CORS",[16,23831,23832],{},"The first video I published this week was in response to a question I have been receiving a lot lately. The question was about the different ways to configure CORS and specifically when Spring Security is a part of your application.",[47,23834],{"id":23835},"HRwlT_etr60",[33,23837,23839],{"id":23838},"domain-class-converter","Domain Class Converter",[16,23841,23842,23843,184],{},"Next up I came across this handy class in Spring Data called the Domain Class Converter. It allows you to take an id and automatically convert it to a domain object by using Spring Data’s ",[469,23844,23845],{},"CrudRepository",[47,23847],{"id":23848},"_QBe2ZiXV-0",[33,23850,23852],{"id":23851},"spring-security-jpa","Spring Security JPA",[16,23854,23855],{},"I have been putting out a lot of content lately on Spring Security and this was the next progression of that material. In previous videos, I took a look at how to configure an in-memory user and connect to a database using JDBC. There is no built-in mechanism for authenticating against a database using Spring Data JPA but it’s fairly simple to do when you understand what you need to do.",[47,23857],{"id":23858},"awcCiqBO36E",[33,23860,18827],{"id":18826},[16,23862,23863,23864,23868],{},"I mentioned this last week but I am really enjoying creating short-form videos. They take less time to film, edit and produce and it’s a great way to practice. Java 19 was recently released and I thought I would put together a quick video on how to install it using ",[23,23865,23867],{"href":11219,"rel":23866},[101],"SdkMan",". If you’re not aware SdkMan is a really great tool for managing parallel versions of SDKs.",[16,23870,23871],{},[23,23872,23875],{"href":23873,"rel":23874},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FVZoqz9PPHNs?feature=share",[101],"The best and fastest way to Install Java 19 #shorts",[16,23877,23878,23879,23882],{},"Speaking of Java 19, did you see that it is now an option over at ",[23,23880,2090],{"href":21978,"rel":23881},[101]," 🤩",[16,23884,23885],{},[74,23886],{"alt":23887,"src":23888},"Java 19 - Spring Initializr","\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F03\u002Fjava-19-spring.png",[33,23890,3363],{"id":4557},[16,23892,23893],{},"Just to close out this section on YouTube. I ended up posting a total of 17 videos in the month of September and your support means the world to me. With some consistency and talking about topics like Spring Security that more of you are searching for I had my best month ever. I ended up adding 1,000+ subscribers over the last 28 days and that is just mind blowing 🤯 to me. I’m closing in on 20,000 and have a goal of hitting it before the year ends!",[16,23895,23896],{},[74,23897],{"alt":23898,"src":23899},"YouTube Stats","\u002Fimages\u002Fnewsletter\u002F2022\u002F10\u002F03\u002Fyoutube-stats.png",[33,23901,23903],{"id":23902},"spring-recipes-recording","Spring Recipes Recording",[16,23905,23906],{},"A couple of weeks ago my friend Nate Schutta and I gave an online presentation “Spring Recipes: A collection of common-sense solutions”. This was a similar talk to the one that we gave at KCDC over the summer and it was fun to give this talk another spin. We could seriously write a book (should we) with the amount of content we have piled up on this talk. If you want to watch the recording you can do so using the link below.",[16,23908,23909],{},[23,23910,23911],{"href":23911,"rel":23912},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fwebinars\u002Fsep-22-spring-recipes-a-collection-of-common-sense-solutions",[101],[28,23914,13406],{"id":13405},[1271,23916,23917,23920,23925,23930,23935],{},[1274,23918,23919],{},"Oct 5th: Creating GraphQL APIs in Java I am giving a lunch and learning to over 100 developers for an awesome Fortune 500 company. In this talk, I am going to introduce them to GraphQL and how they can start using it today in their Java \u002F Spring applications.",[1274,23921,23922],{},[23,23923,22943],{"href":22941,"rel":23924},[101],[1274,23926,23927],{},[23,23928,22950],{"href":22948,"rel":23929},[101],[1274,23931,23932,21278],{},[23,23933,20796],{"href":20823,"rel":23934},[101],[1274,23936,23937,21284],{},[23,23938,20796],{"href":20823,"rel":23939},[101],[28,23941,21516],{"id":10953},[33,23943,11453],{"id":11452},[1271,23945,23946,23953,23960,23967],{},[1274,23947,23948],{},[23,23949,23952],{"href":23950,"rel":23951},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F26\u002Fnative-support-in-spring-boot-3-0-0-m5",[101],"Native Support in Spring Boot 3.0.0-M5",[1274,23954,23955],{},[23,23956,23959],{"href":23957,"rel":23958},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F23\u002Fmy-springone-2022",[101],"My SpringOne - Josh Long",[1274,23961,23962],{},[23,23963,23966],{"href":23964,"rel":23965},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F09\u002Fspring-boot-migrator",[101],"Introducing Spring Boot Migrator",[1274,23968,23969],{},[23,23970,23973],{"href":23971,"rel":23972},"https:\u002F\u002Fgithub.blog\u002F2022-09-14-8-things-you-didnt-know-you-could-do-with-github-copilot\u002F",[101],"8 things you didn’t know you could do with GitHub Copilot",[33,23975,11465],{"id":30},[1271,23977,23978,23985,23992],{},[1274,23979,23980],{},[23,23981,23984],{"href":23982,"rel":23983},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=byNh7sWJnRE",[101],"Knative and Spring Native - Bringing back the func by Thomas Vitale and Mauricio Salatino",[1274,23986,23987],{},[23,23988,23991],{"href":23989,"rel":23990},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vmS9vNbta-w",[101],"IntelliJ IDEA Conf 2022 (day 1)",[1274,23993,23994],{},[23,23995,23998],{"href":23996,"rel":23997},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=-8epeIFdKWo",[101],"IntelliJ IDEA Conf 2022 (day 2)",[33,24000,13650],{"id":973},[1271,24002,24003],{},[1274,24004,24005],{},[23,24006,24009],{"href":24007,"rel":24008},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6wJ69TPWRZg",[101],"Between Chair and Keyboard with Coté",[33,24011,14122],{"id":14121},[1271,24013,24014],{},[1274,24015,24016,24021,24022],{},[23,24017,24020],{"href":24018,"rel":24019},"https:\u002F\u002Famzn.to\u002F3fiiJad",[101],"Deep Work - Cal Newport"," - ",[734,24023,24024],{},"Currently Reading",[33,24026,18092],{"id":18091},[1271,24028,24029,24036],{},[1274,24030,24031],{},[23,24032,24035],{"href":24033,"rel":24034},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fblog\u002Fthis-month-in-spring-september-2022",[101],"This Month in Spring - September 2022",[1274,24037,24038],{},[23,24039,24042],{"href":24040,"rel":24041},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F10\u002Fjava-annotated-monthly-october-2022\u002F",[101],"Java Annotated Monthly – October 2022",[33,24044,12149],{"id":12148},[16,24046,24047],{},"\"I am a great believer in luck, and I find the harder I work, the more I have of it.”",[33,24049,21608],{"id":384},[16,24051,24052],{},"Thanks for this great little tip Marcio!",[16,24054,24055],{},[23,24056,24057],{"href":24057,"rel":24058},"https:\u002F\u002Ftwitter.com\u002Fmarcioendo\u002Fstatus\u002F1574375251521294341",[101],[28,24060,172],{"id":171},[16,24062,23106,24063,11333],{},[23,24064,11332],{"href":11330,"rel":24065},[101],[16,24067,9630,24068,191,24070,24072,24074,24076],{},[189,24069],{},[189,24071],{},[23,24073,11491],{"href":11490},[189,24075],{},[23,24077,198],{"href":198,"rel":24078},[101],{"title":200,"searchDepth":201,"depth":201,"links":24080},[24081,24082,24085,24094,24095,24104],{"id":21954,"depth":201,"text":21955},{"id":23616,"depth":201,"text":23617,"children":24083},[24084],{"id":6461,"depth":206,"text":6462},{"id":18787,"depth":201,"text":18788,"children":24086},[24087,24088,24089,24090,24091,24092,24093],{"id":92,"depth":206,"text":93},{"id":23828,"depth":206,"text":23829},{"id":23838,"depth":206,"text":23839},{"id":23851,"depth":206,"text":23852},{"id":18826,"depth":206,"text":18827},{"id":4557,"depth":206,"text":3363},{"id":23902,"depth":206,"text":23903},{"id":13405,"depth":201,"text":13406},{"id":10953,"depth":201,"text":21516,"children":24096},[24097,24098,24099,24100,24101,24102,24103],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":24106,"path":24107,"title":24108,"description":24109,"meta":24110,"body":24113},"newsletter\u002Fnewsletter\u002F2022\u002F09\u002F26\u002Fspring-one-announcements.md","\u002Fnewsletter\u002F2022\u002F09\u002F26\u002Fspring-one-announcements","SpringOne,  Java 19, CJUG and new content","Happy Monday and welcome to another edition of the newsletter. It was another busy week here as the weather has started to cool off and we are officially into fall 🍁 In this week's newsletter, I want to talk about the upcoming SpringOne conference, Java 19, a Java User Group meeting I attended, and a bunch of new content that I was able to put out there.",{"slug":24111,"date":24112},"spring-one-announcements","2022-09-26T17:00:00.000Z",{"type":13,"value":24114,"toc":24453},[24115,24117,24119,24122,24129,24132,24135,24138,24141,24143,24149,24151,24157,24162,24166,24175,24184,24187,24217,24219,24222,24225,24231,24234,24237,24243,24245,24248,24250,24253,24256,24260,24263,24266,24268,24271,24287,24291,24307,24310,24316,24318,24320,24361,24363,24377,24379,24402,24404,24411,24413,24420,24422,24425,24427,24433,24435,24440],[16,24116,24109],{},[28,24118,21955],{"id":21954},[16,24120,24121],{},"If you have been paying attention this is the 3rd week in a row that I am releasing a newsletter after telling everyone that I was moving to a 2-week cadence. If you haven’t noticed, what am I doing here? I love to write so when I have something to talk about I will tell you about it. This means that my official cadence has moved to “Whenever I have something to share with you”.",[16,24123,24124,24125,24128],{},"I’m currently reading ",[23,24126,22639],{"href":24018,"rel":24127},[101]," and what a great time this book has come into my life. I found Cal through his podcast and YouTube channel where he often talks about time management and productivity. Deep work is the ability to focus without distraction on a cognitively demanding task.",[16,24130,24131],{},"I have gotten into a good grove at work and find myself taking on as much as I can and I like to keep busy. With that though I really need to be focused, prioritize my work and come up with a good quarterly, weekly, and daily plan. This has helped me shift from being reactive to proactive. I’m not longer heading into a workday asking myself what’s next, I have that ready to go and my days planned out as much as possible.",[16,24133,24134],{},"There is just something about reading or listening to someone who has devoted so much time and research to a particular subject. I’m enjoying binging on all of his content right now and so far his book is exactly what I hoped it would be.",[16,24136,24137],{},"I also want to give a huge shout out to the Cleveland Guardians who did what nobody thought they could do and that is win the division. They are the youngest team in all of baseball and the 2nd lowest payroll in the league. I can’t wait for the playoffs to start and see what kind of October magic they can put together.",[16,24139,24140],{},"I have a lot to share with you so let's get into it.",[28,24142,4968],{"id":16650},[16,24144,24145,24146,22971],{},"This week we made the first of our announcements around speakers, workshops, and sessions. If you haven’t had a chance you should head over to ",[23,24147,22970],{"href":22968,"rel":24148},[101],[16,24150,22974],{},[16,24152,24153],{},[74,24154],{"alt":24155,"src":24156},"Join me at SpringOne","\u002Fimages\u002Fnewsletter\u002F2022\u002F09\u002F26\u002Fspring-one-join-me.png",[16,24158,22982,24159,22987],{},[23,24160,22986],{"href":22948,"rel":24161},[101],[28,24163,24165],{"id":24164},"java-19","Java 19",[16,24167,24168,24169,24174],{},"Java 19 was released last week and what an exciting time it is to be a Java developer. Ever since Java has moved to a new release cadence we get a new version every 6 months that is packed with new features, performance & security improvements, and did I mention we get all of this for ",[734,24170,24171],{},[161,24172,24173],{},"FREE","? Hats off 🧢 to everyone who helped make the newest version of Java possible.",[16,24176,24177,24178,24183],{},"Java 19 is packed full of some big features and while a lot of them are incubator or preview they will shape the future of Java. We have features that full under project Amber and Panama but the highlight of this release is Project Loom. ",[23,24179,24182],{"href":24180,"rel":24181},"https:\u002F\u002Fopenjdk.org\u002Fjeps\u002F425",[101],"JEP 425 brings"," us Virtual Threads in preview mode. Virtual Threads are lightweight threads that dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications.",[16,24185,24186],{},"I am really looking forward to learning more about Virtual Threads and seeing what the Java community does with them. I have some resources below that will help you get caught up with everything new in Java 19.",[1271,24188,24189,24196,24203,24210],{},[1274,24190,24191],{},[23,24192,24195],{"href":24193,"rel":24194},"https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F19\u002F",[101],"Open JDK 19",[1274,24197,24198],{},[23,24199,24202],{"href":24200,"rel":24201},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6pN0Ymsl1H0",[101],"Moving Java Forward with Java 19",[1274,24204,24205],{},[23,24206,24209],{"href":24207,"rel":24208},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F09\u002Fjava19-released",[101],"InfoQ: Java 19 Released",[1274,24211,24212],{},[23,24213,24216],{"href":24214,"rel":24215},"https:\u002F\u002Ffoojay.io\u002Ftoday\u002Fthe-5-most-pivotal-and-innovative-additions-to-openjdk-19\u002F",[101],"The 5 Most Pivotal and Innovative Additions to OpenJDK 19",[28,24218,20925],{"id":20924},[16,24220,24221],{},"This months topic at the Cleveland Java User Group was a deep dive into Java Concurrency. We were lucky to have Daniel Mikusa and Scott Seighman both present on the topic. Dan went through and walk through the basics of how concurrency works in Java and I thought it was a really great introduction to something that can be a pretty complicated topic.",[16,24223,24224],{},"Next, right on topic Scott was able to break down the new Virtual Threads feature in Java 19. I thought his examples were a really great introduction to what you can do with them.",[16,24226,24227],{},[74,24228],{"alt":24229,"src":24230},"Virtual Threads (Preview) ","\u002Fimages\u002Fnewsletter\u002F2022\u002F09\u002F26\u002Fvirtual-threads.png",[16,24232,24233],{},"Virtual Threads (Preview)",[16,24235,24236],{},"If you want to check out the demos you can visit the following Github Repo:",[16,24238,24239],{},[23,24240,24241],{"href":24241,"rel":24242},"https:\u002F\u002Fgithub.com\u002Fdmikusa\u002Fjava-concurrency-demo\u002F",[101],[28,24244,18788],{"id":18787},[16,24246,24247],{},"Another busy week producing content and preparing for a bunch of content I will be focusing on in the near future. I hope you’re learning some new 🤩 and enjoying what I am getting out there.",[33,24249,93],{"id":92},[16,24251,24252],{},"In this weeks episode DaShuan and I took a look at what’s new in the Spring community and answered your questions. We also had an opportunity to show some demos of things we are currently working on. I’m also pleased to report back that my camera did not overheat this week. It was defiantly due to me changing the recording settings to 4k which is ok for normal videos but not great for streaming.",[47,24254],{"id":24255},"mquczsmTIm8",[33,24257,24259],{"id":24258},"h2-database-spring-boot","H2 Database Spring Boot",[16,24261,24262],{},"In this tutorial, you will learn everything you need to know to connect and configure an in-memory H2 database in Spring Boot. I will also walk you through what you need to look out for if you are using Spring Security in your application.",[47,24264],{"id":24265},"PSrHcCwvfVQ",[33,24267,18827],{"id":18826},[16,24269,24270],{},"I am really having fun putting short form videos together. Obviously the shorter videos take less time to produce and edit but they also give me a chance to get in front of a larger audience. Seeing how much YouTube is investing in shorts it just makes sense for me to create both short and long form content. Here are a coupe of shorts I published last week:",[1271,24272,24273,24280],{},[1274,24274,24275],{},[23,24276,24279],{"href":24277,"rel":24278},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FKirPiS-M_Gg?feature=share",[101],"Java 19 Short",[1274,24281,24282],{},[23,24283,24286],{"href":24284,"rel":24285},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FBP71pgx1bi4?feature=share",[101],"SpringOne 2022 Short",[28,24288,24290],{"id":24289},"upcoming-talks-content","Upcoming Talks \u002F Content",[1271,24292,24293,24296,24301],{},[1274,24294,24295],{},"Oct 5th: Creating GraphQL APIs in Java I am giving a lunch and learn to over 100 developers for an awesome Fortune 500 company. In this talk, I am going to introduce them to GraphQL and how they can start using it today in their Java \u002F Spring applications.",[1274,24297,24298],{},[23,24299,22943],{"href":22941,"rel":24300},[101],[1274,24302,24303],{},[23,24304,24306],{"href":22948,"rel":24305},[101],"SpringOne Workshop - Getting Started with Spring Boot",[16,24308,24309],{},"I’m working on a YouTube video that will teach the basics of SpringBoot. I put this poll out there. What do you think is better? 1 long video or a playlist of multiple videos. I’m not sure on the length yet but it could be in the 3-4 hour range. If you have thoughts on this please feel to reply to this email or reach out to me on Twitter.",[16,24311,24312],{},[23,24313,24314],{"href":24314,"rel":24315},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1573744850117316608",[101],[28,24317,21516],{"id":10953},[33,24319,11453],{"id":11452},[1271,24321,24322,24328,24335,24340,24347,24354],{},[1274,24323,24324],{},[23,24325,24209],{"href":24326,"rel":24327},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F09\u002Fjava19-released\u002F",[101],[1274,24329,24330],{},[23,24331,24334],{"href":24332,"rel":24333},"https:\u002F\u002Finside.java\u002F2022\u002F09\u002F20\u002Fthe-arrival-of-java-19\u002F",[101],"The arrival of Java 19",[1274,24336,24337],{},[23,24338,24216],{"href":24214,"rel":24339},[101],[1274,24341,24342],{},[23,24343,24346],{"href":24344,"rel":24345},"https:\u002F\u002Fblog.youtube\u002Fnews-and-events\u002Fsupporting-the-next-wave-of-creative-entrepreneurs\u002F",[101],"Made on YouTube: supporting the next wave of creative entrepreneurs",[1274,24348,24349],{},[23,24350,24353],{"href":24351,"rel":24352},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F19\u002Fspring-data-rest-vulnerability-cve-2022-31679",[101],"Spring Data REST Vulnerability (CVE-2022-31679)",[1274,24355,24356],{},[23,24357,24360],{"href":24358,"rel":24359},"https:\u002F\u002Fjakartaee-ambassadors.io\u002F2022\u002F09\u002F22\u002Fjakarta-ee-10-released\u002F",[101],"Jakarta 10 has Landed!",[33,24362,11465],{"id":30},[1271,24364,24365,24370],{},[1274,24366,24367],{},[23,24368,24202],{"href":24200,"rel":24369},[101],[1274,24371,24372],{},[23,24373,24376],{"href":24374,"rel":24375},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=h6TrvCV3NdU",[101],"Made on YouTube: New ways to join YPP, Shorts Monetization & Creator Music",[33,24378,13650],{"id":973},[1271,24380,24381,24388,24395],{},[1274,24382,24383],{},[23,24384,24387],{"href":24385,"rel":24386},"https:\u002F\u002Finside.java\u002F2022\u002F09\u002F20\u002Fpodcast-026\u002F",[101],"Inside Java Podcast: Java 19 is here",[1274,24389,24390],{},[23,24391,24394],{"href":24392,"rel":24393},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VgfoqtPNA8s",[101],"Between Chair and Keyboard with Simon Brown",[1274,24396,24397],{},[23,24398,24401],{"href":24399,"rel":24400},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F6b898e9a-c89f-449f-ae33-8c744c713402",[101],"Bootiful Podcast: Couchbase and Cloud legend Laurent Doguin",[33,24403,22284],{"id":16575},[1271,24405,24406],{},[1274,24407,24408],{},[23,24409,24195],{"href":24193,"rel":24410},[101],[33,24412,14122],{"id":14121},[1271,24414,24415],{},[1274,24416,24417],{},[23,24418,24020],{"href":24018,"rel":24419},[101],[33,24421,12149],{"id":12148},[16,24423,24424],{},"“The happiest, most passionate employees are not those who followed their passion into a position, but instead those who have been around long enough to become good at what they do. On reflection, this makes sense. - Cal Newport”",[33,24426,21608],{"id":384},[16,24428,24429],{},[23,24430,24431],{"href":24431,"rel":24432},"https:\u002F\u002Ftwitter.com\u002Fdevnexus\u002Fstatus\u002F1571861700071940096",[101],[28,24434,172],{"id":171},[16,24436,23106,24437,11333],{},[23,24438,11332],{"href":11330,"rel":24439},[101],[16,24441,9630,24442,191,24444,24446,24448,24450],{},[189,24443],{},[189,24445],{},[23,24447,11491],{"href":11490},[189,24449],{},[23,24451,198],{"href":198,"rel":24452},[101],{"title":200,"searchDepth":201,"depth":201,"links":24454},[24455,24456,24457,24458,24459,24464,24465,24474],{"id":21954,"depth":201,"text":21955},{"id":16650,"depth":201,"text":4968},{"id":24164,"depth":201,"text":24165},{"id":20924,"depth":201,"text":20925},{"id":18787,"depth":201,"text":18788,"children":24460},[24461,24462,24463],{"id":92,"depth":206,"text":93},{"id":24258,"depth":206,"text":24259},{"id":18826,"depth":206,"text":18827},{"id":24289,"depth":201,"text":24290},{"id":10953,"depth":201,"text":21516,"children":24466},[24467,24468,24469,24470,24471,24472,24473],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":24476,"path":24477,"title":24478,"description":24479,"meta":24480,"body":24482},"newsletter\u002Fnewsletter\u002F2022\u002F09\u002F19\u002Fyoutube-shorts.md","\u002Fnewsletter\u002F2022\u002F09\u002F19\u002Fyoutube-shorts","YouTube Shorts, Office Hours and an Embarrassing Loss","Welcome back to another edition of the newsletter. This week I have a lot of new content to share with you, I’m working on a new Spring Boot Tutorial for YouTube and Adobe buys Figma.",{"slug":18826,"date":24481},"2022-09-19T10:00:00.000Z",{"type":13,"value":24483,"toc":24814},[24484,24486,24488,24495,24498,24501,24507,24511,24514,24516,24523,24526,24528,24531,24534,24537,24543,24546,24548,24551,24554,24572,24576,24579,24632,24634,24661,24664,24668,24677,24680,24683,24686,24690,24698,24700,24702,24723,24725,24748,24750,24780,24782,24792,24794,24799],[16,24485,24479],{},[28,24487,21955],{"id":21954},[16,24489,24490,24491,184],{},"Last week was a busy week and this week isn’t slowing down. I have a presentation coming up on Thursday with my coworker and friend Nate Schutta. We are going to present on Spring Recipes where we show a problem and then how you can go about solving it in Spring. If you’re interested in attending you can ",[23,24492,24494],{"href":23911,"rel":24493},[101],"register for free here",[16,24496,24497],{},"I’m currently facing an issue with my Sony 6100 and overheating during my live streams. I think this issue has to do with me messing with my settings and turning the quality up to 4k for my local recordings. After doing some research I found out that this could be causing my issues. I am going to try and run a test this week before my presentation to see if I can correct this. I am curious to hear from my audience though, has anyone else run into this issue?",[16,24499,24500],{},"Finally, I have to start my week off with the embarrassing end to the Browns game yesterday. They were up 13 points with less than 2 minutes to go and found a way to lose that game. It is really hard to be a Browns fan and this quote from the late great Les Levine sums it up:",[16,24502,24503],{},[23,24504,24505],{"href":24505,"rel":24506},"https:\u002F\u002Ftwitter.com\u002FRuiterWrongFAN\u002Fstatus\u002F1571620668797587457",[101],[28,24508,24510],{"id":24509},"content-creation","Content Creation",[16,24512,24513],{},"I recently reorganized my office to be more functional when it comes to creating content and it’s starting to pay off. While I was able to create some pretty solid content this week I know there is plenty of room for improvement and I am looking forward to learning and getting better. If you’re interested in what I have been doing to my office let me know and I will share it one week in this newsletter.",[33,24515,93],{"id":92},[16,24517,24518,24519,24522],{},"DaShaun and I got back to streaming and had a successful ",[23,24520,93],{"href":20628,"rel":24521},[101],". What I love most about these shows is we get to hear from you and find out what problems you’re facing. We took a lot of notes from this show and have some plans to address some of the questions in the near future. The big thing we want to do with this show is getting more consistent and we have scheduled the next 3 shows. For now, we will go live on Tuesday afternoons at 3:30 EDT. Here is the replay of Episode 11:",[47,24524],{"id":24525},"79cNoyXhHNU",[33,24527,3363],{"id":4557},[16,24529,24530],{},"As I write this, I just realized that I posted 6 new videos to YouTube this week. While 3 of them were YouTube Shorts this type of productivity is just not sustainable but regardless it was a fun week.",[16,24532,24533],{},"In this tutorial, I answered a question I got from a subscriber. He needed to be able to consume a third-party API, save that information to a database and then send it to another service. I recreated this flow into a fun little tutorial that I hope answered the question.",[47,24535],{"id":24536},"XEtPVm_SL2Q",[16,24538,24539,24540,184],{},"I have been publishing a lot of tutorials related to Spring Security lately. In almost all of those demos, I use an in-memory user because it’s quick and I am trying to keep these tutorials on the topic. While this is great for demos it isn’t going to be used in the real world. In this tutorial, I discuss how to authenticate against a database using the ",[469,24541,24542],{},"JdbcUserDetailsManager",[47,24544],{"id":24545},"d7ZmZFbE_qY",[33,24547,18827],{"id":18826},[16,24549,24550],{},"I consume content from a lot of the big YouTubers out there and all of them are telling me that I don’t want to miss the short-form content train. Knowing that I decided to get on board and at least see what kind of content I can produce and if it helps out at all.",[16,24552,24553],{},"After a few videos, the one thing I really enjoy is that it has to be less than 60 seconds which means I can shoot, edit and publish videos much faster. The more videos I work on the more editing experience I gain. The challenge I am finding right now is that it’s really hard to record my screen in 9:16 format but I managed to get a tutorial in this week and it turned out ok.",[1271,24555,24556,24565],{},[1274,24557,24558],{},[161,24559,24560],{},[23,24561,24564],{"href":24562,"rel":24563},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FCh_Q1mdZjuQ",[101],"My #1 tip for anyone who wants to learn how to code 👨‍💻👩‍💻",[1274,24566,24567],{},[23,24568,24571],{"href":24569,"rel":24570},"https:\u002F\u002Fyoutube.com\u002Fshorts\u002FJiDjWX4pzWo",[101],"Create a REST API in Java using Spring Boot in less than 60 seconds",[33,24573,24575],{"id":24574},"spring-boot-tutorial","Spring Boot Tutorial",[16,24577,24578],{},"I created a post on YouTube asking my subscribers so I thought I would also pose this question to you. I am working on an outline for a big tutorial that I would like to release on YouTube. This is probably going to be a pretty long video but I want to target developers new to Spring. The idea is here are all the basics you need to know to create and deploy your first application. This is a rough outline of what I have so far:",[1271,24580,24581,24584,24587,24590,24593,24607,24609,24612,24615,24626,24629],{},[1274,24582,24583],{},"Why Spring?",[1274,24585,24586],{},"Spring Framework vs Spring Boot",[1274,24588,24589],{},"What is Spring used for?",[1274,24591,24592],{},"Create a new project",[1274,24594,24595,24596],{},"Spring Framework Core\n",[1271,24597,24598,24601,24604],{},[1274,24599,24600],{},"Application Context",[1274,24602,24603],{},"Beans",[1274,24605,24606],{},"IoC \u002F Dependency Injection",[1274,24608,21236],{},[1274,24610,24611],{},"Externalized Configuration",[1274,24613,24614],{},"CRUD RestController",[1274,24616,24617,24618],{},"Connect to a database\n",[1271,24619,24620,24623],{},[1274,24621,24622],{},"H2",[1274,24624,24625],{},"PostgreSQL (Docker Compose)",[1274,24627,24628],{},"Testing",[1274,24630,24631],{},"Deployment",[28,24633,13406],{"id":13405},[1271,24635,24636,24643,24650,24653],{},[1274,24637,24638],{},[23,24639,24642],{"href":24640,"rel":24641},"https:\u002F\u002Fyoutu.be\u002FmquczsmTIm8",[101],"Sept 20th - Spring Office Hours",[1274,24644,24645,24649],{},[23,24646,24648],{"href":23911,"rel":24647},[101],"Sept 22nd - Spring Recipes: A collection of common sense solutions","\nIn this session, you will learn about common situations you will encounter as a developer and how Spring can make the right thing to do the easy thing to do. Cutting through the cruft, you will leave armed with practical code examples you can use on your projects.",[1274,24651,24652],{},"Oct 5th: Creating GraphQL APIs in Java\nI am giving a lunch and learn to over 100 developers for an awesome Fortune 500 company. In this talk, I am going to introduce them to GraphQL and how they can start using it today in their Java \u002F Spring applications.",[1274,24654,24655,24660],{},[23,24656,24659],{"href":24657,"rel":24658},"https:\u002F\u002Fspringone.io\u002F2022\u002Fworkshops\u002Fspring-boot",[101],"Dec 6th - 8th: SpringOne Workshop","\nIn this workshop, we are going to introduce you to Spring Boot. If you’re new to Spring and what to learn what types of applications you can build and how to get started this is the workshop for you. By the end of this session, you will be able to build your first Spring Boot application.",[16,24662,24663],{},"If you would like me to speak at your conference, meetup group or company-wide meeting please feel free to reach out to me.",[28,24665,24667],{"id":24666},"adobe-acquires-figma","Adobe Acquires Figma",[16,24669,24670,24671,24676],{},"The big news that dropped last week was that ",[23,24672,24675],{"href":24673,"rel":24674},"https:\u002F\u002Fnews.adobe.com\u002Fnews\u002Fnews-details\u002F2022\u002FAdobe-to-Acquire-Figma\u002Fdefault.aspx",[101],"Adobe was purchasing Figma",". I heard a lot of fans of Figma up in arms that the big bad evil empire of Adobe purchased their favorite tool and they were going to run it into the ground. First off, I don’t think they paid 20 billion dollars to run it into the ground. Second, I saw the following excerpt in an email from Adobe:",[2238,24678,24679],{},"While we have been reducing our investment in XD, we will continue to support it. We are excited about Figma's vision for the future of product design and the potential of our teams coming together to benefit our customers.",[16,24681,24682],{},"The reason I bring this up today is because I am a huge fan of Adobe XD. I use it to create all of my YouTube thumbnails, images for my website and any promo graphics for courses or social media. I started using it because it was included in my Adobe subscription and then grew to love it. I’m sad that it might be going away but I’m also excited that a popular tool like Figma might be part of my subscription going forward.",[16,24684,24685],{},"I happen to have a lot of love for Adobe and the people that work there. I wish them nothing but continued success and congratulate them and the Figma team on this acquisition.",[28,24687,24689],{"id":24688},"springone-2022","SpringOne 2022",[16,24691,24692,24693,24697],{},"Our long-running ",[23,24694,24696],{"href":16819,"rel":24695},[101],"SpringOne conference"," is coming up December 6th to 8th, in San Francisco. There will be an amazing lineup of speakers and sessions and we are back in person. I will be giving a workshop on getting started with Spring Boot and hopefully a general session. You can get $200 off when registering if you use the code S1VM22_Advocate_200.",[28,24699,21516],{"id":10953},[33,24701,11453],{"id":11452},[1271,24703,24704,24709,24716],{},[1274,24705,24706],{},[23,24707,24667],{"href":24673,"rel":24708},[101],[1274,24710,24711],{},[23,24712,24715],{"href":24713,"rel":24714},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F16\u002Fspring-cloud-sleuth-opentelemetry-otel-1-1-0-has-been-released",[101],"Spring Cloud Sleuth OpenTelemetry (OTel) 1.1.0 Has Been Released",[1274,24717,24718],{},[23,24719,24722],{"href":24720,"rel":24721},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F15\u002Fspring-framework-6-0-0-m6-and-5-3-23-available-now",[101],"Spring Framework 6.0.0-M6 and 5.3.23 are available now",[33,24724,11465],{"id":30},[1271,24726,24727,24734,24741],{},[1274,24728,24729],{},[23,24730,24733],{"href":24731,"rel":24732},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=LGOhejS1Itc",[101],"Kubernetes Native Java by Josh Long",[1274,24735,24736],{},[23,24737,24740],{"href":24738,"rel":24739},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=FMZckqbPGq0",[101],"Welcome, Spring for GraphQL by Rossen Stoyanchev @ Spring I\u002FO 2022",[1274,24742,24743],{},[23,24744,24747],{"href":24745,"rel":24746},"https:\u002F\u002Fnipafx.dev\u002Finside-java-newscast-32\u002F",[101],"Java Newscast #32",[33,24749,13650],{"id":973},[1271,24751,24752,24759,24766,24773],{},[1274,24753,24754],{},[23,24755,24758],{"href":24756,"rel":24757},"https:\u002F\u002Fbadass.dev\u002Fpodcast\u002Fcourse-builders",[101],"badass.dev podcasts",[1274,24760,24761],{},[23,24762,24765],{"href":24763,"rel":24764},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F08\u002Fa-bootiful-podcast-hashicorp-s-rosemary-wang-on-securing-the-intersection-of-apps-and-ops-with-hashicorp-vault",[101],"Hashicorp's Rosemary Wang on securing the intersection of apps and ops with Hashicorp Vault",[1274,24767,24768],{},[23,24769,24772],{"href":24770,"rel":24771},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F486db005-2e7f-4c64-a6a5-c4835a525b5b",[101],"Big data legend, former Pivot, and friend to the Spring community, Tim Spann",[1274,24774,24775],{},[23,24776,24779],{"href":24777,"rel":24778},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=7vXgOw6KMeQ",[101],"Between Chair and Keyboard with Justin Reock",[33,24781,18092],{"id":18091},[1271,24783,24784],{},[1274,24785,24786,24791],{},[23,24787,24790],{"href":24788,"rel":24789},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F09\u002F13\u002Fthis-week-in-spring-september-13th-2022",[101],"This Week in Spring - September 13th, 2022"," (Thanks for the shout-outs Josh!)",[28,24793,172],{"id":171},[16,24795,23106,24796,11333],{},[23,24797,11332],{"href":11330,"rel":24798},[101],[16,24800,9630,24801,191,24803,24805,24807,24809,24812],{},[189,24802],{},[189,24804],{},[23,24806,11491],{"href":11490},[189,24808],{},[23,24810,198],{"href":198,"rel":24811},[101],[189,24813],{},{"title":200,"searchDepth":201,"depth":201,"links":24815},[24816,24817,24823,24824,24825,24826,24832],{"id":21954,"depth":201,"text":21955},{"id":24509,"depth":201,"text":24510,"children":24818},[24819,24820,24821,24822],{"id":92,"depth":206,"text":93},{"id":4557,"depth":206,"text":3363},{"id":18826,"depth":206,"text":18827},{"id":24574,"depth":206,"text":24575},{"id":13405,"depth":201,"text":13406},{"id":24666,"depth":201,"text":24667},{"id":24688,"depth":201,"text":24689},{"id":10953,"depth":201,"text":21516,"children":24827},[24828,24829,24830,24831],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":18091,"depth":206,"text":18092},{"id":171,"depth":201,"text":172},{"_id":24834,"path":24835,"title":24836,"description":24837,"meta":24838,"body":24841},"newsletter\u002Fnewsletter\u002F2022\u002F09\u002F12\u002Fspring-boot-jwt.md","\u002Fnewsletter\u002F2022\u002F09\u002F12\u002Fspring-boot-jwt","Securing REST APIs with JWTs and YouTube is adding paid courses!","Happy Monday friends and welcome to another edition of the newsletter. This week I have a new new content on securing REST endpoints in Spring Boot with JWTs, upcoming talks, VMware Explore and YouTube is adding paid courses. As always I included some of the best things I found on the web over the last couple of weeks.",{"slug":24839,"date":24840},"spring-boot-jwt","2022-09-12T12:00:00.000Z",{"type":13,"value":24842,"toc":25145},[24843,24845,24847,24850,24853,24856,24862,24866,24869,24872,24881,24884,24886,24902,24905,24907,24910,24918,24921,24925,24928,24937,24940,24946,24949,24952,24955,24957,24963,24965,24967,24997,24999,25029,25031,25047,25049,25058,25060,25076,25078,25094,25097,25113,25115,25118,25124,25126,25132],[16,24844,24837],{},[28,24846,21955],{"id":21954},[16,24848,24849],{},"If you’re new around here I am a huge fan of Cleveland sports and for the first time since 2004, the Cleveland Browns are 1-0. Hard to believe that it's been that long since they won the first game of the year but also not that hard to consider if you pay attention to football 🤦‍♂️",[16,24851,24852],{},"My daughter starts pre-k school and this year she has moved up to the 4-year-old classroom. We were really excited to find out that she will be in the same class as 2 of her best friends which always makes it easier. I’m excited for her because she loves to be around other kids and just like her dad she loves to learn.",[16,24854,24855],{},"I think I speak for all parents who work from home in saying I look forward to the house being a little bit calmer so I can get some work done. Next year the 2-year-old will be 3 and they will both be in school 🤩",[16,24857,24858],{},[74,24859],{"alt":24860,"src":24861},"Bella Starts PreK","\u002Fimages\u002Fnewsletter\u002F2022\u002F09\u002F12\u002Fbella-prek.jpeg",[28,24863,24865],{"id":24864},"spring-security-json-web-tokens-jwt","Spring Security & JSON Web Tokens (JWT)",[16,24867,24868],{},"If you perform a quick search on how to secure REST APIs in Spring Boot using JSON Web Tokens you will find a lot of the same results. These results contain a method that involves writing a custom filter chain and pulling in a 3rd party library for encoding and decoding JWTs.",[16,24870,24871],{},"After staring at these convoluted and confusing tutorials I said there has to be an easier way to do this. I did what anyone with direct access to the Spring Security team would do, I asked them for help. They informed me that indeed Spring Security has built-in support for JWTs using oAuth2 Resource Server.",[16,24873,24874,24875,24880],{},"You will find the video below but I also ",[23,24876,24879],{"href":24877,"rel":24878},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F09\u002F06\u002Fspring-security-jwt\u002F",[101],"created a blog post"," for this content as a place you can always reference back to. This video has done better than any other video on my channel in the first three days of its release. Thank you again to everyone who continues to support my content, I truly appreciate it.",[47,24882],{"id":24883},"KYNR5js2cXE",[28,24885,13406],{"id":13405},[1271,24887,24888,24893,24896],{},[1274,24889,24890,24649],{},[23,24891,24648],{"href":23911,"rel":24892},[101],[1274,24894,24895],{},"Oct 5th: Creating GraphQL APIs in Java\nI am giving a lunch and learn to over 100 developers for an awesome Fortune 500 company. In this talk I am going to introduce them to GraphQL and how they can start using it today in their Java \u002F Spring applications.",[1274,24897,24898,24901],{},[23,24899,24659],{"href":24657,"rel":24900},[101],"\nIn this workshop we are going to introduce you to Spring Boot. If you’re new to Spring and what to learn what types of applications you can build and how to get started this is the workshop for you. By the end of this session you will be able to build your first Spring Boot application.",[16,24903,24904],{},"If you would like me to speak at your conference, meetup group or company wide meeting please feel free to reach out to me.",[28,24906,16320],{"id":16319},[16,24908,24909],{},"I work for VMware and our big conference, VMware Explore was a couple of weeks ago. First off I had some major FOMO as I saw all of the pictures and videos hitting Twitter. I hope I am able to make it next year and be a part of this amazing conference.",[16,24911,24912,24913,24917],{},"There were lots of exciting product announcements that came out of the conference but I was tuning in for one really exciting one. My good friend and coworker ",[23,24914,24916],{"href":21474,"rel":24915},[101],"DaShaun Carter"," was on the main stage for the general session to help announce VMware Aria. It was so exciting to see DaShuan on the big stage where he belongs and he absolutely crushed it!",[47,24919],{"id":24920},"yDpRDh9Lt_A",[28,24922,24924],{"id":24923},"youtube-courses","YouTube Courses?",[16,24926,24927],{},"YouTube is already the best platform for both producing and consuming educational content on the web. It currently isn’t a place where creators like myself can host paid content though. This might all be changing soon.",[16,24929,24930,24931,24936],{},"Right now I have a handful of ",[23,24932,24935],{"href":24933,"rel":24934},"https:\u002F\u002Fwww.danvega.dev\u002Fcourses",[101],"paid courses"," on Udemy. While I haven’t created a new one in a while they are still doing pretty well on the platform. When you don’t have a huge audience you need a platform that can give you audience and that is what Udemy has done for me.",[16,24938,24939],{},"With that said I am huge fan of YouTube and the platform it gives me. I love putting free content on there and I am going on all in on YouTube. I first heard that YouTube might be offering paid courses through a tweet from Roberto Blake who is about as plugged into the YouTube community as anyone:",[16,24941,24942],{},[23,24943,24944],{"href":24944,"rel":24945},"https:\u002F\u002Ftwitter.com\u002Frobertoblake\u002Fstatus\u002F1568235062331670528",[101],[16,24947,24948],{},"Next I saw a similar message from Robert Kyncl who is YouTube's Chief Business Officer. Coincidently the question Robert was answering was from Roberto as well.",[47,24950],{"id":24951},"0e2m9DOY0ec",[16,24953,24954],{},"I’m really excited about this prospect and can’t wait to see this start rolling out. Does anyone know of any creators that already have paid courses on YouTube? What are your thoughts on this feature?",[28,24956,4968],{"id":16650},[16,24958,24692,24959,24962],{},[23,24960,24696],{"href":16819,"rel":24961},[101]," is coming up December 6th to 8th, in San Francisco. There is going to be an amazing lineup of speakers and sessions and we are back in person. I will be giving a workshop on getting started with Spring Boot and hopefully a general session. You can get $200 off when registering if you use the code S1VM22_Advocate_200.",[28,24964,21516],{"id":10953},[33,24966,11453],{"id":11452},[1271,24968,24969,24976,24983,24990],{},[1274,24970,24971],{},[23,24972,24975],{"href":24973,"rel":24974},"https:\u002F\u002Fmedium.com\u002Fjavarevisited\u002Funderstanding-logging-in-spring-boot-ac0fd79177b4",[101],"Understanding logging in Spring Boot",[1274,24977,24978],{},[23,24979,24982],{"href":24980,"rel":24981},"https:\u002F\u002Fsnyk.io\u002Fblog\u002Fpassword-hashing-java-applications\u002F",[101],"How to do password hashing in Java applications the right way!",[1274,24984,24985],{},[23,24986,24989],{"href":24987,"rel":24988},"https:\u002F\u002Fdeno.com\u002Fblog\u002Fv1.25",[101],"Deno 1.25 Release Notes",[1274,24991,24992],{},[23,24993,24996],{"href":24994,"rel":24995},"https:\u002F\u002Fdzone.com\u002Farticles\u002Fjpa-constructor",[101],"Should We Have a Constructor on JPA",[33,24998,11465],{"id":30},[1271,25000,25001,25008,25015,25022],{},[1274,25002,25003],{},[23,25004,25007],{"href":25005,"rel":25006},"https:\u002F\u002Fwww.infoq.com\u002Farticles\u002Fjames-ward-java-jvm-languages\u002F",[101],"Java Champion James Ward on the State of Java and JVM Languages",[1274,25009,25010],{},[23,25011,25014],{"href":25012,"rel":25013},"https:\u002F\u002Fvimeo.com\u002F748032161",[101],"What makes a good developer- (-Christin Gorman)",[1274,25016,25017],{},[23,25018,25021],{"href":25019,"rel":25020},"https:\u002F\u002Fvimeo.com\u002F748031614",[101],"Jakarta EE 10 - Feature by Feature-(Ivar Grimstad)",[1274,25023,25024],{},[23,25025,25028],{"href":25026,"rel":25027},"https:\u002F\u002Fvimeo.com\u002F748031405",[101],"Das Boot- Diving into Debugging Spring Boot Applications- (Mark Heckler)",[33,25030,13650],{"id":973},[1271,25032,25033,25040],{},[1274,25034,25035],{},[23,25036,25039],{"href":25037,"rel":25038},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=tM79Z08WDkM",[101],"Between Chair and Keyboard with Soumik Majumder",[1274,25041,25042],{},[23,25043,25046],{"href":25044,"rel":25045},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F506\u002Fbig-deno-changes",[101],"Sytax.fm - Big Deno Changes",[33,25048,22284],{"id":16575},[1271,25050,25051],{},[1274,25052,25053],{},[23,25054,25057],{"href":25055,"rel":25056},"https:\u002F\u002Fbloggingfordevs.com\u002F",[101],"Blogging for Devs",[33,25059,14122],{"id":14121},[1271,25061,25062,25069],{},[1274,25063,25064],{},[23,25065,25068],{"href":25066,"rel":25067},"https:\u002F\u002Fpragprog.com\u002Ftitles\u002Fvsjava2e\u002Ffunctional-programming-in-java-second-edition\u002F",[101],"Functional Programming in Java, Second Edition",[1274,25070,25071],{},[23,25072,25075],{"href":25073,"rel":25074},"https:\u002F\u002Famzn.to\u002F3qwWBM0",[101],"Create Something Awesome: How Creators are Profiting from Their Passion in the Creator Economy",[33,25077,18092],{"id":18091},[1271,25079,25080,25087],{},[1274,25081,25082],{},[23,25083,25086],{"href":25084,"rel":25085},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fjosh-blog\u002Fthis-month-in-spring-august-2022",[101],"This Month in Spring - August 2022",[1274,25088,25089],{},[23,25090,25093],{"href":25091,"rel":25092},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F08\u002Fjava-news-roundup-aug22-2022\u002F",[101],"InfoQ Java Roundup - August 2022",[33,25095,25096],{"id":13856},"🗣 Conferences",[1271,25098,25099,25106],{},[1274,25100,25101],{},[23,25102,25105],{"href":25103,"rel":25104},"https:\u002F\u002Fviteconf.org\u002F",[101],"ViteConf",[1274,25107,25108],{},[23,25109,25112],{"href":25110,"rel":25111},"https:\u002F\u002Fwww.linkedin.com\u002Fpulse\u002Fgithub-universe-coming-github\u002F",[101],"Github Universe is Coming!",[33,25114,21608],{"id":384},[16,25116,25117],{},"Navigating tech as a woman from the great Angie Jones",[16,25119,25120],{},[23,25121,25122],{"href":25122,"rel":25123},"https:\u002F\u002Ftwitter.com\u002Ftechgirl1908\u002Fstatus\u002F1563289706195849218",[101],[28,25125,172],{"id":171},[16,25127,25128,25129,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of the newsletter and I will see you in the next one. If you have any links you would like me to include please ",[23,25130,11332],{"href":11330,"rel":25131},[101],[16,25133,9630,25134,191,25136,25138,25140,25142],{},[189,25135],{},[189,25137],{},[23,25139,11491],{"href":11490},[189,25141],{},[23,25143,198],{"href":196,"rel":25144},[101],{"title":200,"searchDepth":201,"depth":201,"links":25146},[25147,25148,25149,25150,25151,25152,25153,25163],{"id":21954,"depth":201,"text":21955},{"id":24864,"depth":201,"text":24865},{"id":13405,"depth":201,"text":13406},{"id":16319,"depth":201,"text":16320},{"id":24923,"depth":201,"text":24924},{"id":16650,"depth":201,"text":4968},{"id":10953,"depth":201,"text":21516,"children":25154},[25155,25156,25157,25158,25159,25160,25161,25162],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":13856,"depth":206,"text":25096},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":25165,"path":25166,"title":25167,"description":25168,"meta":25169,"body":25172},"newsletter\u002Fnewsletter\u002F2022\u002F08\u002F29\u002Fspring-security-changes.md","\u002Fnewsletter\u002F2022\u002F08\u002F29\u002Fspring-security-changes","Spring Security, Office Hours, and Submitting Conference Talks","Good morning friends and welcome to another edition of the newsletter. This past week I posted a new video on Spring Security changes that will affect anyone working on a new Spring Boot 2.7 project or later. There is also a new episode of Spring Office Hours and some changes to the show that we made this week. Finally, I am submitting talks to one of my favorite conferences this week, CodeMash. I thought I would take a little time to give you some tips and tricks I have learned this year about submitting conference talks.",{"slug":25170,"date":25171},"spring-security-changes","2022-08-29T10:00:00.000Z",{"type":13,"value":25173,"toc":25416},[25174,25176,25184,25187,25191,25199,25212,25215,25218,25221,25225,25228,25231,25235,25238,25241,25244,25255,25268,25271,25273,25275,25298,25300,25323,25325,25348,25350,25364,25366,25375,25377,25386,25388,25395,25397,25403],[16,25175,25168],{},[16,25177,25178,25179,25183],{},"If you follow me or this newsletter you know that I work for VMware. Our big conference, ",[23,25180,16320],{"href":25181,"rel":25182},"https:\u002F\u002Fwww.vmware.com\u002Fexplore\u002Fus.html",[101]," is this week and some members of my team will be there. There are going to be tons of exciting talks and announcements this week in San Francisco and I hope everyone working and attending has a really great time.",[16,25185,25186],{},"I want to wish all of the speakers good luck and I will say a special prayer to the demo gods for all of you. I want to give a special shoutout to my friend DaShaun who will be speaking at the general session this morning. Not that he needs it, he is going to be amazing!",[28,25188,25190],{"id":25189},"spring-security-without-the-webconfigureradapter","Spring Security without the WebConfigurerAdapter",[16,25192,25193,25194,25198],{},"I am working on a new guide for the ",[23,25195,22446],{"href":25196,"rel":25197},"https:\u002F\u002Fwww.notion.so\u002FSpring-Security-Office-Hours-and-Submitting-Conference-Talks-58f7270c8df446ee9531a48d8a45c1d4",[101]," that I will be able to tell you more about in the next edition of this newsletter. It has to do with Spring Security and to be honest I have done a whole lot of work with it over the past year or so. This meant that I needed to brush up on the project and do a little learning last week which is honestly one of my favorite things to do.",[16,25200,25201,25202,25207,25208,25211],{},"In doing so I came across this article on some ",[23,25203,25206],{"href":25204,"rel":25205},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F02\u002F21\u002Fspring-security-without-the-websecurityconfigureradapter",[101],"changes that happened in Spring Security 5.7.0",". The ",[469,25209,25210],{},"WebSecurityConfigurerAdapter"," is a class that you would extend to configure web security and it was being deprecated. If this was going away how would we write our configuration going forward? This was the question that I had researched and that blog post I mentioned above was my answer.",[16,25213,25214],{},"The video below is a tutorial that walks you through the old way to do it and what you should do going forward.",[47,25216],{"id":25217},"s4X4SJv2RrU",[16,25219,25220],{},"I’m also trying to experiment with YouTube and one of the things I am trying to do is cut out as much fluff as possible. I feel like I got right to the point in this video and it seems to be doing very well in its first few days. Thank you to everyone who supports my videos and provides feedback. I love doing this and want to get better!",[28,25222,25224],{"id":25223},"office-hours","Office Hours",[16,25226,25227],{},"We made a small change a couple of weeks ago and that was to add our personal YouTube channels to the stream. I want to try and attract more viewers to the live stream because one of the main components of the show is answering your questions. If we don’t have viewers we don’t have questions to answer. We got a pretty good turnout and some really great questions in this episode. My hope is with some more consistency we can start to grow those numbers in the near future. We will have a show this week but It will most likely be later this week as DaShaun is San Francisco for VMware Explore.",[47,25229],{"id":25230},"4iA2AMZvivo",[28,25232,25234],{"id":25233},"conference-call-for-papers-cfp","Conference Call For Papers (CFP)",[16,25236,25237],{},"There are a couple of conferences that I will be submitting proposals to this week and I thought I would take a minute to talk about them. First off I have learned a lot this year about CFPs both as a submitter and a reviewer.",[16,25239,25240],{},"I had the opportunity to be on the selection committee for SpringOne this year and I have a whole new level of respect for everyone who has to review proposals. There were so many great talks submitted and we had so many internal discussions about different titles, abstracts and if it fit the track that they were submitting to.",[16,25242,25243],{},"Through this process and a year of submitting talks (and mostly getting denied) I have learned a lot. I will try and put this into a longer form post at some point but here are my quick tips and tricks.",[1271,25245,25246,25249,25252],{},[1274,25247,25248],{},"Your title and description need to be exciting: This is your sales pitch and it needs to get the reviewer excited about the topic. Don’t go with “introduction to GraphQL” and expect someone to be excited about that.",[1274,25250,25251],{},"Humans are reading these proposals: There is no need to stuff keywords or buzz words throughout the abstract. It is most likely being read by a human being and needs to make sense to the person reading it.",[1274,25253,25254],{},"Provide Outcomes: What are attendees going to get out of your talk? There needs to be a reason and and outcome for attendees to want to signup and attend your talk.",[16,25256,25257,25258,25261,25262,25267],{},"I am submitting talks to ",[23,25259,3404],{"href":20823,"rel":25260},[101]," this week which is one of my favorite conferences right here in Ohio. If you’re on the fence I encourage you to submit a talk and if you want some help reviewing your abstract please let me know. I also found a conference called ",[23,25263,25266],{"href":25264,"rel":25265},"https:\u002F\u002Fwww.javaland.eu",[101],"JavaLand"," which I have never been to but looks like a great conference so I will submit a few there as well.",[16,25269,25270],{},"There are so many great speakers out there submitting to conferences and it’s really getting competitive. If you submit to a conference and get rejected, keep your head up. The best speakers in our industry are getting rejections and it’s ok. Move on to the next one and enjoy the process.",[28,25272,21516],{"id":10953},[33,25274,11453],{"id":11452},[1271,25276,25277,25284,25291],{},[1274,25278,25279],{},[23,25280,25283],{"href":25281,"rel":25282},"https:\u002F\u002Fcguntur.me\u002F2020\u002F05\u002F20\u002Funderstanding-apache-maven-the-series\u002F",[101],"Understanding Apache Maven - The Series",[1274,25285,25286],{},[23,25287,25290],{"href":25288,"rel":25289},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F08\u002Fspring-authorization-server-1-0\u002F",[101],"Spring Authorization Server 1.0 Planned for November 2022",[1274,25292,25293],{},[23,25294,25297],{"href":25295,"rel":25296},"https:\u002F\u002Fblog.heroku.com\u002Fnext-chapter",[101],"Heroku’s Next Chapter",[33,25299,11465],{"id":30},[1271,25301,25302,25309,25316],{},[1274,25303,25304],{},[23,25305,25308],{"href":25306,"rel":25307},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=OedzEb5HVPs",[101],"⚡️ Enlightning - Now You Git It!",[1274,25310,25311],{},[23,25312,25315],{"href":25313,"rel":25314},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=xHminZ9Dxm4",[101],"Hibernate & JPA Tutorial - Crash Course",[1274,25317,25318],{},[23,25319,25322],{"href":25320,"rel":25321},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bzdw4rpHSh8",[101],"15-factor cloud-native apps with Grace Jansen",[33,25324,13650],{"id":973},[1271,25326,25327,25334,25341],{},[1274,25328,25329],{},[23,25330,25333],{"href":25331,"rel":25332},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=dJArTS_xgcQ",[101],"Gary Vee’s NEW Strategies for Growing on YouTube and Social Media | #ThinkMediaPodcast #141",[1274,25335,25336],{},[23,25337,25340],{"href":25338,"rel":25339},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WJtFW0o4Hho",[101],"Between Chair and Keyboard with Jonatan Ivanov",[1274,25342,25343],{},[23,25344,25347],{"href":25345,"rel":25346},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cwGFgYNJzno",[101],"Between Chair and Keyboard with Rustam Mehmandarov",[33,25349,22284],{"id":16575},[1271,25351,25352,25359],{},[1274,25353,25354],{},[23,25355,25358],{"href":25356,"rel":25357},"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fnative-image-support-java",[101],"Native Image Support for Google Cloud Libraries",[1274,25360,25361],{},[23,25362,23779],{"href":23777,"rel":25363},[101],[33,25365,14122],{"id":14121},[1271,25367,25368],{},[1274,25369,25370],{},[23,25371,25374],{"href":25372,"rel":25373},"https:\u002F\u002Fwww.manning.com\u002Fbooks\u002Fspring-security-in-action",[101],"Spring Security in Action",[33,25376,18092],{"id":18091},[1271,25378,25379],{},[1274,25380,25381],{},[23,25382,25385],{"href":25383,"rel":25384},"https:\u002F\u002Fgithub.blog\u002F2022-08-25-open-source-monthly-august-2022-edition\u002F",[101],"Github: Open Source Monthly: August 2022 Edition",[33,25387,12149],{"id":12148},[16,25389,25390,25391,25394],{},"“Judging a Person Does Not Define Who They Are, It Defines ",[161,25392,25393],{},"Who You Are",".”",[28,25396,172],{"id":171},[16,25398,25399,25400,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of Coffee & Code and I will see you next Monday morning. If you have any links you would like me to include please ",[23,25401,11332],{"href":11330,"rel":25402},[101],[16,25404,9630,25405,191,25407,25409,25411,25413],{},[189,25406],{},[189,25408],{},[23,25410,11491],{"href":11490},[189,25412],{},[23,25414,198],{"href":196,"rel":25415},[101],{"title":200,"searchDepth":201,"depth":201,"links":25417},[25418,25419,25420,25421,25430],{"id":25189,"depth":201,"text":25190},{"id":25223,"depth":201,"text":25224},{"id":25233,"depth":201,"text":25234},{"id":10953,"depth":201,"text":21516,"children":25422},[25423,25424,25425,25426,25427,25428,25429],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":25432,"path":25433,"title":25434,"description":25435,"meta":25436,"body":25439},"newsletter\u002Fnewsletter\u002F2022\u002F08\u002F15\u002Fkcdc-2022.md","\u002Fnewsletter\u002F2022\u002F08\u002F15\u002Fkcdc-2022","KCDC 2022 Recap & My Presentation Tips","Happy Monday and welcome to another edition of the newsletter. Today’s newsletter will talk a lot about KCDC including highlights from my session, my presentation tips, and the travel nightmare I had on my way there. I hope you all had a great weekend and are ready to tackle a new week.",{"slug":25437,"date":25438},"kcdc-2022","2022-08-05T11:00:00.000Z",{"type":13,"value":25440,"toc":25742},[25441,25443,25446,25449,25452,25455,25458,25461,25464,25467,25470,25473,25476,25479,25483,25492,25495,25513,25516,25522,25525,25529,25532,25535,25538,25544,25548,25551,25556,25559,25564,25567,25572,25575,25580,25583,25588,25591,25617,25619,25621,25644,25646,25669,25671,25687,25689,25698,25702,25711,25713,25715,25720,25722,25724,25729],[16,25442,25435],{},[28,25444,4963],{"id":25445},"kcdc",[16,25447,25448],{},"Last week I traveled to Kansas City for the Kansas City Developer Conference. The conference was on Monday and Tuesday with the workshops concluding the conference on Wednesday. I was all booked to fly in early on Sunday because there was a speaker dinner on Sunday evening and I wanted to get my hands on some of that amazing KC BBQ.",[16,25450,25451],{},"My United flight was originally set to depart at 10:30 AM out of Cleveland heading to Chicago and my connection would leave around 12:30 for Kansas City. I woke up around 7 AM because I wanted to have coffee with my wife and spend some time with my kids before I left for a few days.",[16,25453,25454],{},"As soon as I got up a noticed that my flight had been delayed 1 hour. This wasn’t a big deal at the time but little did I know this was going to be the start of one of the longest travel days of my life. I arrived at the airport around 10:15 for an 11:30 departure which in Cleveland is enough time for me to get through security and get to my gate.",[16,25456,25457],{},"When I got to the gate and we were supposed to start boarding the captain was standing at the desk which wasn’t a good sign. He gave the announcement that there was bad weather in Chicago and that it was not looking good but he would give us another update around 12 PM. At this point I know I am probably not going to make my connection in Chicago so I asked the desk if there were any other flights from Chicago to KC today. There were 2 of them but they were all booked up 🤦‍♂️",[16,25459,25460],{},"At 12 they provided us with an update that we would depart around 3:30 EDT. With no flights from Chicago to KC, I decided to get my bag pulled off the plane. I immediately got on the phone with my company's travel agency but apparently, I wasn’t the only one having travel issues that day as I waited almost 90 minutes to talk to someone.",[16,25462,25463],{},"After a long wait an agent, I will call her Angel (because she saved my day and was so nice) was able to start looking for alternative flights. She kept finding options and the options kept getting booked by others in the same situation. I was really starting to worry that I wouldn’t make it there. Finally, she was able to get me booked on a flight at 6:15 into Atlanta which got me into KC at 10:40. I would miss the speaker dinner but at this point, I was just happy to have a plan.",[16,25465,25466],{},"While I am on the phone with Angel I am at the baggage carousel downstairs waiting for my bag to be pulled off the plane. After a while, I realize that this bag is not coming down here. I talk to someone at United and they confirm my suspicion, that the bag is on its way to Chicago.  They assure me that it’s going to get on a plane heading for KC and should be there before I get there tonight.",[16,25468,25469],{},"When I landed in Atlanta I received a text that my connection from ATL → KC was delayed an hour 🤦‍♂️ At this point all I could do was laugh. Lucky for me Atlanta has a really great delta lounge so I decided to head straight there for dinner and a drink. After spending some time in the lounge I boarded my plane and was on my way to KC.",[16,25471,25472],{},"When I arrived I made my way down to baggage and asked someone in the Delta baggage area where United baggage was and of course, it was in another terminal. It’s 11:30 PM at this point and the airport is empty. I was told there were buses running but decided to just make the walk because who knows how many buses they have running at this point.",[16,25474,25475],{},"I got to the other terminal and to my disbelief my bag was actually there. Wow, something good finally happened today! Now it was time to find a ride to my hotel which was the Marriott downtown. There were no cabs anywhere to be found so I requested an Uber and nobody was picking me up. A few minutes later I got a ride but he was 20 minutes out. After waiting for him for 20 minutes and taking the 30-minute ride downtown I got checked into my hotel and got to bed at 1:15 AM.",[16,25477,25478],{},"I set my alarm for 6:30 because I wanted to get breakfast and get checked into the conference. I was excited to see some friends and learn, who needs sleep 🤷‍♂️",[33,25480,25482],{"id":25481},"spring-recipes-a-collection-of-common-sense-solutions","Spring Recipes: A collection of common-sense solutions",[16,25484,25485,25486,25491],{},"I was really excited about this talk because it was my first time speaking with my good friend ",[23,25487,25490],{"href":25488,"rel":25489},"http:\u002F\u002Fntschutta.io\u002F",[101],"Nate Schutta",". The idea was simple, we would present a problem along with the solution and then discuss it further. This was going to be around anything Spring related and we wanted to have a mix of beginner and intermediate content.",[16,25493,25494],{},"I wanted to stress that there might be some problems that seem easy for some but new to others. We broke down the recipes into the following categories:",[1271,25496,25497,25500,25503,25506,25509,25511],{},[1274,25498,25499],{},"Getting Started with Spring Boot",[1274,25501,25502],{},"Building Web Applications",[1274,25504,25505],{},"Working with Databases",[1274,25507,25508],{},"Spring Cloud",[1274,25510,24628],{},[1274,25512,20875],{},[16,25514,25515],{},"In each category, we had 4-7 problems and we took some time to discuss the solution. Half the battle is knowing which project or tool you need to reach for to solve your problem. I really hope everyone in attendance enjoyed our presentation. Below you can find the code and slides for this presentation.",[16,25517,25518],{},[23,25519,25520],{"href":25520,"rel":25521},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-recipes",[101],[16,25523,25524],{},"Special shoutout to Andrew Rubalcaba who was at the conference and took the time to sit in on our session. It was really great finally meeting him in person!",[33,25526,25528],{"id":25527},"kansas-city-developers-conference","Kansas City Developers Conference",[16,25530,25531],{},"First off I want to thank all of the organizers and speakers who helped make this conference a great one. I was really honored to be among so many great speakers and talented developers.",[16,25533,25534],{},"I stayed at the Marriott downtown which was a really great hotel right across the street from the concentration center. The food in Kansas City was amazing and everyone I came in contact with was super friendly, it’s a midwest thing.",[16,25536,25537],{},"They have already announced that KCDC will be back in 2023 on June 22 & 23 with the workshops happening prior to the conference. I hope to be back in the great city of Kansas City next year and I hope to see you all there.",[16,25539,25540],{},[23,25541,25542],{"href":25542,"rel":25543},"https:\u002F\u002Ftwitter.com\u002Fkc_dc\u002Fstatus\u002F1558155132545761280",[101],[28,25545,25547],{"id":25546},"presentation-tips","Presentation tips",[16,25549,25550],{},"I like to think that I have learned a lot over the years when it comes to presenting so I thought I would take a few minutes and share my notes:",[16,25552,25553],{},[161,25554,25555],{},"Your Number One Job",[16,25557,25558],{},"When you get accepted as a speaker you owe it to the audience to be prepared. The number one job you have as a speaker is to speak for the time allotted to you. This means that if they ask you to speak for 1 hour you need to do what you can to hit that mark. If you come up a few minutes short that is ok but if you’re finishing 20-30 min early that is a problem. Expect that you might speak a little bit faster in person than you did in run-throughs and have some material you can use if you need it.",[16,25560,25561],{},[161,25562,25563],{},"Dark Mode",[16,25565,25566],{},"I am a big fan of dark mode but when it comes to in-person presentations it’s not always the most visually appealing. This is no more prevalent than when someone opens up a text editor with dark mode in a bright room. It becomes really hard to read the code and as soon as I can’t follow along with what you’re doing, you lost me. Turn to a light editor theme or at the very least talk to the AV people and try and get the lights above turned down.",[16,25568,25569],{},[161,25570,25571],{},"Check out your room before your talk",[16,25573,25574],{},"It might be a good idea to check out the room you’re speaking in before you talk if you can.  I like to watch the first presentation in that room if possible to see the lighting, find out if they are recording these sessions and how the podium setup is.  If I am going to be live coding I need to find out if I am able to type on the podium and that always isn’t the case. If that happens you can talk to someone early and see if you can get a high-top table in there which is usually better for live coding.",[16,25576,25577],{},[161,25578,25579],{},"The Speaker Room",[16,25581,25582],{},"At most conferences, they have a speaker room where speakers can work on their presentations. Take advantage of this room for a quiet place to run through your slides one last time.",[16,25584,25585],{},[161,25586,25587],{},"The Checklist",[16,25589,25590],{},"I have a checklist that I use before any in-person presentation, YouTube video, live stream, etc… Make your own checklist and make sure you check it twice before giving your presentation. My list includes things like:",[1271,25592,25593,25596,25599,25602,25605,25608,25611,25614],{},[1274,25594,25595],{},"Turn on Do Not Disturb",[1274,25597,25598],{},"Screen Resolution",[1274,25600,25601],{},"My phone is out of sight",[1274,25603,25604],{},"The browser windows I need are open and ready to go",[1274,25606,25607],{},"If I’m live coding that first project is open and ready to go",[1274,25609,25610],{},"Sound is off",[1274,25612,25613],{},"Clicker works",[1274,25615,25616],{},"Slides are open and presenter mode is on",[28,25618,21516],{"id":10953},[33,25620,11453],{"id":11452},[1271,25622,25623,25630,25637],{},[1274,25624,25625],{},[23,25626,25629],{"href":25627,"rel":25628},"https:\u002F\u002Fgithub.com\u002Freadme\u002Ffeatured\u002Fjava-programming-language",[101],"Don’t call it a comeback: Why Java is still champ",[1274,25631,25632],{},[23,25633,25636],{"href":25634,"rel":25635},"https:\u002F\u002Fspringbootlearning.medium.com\u002Fjdbc-vs-jpa-623fe8258e8",[101],"JDBC vs JPA",[1274,25638,25639],{},[23,25640,25643],{"href":25641,"rel":25642},"https:\u002F\u002Fjeremydmiller.com\u002F2022\u002F08\u002F10\u002Fputting-solid-into-perspective\u002F",[101],"Putting SOLID into perspective",[33,25645,11465],{"id":30},[1271,25647,25648,25655,25662],{},[1274,25649,25650],{},[23,25651,25654],{"href":25652,"rel":25653},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AUyMX-mbLe8",[101],"Episode 3: Getting Started with SpringBoot and Oracle Database",[1274,25656,25657],{},[23,25658,25661],{"href":25659,"rel":25660},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=-n9H8KnYjVI",[101],"⚡️ Enlightning - What Are Cloud Native Buildpacks and How Do They Work?",[1274,25663,25664],{},[23,25665,25668],{"href":25666,"rel":25667},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rxDVTocffdU",[101],"Simple, Secure API calls using a Vue 3 Composable",[33,25670,13650],{"id":973},[1271,25672,25673,25680],{},[1274,25674,25675],{},[23,25676,25679],{"href":25677,"rel":25678},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WSflPE_oIRI",[101],"\"I Hate Agile!\" | Allen Holub On Why He Thinks Agile And Scrum Are Broken",[1274,25681,25682],{},[23,25683,25686],{"href":25684,"rel":25685},"https:\u002F\u002Fanchor.fm\u002Fhappypathprogramming\u002Fepisodes\u002F65-Rods-Gambit---Spring--Scala--TypeScript--and-Chess-with-Rod-Johnson-e1m50ui",[101],"Happy Path Programming: Rod's Gambit - Spring, Scala, TypeScript, and Chess with Rod Johnson",[33,25688,14122],{"id":14121},[1271,25690,25691],{},[1274,25692,25693],{},[23,25694,25697],{"href":25695,"rel":25696},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Fkubernetes-up-and\u002F9781098110192\u002F",[101],"Kubernetes: Up and Running, 3rd Edition",[33,25699,25701],{"id":25700},"courses","👨🏼‍💻 Courses",[1271,25703,25704],{},[1274,25705,25706],{},[23,25707,25710],{"href":25708,"rel":25709},"https:\u002F\u002Fted.dev\u002Frefactoring-to-hexagonal-architecture.html",[101],"Refactoring to Hexagonal Architecture",[33,25712,18092],{"id":18091},[33,25714,12149],{"id":12148},[2238,25716,25717],{},[16,25718,25719],{},"To achieve great things, two things are needed; a plan, and not quite enough time. - Leonard Bernstein",[33,25721,21608],{"id":384},[28,25723,172],{"id":171},[16,25725,25399,25726,11333],{},[23,25727,11332],{"href":11330,"rel":25728},[101],[16,25730,9630,25731,191,25733,25735,25737,25739],{},[189,25732],{},[189,25734],{},[23,25736,11491],{"href":11490},[189,25738],{},[23,25740,198],{"href":196,"rel":25741},[101],{"title":200,"searchDepth":201,"depth":201,"links":25743},[25744,25748,25749,25759],{"id":25445,"depth":201,"text":4963,"children":25745},[25746,25747],{"id":25481,"depth":206,"text":25482},{"id":25527,"depth":206,"text":25528},{"id":25546,"depth":201,"text":25547},{"id":10953,"depth":201,"text":21516,"children":25750},[25751,25752,25753,25754,25755,25756,25757,25758],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":25700,"depth":206,"text":25701},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":25761,"path":25762,"title":25763,"description":25764,"meta":25765,"body":25768},"newsletter\u002Fnewsletter\u002F2022\u002F08\u002F01\u002Fcode-on-the-beach.md","\u002Fnewsletter\u002F2022\u002F08\u002F01\u002Fcode-on-the-beach","Florida is HOT, SpringOne Workshop and Spring Office Hours","Happy Monday and welcome to another edition of the newsletter. I am back from a week in sunny HOT Florida. I spent a few days in the Atlantic Beach area for Code on the Beach and then my family and I drove down to Orlando to spend a few days at Disney World.",{"slug":25766,"date":25767},"code-on-the-beach","2022-08-01T11:00:00.000Z",{"type":13,"value":25769,"toc":26124},[25770,25777,25780,25783,25786,25795,25798,25804,25810,25814,25822,25825,25832,25836,25839,25844,25852,25855,25860,25869,25872,25877,25880,25886,25890,25893,25896,25899,25902,25907,25912,25917,25922,25927,25932,25937,25942,25947,25951,25958,25963,25965,25968,25982,25985,25987,25990,25992,25994,26024,26026,26048,26050,26066,26068,26077,26079,26088,26090,26093,26095,26098,26104,26106,26111],[16,25771,25772,25773,25776],{},"Happy Monday and welcome to another edition of the newsletter. I am back from a week in sunny ",[161,25774,25775],{},"HOT"," Florida. I spent a few days in the Atlantic Beach area for Code on the Beach and then my family and I drove down to Orlando to spend a few days at Disney World.",[28,25778,25779],{"id":25766},"Code on the Beach",[16,25781,25782],{},"I’ll start with Code on the Beach where this was my first time attending and speaking. I said this in a previous newsletter but I could really get used to conferences on the beach. I was able to speak at VueConf US earlier this summer in Ft Lauderdale and now this one in Atlantic Beach.",[16,25784,25785],{},"I want to start by thanking the conference organizers for not only selecting me to speak but they did an amazing job of putting on a really great conference. The keynotes were amazing, top-notch speakers, the food was great and a built-in beach break was the cherry on top.",[16,25787,25788,25789,25794],{},"The conference was held at the ",[23,25790,25793],{"href":25791,"rel":25792},"https:\u002F\u002Fwww.oneoceanresort.com\u002F",[101],"One Ocean Resort and Spa"," in Atlantic Beach and it was gorgeous. We had an ocean view room with a balcony and the crew there were all very helpful. There was a little town with shops, restaurants, and bars there and it was the perfect place to spend a few days.",[16,25796,25797],{},"This is a place that I don’t know I would have ever gone to if I didn’t have a reason to go there and this is one thing I am truly thankful for when it comes to my job. If you have a chance to spend a few days there I would highly recommend it.",[16,25799,25800],{},[74,25801],{"alt":25802,"src":25803},"My girls at Atlantic Beach","\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002F0DCB1D05-F68D-410C-97FA-0BB981BD7A13.jpeg",[16,25805,25806],{},[74,25807],{"alt":25808,"src":25809},"Dinner in Jacksonville","\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FA71FE848-6A02-43F9-B85B-6C5AE1EC76C9.jpeg",[33,25811,25813],{"id":25812},"full-stack-java-development-with-spring-boot","Full Stack Java Development with Spring Boot",[16,25815,25816,25817,25821],{},"I will start with my talk on Full-Stack Java Development with Spring Boot. I gave a version of this talk at ",[23,25818,4968],{"href":25819,"rel":25820},"https:\u002F\u002Fspringone.io\u002F2021\u002Fsessions\u002Ffull-stack-development-with-spring-boot-vuejs",[101]," last year. When I got accepted to give this talk I knew it wasn’t going to be the exact same talk but I envisioned a version of it.",[16,25823,25824],{},"When I finally sat down and started to think about what I wanted to cover I quickly realized that this was going to be a whole new talk. I ended up putting this presentation together in about 4 days which is an improvement over the months it used to take me. I guess it does help when you get to devote your entire day to it and you don’t have to constantly context switch.",[16,25826,25827,25828,184],{},"What I really wanted to cover in this talk was the responsibilities of a full-stack developer and then talk about the particular stack that I am working with on the front and backend. This talk was recorded but I am not sure if it will be available to the general public or not. Either way, I will probably create another version of this for YouTube so stay on the lookout for that. If you want to check out the code and slides from my talk you can get them ",[23,25829,742],{"href":25830,"rel":25831},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Ffull-stack-java-spring",[101],[33,25833,25835],{"id":25834},"code-on-the-beach-sessions","Code on the Beach Sessions",[16,25837,25838],{},"I was able to catch a few sessions while I was there and here are my notes from a few of them.",[16,25840,25841],{},[161,25842,25843],{},"The Pursuit of Knowledge",[16,25845,25846,25851],{},[23,25847,25850],{"href":25848,"rel":25849},"https:\u002F\u002Ftwitter.com\u002Fcecilphillip",[101],"Cecil Phillip"," kicked off the conference with a keynote on the Pursuit of Knowledge. As someone who is constantly trying to learn, I really appreciated his talk. One thing he said a few times was that Information is not knowledge. You can watch as many YouTube tutorials or read as many books as you want but that isn’t going to give you what you need to really understand something.",[16,25853,25854],{},"As developers, we need to be taking what we learn and applying it. I think these are all things we have heard before but Cecil's talk was great and it inspired me to work on removing distractions from my day-to-day work so I can focus on the things I want to learn.",[16,25856,25857],{},[161,25858,25859],{},"Rebuilding Together",[16,25861,25862,25863,25868],{},"The day 2 keynote was given by ",[23,25864,25867],{"href":25865,"rel":25866},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1551917107436290049",[101],"Valarie Regas"," and it was about rebuilding together. Valarie shared her personal story about switching careers and how the pandemic affected her. You never want to hear about someone struggling but it’s a reminder that you aren’t the only one. Her story was inspiring and a reminder that our health, both physical and mental are the most important things you can focus on in your life.",[16,25870,25871],{},"The one thing I took away from her talk is that the people who don’t seem like they need help are probably the ones that we should be checking in on and that’s so true. Be a good person and reach out to your friends and coworkers and just ask them how they are doing and if there is anything you can do to help them out.",[16,25873,25874],{},[161,25875,25876],{},"Cloud Native Architecture",[16,25878,25879],{},"The last session I want to highlight was by my friend Nate Schutta. He gave an hour talk on Cloud Native Architecture and it was packed full of knowledge. Nate is such a great presenter and I learn something from him every single time I watch him talk. His ability to keep a presentation moving and interesting is something you just don’t see from everyone. If this recording gets posted I would highly recommend watching it.",[16,25881,25882],{},[23,25883,25884],{"href":25884,"rel":25885},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1551991104744181760",[101],[28,25887,25889],{"id":25888},"disney-world","Disney World",[16,25891,25892],{},"My family and I decided to make the 2.5-hour drive from Jacksonville to Orlando and stay at Disney’s Polynesian Resort for a few days. First off this was the first time staying at a resort that is on Disney and wow what a difference that makes. I don’t think I can ever go back to staying off the resort again.",[16,25894,25895],{},"The ability to hop on and off a monorail, boat, or bus to go wherever you want whenever you want is very convenient and something you need when traveling with small kids. We spent our time at Disney Springs, Magic Kingdom, Hollywood Studios, and Epcot.",[16,25897,25898],{},"I’m still not sure how we survived walking around in 100-degree weather for 3 days but we did. Did I mention that Florida is HOT 🥵 I already knew this though because we went with my daughter when she was 1 in the middle of July and for some reason, I didn’t learn my lesson. I think the next time we go we will shoot for March.",[16,25900,25901],{},"My girls had so much fun and it really is the most magical place on earth. Just seeing how excited my girls were will be a memory I carry with me for the rest of my life. I feel very fortunate that I was able to be there with them ❤️",[16,25903,25904],{},[74,25905],{"alt":25889,"src":25906},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FD6A9CD9C-228C-4E4F-A15E-3BB77429EA2F.jpeg",[16,25908,25909],{},[74,25910],{"alt":25889,"src":25911},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FC4CB8AEB-4306-4B60-BC2A-218D8CE13D13.jpeg",[16,25913,25914],{},[74,25915],{"alt":25889,"src":25916},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FDF728E8B-BB3F-4E39-9FDF-4DF456991791.jpeg",[16,25918,25919],{},[74,25920],{"alt":25889,"src":25921},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FF8C2F2EF-D149-41EA-A1F2-74B82851F9AF.jpeg",[16,25923,25924],{},[74,25925],{"alt":25889,"src":25926},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002FE1007E35-7BC7-4546-A88D-B34A046702ED.jpeg",[16,25928,25929],{},[74,25930],{"alt":25889,"src":25931},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002F647E73F8-F954-4D2C-A6C6-DF74DF94B5DD.jpeg",[16,25933,25934],{},[74,25935],{"alt":25889,"src":25936},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002F66382F0C-ED2D-445C-9DAA-0455A0CFF4F3.jpeg",[16,25938,25939],{},[74,25940],{"alt":25889,"src":25941},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002F518292D0-4241-4F16-A235-68A673B40395.jpeg",[16,25943,25944],{},[74,25945],{"alt":25889,"src":25946},"\u002Fimages\u002Fnewsletter\u002F2022\u002F08\u002F01\u002F023A3AAF-80F7-4258-8D52-CB0785A8AF5A.jpeg",[28,25948,25950],{"id":25949},"springone-workshop","SpringOne Workshop",[16,25952,25953,25954,25957],{},"I have known about this for a while now and I might have even teased it out a couple of times. I’m so excited to announce that I will be giving an Introduction to Spring Boot workshop at SpringOne this year. Join me and my friend ",[23,25955,21476],{"href":21474,"rel":25956},[101]," as we help you get up and running with Spring Boot by learning the fundamentals of the Spring Framework.",[16,25959,25960],{},[23,25961,24657],{"href":24657,"rel":25962},[101],[28,25964,93],{"id":92},[16,25966,25967],{},"There are 2 new recordings up of Spring Office Hours. This is our chance to talk about what’s new in the Spring Community and answer any questions you have. I really enjoyed episode 09 where we had our friend Greg Turnquist join us to talk about Spring Data.",[1271,25969,25970,25976],{},[1274,25971,25972],{},[23,25973,25974],{"href":25974,"rel":25975},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0008\u002F",[101],[1274,25977,25978],{},[23,25979,25980],{"href":25980,"rel":25981},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0009\u002F",[101],[47,25983],{"id":25984},"p4gC7M6fjMU",[28,25986,4963],{"id":25445},[16,25988,25989],{},"I will be presenting at KCDC next week. If you're there please make sure to find me!",[28,25991,21516],{"id":10953},[33,25993,11453],{"id":11452},[1271,25995,25996,26003,26010,26017],{},[1274,25997,25998],{},[23,25999,26002],{"href":26000,"rel":26001},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fjava\u002Fjava-on-visual-studio-code-update-july-2022\u002F",[101],"Java on Visual Studio Code Update – July 2022",[1274,26004,26005],{},[23,26006,26009],{"href":26007,"rel":26008},"https:\u002F\u002Fthenewstack.io\u002Fgoogle-launches-carbon-an-experimental-replacement-for-c\u002F",[101],"Google Launches Carbon, an Experimental Replacement for C++",[1274,26011,26012],{},[23,26013,26016],{"href":26014,"rel":26015},"https:\u002F\u002Fopenai.com\u002Fblog\u002Fdall-e-now-available-in-beta\u002F",[101],"DALL E Now Available in Beta",[1274,26018,26019],{},[23,26020,26023],{"href":26021,"rel":26022},"https:\u002F\u002Fmaciejwalkowiak.com\u002Fblog\u002Fmaven-dependencies-spring-boot-actuator-info\u002F",[101],"Listing Maven dependencies in Spring Boot Actuator Info endpoint",[33,26025,11465],{"id":30},[1271,26027,26028,26035,26041],{},[1274,26029,26030],{},[23,26031,26034],{"href":26032,"rel":26033},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=xGBWppaDzjk",[101],"How to make an impact at a conference or event (if you are not a sponsor)",[1274,26036,26037],{},[23,26038,26039],{"href":26039,"rel":26040},"https:\u002F\u002Fwww.youtube.com\u002Fc\u002Fdevnexus-conference\u002Fvideos",[101],[1274,26042,26043],{},[23,26044,26047],{"href":26045,"rel":26046},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eAQBWamiaVY",[101],"Ex-YouTube Employee Reveals How To Grow Your YouTube Channel",[33,26049,13650],{"id":973},[1271,26051,26052,26059],{},[1274,26053,26054],{},[23,26055,26058],{"href":26056,"rel":26057},"https:\u002F\u002Fchangelog.com\u002Fpodcast\u002F499",[101],"The Changelog - Love live RSS!",[1274,26060,26061],{},[23,26062,26065],{"href":26063,"rel":26064},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F6fa8d806-2e62-4782-bd15-e232b1e22eee",[101],"Spring Cloud Kubernetes contributor Ryan Baxter",[33,26067,22284],{"id":16575},[1271,26069,26070],{},[1274,26071,26072],{},[23,26073,26076],{"href":26074,"rel":26075},"https:\u002F\u002Fgithub.com\u002Fcarbon-language\u002Fcarbon-lang",[101],"Carbon Language: An experimental successor to C++",[33,26078,18092],{"id":18091},[1271,26080,26081],{},[1274,26082,26083],{},[23,26084,26087],{"href":26085,"rel":26086},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fblog\u002Fthis-week-in-spring-july-26th-2022\u002F",[101],"This Week in Spring - July 26th, 2022",[33,26089,12149],{"id":12148},[16,26091,26092],{},"“I've learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel.” - Maya Angelou",[33,26094,21608],{"id":384},[16,26096,26097],{},"Sad news from the Java world recently as we lost a special one 😢",[16,26099,26100],{},[23,26101,26102],{"href":26102,"rel":26103},"https:\u002F\u002Ftwitter.com\u002FJava_Champions\u002Fstatus\u002F1548737176841572352",[101],[28,26105,172],{"id":171},[16,26107,25399,26108,11333],{},[23,26109,11332],{"href":11330,"rel":26110},[101],[16,26112,9630,26113,191,26115,26117,26119,26121],{},[189,26114],{},[189,26116],{},[23,26118,11491],{"href":11490},[189,26120],{},[23,26122,198],{"href":196,"rel":26123},[101],{"title":200,"searchDepth":201,"depth":201,"links":26125},[26126,26130,26131,26132,26133,26134,26143],{"id":25766,"depth":201,"text":25779,"children":26127},[26128,26129],{"id":25812,"depth":206,"text":25813},{"id":25834,"depth":206,"text":25835},{"id":25888,"depth":201,"text":25889},{"id":25949,"depth":201,"text":25950},{"id":92,"depth":201,"text":93},{"id":25445,"depth":201,"text":4963},{"id":10953,"depth":201,"text":21516,"children":26135},[26136,26137,26138,26139,26140,26141,26142],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":26145,"path":26146,"title":26147,"description":26148,"meta":26149,"body":26152},"newsletter\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Fspring-one-tour-seattle.md","\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Fspring-one-tour-seattle","SpringOne Tour Seattle, Code on the Beach, and Office Hours","I hope all of you had a wonderful weekend full of friends, family, and fun and are ready to tackle another week. I’m writing this newsletter back in my home office after a fantastic trip to Seattle for a SpringOne Tour stop. I’ll tell you more about that as well as the one I have coming up next week in Florida.",{"slug":26150,"date":26151},"spring-one-tour-seattle","2022-07-18T10:00:00.000Z",{"type":13,"value":26153,"toc":26439},[26154,26163,26167,26170,26176,26179,26183,26186,26189,26192,26198,26201,26205,26208,26211,26217,26220,26224,26227,26230,26236,26238,26241,26248,26251,26254,26260,26263,26266,26269,26272,26278,26280,26288,26294,26299,26301,26303,26333,26335,26358,26360,26376,26378,26387,26389,26391,26407,26409,26412,26418,26420,26426],[16,26155,26156,26157,26162],{},"I hope all of you had a wonderful weekend full of friends, family, and fun and are ready to tackle another week. I’m writing this newsletter back in my home office after a fantastic trip to Seattle for a ",[23,26158,26161],{"href":26159,"rel":26160},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fspringone-tour\u002F2022\u002Fseattle\u002F",[101],"SpringOne Tour stop",". I’ll tell you more about that as well as the one I have coming up next week in Florida.",[28,26164,26166],{"id":26165},"springone-tour-seattle","SpringOne Tour Seattle",[16,26168,26169],{},"I spent most of last week in the great city of Seattle and I was lucky to be able to take my family with me on this trip. Before I get into the SpringOne Tour stop I just have to say what a beautiful city Seattle is. We had a chance to visit the pier, Space Needle, and more, and the views of the water, mountains, and city are just breathtaking.",[16,26171,26172],{},[74,26173],{"alt":26174,"src":26175},"Family at the Space Needle in Seattle","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Ffamily-pic.jpeg",[16,26177,26178],{},"As for the conference, I knew that I would be giving my Introduction to GraphQL talk and half of a new talk on Testcontainers. I found out while I was in Seattle that my coworker Cora wasn’t going to be able to make it so I knew I would need to step up and give the presentation by myself.",[33,26180,26182],{"id":26181},"introduction-to-spring-for-graphql","Introduction to Spring for GraphQL",[16,26184,26185],{},"This was my 3rd time giving this presentation and at this point, I am pretty comfortable with the material. In this talk, we talk about why you should learn GraphQL and that’s usually the first question developers have.",[16,26187,26188],{},"I found that after the talk the main question I kept getting asked was “When do we know it’s time to move from REST to GraphQL”. I will try and create some content around that question in the near future but here is my short answer. If you find yourself creating many endpoints to support the number of clients calling your application it might be time to take a look at GraphQL.",[16,26190,26191],{},"The more custom endpoints and code you are writing means the more code you’re going to have to support and maintain. With GraphQL you can have a single endpoint and let your clients tell you what information they need instead of you telling the clients what information is available to them.",[16,26193,26194],{},[74,26195],{"alt":26196,"src":26197},"Dan Presenting on GraphQL","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Fgraphql-in-action.jpeg",[16,26199,26200],{},"I don’t think I will be giving this talk at any other SpringOne Tour stops this year so if you’re interested in me giving this presentation at your conference or meetup please reach out and let me know.",[33,26202,26204],{"id":26203},"level-up-your-integration-testing-with-testcontainers","Level up your integration testing with Testcontainers",[16,26206,26207],{},"As I mentioned earlier I was prepared to give half of this 40-minute talk but not the whole thing. Lucky for me my coworker put together a bunch of great slides and I was able to give an introduction to Testcontainers using them.",[16,26209,26210],{},"With this essentially being the first time I gave this talk I thought it went really well. I started out by talking about the importance of testing and that if tests are slow and hard to write I won't write them. Cora says this often and I thought I would share it with the audience because it is so true!",[16,26212,26213],{},[74,26214],{"alt":26215,"src":26216},"Testing Slide - Quote from Cora","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Ftesting-slide.png",[16,26218,26219],{},"To me this means that if we can make testing easy, fast and concise I will be more likely to write tests, which is what we all should be doing. In the last 25 minutes, I went through a live Spring Boot demo where I created a new integration test and used Testcontainers. We talked through the progression of running a docker command, docker compose, a generic Testcontainer and finally a specific Testcontainer Module.",[28,26221,26223],{"id":26222},"vueconf-us-recordings","VueConf US Recordings",[16,26225,26226],{},"At the beginning of June, I had the honor of speaking at VueConf US in Ft. Lauderdale FL. It was an amazing conference with so many great speakers and it was my first time attending and speaking at a Vue conference.",[16,26228,26229],{},"My session was 30 minutes and it was on “What’s new in Nuxt 3” and as the title suggests we take a tour of the new features in Nuxt 3. All of the sessions were recorded and you can find mine using the link below.",[16,26231,26232],{},[23,26233,26234],{"href":26234,"rel":26235},"https:\u002F\u002Fwww.vuemastery.com\u002Fconferences\u002Fvueconf-us-2022\u002Fwhats-coming-in-nuxt3",[101],[28,26237,25779],{"id":25766},[16,26239,26240],{},"Next week I will be speaking at Code on the Beach in Atlantic Beach FL. I’ll be honest, I can get used to trips to Florida to talk about code and spend time on the beach 😉",[16,26242,26243,26244,26247],{},"My talk is on Full-Stack Java Development with Spring Boot. The first topic I want to discuss in this presentation is the term ",[161,26245,26246],{},"Full-Stack"," because depending on who you ask you might get a different definition of what the role involves. The question is what is a Full-Stack Developer?",[16,26249,26250],{},"To me, it starts with the word developer. When we qualify this person as a developer we are saying they write code. I know as well as anyone that there is much more to a developer than writing code but for this conversation, I will keep it to that. With that comes some understanding of how the internet works so I will also omit that for this conversation.",[16,26252,26253],{},"When it comes to writing code I believe that this individual works on both the front-end and back-end of the stack. This means that they have front-end skills like HTML, CSS & JavaScript. I realize those are broad buckets and we can spend an entire article getting specific about those but I won’t at this time. In JavaScript I believe you should also have some experience with frameworks like React, Angular or Vue. If you have worked with those you might also have experience with bundlers and build tools.",[16,26255,26256],{},[74,26257],{"alt":26258,"src":26259},"joshua-aragon-EaB4Ml7C7fE-unsplash.jpg","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Fjoshua-aragon-EaB4Ml7C7fE-unsplash.jpg",[16,26261,26262],{},"When it comes to the back-end they should have experience in a programming language like Java, build tools like Maven or Gradle, a framework like Spring, and working with databases. Again I have simplified those requirements a bit but those are the types of skills one would need to build back-end web applications.",[16,26264,26265],{},"This is just one stack and would be different if you were working on something like mobile applications but the important part is that you are writing code on both the front-end (client) and back-end (server) of the application.",[16,26267,26268],{},"I think where some of the argument comes in is how much involvement would this person have in the deployment process. Should they understand Containers, Docker, scripting, CI\u002FCD, and everything else that goes into DevOps? Personally, I think it’s nice to understand some of that but as a requirement that would probably depend on the company and position.",[16,26270,26271],{},"I’m curious what your thoughts are on what the responsibilities are of a Full-Stack Developer. If you want I have a tweet that you can reply to or you can reply directly to this email.",[16,26273,26274],{},[23,26275,26276],{"href":26276,"rel":26277},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1548355158332952577",[101],[28,26279,93],{"id":92},[16,26281,26282,26283,26287],{},"I have talked about this before but my friend ",[23,26284,21476],{"href":26285,"rel":26286},"https:\u002F\u002Fgithub.com\u002Fdashaun",[101]," and I run a show called Spring Office Hours.  This is your chance to find out what’s new in the Spring Community, check out some demos, and ask any questions you might have. This week our show returns live on Tuesday at 11 AM EDT and you can find out more using the link below.",[16,26289,26290],{},[74,26291],{"alt":26292,"src":26293},"Spring Office Hours - Episode 08 Cover","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F18\u002Fspring-office-hours.png",[16,26295,26296],{},[23,26297,20628],{"href":25974,"rel":26298},[101],[28,26300,21516],{"id":10953},[33,26302,11453],{"id":11452},[1271,26304,26305,26312,26319,26326],{},[1274,26306,26307],{},[23,26308,26311],{"href":26309,"rel":26310},"https:\u002F\u002Fvitejs.dev\u002Fblog\u002Fannouncing-vite3.html",[101],"Vite 3.0 is out!",[1274,26313,26314],{},[23,26315,26318],{"href":26316,"rel":26317},"https:\u002F\u002Fjoshlong.com\u002Fjl\u002Fblogpost\u002Fpagination_in_a_reactive_application.html",[101],"Pagination in a Reactive Application",[1274,26320,26321],{},[23,26322,26325],{"href":26323,"rel":26324},"https:\u002F\u002Freflectoring.io\u002Fspring-shell\u002F",[101],"Create Command-line Applications with Spring Shell",[1274,26327,26328],{},[23,26329,26332],{"href":26330,"rel":26331},"https:\u002F\u002Fmedium.com\u002F97-things\u002Ffull-stack-developer-is-a-mindset-207632bcf34c",[101],"“Full-Stack Developer” Is a Mindset",[33,26334,11465],{"id":30},[1271,26336,26337,26344,26351],{},[1274,26338,26339],{},[23,26340,26343],{"href":26341,"rel":26342},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3QPp_DlcZpM",[101],"What’s next for Vue - Evan You",[1274,26345,26346],{},[23,26347,26350],{"href":26348,"rel":26349},"https:\u002F\u002Fwww.vuemastery.com\u002Fconferences\u002Fvueconf-us-2022\u002Fnuxtjs-and-chrome",[101],"Nuxt.js and Chrome - Kara Erickson",[1274,26352,26353],{},[23,26354,26357],{"href":26355,"rel":26356},"https:\u002F\u002Fwww.vuemastery.com\u002Fconferences\u002Fvueconf-us-2022\u002Fbuilding-accessible-components",[101],"Building Accessible Components - Homer Gains",[33,26359,13650],{"id":973},[1271,26361,26362,26369],{},[1274,26363,26364],{},[23,26365,26368],{"href":26366,"rel":26367},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F07\u002F14\u002Fa-bootiful-podcast-nate-schutta-the-thinking-person-s-architect-my-friend-and-teammate",[101],"A Bootiful Podcast with Nate Schutta",[1274,26370,26371],{},[23,26372,26375],{"href":26373,"rel":26374},"https:\u002F\u002Fwww.infoq.com\u002Fpodcasts\u002Fengineering-empathy\u002F",[101],"Engineering with Empathy",[33,26377,22284],{"id":16575},[1271,26379,26380],{},[1274,26381,26382],{},[23,26383,26386],{"href":26384,"rel":26385},"https:\u002F\u002Fjdk.java.net\u002F19\u002Frelease-notes",[101],"JDK 19 - Early-Access Release Notes",[33,26388,14122],{"id":14121},[33,26390,18092],{"id":18091},[1271,26392,26393,26400],{},[1274,26394,26395],{},[23,26396,26399],{"href":26397,"rel":26398},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F07\u002F12\u002Fthis-week-in-spring-july-12th-2022",[101],"This week in Spring - July 12th",[1274,26401,26402],{},[23,26403,26406],{"href":26404,"rel":26405},"https:\u002F\u002Fdevrelweekly.com\u002F",[101],"DevRel Weekly",[33,26408,21608],{"id":384},[16,26410,26411],{},"I’m signed up for ViteConf which is happening in October. If you’re not signed up for what are you waiting for, it’s FREE.",[16,26413,26414],{},[23,26415,26416],{"href":26416,"rel":26417},"https:\u002F\u002Ftwitter.com\u002FViteConf\u002Fstatus\u002F1548362941321187330",[101],[28,26419,172],{"id":171},[16,26421,26422,26423,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of the newsletter and I will see you next Monday morning. If you have any links you would like me to include please get i",[23,26424,22681],{"href":11330,"rel":26425},[101],[16,26427,9630,26428,191,26430,26432,26434,26436],{},[189,26429],{},[189,26431],{},[23,26433,11491],{"href":11490},[189,26435],{},[23,26437,198],{"href":196,"rel":26438},[101],{"title":200,"searchDepth":201,"depth":201,"links":26440},[26441,26445,26446,26447,26448,26457],{"id":26165,"depth":201,"text":26166,"children":26442},[26443,26444],{"id":26181,"depth":206,"text":26182},{"id":26203,"depth":206,"text":26204},{"id":26222,"depth":201,"text":26223},{"id":25766,"depth":201,"text":25779},{"id":92,"depth":201,"text":93},{"id":10953,"depth":201,"text":21516,"children":26449},[26450,26451,26452,26453,26454,26455,26456],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":26459,"path":26460,"title":26461,"description":26462,"meta":26463,"body":26466},"newsletter\u002Fnewsletter\u002F2022\u002F07\u002F12\u002Fbootiful-podcast.md","\u002Fnewsletter\u002F2022\u002F07\u002F12\u002Fbootiful-podcast","SpringOne NYC,  A Bootiful Podcast and new video content","Hello friends and welcome to another edition of the newsletter. This edition is coming to you a day late and as I write this I am sitting in Seattle for another SpringOne Tour. I’m having a great time in Seattle and I will tell you more about this stop in the next version of the newsletter.",{"slug":26464,"date":26465},"bootiful-podcast","2022-07-12T17:00:00.000Z",{"type":13,"value":26467,"toc":26710},[26468,26476,26479,26483,26486,26492,26501,26504,26507,26511,26514,26520,26522,26525,26529,26532,26535,26539,26548,26551,26555,26558,26563,26567,26570,26576,26578,26580,26589,26591,26614,26616,26631,26633,26663,26665,26668,26670,26682,26684,26690,26692,26697],[16,26469,26470,26471,26475],{},"Hello friends and welcome to another edition of the newsletter. This edition is coming to you a day late and as I write this I am sitting in Seattle for another ",[23,26472,26474],{"href":26159,"rel":26473},[101],"SpringOne Tour",". I’m having a great time in Seattle and I will tell you more about this stop in the next version of the newsletter.",[16,26477,26478],{},"In this edition of the newsletter, I want to talk about SpringOne Tour NYC, A Bootiful Podcast, 2 new videos for YouTube, and a conference recording.",[28,26480,26482],{"id":26481},"springone-tour-new-york-city","SpringOne Tour New York City",[16,26484,26485],{},"I had the opportunity to spend a week in NYC with my entire team for the 1st time since joining VMware. It was so great to have everyone in one place and I learned so much on this trip. I gave my talk on Getting Started with GraphQL and I thought it went really well I received some great questions from the audience.",[16,26487,26488],{},[74,26489],{"alt":26490,"src":26491},"Dan Speaking in NYC","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F12\u002Fdan-nyc-talk.jpeg",[16,26493,26494,26495,26500],{},"After my talk, I was able to attend a bunch of sessions and I learned so much. One session that I was excited to see was on the new ",[23,26496,26499],{"href":26497,"rel":26498},"https:\u002F\u002Fgithub.com\u002Fspring-projects-experimental\u002Fspring-cli",[101],"Spring CLI"," from Mark Pollack. This is an experimental project at the moment but it solves a real problem that other communities have solutions for.",[16,26502,26503],{},"The Spring CLI will help increase productivity when creating new projects or adding functionality to existing projects. You can read through the documentation to learn more but I plan on creating some content in the new future about this exciting project.",[16,26505,26506],{},"What was really exciting for me is that I had a chance to sit down with Mark and do some pair programming. After about an hour I was able to create a new GraphQL project that you can use with the Spring CLI. Again if that doesn’t make sense, I’ll have more on that soon!",[28,26508,26510],{"id":26509},"a-bootiful-podcast-with-josh-long","A Bootiful Podcast with Josh Long",[16,26512,26513],{},"I had the opportunity to sit down with my friend and coworker Josh Long for an episode of his podcast. We had a chance to talk about my career and how I ended up where I am today. It’s always fun reflecting on my career and I can’t wait for you to hear our conversation.",[16,26515,26516],{},[23,26517,26518],{"href":26518,"rel":26519},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F1396a2af-8cf3-42e1-8083-71aa8c18eeb8",[101],[28,26521,3363],{"id":4557},[16,26523,26524],{},"I was able to create 2 videos over the last 2 weeks. It’s crazy that in one week I am able to create 3 videos and some weeks I don’t create any. I guess that is the life of being a YouTuber though, consistency is the key to the whole game.",[33,26526,26528],{"id":26527},"testing-your-graphql-apis","Testing your GraphQL APIs",[16,26530,26531],{},"I have been creating a lot of content around Spring for GraphQL lately and one of the questions that keep coming up is how can I test my APIs. The testing support in Spring for GraphQL out of the box is really good and easy to get started with. In this tutorial, you will learn how to write a slice test and the GraphQL Tester that includes a fluent API for testing your APIs independent of the server transport.",[47,26533],{"id":26534},"0b0x3C_BTT8",[33,26536,26538],{"id":26537},"intellij-live-templates-for-spring-boot","IntelliJ Live Templates for Spring Boot",[16,26540,26541,26542,26547],{},"If you aren’t aware the Spring Developer Advocacy team started a ",[23,26543,26546],{"href":26544,"rel":26545},"https:\u002F\u002Ftwitter.com\u002Fi\u002Fcommunities\u002F1496544801533091844",[101],"Spring Developers Twitter Community",". There are so many great questions in that community and my plan is to start answering questions there. In this video, I answer my friend DaShaun’s question on how to quickly automate some one-liners in Spring Boot.",[47,26549],{"id":26550},"38VYJjjKqh0",[28,26552,26554],{"id":26553},"whats-new-in-nuxt-3","What’s new in Nuxt 3",[16,26556,26557],{},"I gave a talk at VueConf US in June on What is new in Nuxt 3. That conference was such a great time and I thought my talk went well. Now you can be the judge of that now that the recording is online. Thanks to the fine folks over at Vue Mastery for making it available. If you don’t have a subscription to them you should consider signing up.",[16,26559,26560],{},[23,26561,26234],{"href":26234,"rel":26562},[101],[28,26564,26566],{"id":26565},"happy-anniversary","Happy Anniversary",[16,26568,26569],{},"On July 8th my wife Jen and I celebrated our 5th Anniversary. I’m not sure how I got so lucky but If I can offer you some unsolicited advice… Marry your best friend 🤩🥳",[16,26571,26572],{},[74,26573],{"alt":26574,"src":26575},"Wedding Picture","\u002Fimages\u002Fnewsletter\u002F2022\u002F07\u002F12\u002Fwedding.png",[28,26577,21516],{"id":10953},[33,26579,11453],{"id":11452},[1271,26581,26582],{},[1274,26583,26584],{},[23,26585,26588],{"href":26586,"rel":26587},"https:\u002F\u002Fwww.infoq.com\u002Farticles\u002Fdata-oriented-programming-java\u002F",[101],"Data-Oriented Programming",[33,26590,11465],{"id":30},[1271,26592,26593,26600,26607],{},[1274,26594,26595],{},[23,26596,26599],{"href":26597,"rel":26598},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AE_Srj6r4Rc&list=WL&index=2",[101],"Securing SPAs with Spring by Marcus Hert Da Coregio @ Spring I\u002FO 2022",[1274,26601,26602],{},[23,26603,26606],{"href":26604,"rel":26605},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gKPMKRnnbXU",[101],"Gradle Tutorial - Crash Course",[1274,26608,26609],{},[23,26610,26613],{"href":26611,"rel":26612},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jkP199zzknw",[101],"Spring Cloud Gateway: Resilience, Security, and Observability by Thomas Vitale @ Spring I\u002FO 2022",[33,26615,13650],{"id":973},[1271,26617,26618,26624],{},[1274,26619,26620],{},[23,26621,26623],{"href":26518,"rel":26622},[101],"Bootiful Podcast featuring Dan Vega",[1274,26625,26626],{},[23,26627,26630],{"href":26628,"rel":26629},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F478\u002Fsupper-club-developer-experience-with-shawn-wang",[101],"Syntax.fm - Supper Club × Developer Experience with Shawn Wang",[33,26632,22284],{"id":16575},[1271,26634,26635,26642,26649,26656],{},[1274,26636,26637],{},[23,26638,26641],{"href":26639,"rel":26640},"https:\u002F\u002Faws.amazon.com\u002Ffr\u002Fcodewhisperer\u002F",[101],"Amazon CodeWhisperer",[1274,26643,26644],{},[23,26645,26648],{"href":26646,"rel":26647},"https:\u002F\u002Fgithub.com\u002Fsdras\u002Fawesome-actions",[101],"Awesome Actions",[1274,26650,26651],{},[23,26652,26655],{"href":26653,"rel":26654},"https:\u002F\u002Fbun.sh\u002F",[101],"Bun - JavaScript Runtime",[1274,26657,26658],{},[23,26659,26662],{"href":26660,"rel":26661},"https:\u002F\u002Ftwitter.com\u002Ftestcontainers\u002Fstatus\u002F1542115229605269505",[101],"TestContainers 1.17.3",[33,26664,12149],{"id":12148},[16,26666,26667],{},"“If I had an hour to solve a problem I'd spend 55 minutes thinking about the problem and five minutes thinking about solutions.” - Albert Einstein",[33,26669,18092],{"id":18091},[1271,26671,26672],{},[1274,26673,26674,1195,26679],{},[23,26675,26678],{"href":26676,"rel":26677},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F07\u002Fjava-annotated-monthly-july-2022\u002F",[101],"Java Annotated Monthly - July 2022",[734,26680,26681],{},"(Thanks for the mention 🤩)",[33,26683,21608],{"id":384},[16,26685,26686],{},[23,26687,26688],{"href":26688,"rel":26689},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1544782934477078539",[101],[28,26691,172],{"id":171},[16,26693,25399,26694,11333],{},[23,26695,11332],{"href":11330,"rel":26696},[101],[16,26698,9630,26699,191,26701,26703,26705,26707],{},[189,26700],{},[189,26702],{},[23,26704,11491],{"href":11490},[189,26706],{},[23,26708,198],{"href":196,"rel":26709},[101],{"title":200,"searchDepth":201,"depth":201,"links":26711},[26712,26713,26714,26718,26719,26720,26729],{"id":26481,"depth":201,"text":26482},{"id":26509,"depth":201,"text":26510},{"id":4557,"depth":201,"text":3363,"children":26715},[26716,26717],{"id":26527,"depth":206,"text":26528},{"id":26537,"depth":206,"text":26538},{"id":26553,"depth":201,"text":26554},{"id":26565,"depth":201,"text":26566},{"id":10953,"depth":201,"text":21516,"children":26721},[26722,26723,26724,26725,26726,26727,26728],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":12148,"depth":206,"text":12149},{"id":18091,"depth":206,"text":18092},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":26731,"path":26732,"title":26733,"description":26734,"meta":26735,"body":26738},"newsletter\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Finternet-explorer-retires.md","\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Finternet-explorer-retires","Internet Explorer Retires, Java Frameworks and a YouTube Milestone","Happy Monday and welcome to another edition of the newsletter. I am either on my way or in NYC depending on when you are reading this. I’m visiting for the next stop on our SpringOne Tour. If you happen to be attending the conference please say hi 👋🏻 It’s been a busy couple of weeks for me which means I have plenty to share so let’s get into it.",{"slug":26736,"date":26737},"internet-explorer-retires","2022-06-27T07:00:00.000Z",{"type":13,"value":26739,"toc":27011},[26740,26748,26752,26755,26792,26795,26800,26804,26807,26810,26813,26819,26823,26832,26838,26841,26847,26851,26854,26857,26860,26865,26871,26873,26875,26898,26900,26937,26939,26955,26957,26980,26982,26991,26993,26998],[16,26741,26742,26743,26747],{},"Happy Monday and welcome to another edition of the newsletter. I am either on my way or in NYC depending on when you are reading this. I’m visiting for the next stop on our ",[23,26744,26474],{"href":26745,"rel":26746},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fspringone-tour\u002F2022\u002Fnew-york\u002F",[101],". If you happen to be attending the conference please say hi 👋🏻 It’s been a busy couple of weeks for me which means I have plenty to share so let’s get into it.",[28,26749,26751],{"id":26750},"youtube-videos","YouTube Videos",[16,26753,26754],{},"I was able to create and publish 5 videos over the last 2 weeks which is a lot. I’m trying to cut down on production value and focus on the content so that I can publish videos faster.",[1271,26756,26757,26764,26771,26778,26785],{},[1274,26758,26759],{},[23,26760,26763],{"href":26761,"rel":26762},"https:\u002F\u002Fyoutu.be\u002FPN2K1_jMl5A",[101],"Github Codespaces",[1274,26765,26766],{},[23,26767,26770],{"href":26768,"rel":26769},"https:\u002F\u002Fyoutu.be\u002F1lEeEvdcZT0",[101],"Create a new annotation in Spring Boot",[1274,26772,26773],{},[23,26774,26777],{"href":26775,"rel":26776},"https:\u002F\u002Fyoutu.be\u002FdciF5Pc3G1s",[101],"Vue 3 Options API: You don’t have to use the Composition API",[1274,26779,26780],{},[23,26781,26784],{"href":26782,"rel":26783},"https:\u002F\u002Fyoutu.be\u002F5KjCHz9-nJo",[101],"Spring Boot Multi-document properties",[1274,26786,26787],{},[23,26788,26791],{"href":26789,"rel":26790},"https:\u002F\u002Fyoutu.be\u002FFZFzKCSq8n8",[101],"Java Problem Solving: Left to Right Eval",[16,26793,26794],{},"I also got the notification this week that my YouTube channel crossed 2,000,000 views. That is so freaking cool and I can’t thank all of you enough for watching.",[16,26796,26797],{},[74,26798],{"alt":12887,"src":26799},"\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Fyoutube-2-million.png",[28,26801,26803],{"id":26802},"java-frameworks-panel-discussion","Java Frameworks Panel Discussion",[16,26805,26806],{},"It’s so great to be back in person for meetups. This was just our 2nd meeting after bringing back the Cleveland Java User Group. This was a Java Frameworks Panel discussion where we had representatives of Spring Framework, Quarkus, and Micronaut.",[16,26808,26809],{},"It was a great turnout and we had the opportunity to answer questions and then go into some demos. I was the Spring representative and I went through and explained What Spring Framework is and where Spring Boot comes into the picture. Another question that always comes up with developers new to Spring is what types of applications can I build?",[16,26811,26812],{},"I wrapped up my portion of the presentation by building a simple application with Spring Boot. This gave me a chance to show off the Spring Initalizr, talk about dependency injection and demo how easy it is to connect to a database.",[16,26814,26815],{},[74,26816],{"alt":26817,"src":26818},"Cleveland Java Meetup","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Fcjug.jpeg",[28,26820,26822],{"id":26821},"internet-explorer","Internet Explorer",[16,26824,26825,26826,26831],{},"On June 15, 2022, ",[23,26827,26830],{"href":26828,"rel":26829},"https:\u002F\u002Fblogs.windows.com\u002Fwindowsexperience\u002F2022\u002F06\u002F15\u002Finternet-explorer-11-has-retired-and-is-officially-out-of-support-what-you-need-to-know\u002F",[101],"Internet Explorer officially retired",". On one hand, it’s a little bit sad because for a long time this is how many users explored the internet.  On the other hand, I don’t have a lot of great memories of developing for the web with IE standing in my way. I remember fondly IE 6 being the biggest pain to target. When we no longer had to support IE 6 we could stop using the numerous amounts of hacks that existed in CSS & JavaScript.",[16,26833,26834],{},[74,26835],{"alt":26836,"src":26837},"Internet Explorer Retires","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Finternet-explorer.png",[16,26839,26840],{},"This is how I was feeling that day 🤣",[16,26842,26843],{},[23,26844,26845],{"href":26845,"rel":26846},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1537068063601958912",[101],[28,26848,26850],{"id":26849},"github-copilot","Github Copilot",[16,26852,26853],{},"If you aren’t aware yet there is a project by Github called Copilot which is an AI trained on billions of lines of code that will help you write code. It does this through comments and context of an application. It also does a really good job of writing documentation and I use it often in Markdown files.",[16,26855,26856],{},"I have been lucky enough to have been invited to the Github Copilot program early on. I have used it for building frontend applications with JavaScript, TypeScript and Vue within Visual Studio Code. I have also used it for building Java & Spring applications within IntelliJ IDEA. I really enjoy the product and I believe it makes me more productive.",[16,26858,26859],{},"This past week Github Copilot was now available to anyone who wanted to try it out. The catch was that they will be charging for it soon. I can tell you that I have no problem paying for it and have already signed up.",[16,26861,26862],{},[74,26863],{"alt":26850,"src":26864},"\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F27\u002Fgithub-copilot.png",[16,26866,26867,26868,26870],{},"I heard some comments on Twitter that people were upset that Github was taking their code for free and now charging for Github Copilot. I can certainly understand that point of view but It doesn’t bother me. Github is one of the most important tools in life as a developer and it is given to us for ",[161,26869,24173],{}," by Microsoft. If you",[28,26872,21516],{"id":10953},[33,26874,11453],{"id":11452},[1271,26876,26877,26884,26891],{},[1274,26878,26879],{},[23,26880,26883],{"href":26881,"rel":26882},"https:\u002F\u002Fmedium.com\u002Fjavarevisited\u002Fspring-for-graphql-with-querydsl-9c4964a225d9",[101],"Spring for GraphQL with Querydsl",[1274,26885,26886],{},[23,26887,26890],{"href":26888,"rel":26889},"https:\u002F\u002Fblogs.oracle.com\u002Fjavamagazine\u002Fpost\u002Fjava-garbage-collectors-evolution",[101],"Java garbage collection: The 10-release evolution from JDK 8 to JDK 18",[1274,26892,26893],{},[23,26894,26897],{"href":26895,"rel":26896},"https:\u002F\u002Fsurvey.stackoverflow.co\u002F2022\u002F",[101],"StackOverflow 2022 Developer Survey",[33,26899,11465],{"id":30},[1271,26901,26902,26909,26916,26923,26930],{},[1274,26903,26904],{},[23,26905,26908],{"href":26906,"rel":26907},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lKSSBvRDmTg",[101],"Java 19 Virtual Threads - JEP Café #11",[1274,26910,26911],{},[23,26912,26915],{"href":26913,"rel":26914},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=A7LMrVz8QhM",[101],"How to Inspect and Troubleshoot Spring Microservices on Kubernetes",[1274,26917,26918],{},[23,26919,26922],{"href":26920,"rel":26921},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WTZmTcvDAB8",[101],"ϟ Enlightning: Event-Driven Architecture and Real-Time Analytics",[1274,26924,26925],{},[23,26926,26929],{"href":26927,"rel":26928},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lLTdGmGesIs",[101],"[VDTRIESTE22] Spring For Architects - Conference by Nate Schutta and Jakub Pilimon",[1274,26931,26932],{},[23,26933,26936],{"href":26934,"rel":26935},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0007\u002F",[101],"Spring Office Hours: SpringOne Tour Toronto Recap",[33,26938,13650],{"id":973},[1271,26940,26941,26948],{},[1274,26942,26943],{},[23,26944,26947],{"href":26945,"rel":26946},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F0083a911-e923-4982-8c22-d024a1eee2c7",[101],"Spring Framework contributor Sébastien Deleuze on GraalVM, AOT, project Leyden, and WebAssembly",[1274,26949,26950],{},[23,26951,26954],{"href":26952,"rel":26953},"https:\u002F\u002Fchangelog.com\u002Fpodcast\u002F493",[101],"The Changelog Podcats: What is DevRel?",[33,26956,25701],{"id":25700},[1271,26958,26959,26966,26973],{},[1274,26960,26961],{},[23,26962,26965],{"href":26963,"rel":26964},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=EExlnnq5Grs",[101],"JavaBrains - 01 Course Introduction (Reactive programming with Java - full course)",[1274,26967,26968],{},[23,26969,26972],{"href":26970,"rel":26971},"https:\u002F\u002Faws-for-web.dev\u002F",[101],"AWS for Web Developers",[1274,26974,26975],{},[23,26976,26979],{"href":26977,"rel":26978},"https:\u002F\u002Fwww.adobe.com\u002Fmax\u002F2021\u002Fsessions.html",[101],"Adobe Max 2021 Session Recordings",[33,26981,18092],{"id":18091},[1271,26983,26984],{},[1274,26985,26986],{},[23,26987,26990],{"href":26988,"rel":26989},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F06\u002F21\u002Fthis-week-in-spring-june-21st-2022",[101],"This Week in Spring - June 21st, 2022",[28,26992,172],{"id":171},[16,26994,25399,26995,11333],{},[23,26996,11332],{"href":11330,"rel":26997},[101],[16,26999,9630,27000,191,27002,27004,27006,27008],{},[189,27001],{},[189,27003],{},[23,27005,11491],{"href":11490},[189,27007],{},[23,27009,198],{"href":196,"rel":27010},[101],{"title":200,"searchDepth":201,"depth":201,"links":27012},[27013,27014,27015,27016,27017,27024],{"id":26750,"depth":201,"text":26751},{"id":26802,"depth":201,"text":26803},{"id":26821,"depth":201,"text":26822},{"id":26849,"depth":201,"text":26850},{"id":10953,"depth":201,"text":21516,"children":27018},[27019,27020,27021,27022,27023],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":25700,"depth":206,"text":25701},{"id":18091,"depth":206,"text":18092},{"id":171,"depth":201,"text":172},{"_id":27026,"path":27027,"title":27028,"description":27029,"meta":27030,"body":27033},"newsletter\u002Fnewsletter\u002F2022\u002F06\u002F13\u002Fthe-road-show-begins.md","\u002Fnewsletter\u002F2022\u002F06\u002F13\u002Fthe-road-show-begins","The Road Show Begins","It was a busy week on the road last week and I’m happy to be back home and publishing the newest edition of this newsletter. Last week I had the honor of giving 3 brand new talks in 4 days in 2 different countries.",{"slug":27031,"date":27032},"the-road-show-begins","2022-06-13T14:00:00.000Z",{"type":13,"value":27034,"toc":27290},[27035,27037,27041,27044,27057,27063,27066,27072,27076,27084,27092,27098,27101,27104,27110,27113,27119,27127,27131,27134,27137,27143,27149,27155,27158,27161,27165,27168,27170,27172,27195,27197,27226,27228,27237,27239,27248,27250,27259,27261,27270,27272,27277],[16,27036,27029],{},[28,27038,27040],{"id":27039},"toronto-spring-meetup-group","Toronto Spring Meetup Group",[16,27042,27043],{},"I started out by flying into Toronto on Monday morning. I was supposed to leave at 7 AM and get in by 8:30 and my flight time was pushed back twice to 10:45 AM. This put a little stress on me because I had to give a meetup talk at 12:30 so it was going to be tight. I ended up getting there right on time and it was a really relaxed meetup group.",[16,27045,27046,27051,27052,27056],{},[23,27047,27050],{"href":27048,"rel":27049},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fteam\u002Fcora-iberkleid\u002F",[101],"Cora"," and I did a talk on ",[23,27053,13996],{"href":27054,"rel":27055},"https:\u002F\u002Fwww.testcontainers.org\u002F",[101]," and this was the first time we gave that talk. I was interested in finding out how our timing was going to work. We ended up having some problems with jerks on zoom and also deep dove into a couple of things that we weren't going to cover so we ended up spending a lot more time than the hour that we planned. All in all the talk went great and I can’t wait to share more about Testcontainers in the future!",[16,27058,27059],{},[74,27060],{"alt":27061,"src":27062},"8A3239C7-7CBD-4BB3-8534-CB9C282565CA_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002F8A3239C7-7CBD-4BB3-8534-CB9C282565CA_1_105_c.jpeg",[16,27064,27065],{},"I want to thank everyone at the VMware offices for welcoming us with open arms and we even got a tour of the office!",[16,27067,27068],{},[74,27069],{"alt":27070,"src":27071},"6FCC74D8-CBDD-4E24-A466-DC2F8F6B1E34_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002F6FCC74D8-CBDD-4E24-A466-DC2F8F6B1E34_1_105_c.jpeg",[28,27073,27075],{"id":27074},"springone-tour-toronto","SpringOne Tour Toronto",[16,27077,27078,27079,27083],{},"Next up was our ",[23,27080,26474],{"href":27081,"rel":27082},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fspringone-tour\u002F",[101]," that took place on Tuesday & Wednesday in Toronto. This was our 2-day conference where you can meet the experts (and me) in person. This was also the first time I was able to meet a lot of my coworkers so that was really exciting.",[16,27085,27086,27087,27091],{},"The conference kicked off with ",[23,27088,25490],{"href":27089,"rel":27090},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fteam\u002Fnate-schutta\u002F",[101]," talking about microservices. I was sitting in the front row listening to Nate speak and all I could think of was “I have to follow this guy”. Nate is a great storyteller and presenter and I learned a lot from him.",[16,27093,27094],{},[74,27095],{"alt":27096,"src":27097},"16407CF1-4346-4503-B87E-66BA7F362864_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002F16407CF1-4346-4503-B87E-66BA7F362864_1_105_c.jpeg",[16,27099,27100],{},"I gave my talk on Spring for GraphQL and I thought that it went pretty well. There were some great questions afterward that I jotted down that I hope to explore further in the near future. The rest of the conference was amazing with so many great talks by Josh Long, Spencer, Glenn, DaShaun and so many more.",[16,27102,27103],{},"I ended up staying at the Marriott that is attached to the Rogers Centre where the Toronto Blue Jays play. They have a restaurant there that overlooks the field. They weren’t playing while I was there but I want to go back one day when they are. Look at this view 🤩",[16,27105,27106],{},[74,27107],{"alt":27108,"src":27109},"0E8A9984-77D6-4540-8DC7-6545145C92BB_1_102_o.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002F0E8A9984-77D6-4540-8DC7-6545145C92BB_1_102_o.jpeg",[16,27111,27112],{},"A bunch of us went out for dinner one night at the CN Tower and wow, what a great experience!",[16,27114,27115],{},[74,27116],{"alt":27117,"src":27118},"EF17787C-A300-47CB-B53C-3CB9D2A57B38_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002FEF17787C-A300-47CB-B53C-3CB9D2A57B38_1_105_c.jpeg",[16,27120,27121,27122,27126],{},"I’m really excited about our next tour stop in ",[23,27123,27125],{"href":26745,"rel":27124},[101],"New York City"," where most of my team should be in the same place at the same time. If you’re in a city where we are stopping make sure you sign up and come say hi 👋🏻",[28,27128,27130],{"id":27129},"vueconfus","VueConf.US",[16,27132,27133],{},"I have been a part of the Vue community for almost 4 years now and this was my first Vue Conference. Needless to say, I was really excited when I got accepted to speak. I said this on stage but I want to say it again, thank you to everyone who put on this conference, and thank you for allowing me to ramble for 30 minutes.",[16,27135,27136],{},"My talk was on what’s new in Nuxt 3. I have been looking into moving my website over to Nuxt 3 for a while now and as we get closer and closer to a release I’m getting really excited about the move.",[16,27138,27139],{},[74,27140],{"alt":27141,"src":27142},"CDB602A4-B009-4444-961A-FA5AFFCB74E4_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002FCDB602A4-B009-4444-961A-FA5AFFCB74E4_1_105_c.jpeg",[16,27144,27145],{},[74,27146],{"alt":27147,"src":27148},"58305412-43C9-43EA-8088-FB3A44A207BD_1_105_c.jpeg","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002F58305412-43C9-43EA-8088-FB3A44A207BD_1_105_c.jpeg",[16,27150,27151],{},[74,27152],{"alt":27153,"src":27154},"Pratik","\u002Fimages\u002Fnewsletter\u002F2022\u002F06\u002F13\u002Fpratik.jpg",[16,27156,27157],{},"What I loved most about this conference was what I love about all conferences, the people. I got to meet some people that I have talked to over the years like Adam Jahr and Erik Hanchett and caught up with an old friend Cameron Childress. I really appreciate everyone who came up to me and provided some feedback.",[16,27159,27160],{},"One person asked me how I am so confident on stage and that was a bit of a shock to me. I have some confidence because I knew the material well and it’s something I like talking about but I wouldn’t ever think of myself as overconfident, so thank you for that!",[28,27162,27164],{"id":27163},"whats-next","What’s next",[16,27166,27167],{},"I am home for the next two weeks so I hope to pump out a bunch of content before heading back on the road for SpringOne Tour NYC. If there is anything you would like to see please reach out to me on Twitter.",[28,27169,21516],{"id":10953},[33,27171,11453],{"id":11452},[1271,27173,27174,27181,27188],{},[1274,27175,27176],{},[23,27177,27180],{"href":27178,"rel":27179},"https:\u002F\u002Fgithub.blog\u002F2020-04-14-github-is-now-free-for-teams\u002F",[101],"GitHub is free for teams",[1274,27182,27183],{},[23,27184,27187],{"href":27185,"rel":27186},"https:\u002F\u002Ftailwindcss.com\u002Fblog\u002Ftailwindcss-v3-1",[101],"Tailwind CSS v3.1",[1274,27189,27190],{},[23,27191,27194],{"href":27192,"rel":27193},"https:\u002F\u002Fwww.jobrunr.io\u002Fen\u002Fblog\u002F2022-06-10-my-own-product-part-2\u002F",[101],"Launching a developer product - part 2",[33,27196,11465],{"id":30},[1271,27198,27199,27206,27212,27219],{},[1274,27200,27201],{},[23,27202,27205],{"href":27203,"rel":27204},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5IROOj7sLKg",[101],"Bootiful Kubernetes Operators by Cora Iberkleid and Josh Long @ Spring I\u002FO 2022",[1274,27207,27208],{},[23,27209,27211],{"href":27203,"rel":27210},[101],"Declarative Clients in Spring by Rossen Stoyanchev and Olga Maciaszek-Sharma @ Spring I\u002FO 2022",[1274,27213,27214],{},[23,27215,27218],{"href":27216,"rel":27217},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=c-GV2PxymoY",[101],"How fixing a broken window cut down our build time by 50% by Philip Riecks @ Spring I\u002FO 2022",[1274,27220,27221],{},[23,27222,27225],{"href":27223,"rel":27224},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=oTn8SHz5Ux8",[101],"Ahead Of Time and Native in Spring Boot 3.0 by Brian Clozel and Stéphane Nicoll @ Spring I\u002FO 2022",[33,27227,13650],{"id":973},[1271,27229,27230],{},[1274,27231,27232],{},[23,27233,27236],{"href":27234,"rel":27235},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F564cc3c0-378f-45cb-86c3-e652da8067b0",[101],"Kubernetes legend and friend Cora Iberkleid on Tanzu, Cartographer, and more",[33,27238,22284],{"id":16575},[1271,27240,27241],{},[1274,27242,27243],{},[23,27244,27247],{"href":27245,"rel":27246},"https:\u002F\u002Fhistoire.dev\u002F",[101],"Histoire",[33,27249,14122],{"id":14121},[1271,27251,27252],{},[1274,27253,27254],{},[23,27255,27258],{"href":27256,"rel":27257},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Flearning-microsoft-azure\u002F9781098113315\u002F",[101],"Learning Microsoft Azure (Early Edition)",[33,27260,25701],{"id":25700},[1271,27262,27263],{},[1274,27264,27265],{},[23,27266,27269],{"href":27267,"rel":27268},"https:\u002F\u002Fwww.masterclass.com\u002Fsessions\u002Fclasses\u002Fmake-compelling-videos-that-go-viral",[101],"MKBHD - Masterclass",[28,27271,172],{"id":171},[16,27273,25399,27274,11333],{},[23,27275,11332],{"href":11330,"rel":27276},[101],[16,27278,9630,27279,191,27281,27283,27285,27287],{},[189,27280],{},[189,27282],{},[23,27284,11491],{"href":11490},[189,27286],{},[23,27288,198],{"href":196,"rel":27289},[101],{"title":200,"searchDepth":201,"depth":201,"links":27291},[27292,27293,27294,27295,27296,27304],{"id":27039,"depth":201,"text":27040},{"id":27074,"depth":201,"text":27075},{"id":27129,"depth":201,"text":27130},{"id":27163,"depth":201,"text":27164},{"id":10953,"depth":201,"text":21516,"children":27297},[27298,27299,27300,27301,27302,27303],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":25700,"depth":206,"text":25701},{"id":171,"depth":201,"text":172},{"_id":27306,"path":27307,"title":27308,"description":27309,"meta":27310,"body":27313},"newsletter\u002Fnewsletter\u002F2022\u002F05\u002F31\u002Fhappy-memorial-day.md","\u002Fnewsletter\u002F2022\u002F05\u002F31\u002Fhappy-memorial-day","Happy Memorial Day, Spring for GraphQL and Office Hours","Good morning friends. I hope everyone in the US had a happy Memorial day weekend. I want to thank every one of you who has served or is currently serving. Your dedication and bravery to this country are inspiring and we are lucky to have you protecting us.",{"slug":27311,"date":27312},"happy-memorial-day","2022-05-31T07:30:00.000Z",{"type":13,"value":27314,"toc":27504},[27315,27317,27320,27333,27335,27338,27345,27348,27350,27353,27356,27359,27362,27364,27366,27396,27398,27421,27423,27439,27441,27457,27459,27468,27470,27472,27481,27483,27485,27491],[16,27316,27309],{},[16,27318,27319],{},"I only have a couple of things to share with you this week but the next edition of the newsletter should be a little bit more exciting.",[16,27321,27322,27323,529,27327,27332],{},"I am hitting the road next week for ",[23,27324,27075],{"href":27325,"rel":27326},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fspringone-tour\u002F2022\u002Ftoronto\u002F",[101],[23,27328,27331],{"href":27329,"rel":27330},"https:\u002F\u002Fus.vuejs.org\u002F",[101],"VueConf US",". If you’re at either of those conferences please come say hi. If you want to see a list of events that I will be at this year you can check out the speaking page on my website.",[28,27334,17545],{"id":17544},[16,27336,27337],{},"Spring for GraphQL 1.0 has been released! This is a huge milestone and the culmination of a really great collaboration between the Spring team and the GraphQL Java team. I put together an article on the release and a video tutorial walking you through the basics of how to get started with Spring for GraphQL.",[16,27339,27340,27341],{},"Blog Post: ",[23,27342,27343],{"href":27343,"rel":27344},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F05\u002F17\u002Fspring-for-graphql\u002F",[101],[47,27346],{"id":27347},"3PCNqXrU-2g",[28,27349,93],{"id":92},[16,27351,27352],{},"DaShaun and I have been busy with our new live stream called Spring Office Hours. This is a chance to tell you what’s new in the Spring Community, show off something we are working on, and answer your questions. I think we have gotten into a good grove and I am excited about the future of this show. If you want you can check out some of our recent episodes below.",[47,27354],{"id":27355},"HYszA0Za704",[47,27357],{"id":27358},"rMu-QBEFG7U",[47,27360],{"id":27361},"5_DE6r4oxEw",[28,27363,21516],{"id":10953},[33,27365,11453],{"id":11452},[1271,27367,27368,27375,27382,27389],{},[1274,27369,27370],{},[23,27371,27374],{"href":27372,"rel":27373},"https:\u002F\u002Fmedium.com\u002Fqe-unit\u002Fairbnbs-microservices-architecture-journey-to-quality-engineering-d5a490e6ba4f",[101],"Airbnb’s Microservices Architecture Journey To Quality Engineering",[1274,27376,27377],{},[23,27378,27381],{"href":27379,"rel":27380},"https:\u002F\u002Fwww.docker.com\u002Fblog\u002Fwelcome-tilt-fixing-the-pains-of-microservice-development-for-kubernetes\u002F",[101],"Tilt joins Docker",[1274,27383,27384],{},[23,27385,27388],{"href":27386,"rel":27387},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F05\u002F24\u002Fpreparing-for-spring-boot-3-0",[101],"Preparing for Spring Boot 3.0",[1274,27390,27391],{},[23,27392,27395],{"href":27393,"rel":27394},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F05\u002F19\u002Fspring-for-graphql-1-0-release",[101],"Spring for GraphQL 1.0 Released",[33,27397,11465],{"id":30},[1271,27399,27400,27407,27414],{},[1274,27401,27402],{},[23,27403,27406],{"href":27404,"rel":27405},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=DkZr7_c9ry8",[101],"Annotations In Java Tutorial - How To Create And Use Your Own Custom Annotations",[1274,27408,27409],{},[23,27410,27413],{"href":27411,"rel":27412},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lCzcQ0Q5cSQ",[101],"Azure is the home for your Java applications, Part 1 | Azure Friday",[1274,27415,27416],{},[23,27417,27420],{"href":27418,"rel":27419},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=u0kWB9S_np0&t=1s",[101],"Getting Started with Java: The JBang way",[33,27422,13650],{"id":973},[1271,27424,27425,27432],{},[1274,27426,27427],{},[23,27428,27431],{"href":27429,"rel":27430},"https:\u002F\u002Fpodcasts.apple.com\u002Fus\u002Fpodcast\u002Fpodrocket-a-web-development-podcast-from-logrocket\u002Fid1539945251?i=1000561826077",[101],"Nuxt 3 with Daniel Roe",[1274,27433,27434],{},[23,27435,27438],{"href":27436,"rel":27437},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jAjFBwCzgz0",[101],"Between Chair and Keyboard - Raju Gandhi",[33,27440,22284],{"id":16575},[1271,27442,27443,27450],{},[1274,27444,27445],{},[23,27446,27449],{"href":27447,"rel":27448},"https:\u002F\u002Fdrawsql.app\u002F",[101],"DrawSQL",[1274,27451,27452],{},[23,27453,27456],{"href":27454,"rel":27455},"https:\u002F\u002Fgithub.com\u002FDiizzayy\u002Fnuxt-graphql-client",[101],"Nuxt GraphQL Client",[33,27458,14122],{"id":14121},[1271,27460,27461],{},[1274,27462,27463],{},[23,27464,27467],{"href":27465,"rel":27466},"https:\u002F\u002Fleanpub.com\u002Fgraphql-java\u002F",[101],"GraphQL with Java and Spring",[33,27469,12149],{"id":12148},[33,27471,18092],{"id":18091},[1271,27473,27474],{},[1274,27475,27476],{},[23,27477,27480],{"href":27478,"rel":27479},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F05\u002Fjava-annotated-monthly-may-2022\u002F",[101],"Java Annotated Monthly - May 2022",[33,27482,21608],{"id":384},[28,27484,172],{"id":171},[16,27486,27487,27488,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of Coffee & Code and I will see you in the next one. If you have any links you would like me to include please ",[23,27489,11332],{"href":11330,"rel":27490},[101],[16,27492,9630,27493,191,27495,27497,27499,27501],{},[189,27494],{},[189,27496],{},[23,27498,11491],{"href":11490},[189,27500],{},[23,27502,198],{"href":196,"rel":27503},[101],{"title":200,"searchDepth":201,"depth":201,"links":27505},[27506,27507,27508,27518],{"id":17544,"depth":201,"text":17545},{"id":92,"depth":201,"text":93},{"id":10953,"depth":201,"text":21516,"children":27509},[27510,27511,27512,27513,27514,27515,27516,27517],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":18091,"depth":206,"text":18092},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":27520,"path":27521,"title":27522,"description":27523,"meta":27524,"body":27526},"newsletter\u002Fnewsletter\u002F2022\u002F05\u002F16\u002Fwebsite-updates.md","\u002Fnewsletter\u002F2022\u002F05\u002F16\u002Fwebsite-updates","Website Updates, New Content, Live Coding & SpringOne","Happy Monday and welcome to the new bi-weekly newsletter. I decided to move this newsletter to every other Monday for a couple of reasons. First, it’s a lot of work and stress to produce this newsletter each week on top of everything else I am doing. Second, I just don’t think I have enough going on to warrant a newsletter every single week. When I get on the level of Ken Kousen (Hi, Ken 👋🏻) I will consider moving back to weekly. I’m going to try this for now but I would love your feedback.",{"slug":10013,"date":27525},"2022-05-16T07:30:00.000Z",{"type":13,"value":27527,"toc":27803},[27528,27530,27533,27535,27538,27541,27544,27547,27550,27573,27576,27578,27582,27588,27591,27595,27601,27604,27608,27611,27615,27618,27621,27624,27626,27629,27640,27643,27651,27653,27656,27660,27669,27671,27673,27703,27705,27735,27737,27753,27755,27771,27774,27783,27785,27790],[16,27529,27523],{},[16,27531,27532],{},"This week I want to tell you about some long-overdue changes I made to the website, I did some live coding, wrote some blog posts, and released a few videos.",[28,27534,10014],{"id":10013},[16,27536,27537],{},"Over the past couple of weeks, I had a chance to make some long-overdue updates to the website. I’m not sure when this happened but all of my inline code fences were displaying as blocks. I’m a little bit worried that nobody told me about this. I know the analytics tell me that I am getting a little under 50k visitors a month and not one of you noticed this 😳",[16,27539,27540],{},"This was an issue with the Gridsome plugin I was using and found out that I could turn of syntax highlighting for inline code fences. I did that and updated the styles to help it stand out for both light and dark modes. This should now be corrected for both my blog posts and newsletter archives on the web.",[16,27542,27543],{},"For as long as I can remember I have wanted to start updating some of my more popular older posts. Before I could do this I had to update the blog header. I was displaying a date there but that was the published date.",[16,27545,27546],{},"I now display the words “Published On” before this date so that viewers know when the article was published. If I go back and update the article you will now see “Updated On” and a 2nd date displayed. I like this information as a consumer of other blogs so I hope you will appreciate this.",[16,27548,27549],{},"With this change in place I went back and updated a few blog posts:",[1271,27551,27552,27559,27566],{},[1274,27553,27554],{},[23,27555,27558],{"href":27556,"rel":27557},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2017\u002F04\u002F07\u002Fspring-boot-command-line-runner\u002F",[101],"Spring Boot Command Line Runner",[1274,27560,27561],{},[23,27562,27565],{"href":27563,"rel":27564},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2017\u002F07\u002F05\u002Fread-json-data-spring-boot-write-database\u002F",[101],"How to read JSON Data in Spring Boot and Write to a database",[1274,27567,27568],{},[23,27569,27572],{"href":27570,"rel":27571},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2021\u002F11\u002F08\u002Fgithub-copilot-java-developers\u002F",[101],"Github Copilot for Java Developers",[16,27574,27575],{},"I will continue to do this for older blog posts when I can. It’s nice to bring them up to current versions of Spring Boot as well as add what I have learned over the years.",[28,27577,17384],{"id":17383},[33,27579,27581],{"id":27580},"value-annotation-in-spring-boot","@Value Annotation in Spring Boot",[16,27583,27340,27584],{},[23,27585,27586],{"href":27586,"rel":27587},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F05\u002F11\u002Fspring-boot-value-annotation\u002F",[101],[47,27589],{"id":27590},"vLSyFktOm4g",[33,27592,27594],{"id":27593},"spring-data-jpa-pagination","Spring Data JPA Pagination",[16,27596,27340,27597],{},[23,27598,27599],{"href":27599,"rel":27600},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F05\u002F12\u002Fspring-data-jpa-pagination\u002F",[101],[47,27602],{"id":27603},"oq-c3D67WqM",[28,27605,27607],{"id":27606},"live-coding","Live Coding",[16,27609,27610],{},"This past week I was able to get some more live coding under my belt. I think like most people there is a bit of anxiety when it comes to coding in public. With experience I am getting much more comfortable with it and even enjoying it at times!",[33,27612,27614],{"id":27613},"tanzu-tv-code","Tanzu TV - Code",[16,27616,27617],{},"This week I hoped on one of our tv shows called Code. This is a chance for us advocates to jump on and build something in public. We don’t have a script, guest or slides. Just me, you and some code. In this weeks session I built out some code I would use for some blog post and YouTube videos.",[16,27619,27620],{},"The first part was building out Spring Data JPA repositories. Once I had that in place I walked through how to do pagination in GraphQL.",[47,27622],{"id":27623},"67GtZRgE0h0",[33,27625,93],{"id":92},[16,27627,27628],{},"If you have been following along I have been running a little experiment called “Spring Office Hours” with my friend and coworker DaShaun. We were doing this on our own Twitch & YouTube channels and it was a chance to talk about what’s new in the world of Spring, demo off some code and answer your questions.",[16,27630,27631,27632,27635,27636,27639],{},"I’m happy to announce that ",[23,27633,93],{"href":20628,"rel":27634},[101]," is out of beta and we have been added to the Tanzu TV lineup on the ",[23,27637,22446],{"href":22444,"rel":27638},[101],". This past week was episode 01 and while I started off with some audio issues, we ended strong.",[47,27641],{"id":27642},"qOlgTi6bC5U",[16,27644,27645,27646,184],{},"If you want to join us live for Episode 2 you can view the ",[23,27647,27650],{"href":27648,"rel":27649},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fspring-office-hours\u002F0002\u002F",[101],"episode page here",[28,27652,4968],{"id":16650},[16,27654,27655],{},"This week I found out some amazing news about the upcoming SpringOne conference this December in San Francisco. I will be there in person and I will be doing something really cool that I can’t tell you about yet. I’m so excited about this and as soon as I can say something I will. With that said, I hope to see you all there!",[33,27657,27659],{"id":27658},"call-for-papers","Call for Papers",[16,27661,27662,27663,27668],{},"Speaking of SpringOne our ",[23,27664,27667],{"href":27665,"rel":27666},"https:\u002F\u002Fspringone.io\u002F2022\u002Fcfp",[101],"Call for Paper","s is open now and closes on June 20, 2022. If you’re interested in speaking please submit a talk.",[28,27670,21516],{"id":10953},[33,27672,11453],{"id":11452},[1271,27674,27675,27682,27689,27696],{},[1274,27676,27677],{},[23,27678,27681],{"href":27679,"rel":27680},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F05\u002F02\u002Fever-wanted-to-rewrite-a-query-in-spring-data-jpa",[101],"Ever wanted to rewrite a query in Spring Data JPA?",[1274,27683,27684],{},[23,27685,27688],{"href":27686,"rel":27687},"https:\u002F\u002Fapurvsheth.medium.com\u002Fserverless-with-spring-boot-aws-lambda-bc76c1de2b12",[101],"Serverless With Spring Boot & AWS Lambda",[1274,27690,27691],{},[23,27692,27695],{"href":27693,"rel":27694},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-d1\u002F",[101],"Cloudflare: Announcing D1: our first SQL database",[1274,27697,27698],{},[23,27699,27702],{"href":27700,"rel":27701},"https:\u002F\u002Fwww.docker.com\u002Fblog\u002Fthe-magic-of-docker-desktop-is-now-available-on-linux",[101],"The Magic of Docker Desktop is Now Available on Linux",[33,27704,11465],{"id":30},[1271,27706,27707,27714,27721,27728],{},[1274,27708,27709],{},[23,27710,27713],{"href":27711,"rel":27712},"https:\u002F\u002Fyoutu.be\u002FT9KItuTJe-8",[101],"Cloud Native Crew: Episode 3, with Ben Hale",[1274,27715,27716],{},[23,27717,27720],{"href":27718,"rel":27719},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=A1V71peRNn0",[101],"New in Spring Framework 6: Http interfaces & Declaritive Htttp Clients",[1274,27722,27723],{},[23,27724,27727],{"href":27725,"rel":27726},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QuvS_VLbGko",[101],"Spring Boot Tutorial - Nice & Easy",[1274,27729,27730],{},[23,27731,27734],{"href":27732,"rel":27733},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=T9KItuTJe-8",[101],"Cloud Native Crew - with Ben Hale",[33,27736,13650],{"id":973},[1271,27738,27739,27746],{},[1274,27740,27741],{},[23,27742,27745],{"href":27743,"rel":27744},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Fc82fb7d3-2854-4b31-8d5e-f183e7b87643",[101],"Java Champion and Spring Katas legend Chandra Guntur",[1274,27747,27748],{},[23,27749,27752],{"href":27750,"rel":27751},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Faa1abf06-ca95-426c-b200-f3669ab3839d",[101],"EasyMock contributor, Java Champion, and Java luminary Henri Tremblay",[33,27754,22284],{"id":16575},[1271,27756,27757,27764],{},[1274,27758,27759],{},[23,27760,27763],{"href":27761,"rel":27762},"https:\u002F\u002Fgithub.com\u002Fmicrometer-metrics\u002Fmicrometer\u002Freleases\u002Ftag\u002Fv1.9.0",[101],"Micrometer 1.9.0 Released",[1274,27765,27766],{},[23,27767,27770],{"href":27768,"rel":27769},"https:\u002F\u002Fopenjdk.java.net\u002Fjeps\u002F427",[101],"JEP 427: Pattern Matching for switch (Third Preview)",[33,27772,27773],{"id":13856},"👩‍💻 Conferences",[1271,27775,27776],{},[1274,27777,27778,6633],{},[23,27779,27782],{"href":27780,"rel":27781},"https:\u002F\u002Fwww.javascriptandfriends.com\u002F",[101],"JavaScript and Friends Conference Registration is now open",[28,27784,172],{"id":171},[16,27786,25399,27787,11333],{},[23,27788,11332],{"href":11330,"rel":27789},[101],[16,27791,9630,27792,191,27794,27796,27798,27800],{},[189,27793],{},[189,27795],{},[23,27797,11491],{"href":11490},[189,27799],{},[23,27801,198],{"href":196,"rel":27802},[101],{"title":200,"searchDepth":201,"depth":201,"links":27804},[27805,27806,27810,27814,27817,27824],{"id":10013,"depth":201,"text":10014},{"id":17383,"depth":201,"text":17384,"children":27807},[27808,27809],{"id":27580,"depth":206,"text":27581},{"id":27593,"depth":206,"text":27594},{"id":27606,"depth":201,"text":27607,"children":27811},[27812,27813],{"id":27613,"depth":206,"text":27614},{"id":92,"depth":206,"text":93},{"id":16650,"depth":201,"text":4968,"children":27815},[27816],{"id":27658,"depth":206,"text":27659},{"id":10953,"depth":201,"text":21516,"children":27818},[27819,27820,27821,27822,27823],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":13856,"depth":206,"text":27773},{"id":171,"depth":201,"text":172},{"_id":27826,"path":27827,"title":27828,"description":27829,"meta":27830,"body":27833},"newsletter\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fvacation-conferences.md","\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fvacation-conferences","Vacation, Conference Season and a YouTube Milestone","Happy Monday friends! It’s been a while since we last talked and I have a lot to share with you. A couple of weeks ago my family and I took a much-needed vacation to Hilton Head, SC. We had such a great time at the beach, riding bikes and eating so much good food.",{"slug":27831,"date":27832},"vacation-conferences","2022-05-02T07:30:00.000Z",{"type":13,"value":27834,"toc":28048},[27835,27837,27843,27849,27855,27858,27861,27864,27868,27871,27874,27881,27884,27886,27894,27898,27901,27905,27908,27911,27920,27924,27932,27938,27942,27945,27947,27949,27972,27974,27983,27985,28006,28008,28017,28019,28021,28027,28029,28035],[16,27836,27829],{},[16,27838,27839],{},[74,27840],{"alt":27841,"src":27842},"Hilton Head Sunrise","\u002Fimages\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fhilton_head_01.png",[16,27844,27845],{},[74,27846],{"alt":27847,"src":27848},"Hilton Head Family Water","\u002Fimages\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fhilton_head_02.png",[16,27850,27851],{},[74,27852],{"alt":27853,"src":27854},"Hilton Head Dockside","\u002Fimages\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fhilton_head_03.png",[16,27856,27857],{},"We returned on a Saturday and on Sunday I began packing for SpringOne Tour in Chicago. That night I decided to take a Covid test because I had a bit of a cough. I tested positive and didn’t believe it so I tested again with the same result. I didn’t believe it because even as of recent I have been hearing of others getting pretty sick and I wasn’t sick.",[16,27859,27860],{},"I was really bummed out because this meant that I had to cancel my trip to Chicago. This was the first time I was going to get to hang out with coworkers in person. This also meant that I wouldn’t be giving my talk on Spring for GraphQL which I worked really hard on.",[16,27862,27863],{},"At the end of the day, it’s just the first conference of many this year. I spent last week catching up on some things at work and after that and a vacation, I feel ready to go for conference season!",[28,27865,27867],{"id":27866},"conference-talks","Conference Talks",[16,27869,27870],{},"Speaking of conferences I received notice that I would be speaking at 2 more conferences this summer while I was on vacation. When you receive as many declines as I do you tend to celebrate the wins and I am so pumped for both of these. 🥳",[33,27872,27331],{"id":27873},"vueconf-us",[16,27875,27876,27877,27880],{},"If you know me you know that I am a huge fan of Vue and the community. I have submitted a number of talks over the years to Vue-related conferences with no luck. I was so excited to find out that I will be speaking at ",[23,27878,27331],{"href":27329,"rel":27879},[101]," which is located in Ft. Lauderdale FL! I will be speaking on Nuxt 3 and more specifically what’s coming in Nuxt 3!",[16,27882,27883],{},"I think what I am looking forward to most is meeting so many people from the Vue community that I have talked to over the years and never met. If you’re heading to this conference please let me know so we can catch up.",[33,27885,25779],{"id":25766},[16,27887,27888,27889,27893],{},"A few days later I got notice that I had been accepted to ",[23,27890,25779],{"href":27891,"rel":27892},"https:\u002F\u002Fwww.codeonthebeach.com\u002F",[101],". This conference also takes place in FL but this time we move up the coast to Atlantic Beach. I have heard some great things about this conference and I was excited to hear I will be joined by a couple of coworkers. In this talk, you will learn how to build Full Stack Java applications with Spring Boot.",[33,27895,27897],{"id":27896},"kansas-city-developer-conference-kcdc","Kansas City Developer Conference (KCDC)",[16,27899,27900],{},"Late on Friday I found out that I was accepted to KCDC. This will be my first time speaking at this conference and I am really looking forward to it. I will be presenting with my friend and coworker Nate Schutta. In this talk we will be presenting on Spring Recipes: A Collection of Common Sense Solutions.",[28,27902,27904],{"id":27903},"vmware","VMware",[16,27906,27907],{},"I celebrated 3 months last week at VMware! I can’t remember the last time I was this happy at work. The company I work for is amazing on so many levels. I get to go to work every single day and do what I love with a really great team.",[16,27909,27910],{},"VMware attracts some of the most talented people in our industry and you can see it with every interaction company wide. The benefits are amazing and I appreciate the freedom to maintains work\u002Flife balance. A lot of companies will preach this but it’s often just talk, not here.",[16,27912,27913,27914,27919],{},"To top it all off VMware was ranked ",[23,27915,27918],{"href":27916,"rel":27917},"https:\u002F\u002Fwww.forbes.com\u002Flists\u002Fbest-employers-diversity",[101],"#2 by Forbes"," on America’s best employers for diversity last week.",[28,27921,27923],{"id":27922},"youtube-15000-subscriber-milestone","YouTube 15,000 Subscriber Milestone",[16,27925,27926,27927,27931],{},"While I was on vacation I crossed 15,000 subscribers on ",[23,27928,3363],{"href":27929,"rel":27930},"http:\u002F\u002Fwww.youtube.com\u002Fdanvega",[101],"! This is amazing and If I was home I probably would have created a video to talk through this amazing milestone. Next up is 20k and I will try and put something together for that one.",[16,27933,27934],{},[74,27935],{"alt":27936,"src":27937},"YouTube 15k","\u002Fimages\u002Fnewsletter\u002F2022\u002F05\u002F02\u002Fyoutube_15k.png",[28,27939,27941],{"id":27940},"this-newsletter","This newsletter",[16,27943,27944],{},"I have been trying to figure out what to do with this newsletter. It might not seem like it but it takes a lot of effort and I’m not sure anyone would miss it. I pay attention to the analytics and I can tell that some of you are reading this but I just feel like my efforts can be better spent elsewhere. For now I will keep this around but I am going to move it to an every other week cadence. If you have any feedback for me on this newsletter please feel free to reach out.",[28,27946,21516],{"id":10953},[33,27948,11453],{"id":11452},[1271,27950,27951,27958,27965],{},[1274,27952,27953],{},[23,27954,27957],{"href":27955,"rel":27956},"https:\u002F\u002Fblog.jetbrains.com\u002Fblog\u002F2022\u002F04\u002F28\u002Fjetbrains_partners_with_gitpod\u002F",[101],"Remote Development With JetBrains Gateway and Gitpod",[1274,27959,27960],{},[23,27961,27964],{"href":27962,"rel":27963},"https:\u002F\u002Fwww.infoq.com\u002Fnews\u002F2022\u002F04\u002Fred-hat-releases-hibernate-6\u002F",[101],"Hibernate ORM 6.0 Delivers Improved Performance",[1274,27966,27967],{},[23,27968,27971],{"href":27969,"rel":27970},"https:\u002F\u002Fmedium.com\u002Fgraalvm\u002Fgraalvm-22-1-developer-experience-improvements-apple-silicon-builds-and-more-b7ac9a0f6066",[101],"GraalVM 22.1: Developer experience improvements, Apple Silicon builds, and more",[33,27973,13650],{"id":973},[1271,27975,27976],{},[1274,27977,27978],{},[23,27979,27982],{"href":27980,"rel":27981},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F28280dc4-c9ca-4229-8075-b4f63a4cb6c4",[101],"Cloud guru Tiffany Jernigan",[33,27984,22284],{"id":16575},[1271,27986,27987,27993,27999],{},[1274,27988,27989],{},[23,27990,27991],{"href":27991,"rel":27992},"https:\u002F\u002Fopenjdk.java.net\u002Fjeps\u002F8273943",[101],[1274,27994,27995],{},[23,27996,27997],{"href":27997,"rel":27998},"https:\u002F\u002Fnuxtjs.org\u002Fannouncements\u002Fnuxt3-rc\u002F",[101],[1274,28000,28001],{},[23,28002,28005],{"href":28003,"rel":28004},"https:\u002F\u002Fopenjdk.java.net\u002Fjeps\u002F425",[101],"Project Loom preview set for Java 19",[33,28007,18092],{"id":18091},[1271,28009,28010],{},[1274,28011,28012],{},[23,28013,28016],{"href":28014,"rel":28015},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fjosh-blog\u002Fthis-month-in-spring-april-2022",[101],"This month in Spring - April 2022",[33,28018,12149],{"id":12148},[33,28020,21608],{"id":384},[16,28022,28023],{},[23,28024,28025],{"href":28025,"rel":28026},"https:\u002F\u002Ftwitter.com\u002Fjuliendubois\u002Fstatus\u002F1518671023415177217",[101],[28,28028,172],{"id":171},[16,28030,28031,28032,11333],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of Coffee & Code and I will see you in 2 weeks. If you have any links you would like me to include please ",[23,28033,11332],{"href":11330,"rel":28034},[101],[16,28036,9630,28037,191,28039,28041,28043,28045],{},[189,28038],{},[189,28040],{},[23,28042,11491],{"href":11490},[189,28044],{},[23,28046,198],{"href":196,"rel":28047},[101],{"title":200,"searchDepth":201,"depth":201,"links":28049},[28050,28055,28056,28057,28058,28066],{"id":27866,"depth":201,"text":27867,"children":28051},[28052,28053,28054],{"id":27873,"depth":206,"text":27331},{"id":25766,"depth":206,"text":25779},{"id":27896,"depth":206,"text":27897},{"id":27903,"depth":201,"text":27904},{"id":27922,"depth":201,"text":27923},{"id":27940,"depth":201,"text":27941},{"id":10953,"depth":201,"text":21516,"children":28059},[28060,28061,28062,28063,28064,28065],{"id":11452,"depth":206,"text":11453},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":28068,"path":28069,"title":28070,"description":28071,"meta":28072,"body":28075},"newsletter\u002Fnewsletter\u002F2022\u002F04\u002F11\u002Foffice-hours-code.md","\u002Fnewsletter\u002F2022\u002F04\u002F11\u002Foffice-hours-code","Office Hours, Code & My Discord Server","Happy Monday, friends! It’s crazy to think that we are heading into the middle of April already. Here in the Vega household it’s been a rough couple of weeks. We have all been sick with a number of bugs going around but we are hoping this is the end of it. This is the main reason you haven’t seen any videos from me lately and I’m hoping to get back to that in a few weeks.",{"slug":28073,"date":28074},"office-hours-code","2022-04-11T09:30:00.000Z",{"type":13,"value":28076,"toc":28281},[28077,28079,28086,28088,28097,28100,28104,28107,28110,28114,28117,28120,28124,28127,28132,28140,28145,28147,28149,28172,28174,28190,28192,28215,28217,28225,28227,28230,28239,28241,28250,28252,28255,28261,28263,28268],[16,28078,28071],{},[16,28080,28081,28082,184],{},"This will be my last newsletter for a few weeks. Next week the family and I are heading to Hilton Head for some R&R and the following week I will be in Chicago for the ",[23,28083,26474],{"href":28084,"rel":28085},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Fspringone-tour\u002F2022\u002Fchicago\u002F",[101],[28,28087,25224],{"id":25223},[16,28089,28090,28091,28096],{},"Below is a recording from our latest office hours live stream. This is a chance for you to find out what is the latest news in the world of Spring, learn something new and ask any questions you might have. Up until this point DaShaun and I have just been testing this format out. We are happy to announce that this show is going pro and it will be added to the ",[23,28092,28095],{"href":28093,"rel":28094},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002F",[101],"Tanzu TV portfolio"," soon.",[47,28098],{"id":28099},"thqCEMyIBCU",[28,28101,28103],{"id":28102},"tanzu-tv-code-spring-for-graphql","Tanzu TV - Code: Spring for GraphQL",[16,28105,28106],{},"In this episode of Code I’m talking all about Spring for GraphQL. I am working on my presentation for the SpringOne Tour and I began working on some of my demo’s in this live stream.",[47,28108],{"id":28109},"6WfxWfIwoAU",[28,28111,28113],{"id":28112},"discord-server","Discord Server",[16,28115,28116],{},"If you didn’t know I started a community a discord a couple years ago. I honestly haven’t been giving it the attention it needs. A week or two ago I decided to shut down the server without much warning. I made this decision because I need to make sure I am spending my time wisely. This was another medium that wasn’t providing the value I envisioned when I started it.",[16,28118,28119],{},"If I am being completely honest, I’m just not a big fan of Discord. This is both from a user and server admin point of view. There are a lot of things I just don’t like about it but I don’t want to get into here.",[28,28121,28123],{"id":28122},"thank-you","Thank You 🙏",[16,28125,28126],{},"A friend sent me the message below out of nowhere one day. Just another reminder that it is really easy to say something positive to someone. It takes only a couple of minutes but it could really make their day and put them in a better mood. Thank you friend for the kind words 🤩",[2238,28128,28129],{},[16,28130,28131],{},"The past couple days, I have been fixed on the concept of people wanting to be the noun without doing the verb. I thought this blog post was awesome and communicates it very well.",[2238,28133,28134],{},[16,28135,28136],{},[23,28137,28138],{"href":28138,"rel":28139},"https:\u002F\u002Fisaacjeffries.com\u002Fblog\u002F2020\u002F4\u002F16\u002Fthe-noun-and-the-verb",[101],[2238,28141,28142],{},[16,28143,28144],{},"I want to know, I think you are doing an amazing job of being the verb by producing awesome content. Keep up the great work.",[28,28146,21516],{"id":10953},[33,28148,11453],{"id":11452},[1271,28150,28151,28158,28165],{},[1274,28152,28153],{},[23,28154,28157],{"href":28155,"rel":28156},"https:\u002F\u002Fwww.infoq.com\u002Farticles\u002Fnative-java-graalvm\u002F",[101],"Revolutionizing Java with GraalVM Native ImageLIKE1PRINT",[1274,28159,28160],{},[23,28161,28164],{"href":28162,"rel":28163},"https:\u002F\u002Fwww.infoq.com\u002Farticles\u002Farchitecture-trends-2022\u002F",[101],"Software Architecture and Design InfoQ Trends Report—April 2022",[1274,28166,28167],{},[23,28168,28171],{"href":28169,"rel":28170},"http:\u002F\u002Fwww.mastertheboss.com\u002Fjava-ee\u002Fjakarta-ee\u002Fwhats-new-in-jakarta-ee-10",[101],"What’s new in Jakarta EE 10",[33,28173,11465],{"id":30},[1271,28175,28176,28183],{},[1274,28177,28178],{},[23,28179,28182],{"href":28180,"rel":28181},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lrtnMQuxUvc&t=3245s",[101],"Must know tools in the Java testing ecosystem with Ixchel Ruiz",[1274,28184,28185],{},[23,28186,28189],{"href":28187,"rel":28188},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PzFp7_6heaY&t=2654s",[101],"Cloud Native Crew - Pilot",[33,28191,13650],{"id":973},[1271,28193,28194,28201,28208],{},[1274,28195,28196],{},[23,28197,28200],{"href":28198,"rel":28199},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lRzKuDVJZ_Y",[101],"Between Chair and Keyboard with Caitlin Mahoney",[1274,28202,28203],{},[23,28204,28207],{"href":28205,"rel":28206},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Feefa8329-35b2-44e7-b7f4-2044565f20d2",[101],"Craig McLuckie, Kubernetes cofounder and vice president of R&D at VMware",[1274,28209,28210],{},[23,28211,28214],{"href":28212,"rel":28213},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F082ae3f2-aa90-4cc0-bc3e-fe95f49c95de",[101],"GraphQL Java founder Andi Marek",[33,28216,22284],{"id":16575},[1271,28218,28219],{},[1274,28220,28221],{},[23,28222,28224],{"href":28003,"rel":28223},[101],"JEP 425: Virtual Threads (Preview)",[33,28226,14122],{"id":14121},[16,28228,28229],{},"We are having a tough time at home with our youngest daughter. On top of everyone being sick lately with whatever bug is going around she will just not sleep through though the night. A friend recommended this book and this point I am willing to try anything so send your suggestions in please.",[1271,28231,28232],{},[1274,28233,28234],{},[23,28235,28238],{"href":28236,"rel":28237},"https:\u002F\u002Famzn.to\u002F3NUrxQN",[101],"Touchpoints - Birth to Three",[33,28240,18092],{"id":18091},[1271,28242,28243],{},[1274,28244,28245],{},[23,28246,28249],{"href":28247,"rel":28248},"https:\u002F\u002Fwww.thesevletter.com\u002Fp\u002Fannouncing-the-sev-letter",[101],"Announcing The Sev Letter",[33,28251,21608],{"id":384},[16,28253,28254],{},"Twitter is working on an edit button!",[16,28256,28257],{},[23,28258,28259],{"href":28259,"rel":28260},"https:\u002F\u002Ftwitter.com\u002FTwitterComms\u002Fstatus\u002F1511456466233815041",[101],[28,28262,172],{"id":171},[16,28264,25399,28265,11333],{},[23,28266,11332],{"href":11330,"rel":28267},[101],[16,28269,9630,28270,191,28272,28274,28276,28278],{},[189,28271],{},[189,28273],{},[23,28275,11491],{"href":11490},[189,28277],{},[23,28279,198],{"href":196,"rel":28280},[101],{"title":200,"searchDepth":201,"depth":201,"links":28282},[28283,28284,28285,28286,28287,28296],{"id":25223,"depth":201,"text":25224},{"id":28102,"depth":201,"text":28103},{"id":28112,"depth":201,"text":28113},{"id":28122,"depth":201,"text":28123},{"id":10953,"depth":201,"text":21516,"children":28288},[28289,28290,28291,28292,28293,28294,28295],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":28298,"path":28299,"title":28300,"description":28301,"meta":28302,"body":28305},"newsletter\u002Fnewsletter\u002F2022\u002F03\u002F28\u002Fspring-data-notion-udemy.md","\u002Fnewsletter\u002F2022\u002F03\u002F28\u002Fspring-data-notion-udemy","Spring Data, Notion & Udemy Course Updates","Happy Monday, friends! I hope you all had a wonderful weekend and you’re ready to take on a new week. I had a productive week last week where I hosted Tanzu Tuesday, released 2 videos on YouTube, and started working on my presentation for the upcoming SpringOne Tour.",{"slug":28303,"date":28304},"spring-data-notion-udemy","2022-03-28T09:00:00.000Z",{"type":13,"value":28306,"toc":28506},[28307,28313,28316,28319,28327,28331,28337,28340,28343,28347,28350,28353,28357,28360,28363,28366,28369,28372,28375,28378,28381,28384,28386,28388,28413,28415,28438,28440,28456,28458,28467,28469,28478,28480,28486,28488,28493],[16,28308,28309,28310,184],{},"Happy Monday, friends! I hope you all had a wonderful weekend and you’re ready to take on a new week. I had a productive week last week where I hosted Tanzu Tuesday, released 2 videos on YouTube, and started working on my presentation for the upcoming ",[23,28311,26474],{"href":27081,"rel":28312},[101],[16,28314,28315],{},"With my new position, I was finally able to create videos on a consistent basis. With consistency, I am seeing an increase in the number of subscribers and watch hours. This is great because that is why I started my YouTube channel, to help people.",[16,28317,28318],{},"With this consistency, I am beginning to be a little bit more critical of my own work. I look around my office and I have all of this amazing equipment and all I can think of is everything that I want to upgrade.",[16,28320,28321,28322,184],{},"I think this is a natural progression for any content creator. We always look to the creators we aspire to be like and ask “What can I do to produce a video as they do?”. I say this and realize there are probably 1 or 2 YouTubers out there that look up to me. I’m saying this as a reminder to myself and everyone out there... ",[161,28323,28324],{},[734,28325,28326],{},"Enjoy the journey and don’t get caught up on the destination",[28,28328,28330],{"id":28329},"tanzu-tuesday-persistence-with-spring-data","Tanzu Tuesday: Persistence with Spring Data",[16,28332,28333,28334,184],{},"I had the opportunity to host Tanzu Tuesday this week. If you’re aware we have a ton of free content including live stream shows and you can find all of this over at the ",[23,28335,22446],{"href":22444,"rel":28336},[101],[16,28338,28339],{},"In this episode, I sat down with my cohost DaShaun and our guest Christoph Strobl. Christoph is on the Spring Data team and talked to us about what Spring Data is and what’s coming next. I selfishly love being a host on these shows because I always learn something and this week was no different. I learned that you can create Data projections using DTOs & Interfaces and the resulting SQL will only select the properties you define which can lead to increased performance.",[47,28341],{"id":28342},"gEYdSUa4fX8",[28,28344,28346],{"id":28345},"spring-data-list-crud-repository","Spring Data List Crud Repository",[16,28348,28349],{},"Before we interviewed Christoph I had a chance to put together a video on a new feature coming in Spring Data 3.0. In the current version of Spring Data when you want to retrieve a collection of things the Crud Repository will return an Iterable. In most cases, we are used to working with a List and the List Crud Repository addresses that.",[47,28351],{"id":28352},"lDbE0uYlYgk",[28,28354,28356],{"id":28355},"spring-boot-notion-api","Spring Boot + Notion API",[16,28358,28359],{},"If you aren’t new around here you know that I am a huge fan of Notion. In fact, I’m writing this very newsletter in Notion and I use it for so many things in my personal and professional life. In this video, I will show you a Notion database that I created to manage my upcoming talks. We will then use Spring Boot to talk to the Notion API to retrieve those rows. If you’re a fan of Spring and Notion you’re going to enjoy this one!",[47,28361],{"id":28362},"4yHYrQ7_gKM",[28,28364,28365],{"id":25700},"Courses",[16,28367,28368],{},"I spent some time coming up with a plan for my current courses and any new courses I want to create going forward. First off if you didn’t know I used to self host my courses on Teachable and you could purchase them through my website.",[16,28370,28371],{},"I turned that off last year because I didn’t want to have to maintain courses in 2 different places and honestly I wasn’t selling anything there. You need to have a large audience or a good marketing strategy to sell on your own platform and I don’t have either.",[16,28373,28374],{},"All of my courses on Udemy and I went through and cleaned some things up there. First off I unpublished a course I did with my friend John Thompson titled “Angular for Java Developers”. This course has fallen way behind and I just don’t have the time or the knowledge to bring it up to date.",[16,28376,28377],{},"I also sent out some emails to anyone in my Spring or Groovy courses. If you are in any of my courses, check your email. I was basically asking for suggestions on how I could update current courses without completing overhauling them.",[16,28379,28380],{},"I'm throwing out the idea of releasing a bunch of shorter (1 hr), more focused courses instead of one new mega course. The analytics show that students rarely go through a 14-hour course. Just like you, I purchase a course to learn about one or two things.",[16,28382,28383],{},"I think this will help with a couple of things. First, these shorter more focused courses will be easier to update in the future. It's very hard to keep a course that spans 14 hours in length up to date with the latest and greatest features. Second, this will give students a targeted curriculum to learn those one or two concepts in detail. I think this is a win-win for everyone but I would like to hear what you think.",[28,28385,21516],{"id":10953},[33,28387,11453],{"id":11452},[1271,28389,28390,28397],{},[1274,28391,28392],{},[23,28393,28396],{"href":28394,"rel":28395},"https:\u002F\u002Frieckpil.de\u002Fjava-development-on-an-apple-m1-a-one-year-review\u002F",[101],"Java Development on an Apple M1 – A One Year Review",[1274,28398,28399,28404],{},[23,28400,28403],{"href":28401,"rel":28402},"https:\u002F\u002Fleaddev.com\u002Fteam\u002Fthree-things-leaders-owe-their-teams",[101],"The 3 things leaders owe their teams",[1271,28405,28406],{},[1274,28407,28408],{},[23,28409,28412],{"href":28410,"rel":28411},"https:\u002F\u002Fhacks.mozilla.org\u002F2022\u002F03\u002Fa-new-year-a-new-mdn\u002F",[101],"A new year, a new MDN",[33,28414,11465],{"id":30},[1271,28416,28417,28424,28431],{},[1274,28418,28419],{},[23,28420,28423],{"href":28421,"rel":28422},"https:\u002F\u002Fdeveloper.oracle.com\u002Fdeveloper-live\u002Fjava-innovations-mar-2022\u002F",[101],"Oracle Developer Live",[1274,28425,28426],{},[23,28427,28430],{"href":28428,"rel":28429},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ThBw3WBTw9Q",[101],"Tomcat in IntelliJ IDEA",[1274,28432,28433],{},[23,28434,28437],{"href":28435,"rel":28436},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=kfLgJ61qg6Y",[101],"Getting started with Java Project Management for Visual Studio Code",[33,28439,13650],{"id":973},[1271,28441,28442,28449],{},[1274,28443,28444],{},[23,28445,28448],{"href":28446,"rel":28447},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=SFcAdJNGDOw",[101],"How Spring Changed Java Application Development | Josh Long",[1274,28450,28451],{},[23,28452,28455],{"href":28453,"rel":28454},"https:\u002F\u002Finside.java\u002F2022\u002F03\u002F22\u002Fpodcast-023\u002F",[101],"Inside Java: Episode 23 “Java 18 is Here!”",[33,28457,22284],{"id":16575},[1271,28459,28460],{},[1274,28461,28462],{},[23,28463,28466],{"href":28464,"rel":28465},"https:\u002F\u002Fjdk.java.net\u002F18\u002F",[101],"OpenJDK JDK 18 General-Availability Release",[33,28468,13857],{"id":13856},[1271,28470,28471],{},[1274,28472,28473],{},[23,28474,28477],{"href":28475,"rel":28476},"https:\u002F\u002Fwww.oracle.com\u002Fcloudworld\u002Fjavaone\u002F",[101],"JavaOne is back",[33,28479,21608],{"id":384},[16,28481,28482],{},[23,28483,28484],{"href":28484,"rel":28485},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1507397722361536516",[101],[28,28487,172],{"id":171},[16,28489,25399,28490,11333],{},[23,28491,11332],{"href":11330,"rel":28492},[101],[16,28494,9630,28495,191,28497,28499,28501,28503],{},[189,28496],{},[189,28498],{},[23,28500,11491],{"href":11490},[189,28502],{},[23,28504,198],{"href":196,"rel":28505},[101],{"title":200,"searchDepth":201,"depth":201,"links":28507},[28508,28509,28510,28511,28512,28520],{"id":28329,"depth":201,"text":28330},{"id":28345,"depth":201,"text":28346},{"id":28355,"depth":201,"text":28356},{"id":25700,"depth":201,"text":28365},{"id":10953,"depth":201,"text":21516,"children":28513},[28514,28515,28516,28517,28518,28519],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":13856,"depth":206,"text":13857},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":28522,"path":28523,"title":28524,"description":28525,"meta":28526,"body":28529},"newsletter\u002Fnewsletter\u002F2022\u002F03\u002F21\u002Fspring-one-tour-is-back.md","\u002Fnewsletter\u002F2022\u002F03\u002F21\u002Fspring-one-tour-is-back","Spring Boot Secrets, @JsonTest & SpringOne Tour is back!","Happy Monday friends! In last week's newsletter, I told you how excited I was to “Spring Forward” and move our clocks 1 hr ahead. It’s getting warmer here in Ohio and staying light out longer which I absolutely love. I was excited to read last week that the US Senate approved a bill that would make daylight savings permanent. It is now headed to the desk of the President where It should be signed and we can all be done with this nonsense.",{"slug":28527,"date":28528},"spring-one-tour-is-back","2022-03-21T07:45:00.000Z",{"type":13,"value":28530,"toc":28697},[28531,28540,28543,28547,28550,28553,28556,28560,28563,28566,28569,28572,28579,28587,28593,28595,28597,28620,28622,28638,28640,28656,28658,28667,28669,28677,28679,28684],[16,28532,28533,28534,28539],{},"Happy Monday friends! In last week's newsletter, I told you how excited I was to “Spring Forward” and move our clocks 1 hr ahead. It’s getting warmer here in Ohio and staying light out longer which I absolutely love. I was excited to read last week that the ",[23,28535,28538],{"href":28536,"rel":28537},"https:\u002F\u002Fwww.reuters.com\u002Fworld\u002Fus\u002Fus-senate-approves-bill-that-would-make-daylight-savings-time-permanent-2023-2022-03-15\u002F",[101],"US Senate approved a bill"," that would make daylight savings permanent. It is now headed to the desk of the President where It should be signed and we can all be done with this nonsense.",[16,28541,28542],{},"In today’s edition of the newsletter, I want to tell you about 2 YouTube videos I released last week and the upcoming SpringOne Tour.",[28,28544,28546],{"id":28545},"spring-boot-secret-properties","Spring Boot Secret Properties",[16,28548,28549],{},"In this tutorial, you will learn how to use Spring Boot secret properties in your next application. When you define your own configuration properties you need to find a way to set secret properties. You can do this through command-line arguments or environment variables, but I often forget that they are there.",[16,28551,28552],{},"Spring Boot 2.4 gave us the ability to import additional configuration files. In this demo, you will set the secret values in a file called secret.properties and ignore it from Git, so it doesn't get checked in. To wrap this up I will show you how to deploy this project to Heroku and override those secret properties using config vars.",[47,28554],{"id":28555},"PmGLn3ua_lU",[28,28557,28559],{"id":28558},"spring-boot-jsontest-annotation","Spring Boot @JsonTest Annotation",[16,28561,28562],{},"I think if we are being honest most of us don’t write enough tests. We can all agree that they are useful but can’t seem to find the time for them. In Spring we have slice tests which speed up our tests by only loading a “slice” of the application context.",[16,28564,28565],{},"In this video, you will learn all about the Spring Boot @JsonTest Annotation. This annotation allows you to write a slice test for testing your object's serialization and deserialization. In the past, I might have just tested this through the web layer manually but this gives you a test that can be verified through CI\u002FCD that everything is working as expected.",[47,28567],{"id":28568},"AiiprfLqriY",[28,28570,26474],{"id":28571},"springone-tour",[16,28573,28574,28575,28578],{},"We are so happy to announce that the ",[23,28576,26474],{"href":27081,"rel":28577},[101]," is back, in person, and coming to a city near you. Our first stop of the tour will happen on April 26-27 in Chicago. I just finished booking my first trip through VMware and I couldn’t be more excited to connect with the Java & Spring community.",[16,28580,28581,28582,28586],{},"I am presenting on Getting Started with ",[23,28583,17545],{"href":28584,"rel":28585},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-graphql",[101],". If you want to learn the basics of GraphQL and how (and more importantly when) to use it in your next Spring application you should check out my session.",[16,28588,28589],{},[74,28590],{"alt":28591,"src":28592},"spring-one-tour.png","\u002Fimages\u002Fnewsletter\u002F2022\u002F03\u002F21\u002Fspring-one-tour.png",[28,28594,21516],{"id":10953},[33,28596,11453],{"id":11452},[1271,28598,28599,28606,28613],{},[1274,28600,28601],{},[23,28602,28605],{"href":28603,"rel":28604},"https:\u002F\u002Fblogs.oracle.com\u002Fdevelopers\u002Fpost\u002Fbrain-to-the-cloud-part-i-project-intro-and-architectural-overview",[101],"Brain to the Cloud - Part I - Project Intro and Architectural Overview",[1274,28607,28608],{},[23,28609,28612],{"href":28610,"rel":28611},"https:\u002F\u002Fblogs.oracle.com\u002Fdevelopers\u002Fpost\u002Fbrain-to-the-cloud-part-ii-how-i-uploaded-my-brain-to-the-cloud",[101],"Brain to the Cloud - Part II - How I Uploaded My Brain to the Cloud",[1274,28614,28615],{},[23,28616,28619],{"href":28617,"rel":28618},"https:\u002F\u002Fblogs.oracle.com\u002Fdevelopers\u002Fpost\u002Fbrain-to-the-cloud-part-iii-examining-the-relationship-between-brain-activity-and-video-game-performance",[101],"Brain to the Cloud - Part III - Examining the Relationship Between Brain Activity and Video Game Performance",[33,28621,11465],{"id":30},[1271,28623,28624,28631],{},[1274,28625,28626],{},[23,28627,28630],{"href":28628,"rel":28629},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mukr2Q_zBm4",[101],"Migrating from javax to Jakarta namespace",[1274,28632,28633],{},[23,28634,28637],{"href":28635,"rel":28636},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=q9pYsss8huk",[101],"ϟ Enlightning: How Do You Add Persistent Storage to Your Kubernetes Application?",[33,28639,13650],{"id":973},[1271,28641,28642,28649],{},[1274,28643,28644],{},[23,28645,28648],{"href":28646,"rel":28647},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F515b6730-e7b2-42aa-a569-45d1b4cf2cb7",[101],"Microsoft Azure Developer Advocate Mark Heckler",[1274,28650,28651],{},[23,28652,28655],{"href":28653,"rel":28654},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F3d24a6ae-2971-45e5-acd7-cbcc789e3587",[101],"Elastic's Felix Barnsteiner on APM for Spring Developers",[33,28657,22284],{"id":16575},[1271,28659,28660],{},[1274,28661,28662],{},[23,28663,28666],{"href":28664,"rel":28665},"https:\u002F\u002Fgo.dev\u002Fdoc\u002Fgo1.18",[101],"Go 1.18 Release Notes",[33,28668,13857],{"id":13856},[1271,28670,28671],{},[1274,28672,28673],{},[23,28674,28423],{"href":28675,"rel":28676},"https:\u002F\u002Fdeveloper.oracle.com\u002Fdeveloper-live\u002Fjava-innovations-mar-2022",[101],[28,28678,172],{"id":171},[16,28680,25399,28681,11333],{},[23,28682,11332],{"href":11330,"rel":28683},[101],[16,28685,9630,28686,191,28688,28690,28692,28694],{},[189,28687],{},[189,28689],{},[23,28691,11491],{"href":11490},[189,28693],{},[23,28695,198],{"href":196,"rel":28696},[101],{"title":200,"searchDepth":201,"depth":201,"links":28698},[28699,28700,28701,28702,28709],{"id":28545,"depth":201,"text":28546},{"id":28558,"depth":201,"text":28559},{"id":28571,"depth":201,"text":26474},{"id":10953,"depth":201,"text":21516,"children":28703},[28704,28705,28706,28707,28708],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":13856,"depth":206,"text":13857},{"id":171,"depth":201,"text":172},{"_id":28711,"path":28712,"title":28713,"description":28714,"meta":28715,"body":28718},"newsletter\u002Fnewsletter\u002F2022\u002F03\u002F14\u002Fspring-forward.md","\u002Fnewsletter\u002F2022\u002F03\u002F14\u002Fspring-forward","Spring Forward, What's new in Spring Boot 2.6 & Office Hours","Happy Spring Forward! Yesterday those of us who have to live under daylight savings moved our clocks forward 1 hour. I look forward to this day as soon as it starts getting cold outside. This day signals to me that winter is almost over and days get longer with the sun setting later.",{"slug":28716,"date":28717},"spring-forward","2022-03-14T09:45:00.000Z",{"type":13,"value":28719,"toc":28801},[28720,28722,28725,28729,28732,28735,28738,28741,28744,28747,28749,28752,28755,28766,28781,28783,28788],[16,28721,28714],{},[16,28723,28724],{},"This is going to be a short newsletter because last week was busy for me personally. My wife was on vacation so I was on solo dad duty Thursday morning to Sunday night. I survived but I will say I don’t know how you single parents do it, especially those with younger kids. You deserve an award on a weekly basis.",[28,28726,28728],{"id":28727},"whats-new-in-spring-boot-26","What’s new in Spring Boot 2.6",[16,28730,28731],{},"I put together my first video for the Spring Developer YouTube channel last week. This was exciting for me because it was the first video I created for something outside of my personal channel. Not to mention, the Spring Developer channel had 168k subscribers at the time I posted the video.",[16,28733,28734],{},"In this tutorial, you will learn about what has changed and what’s new in Spring Boot 2.6. With each release, we publish a set of release notes. You could spend the time to go through these but I often find it easier to absorb when the features are associated with a demo and that’s exactly what I did with this video.",[16,28736,28737],{},"I wasn’t able to go through every single feature because there were so many so I picked out what I thought were the major or interesting changes. The video ended up being a little over an hour but don’t let that scare you as I have included timestamps so you can jump to a particular feature.",[47,28739],{"id":28740},"4L4LEnawcO8",[16,28742,28743],{},"I really hope you enjoy this video and if a particular feature I didn’t go through and you want to see a demo on it please reach out. I learned that keeping up with each of the major releases and really understanding what changed and why and what is new is a great way to stay up to date with Spring Boot.",[16,28745,28746],{},"I also want to thank everyone who watched this video and helped me spread the word on social media. This video ended up with 9,000 views in 1 day and 20,000 views in a 3-day span. Easily my most popular video ever out of the gate. This just gives me more of a desire to grow my own YouTube channel so that I can help more people out.",[28,28748,25224],{"id":25223},[16,28750,28751],{},"Last week my coworker DaShaun and I ran the first episode of what we are calling Office Hours. We both noticed a need for developers in the Spring Community to have a place where they could ask questions and learn something new.",[16,28753,28754],{},"We are still working on the cadence and what the format of the show looks like but for now, we will cover:",[3943,28756,28757,28760,28763],{},[1274,28758,28759],{},"Announcements",[1274,28761,28762],{},"Demos",[1274,28764,28765],{},"Questions",[16,28767,28768,28769,28774,28775,28780],{},"If you want you can check out the ",[23,28770,28773],{"href":28771,"rel":28772},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F1418342200",[101],"recording of episode #1",". If you want to catch our next episode that will happen Tuesday, March 15 at 10:30 AM EDT on ",[23,28776,28779],{"href":28777,"rel":28778},"https:\u002F\u002Fwww.twitch.tv\u002Fdanvega",[101],"Twitch",". We are both really excited about this and we would love your feedback on it.",[28,28782,172],{"id":171},[16,28784,25399,28785,11333],{},[23,28786,11332],{"href":11330,"rel":28787},[101],[16,28789,9630,28790,191,28792,28794,28796,28798],{},[189,28791],{},[189,28793],{},[23,28795,11491],{"href":11490},[189,28797],{},[23,28799,198],{"href":196,"rel":28800},[101],{"title":200,"searchDepth":201,"depth":201,"links":28802},[28803,28804,28805],{"id":28727,"depth":201,"text":28728},{"id":25223,"depth":201,"text":25224},{"id":171,"depth":201,"text":172},{"_id":28807,"path":28808,"title":28809,"description":28810,"meta":28811,"body":28814},"newsletter\u002Fnewsletter\u002F2022\u002F03\u002F07\u002Fyoutube-tips.md","\u002Fnewsletter\u002F2022\u002F03\u002F07\u002Fyoutube-tips","My YouTube tips and I’m reviewing a book!","I hope you had an amazing weekend and you’re ready to take on a new week. In today’s edition of the newsletter, I want to talk about YouTube and being asked to review a book.",{"slug":28812,"date":28813},"youtube-tips","2022-03-07T08:00:00.000Z",{"type":13,"value":28815,"toc":29080},[28816,28818,28821,28824,28827,28829,28832,28835,28838,28841,28844,28847,28851,28854,28857,28860,28864,28867,28870,28874,28877,28881,28884,28887,28889,28892,28908,28912,28915,28918,28921,28925,28928,28931,28935,28938,28943,28946,28951,28956,28961,28966,28971,28975,28978,28981,28983,28985,28994,28996,29005,29007,29030,29032,29041,29043,29052,29054,29060,29062,29067],[16,28817,28810],{},[16,28819,28820],{},"Before we jump in I want to make sure everyone is prepared for one of my favorite days of the year. If you have to suffer at the hands (on the clock) of daylight savings, I’m sorry. If you vote for me for President my first task will be to abolish this ridiculous tradition.",[16,28822,28823],{},"Until it goes away I need to remind you that on Sunday, March 13, 2022, we spring our clocks forward. I mark this day on my calendar every single year because it means that the worst of winter is behind us and Spring is near.",[16,28825,28826],{},"It’s now staying light out longer and the sun is rising earlier. If you’re in San Diego or Miami where it’s probably 75 and sunny all year long you probably don’t feel my pain but I can assure you it's real. It certainly does give me a bigger appreciation for the seasons. I am excited about being to run outside, take my girls to the playground and baseball. That is if they actually play baseball this year 🤦‍♂️",[28,28828,3363],{"id":4557},[16,28830,28831],{},"I had a conversation with someone last week about YouTube and I want to share some of that with you because it might help someone out who is in the same situation. She wants to start creating YouTube videos and wanted to get some advice from me on the subject.",[16,28833,28834],{},"I usually start this conversation with “What is your why”. What is your motivation behind the desire to create videos for YouTube? She responded with exactly what I thought she would and that was to bring her unique perspective and help people.",[16,28836,28837],{},"I usually ask this question because if your only motiving factor is money, it’s not going to work out. Can you make money on YouTube, absolutely? Can it be a motiving factor, for sure but don’t let it be the primary reason for getting into it.",[16,28839,28840],{},"There are a lot of people who have left their 9-5 because of their YouTube success but this doesn’t happen over night. YouTube is a long game and if you’re in it for the money you aren’t going to get that instant gratification you’re looking for.",[16,28842,28843],{},"The next set of questions usually revolves around hardware and how to set up an office for content creation. This was something we didn’t really need to go into, she live streams a lot and has this down. If this is something you have questions about please feel free to reach out to me.",[16,28845,28846],{},"With the rest of our conversation, I thought I would just share some tips that I have learned from others or through personal experience. Here are a few of the highlights:",[33,28848,28850],{"id":28849},"just-upload","Just upload",[16,28852,28853],{},"When you’re starting something new you want to do it right. This is great but too much thinking about making that first video can lead to paralysis by analysis. I’m going to tell you something that you don’t want to hear but it’s the harsh truth. Your first video and maybe even up to 100 after that aren’t going to be very good. Sure there are exceptions to the rule but the majority of YouTubers go through this phase.",[16,28855,28856],{},"Now that we got that out of the way I want to let you know that it’s ok. Your mission is to learn about YouTube and find out of creating videos on the platform is something you enjoy doing. It’s about the process of sharing your passion with the world and you need to remember this in the beginning.",[16,28858,28859],{},"Your job is to figure out what you want to make a video on and just make it. As you begin to make more videos if you can find 1 small thing to improve on in each video you will be on your way to achieving your goals.",[33,28861,28863],{"id":28862},"deliver-on-your-promise","Deliver on your promise",[16,28865,28866],{},"Don’t use clickbait. It doesn’t help you, your channel, or the viewer. Instead, make sure that your title and description inform the viewer of what they can expect from your video. When there is a clear outcome defined everyone wins.",[16,28868,28869],{},"You can reiterate the purpose and the outcome of this video in your outcome as long as you keep it short. As a viewer, I don’t want a 10-minute intro after clicking on your video. Explain the purpose and get right into the meat of the video if possible.",[33,28871,28873],{"id":28872},"follow-your-passion","Follow your passion",[16,28875,28876],{},"This might seem like common sense to most people but let me explain. Remember when I said that YouTube was a long game? If you’re going to be in this for the long haul you need to be making videos on topics you’re passionate about. If you’re simply making videos because you think they are going to make the most money it is not going to last.",[33,28878,28880],{"id":28879},"consistency-is-key","Consistency is key",[16,28882,28883],{},"Again this might seem like common sense but it’s not. It’s easy to get caught up in all the vanity metrics like subscribers and number of views, especially on the road to making the YouTube partner program but they shouldn’t be your initial goal.",[16,28885,28886],{},"If you can set a goal of producing a video on a consistent schedule great things will happen. This doesn’t need to be a goal of 5 videos a week or anything crazy like that. This needs to be a schedule that you can consistently stick to without burning out. You might be able to create 4 videos one week but if you go another 4 weeks without making one it isn’t going to help. If you think you can deliver 1 video per month and stick to that schedule, do that.",[33,28888,22754],{"id":14121},[16,28890,28891],{},"I have a ton of resources on YouTube and people you should follow but to keep this short and sweet I will leave you with 2 books that I absolutely love.",[1271,28893,28894,28901],{},[1274,28895,28896],{},[23,28897,28900],{"href":28898,"rel":28899},"https:\u002F\u002Famzn.to\u002F3sMhqEX",[101],"The YouTube Formula - Derral Eves",[1274,28902,28903],{},[23,28904,28907],{"href":28905,"rel":28906},"https:\u002F\u002Famzn.to\u002F3vLcSkg",[101],"YouTube Secrets - Sean Cannell & Benji Travis",[28,28909,28911],{"id":28910},"java-records-in-spring-boot","Java Records in Spring Boot",[16,28913,28914],{},"We have all heard the complaints that \"java is too verbose\". Some of the worst offenders of this are classes that are nothing more than data classes. To write a data class properly, you have to write a lot of low-value, repetitive, error-prone code: constructors, accessors, equals(), hashCode(), toString(), etc. IDEs will help with a lot of this but it doesn't correct the problem of readability or verbosity in these classes.",[16,28916,28917],{},"Record classes were finalized and released in Java 16. In today's tutorial, you will learn how to use record classes in your next Spring Boot project.",[47,28919],{"id":28920},"3NshiQIy7p4",[28,28922,28924],{"id":28923},"spring-constructor-injection","Spring Constructor Injection",[16,28926,28927],{},"I had a lot of fun putting this video together. In this tutorial, we try and answer the question that I hear a lot from Spring developers and that is “Why is constructor injection the recommended approach to dependency injection. I took a look at how we declare and manage dependencies outside of spring and then how we can tell Spring to manage our objects for us.",[47,28929],{"id":28930},"aX-bgylmprA",[33,28932,28934],{"id":28933},"youtube-reviews","YouTube Reviews",[16,28936,28937],{},"In just a few days I have had a lot of feedback on this video and it’s been humbling. One person in particular who I look up to and is on the Spring Team had this to say:",[2238,28939,28940],{},[16,28941,28942],{},"Hey, Dan. I just wanted to let you know that I absolutely love your videos on YouTube. I really mean it. Those 15 to 20-minute bites on particular topics have really ramped up our game on this. So well thought out and produced. Keep `em coming!",[16,28944,28945],{},"This comment really made my day. It’s really easy to reach out to someone and say something nice and I really appreciate this person for doing so. Comments like this keep me pushing forward!",[16,28947,28948],{},[161,28949,28950],{},"YouTube comments",[2238,28952,28953],{},[16,28954,28955],{},"Finally a high-quality Spring tutorial!\ncan't wait to see more 🔥 this was so clear glad I found you",[2238,28957,28958],{},[16,28959,28960],{},"Really good content! i always made constructor injection cause my lead told me to, but i never knew why. Thank you!",[2238,28962,28963],{},[16,28964,28965],{},"Hi Dan, this is a great video, I have been a Spring dev for years, but this is such a nice clear explanation. Really enjoy these videos that take small aspects of spring and are explained so well. Thank you",[2238,28967,28968],{},[16,28969,28970],{},"Great content, as always, so clear and well structured, Dan is the best instructor ever! Deep dive please 😊",[28,28972,28974],{"id":28973},"book-review","Book Review",[16,28976,28977],{},"I was asked by a friend to review a technical book. I was honored and I’m really looking forward to going through this process. It should give me some perspective for when I write my first book 🤩 This is the first time I will be a reviewer for a book but please don’t tell him that or the publisher for that matter. Actually, I know for a fact he reads this so hopefully, he took the week off.",[16,28979,28980],{},"If you have any suggestions or tips for me I’m never above listening to those who have walked the path before me. When it’s all said and done I hope to share some more details with you. What I can tell you is that the author is amazing and I am sure the book will be too, even without having read a single word!",[28,28982,21516],{"id":10953},[33,28984,11453],{"id":11452},[1271,28986,28987],{},[1274,28988,28989],{},[23,28990,28993],{"href":28991,"rel":28992},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F02\u002F22\u002Fannouncing-listcrudrepository-friends-for-spring-data-3-0",[101],"Announcing ListCrudRepository & Friends for Spring Data 3.0",[33,28995,11465],{"id":30},[1271,28997,28998],{},[1274,28999,29000],{},[23,29001,29004],{"href":29002,"rel":29003},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bbcm9OLTnsE&t=977s",[101],"Notion - Block by Block 2022: Keynote",[33,29006,13650],{"id":973},[1271,29008,29009,29016,29023],{},[1274,29010,29011],{},[23,29012,29015],{"href":29013,"rel":29014},"https:\u002F\u002Finside.java\u002F2022\u002F03\u002F04\u002Fpodcast-022\u002F",[101],"Inside Java - Episode 22 “JEP 408 - Simple Web Server”",[1274,29017,29018],{},[23,29019,29022],{"href":29020,"rel":29021},"https:\u002F\u002Fyoutu.be\u002FIrb01MOBoYo",[101],"The Artifact.io - Episode 2: Learning Cloud Technologies with Ranga Karanam",[1274,29024,29025],{},[23,29026,29029],{"href":29027,"rel":29028},"https:\u002F\u002Fyoutu.be\u002FLPv1IETzOyI",[101],"The Artifact.io - Episode 3: Multicloud vs polycloud, Jakarta EE, and other news",[33,29031,14122],{"id":14121},[1271,29033,29034],{},[1274,29035,29036],{},[23,29037,29040],{"href":29038,"rel":29039},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Fdevops-tools-for\u002F9781492084013\u002F",[101],"DevOps Tools for Java Developers",[33,29042,18092],{"id":18091},[1271,29044,29045],{},[1274,29046,29047],{},[23,29048,29051],{"href":29049,"rel":29050},"https:\u002F\u002Fspring.io\u002Fblog\u002F2022\u002F02\u002F22\u002Fthis-week-in-spring-22-2-22",[101],"This Week in Spring - 22\u002F2\u002F22",[33,29053,21608],{"id":384},[16,29055,29056],{},[23,29057,29058],{"href":29058,"rel":29059},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1499861007568625669",[101],[28,29061,172],{"id":171},[16,29063,25399,29064,11333],{},[23,29065,11332],{"href":11330,"rel":29066},[101],[16,29068,9630,29069,191,29071,29073,29075,29077],{},[189,29070],{},[189,29072],{},[23,29074,11491],{"href":11490},[189,29076],{},[23,29078,198],{"href":196,"rel":29079},[101],{"title":200,"searchDepth":201,"depth":201,"links":29081},[29082,29089,29090,29093,29094,29102],{"id":4557,"depth":201,"text":3363,"children":29083},[29084,29085,29086,29087,29088],{"id":28849,"depth":206,"text":28850},{"id":28862,"depth":206,"text":28863},{"id":28872,"depth":206,"text":28873},{"id":28879,"depth":206,"text":28880},{"id":14121,"depth":206,"text":22754},{"id":28910,"depth":201,"text":28911},{"id":28923,"depth":201,"text":28924,"children":29091},[29092],{"id":28933,"depth":206,"text":28934},{"id":28973,"depth":201,"text":28974},{"id":10953,"depth":201,"text":21516,"children":29095},[29096,29097,29098,29099,29100,29101],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":18091,"depth":206,"text":18092},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":29104,"path":29105,"title":29106,"description":29107,"meta":29108,"body":29111},"newsletter\u002Fnewsletter\u002F2022\u002F02\u002F28\u002Fspring-developers-twitter-community.md.md","\u002Fnewsletter\u002F2022\u002F02\u002F28\u002Fspring-developers-twitter-community.md","🇺🇦 Thinking of Ukraine, Two Presentations and Spring Developers Twitter Community","With everything going on in the world it’s hard to sit here and act like everything is normal. My heart is broken on what the people of Ukraine are going through. Please keep them in your prayers and thoughts and if you can do anything to support them please do.",{"slug":29109,"date":29110},"spring-developers-twitter-community","2022-02-28T08:00:00.000Z",{"type":13,"value":29112,"toc":29413},[29113,29115,29118,29121,29125,29128,29136,29159,29166,29172,29174,29182,29191,29194,29199,29222,29227,29255,29261,29264,29266,29273,29276,29284,29290,29292,29300,29306,29308,29310,29339,29341,29350,29352,29374,29376,29385,29387,29393,29395,29400],[16,29114,29107],{},[16,29116,29117],{},"After missing last week I’m back with another edition of the newsletter and I have a lot to talk about. Last week marked 1 month at VMware for me and It still doesn’t feel real to me. I get to wake up every single day and do what I love.",[16,29119,29120],{},"In the past 2 weeks, I gave 2 presentations and I will tell you all about those in case you missed them. I also want to talk about the Twitter Community I started and a major milestone that I crossed on YouTube.",[28,29122,29124],{"id":29123},"building-rest-apis-in-spring-boot","Building REST APIs in Spring Boot",[16,29126,29127],{},"I was honored to be asked to speak on the IntelliJ IDEA YouTube live stream with Mala Gupta. In this presentation, you will learn how to build a CRUD REST API using Spring Boot. I spent most of this presentation live coding and teaching the mechanics of building a REST API without going to much into REST principles.",[16,29129,29130,29131,29135],{},"I was asked a lot of questions about which plugins I use for IntelliJ. A lot of people were amazed at some of the things ",[23,29132,26850],{"href":29133,"rel":29134},"https:\u002F\u002Fyoutu.be\u002F97C3fQqzj-I",[101]," can do and I would have to agree with them. I am using 2021.3 Ultimate Edition at the time of this recording. The plugins I was asked about the most are:",[1271,29137,29138,29145,29152],{},[1274,29139,29140,29141],{},"Live Templates: ",[23,29142,29143],{"href":29143,"rel":29144},"https:\u002F\u002Fwww.jetbrains.com\u002Fhelp\u002Fidea\u002Fusing-live-templates.html",[101],[1274,29146,29147,29148],{},"HTTP Client: ",[23,29149,29150],{"href":29150,"rel":29151},"https:\u002F\u002Fwww.jetbrains.com\u002Fhelp\u002Fidea\u002Fhttp-client-in-product-code-editor.html",[101],[1274,29153,29154,29155],{},"Github Copilot: ",[23,29156,29157],{"href":29157,"rel":29158},"https:\u002F\u002Fcopilot.github.com\u002F",[101],[16,29160,29161,29162,184],{},"If you want to watch the recording of this presentation you can check it out below. The source code and slides can be found ",[23,29163,742],{"href":29164,"rel":29165},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fbuilding-rest-apis-spring-boot",[101],[16,29167,29168],{},[23,29169,29170],{"href":29170,"rel":29171},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=q_RLfOB7axQ&t=2320s",[101],[28,29173,28728],{"id":28727},[16,29175,29176,29177,29181],{},"I was asked to speak at the San Francisco Java User Group and jumped on the opportunity. In this presentation, I gave an overview of what’s new in Spring Boot 2.6. I spent a lot of time going through the ",[23,29178,7253],{"href":29179,"rel":29180},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-2.6-Release-Notes",[101]," for Spring Boot 2.6.",[16,29183,29184,29185,29190],{},"In the past, I have gone through the release notes but it was more of a let me scan through here and see if anything is interesting to me. There were times I didn’t understand some of the updates until I saw one of those great ",[23,29186,29189],{"href":29187,"rel":29188},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lgyO9C9zdrg",[101],"overview videos"," from Phil Webb. That’s why I was really excited to put this presentation together and show some code examples of what was new in Spring Boot 2.6.",[16,29192,29193],{},"The release notes for each major upgrade are broken down into 2 sections, Upgrading from the previous version and New & Noteworthy. I was prepared to talk about the following and we ended up getting to most of them:",[16,29195,29196],{},[161,29197,29198],{},"Upgrading from Spring Boot 2.5",[1271,29200,29201,29204,29207,29210,29213,29216,29219],{},[1274,29202,29203],{},"Release Versioning",[1274,29205,29206],{},"Deprecations",[1274,29208,29209],{},"Circular References",[1274,29211,29212],{},"Path Matching Strategy",[1274,29214,29215],{},"Actuator Env",[1274,29217,29218],{},"Application Startup (2.4)",[1274,29220,29221],{},"Records & Configuration Properties",[16,29223,29224],{},[161,29225,29226],{},"New & Noteworthy",[1271,29228,29229,29231,29234,29237,29240,29243,29246,29249,29252],{},[1274,29230,19042],{},[1274,29232,29233],{},"Reactive Server Session Properties",[1274,29235,29236],{},"Build Info Property Exclusion",[1274,29238,29239],{},"SameSite Cookie Attribute",[1274,29241,29242],{},"Pluggable Sanitization Rules",[1274,29244,29245],{},"Java Runtime Information",[1274,29247,29248],{},"WebTestClient for Spring MVC",[1274,29250,29251],{},"Metrics Support",[1274,29253,29254],{},"Docker Image Building Support",[16,29256,29257],{},[23,29258,29259],{"href":29259,"rel":29260},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=oNs8sLbbAT4",[101],[16,29262,29263],{},"I’m going to come back and create videos for specific items on this list for YouTube. If you would like a detailed dive into anything new in Spring Boot 2.6 please reach out and let me know.",[28,29265,26546],{"id":29109},[16,29267,29268,29269,184],{},"I was finally able to get access to create a new Community on Twitter. You can think of Twitter Communities as a combination of Facebook Groups and Reddit. I created a community for Spring Developers to connect, share what they are working on, and ask questions. In just a few days we climbed up to 800+ members. I’m excited to see where this goes so if you’re not a member please ",[23,29270,29272],{"href":26544,"rel":29271},[101],"join us",[28,29274,23779],{"id":29275},"awesome-spring",[16,29277,29278,29279,29283],{},"A huge shoutout to Thomas Vitale for adding me to his ",[23,29280,29282],{"href":23777,"rel":29281},[101],"Awesome Spring Resource",". This is a really good collection of resources from the Spring Community. What I love about this is that it is a carefully hand-crafted list and not just a huge dump of resources. Thomas is big in the Spring community and this is a great resource if you enjoy please show your support by giving it a star.",[16,29285,29286],{},[23,29287,29288],{"href":29288,"rel":29289},"https:\u002F\u002Ftwitter.com\u002Fvitalethomas\u002Fstatus\u002F1495883469498507267",[101],[28,29291,3363],{"id":4557},[16,29293,29294,29295,29299],{},"I recently passed 100,000 hours of watch time on YouTube. To date I have only uploaded 232 videos most of which I would say aren’t great so to hit this milestone is pretty amazing. I want to thank all of you who support the channel and if ",[23,29296,29298],{"href":27929,"rel":29297},[101],"you’re not subscribed yet",", what are you waiting for? I have a bunch of content in the backlog for the next month so stay tuned!",[16,29301,29302],{},[74,29303],{"alt":29304,"src":29305},"YouTube 100k","\u002Fimages\u002Fnewsletter\u002F2022\u002F02\u002F28\u002Fyoutube_100k.png",[28,29307,21516],{"id":10953},[33,29309,11453],{"id":11452},[1271,29311,29312,29319,29326,29332],{},[1274,29313,29314],{},[23,29315,29318],{"href":29316,"rel":29317},"https:\u002F\u002Fmashable.com\u002Farticle\u002Ftumblr-girl-learn-code",[101],"From Tumblr girl to engineer",[1274,29320,29321],{},[23,29322,29325],{"href":29323,"rel":29324},"https:\u002F\u002Fwww.netlify.com\u002Fblog\u002Fannouncing-netlify-graph-a-faster-way-for-teams-to-develop-web-apps-with-apis",[101],"Announcing Netlify Graph: A faster way for teams to develop web apps with APIs",[1274,29327,29328],{},[23,29329,29331],{"href":25204,"rel":29330},[101],"Spring Security without the WebSecurityConfigurerAdapter",[1274,29333,29334],{},[23,29335,29338],{"href":29336,"rel":29337},"https:\u002F\u002Fblog.trifork.com\u002F2022\u002F02\u002F25\u002Fgetting-out-of-a-codependent-relationship-or-how-i-moved-to-a-healthy-component-based-spring-security-configuration\u002F",[101],"How I moved to a healthy component-based Spring Security configuration",[33,29340,13650],{"id":973},[1271,29342,29343],{},[1274,29344,29345],{},[23,29346,29349],{"href":29347,"rel":29348},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Faf8b106e-273f-4fc9-ad19-97f3da52906f",[101],"A Bootitful Podcast: Java team luminary Sharat Chander",[33,29351,22284],{"id":16575},[1271,29353,29354,29360,29367],{},[1274,29355,29356],{},[23,29357,29359],{"href":28464,"rel":29358},[101],"Java 18",[1274,29361,29362],{},[23,29363,29366],{"href":29364,"rel":29365},"https:\u002F\u002Fhilla.dev\u002F",[101],"Hilla - A modern web framework for Java",[1274,29368,29369],{},[23,29370,29373],{"href":29371,"rel":29372},"https:\u002F\u002F2021.stateofjs.com\u002Fen-US\u002F",[101],"State of JS 2021",[33,29375,14122],{"id":14121},[1271,29377,29378],{},[1274,29379,29380],{},[23,29381,29384],{"href":29382,"rel":29383},"https:\u002F\u002Famzn.to\u002F3KdfsUb",[101],"Head first Git",[33,29386,21608],{"id":384},[16,29388,29389],{},[23,29390,29391],{"href":29391,"rel":29392},"https:\u002F\u002Ftwitter.com\u002Fjetbrains\u002Fstatus\u002F1496786254494670851",[101],[28,29394,172],{"id":171},[16,29396,25399,29397,11333],{},[23,29398,11332],{"href":11330,"rel":29399},[101],[16,29401,9630,29402,191,29404,29406,29408,29410],{},[189,29403],{},[189,29405],{},[23,29407,11491],{"href":11490},[189,29409],{},[23,29411,198],{"href":196,"rel":29412},[101],{"title":200,"searchDepth":201,"depth":201,"links":29414},[29415,29416,29417,29418,29419,29420,29427],{"id":29123,"depth":201,"text":29124},{"id":28727,"depth":201,"text":28728},{"id":29109,"depth":201,"text":26546},{"id":29275,"depth":201,"text":23779},{"id":4557,"depth":201,"text":3363},{"id":10953,"depth":201,"text":21516,"children":29421},[29422,29423,29424,29425,29426],{"id":11452,"depth":206,"text":11453},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":29429,"path":29430,"title":29431,"description":29432,"meta":29433,"body":29435},"newsletter\u002Fnewsletter\u002F2022\u002F02\u002F14\u002Flive-streaming.md","\u002Fnewsletter\u002F2022\u002F02\u002F14\u002Flive-streaming","Live Streaming, Netlify Serverless Functions and Vue 3 Docs","It’s Monday, February 14th and I am once again petitioning for the day after the Super Bowl to be a national holiday. I’m writing this before the game takes place so I don’t know how it ends. I’m just hoping for a good game and a great halftime show. In this week's edition of the newsletter, I want to talk about Live Streaming, Netlify Serverless Functions, Vue 3, and The Dropout.",{"slug":10470,"date":29434},"2022-02-14T08:00:00.000Z",{"type":13,"value":29436,"toc":29608},[29437,29439,29441,29444,29447,29462,29471,29481,29501,29504,29508,29511,29518,29521,29530,29533,29537,29546,29552,29556,29571,29574,29577,29579,29582,29588,29590,29595],[16,29438,29432],{},[28,29440,10471],{"id":10470},[16,29442,29443],{},"In my new role as a Spring Developer Advocate, I am going to be presenting a lot more this year. I already have a bunch of virtual events lined up including one this week. On Wednesday, February 16th I will be speaking with Mala Gupta at JetBrains. In this session, I will be talking about building REST APIs with Spring Boot.",[16,29445,29446],{},"As much experience as I have with creating and editing videos I don’t have a ton of experience live streaming or presenting virtually. With that, I thought I would start practicing last week and I ended up live streaming 3 times which is probably more action than my Twitch channel has ever seen.",[16,29448,29449,29450,29455,29456,29461],{},"My main goal was just to get used to the software and work out any issues. I am a big fan of ",[23,29451,29454],{"href":29452,"rel":29453},"https:\u002F\u002Fwww.ecamm.com\u002F",[101],"Ecamm"," and I want to use the software to stream with but I keep having issues with it. There are times when it works fine and there are other times where the audio gets out of sync and for the life of me I can’t figure it out. This even happens when I use the record-only mode. I thought after getting my ",[23,29457,29460],{"href":29458,"rel":29459},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2021\u002F11\u002F15\u002Fmacbook-pro-m1-max-review\u002F",[101],"brand new MacBook"," that this would go away but unfortunately, it didn’t. If anyone knows what would cause this please let me know.",[16,29463,29464,29465,29470],{},"I also used Streamyard for the first time this week and was happy with it. We have a group account for this at work and I will also be using this on my stream this Wednesday. I wish it was as customizable as Ecamm but on the other hand, I didn’t have any audio issues. I’m still trying to find a good way to play background music on Streamyard. I think I found a solution using ",[23,29466,29469],{"href":29467,"rel":29468},"https:\u002F\u002Frogueamoeba.com\u002Floopback\u002F",[101],"Loopback"," but I am still testing that out.",[16,29472,29473,29474,21997,29477,29480],{},"You can find the 3 live stream recordings below. If you’re not already following me on ",[23,29475,28779],{"href":28777,"rel":29476},[101],[23,29478,3363],{"href":27929,"rel":29479},[101]," please do to be notified when I go live next.",[1271,29482,29483,29489,29495],{},[1274,29484,29485],{},[23,29486,29487],{"href":29487,"rel":29488},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F1291608965",[101],[1274,29490,29491],{},[23,29492,29493],{"href":29493,"rel":29494},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F1292435014",[101],[1274,29496,29497],{},[23,29498,29499],{"href":29499,"rel":29500},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F1293492510",[101],[16,29502,29503],{},"As far as what I did in the live streams, I will cover that in the next section.",[28,29505,29507],{"id":29506},"netlify-serverless-functions","Netlify Serverless Functions",[16,29509,29510],{},"Throughout the live streams I mentioned above I was trying to solve a real problem that I have. With all of these speaking appearances, I have scheduled this year I need a way to display them on my website.",[16,29512,29513,29514,29517],{},"If you follow anything I do you know I am a huge fan of Notion. I keep everything I do in Notion so naturally, I would like to store all of my conferences, user group meetups, and live streams in one place. I started with just a list of upcoming live streams and using the ",[23,29515,18873],{"href":18871,"rel":29516},[101]," I was able to pull all of them into a page on my website.",[16,29519,29520],{},"The next question becomes how do you do that when you’re using a frontend framework like Vue. My website is a static generated website using Gridsome + Vue. You don’t want to make API calls from a frontend because you can expose your authentication \u002F API secrets. I could stand up a backend with something like Node or Java but that seems like a lot for such a simple task. This is a perfect use case for serverless functions.",[16,29522,29523,29524,29529],{},"I was able to do this thanks to ",[23,29525,29528],{"href":29526,"rel":29527},"https:\u002F\u002Fdocs.netlify.com\u002Ffunctions\u002Foverview\u002F",[101],"Netlify Serverless functions",". With Netlify you can create a directory and any file that exports a handler function gets turned into a serverless function and uploaded to AWS Lambda. I decided to take what I learned from the live streams and created a simple tutorial on how I used a Netlify function to connect to the Notion API.",[47,29531],{"id":29532},"A-b1ZdlNbww",[28,29534,29536],{"id":29535},"vue-3-documentation","Vue 3 Documentation",[16,29538,29539,29540,29545],{},"If you haven’t been paying attention the ",[23,29541,29544],{"href":29542,"rel":29543},"https:\u002F\u002Fvuejs.org\u002F",[101],"Vue 3 docs"," have been released. Along with this release Vue 3 has now become the default. If you look in the upper left-hand corner of the documentation you will see an API reference section. This toggle will allow you to switch the docs based on if you’re using the Options or Composition API. I thought that was a really nice touch 🎉",[16,29547,29548],{},[74,29549],{"alt":29550,"src":29551},"Vue 3 Docs","\u002Fimages\u002Fnewsletter\u002F2022\u002F02\u002F14\u002Fvue_3_docs.png",[28,29553,29555],{"id":29554},"the-dropout","The Dropout",[16,29557,29558,29559,29564,29565,29570],{},"I am fascinated by the story of Elizabeth Holmes and Theranos. I read ",[23,29560,29563],{"href":29561,"rel":29562},"https:\u002F\u002Famzn.to\u002F36eN1GJ",[101],"Bad Blood"," by ",[23,29566,29569],{"href":29567,"rel":29568},"https:\u002F\u002Fwww.amazon.com\u002FJohn-Carreyrou\u002Fe\u002FB07CWLT57D\u002Fref=dp_byline_cont_book_1",[101],"John Carreyrou"," a few years back and was totally sucked into everything that went on. There was also a really good documentary on HBO about this that I also enjoyed.",[16,29572,29573],{},"Elizabeth Holmes has been in the news lately as she went to trial and was found guilty of defrauding investors. There is a new show coming to Hulu called the dropout which has an incredible cast.",[47,29575],{"id":29576},"novUDyBszA8",[28,29578,20068],{"id":20067},[16,29580,29581],{},"This was a really great Twitter thread by Sébastien Chopin on where we are with Nuxt 3. I am obviously paying close attention to this because I’m hoping to move my website over to Nuxt 3 this year.",[16,29583,29584],{},[23,29585,29586],{"href":29586,"rel":29587},"https:\u002F\u002Ftwitter.com\u002FAtinux\u002Fstatus\u002F1492134648733913089",[101],[28,29589,172],{"id":171},[16,29591,25399,29592,11333],{},[23,29593,11332],{"href":11330,"rel":29594},[101],[16,29596,9630,29597,191,29599,29601,29603,29605],{},[189,29598],{},[189,29600],{},[23,29602,11491],{"href":11490},[189,29604],{},[23,29606,198],{"href":196,"rel":29607},[101],{"title":200,"searchDepth":201,"depth":201,"links":29609},[29610,29611,29612,29613,29614,29615],{"id":10470,"depth":201,"text":10471},{"id":29506,"depth":201,"text":29507},{"id":29535,"depth":201,"text":29536},{"id":29554,"depth":201,"text":29555},{"id":20067,"depth":201,"text":20068},{"id":171,"depth":201,"text":172},{"_id":29617,"path":29618,"title":29619,"description":29620,"meta":29621,"body":29624},"newsletter\u002Fnewsletter\u002F2022\u002F02\u002F07\u002Ftesting-with-spring.md","\u002Fnewsletter\u002F2022\u002F02\u002F07\u002Ftesting-with-spring","Testing with Spring, Netlify Builds, Groovy 4 and Spring Boot Magic","Good morning, Happy Monday, and welcome to another edition of the newsletter friends. If you’re anywhere near me (Cleveland, OH) I hope you’re staying warm as we experienced quite the snowstorm last week. I’m encouraged that we have crossed over into February and that the worst of winter is almost behind us.",{"slug":29622,"date":29623},"testing-with-spring","2022-02-07T08:00:00.000Z",{"type":13,"value":29625,"toc":30233},[29626,29628,29631,29635,29661,29664,29667,29670,29675,29678,29682,29691,29694,29706,29709,30018,30021,30030,30033,30038,30041,30044,30048,30063,30071,30078,30084,30088,30091,30094,30097,30100,30102,30113,30115,30117,30133,30135,30151,30153,30169,30171,30180,30182,30191,30193,30202,30204,30210,30212,30217,30230],[16,29627,29620],{},[16,29629,29630],{},"The one day I have marked on my calendar every year is the day we move the clocks forward. I’m encouraged that it's staying light out longer but on that glorious day when we move the clocks forward, I know Spring and Summer are right around the corner. If you take part in daylight savings time that day is March 13th this year, so put it on your calendars! With that let’s take a look at what happened last week.",[28,29632,29634],{"id":29633},"testing-with-spring-and-junit-5","Testing with Spring and JUnit 5",[16,29636,29637,29638,29643,29644,29649,29650,529,29655,29660],{},"I had the privilege of co-hosting ",[23,29639,29642],{"href":29640,"rel":29641},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Ftanzu-tuesdays\u002F0083\u002F",[101],"Tanzu Tuesdays"," where our guest was the great ",[23,29645,29648],{"href":29646,"rel":29647},"https:\u002F\u002Ftwitter.com\u002Fsam_brannen",[101],"Sam Brannen",". Sam was kind enough to present to us on Testing with ",[23,29651,29654],{"href":29652,"rel":29653},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot",[101],"Spring",[23,29656,29659],{"href":29657,"rel":29658},"https:\u002F\u002Fjunit.org\u002Fjunit5\u002Fdocs\u002Fcurrent\u002Fuser-guide",[101],"JUnit 5",". It was a great talk and I will leave a link to the talk below.",[47,29662],{"id":29663},"krA-A2HqWFQ",[16,29665,29666],{},"I write tests, probably not enough of them but I do write them. I write tests in Spring and JUnit but what is becoming apparently clear to me is that I am not caught up on all the cool things that JUnit 5 has to offer.",[16,29668,29669],{},"I think one that really stuck with me was the fact that we need to make sure we are testing our Spring Native applications using:",[16,29671,29672],{},[469,29673,29674],{},"mvn -Pnative test",[16,29676,29677],{},"You’re no longer on the JVM so your normal test suite isn’t going to cut it. Most of the time you aren’t going to run into any issues but you want to make sure you’re testing for your target platform. Thanks for the tip, Sam!",[28,29679,29681],{"id":29680},"netlify-gridsome-builds","Netlify & Gridsome Builds",[16,29683,29684,29685,29690],{},"My website is written in a static site generator for Vue in a framework called ",[23,29686,29689],{"href":29687,"rel":29688},"https:\u002F\u002Fgridsome.org\u002F",[101],"Gridsome",". Whenever I write a new blog post or a new newsletter like the one you’re reading now I follow a similar process.",[16,29692,29693],{},"All of my writing starts in Notion because that is the single source of truth for all my content creation.  When I have completed an article or newsletter I will create that content over on my website. This consists of creating a markdown file, adding some front matter (metadata about the article), and exporting the markdown from Notion into my website.",[16,29695,29696,29697,29702,29703,184],{},"Two weeks ago I had the article about me ",[23,29698,29701],{"href":29699,"rel":29700},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F01\u002F24\u002Fim-joining-v-mware\u002F",[101],"joining VMware"," ready to go. I also had a newsletter edition ready to go that pointed to that article. My process for getting these pieces of content live is simple, ",[161,29704,29705],{},"git push",[16,29707,29708],{},"This will trigger a new build on Netlify and after a few minutes my content is live. Well this is usually how it works but when I did this on the first day of my new job I ran into an issue. I started seeing this build process time out and I would see the following in the logs",[3175,29710,29714],{"className":29711,"code":29712,"language":29713,"meta":200,"style":200},"language-bash shiki shiki-themes github-light github-dark github-light","10:51:42 AM: Render HTML (258 files) - 3.72s\n10:51:42 AM: Process files (1 files) - 0.23s\n10:58:05 AM: Processing images (1047 images) -\n0%Processing images (1047 images) -\n2%Processing images (1047 images) -\n5%Processing images (1047 images) -\n7%Processing images (1047 images) -\n10%Processing images (1047 images) -\n12%Processing images (1047 images) -\n14%Processing images (1047 images) -\n17%Processing images (1047 images) -\n19%Processing images (1047 images) -\n21%Processing images (1047 images) -\n24%Processing images (1047 images) -\n26%Processing images (1047 images) -\n29%Processing images (1047 images) -\n31%Processing images (1047 images) -\n...\n(1047 images) - 86%Processing images (1047 images) - 88%Processing images (1047 images) - 90%\n","bash",[469,29715,29716,29740,29760,29782,29795,29809,29823,29837,29851,29865,29879,29893,29907,29921,29935,29949,29963,29977,29983],{"__ignoreMap":200},[1492,29717,29718,29721,29725,29728,29731,29734,29737],{"class":3184,"line":3185},[1492,29719,29720],{"class":3192},"10:51:42",[1492,29722,29724],{"class":29723},"suV6U"," AM:",[1492,29726,29727],{"class":29723}," Render",[1492,29729,29730],{"class":29723}," HTML",[1492,29732,29733],{"class":3188}," (258 ",[1492,29735,29736],{"class":29723},"files",[1492,29738,29739],{"class":3188},") - 3.72s\n",[1492,29741,29742,29744,29746,29749,29752,29755,29757],{"class":3184,"line":201},[1492,29743,29720],{"class":3192},[1492,29745,29724],{"class":29723},[1492,29747,29748],{"class":29723}," Process",[1492,29750,29751],{"class":29723}," files",[1492,29753,29754],{"class":3188}," (1 ",[1492,29756,29736],{"class":29723},[1492,29758,29759],{"class":3188},") - 0.23s\n",[1492,29761,29762,29765,29767,29770,29773,29776,29779],{"class":3184,"line":206},[1492,29763,29764],{"class":3192},"10:58:05",[1492,29766,29724],{"class":29723},[1492,29768,29769],{"class":29723}," Processing",[1492,29771,29772],{"class":29723}," images",[1492,29774,29775],{"class":3188}," (1047 ",[1492,29777,29778],{"class":29723},"images",[1492,29780,29781],{"class":3188},") -\n",[1492,29783,29784,29787,29789,29791,29793],{"class":3184,"line":9269},[1492,29785,29786],{"class":3192},"0%Processing",[1492,29788,29772],{"class":29723},[1492,29790,29775],{"class":3188},[1492,29792,29778],{"class":29723},[1492,29794,29781],{"class":3188},[1492,29796,29798,29801,29803,29805,29807],{"class":3184,"line":29797},5,[1492,29799,29800],{"class":3192},"2%Processing",[1492,29802,29772],{"class":29723},[1492,29804,29775],{"class":3188},[1492,29806,29778],{"class":29723},[1492,29808,29781],{"class":3188},[1492,29810,29812,29815,29817,29819,29821],{"class":3184,"line":29811},6,[1492,29813,29814],{"class":3192},"5%Processing",[1492,29816,29772],{"class":29723},[1492,29818,29775],{"class":3188},[1492,29820,29778],{"class":29723},[1492,29822,29781],{"class":3188},[1492,29824,29826,29829,29831,29833,29835],{"class":3184,"line":29825},7,[1492,29827,29828],{"class":3192},"7%Processing",[1492,29830,29772],{"class":29723},[1492,29832,29775],{"class":3188},[1492,29834,29778],{"class":29723},[1492,29836,29781],{"class":3188},[1492,29838,29840,29843,29845,29847,29849],{"class":3184,"line":29839},8,[1492,29841,29842],{"class":3192},"10%Processing",[1492,29844,29772],{"class":29723},[1492,29846,29775],{"class":3188},[1492,29848,29778],{"class":29723},[1492,29850,29781],{"class":3188},[1492,29852,29854,29857,29859,29861,29863],{"class":3184,"line":29853},9,[1492,29855,29856],{"class":3192},"12%Processing",[1492,29858,29772],{"class":29723},[1492,29860,29775],{"class":3188},[1492,29862,29778],{"class":29723},[1492,29864,29781],{"class":3188},[1492,29866,29868,29871,29873,29875,29877],{"class":3184,"line":29867},10,[1492,29869,29870],{"class":3192},"14%Processing",[1492,29872,29772],{"class":29723},[1492,29874,29775],{"class":3188},[1492,29876,29778],{"class":29723},[1492,29878,29781],{"class":3188},[1492,29880,29882,29885,29887,29889,29891],{"class":3184,"line":29881},11,[1492,29883,29884],{"class":3192},"17%Processing",[1492,29886,29772],{"class":29723},[1492,29888,29775],{"class":3188},[1492,29890,29778],{"class":29723},[1492,29892,29781],{"class":3188},[1492,29894,29896,29899,29901,29903,29905],{"class":3184,"line":29895},12,[1492,29897,29898],{"class":3192},"19%Processing",[1492,29900,29772],{"class":29723},[1492,29902,29775],{"class":3188},[1492,29904,29778],{"class":29723},[1492,29906,29781],{"class":3188},[1492,29908,29910,29913,29915,29917,29919],{"class":3184,"line":29909},13,[1492,29911,29912],{"class":3192},"21%Processing",[1492,29914,29772],{"class":29723},[1492,29916,29775],{"class":3188},[1492,29918,29778],{"class":29723},[1492,29920,29781],{"class":3188},[1492,29922,29924,29927,29929,29931,29933],{"class":3184,"line":29923},14,[1492,29925,29926],{"class":3192},"24%Processing",[1492,29928,29772],{"class":29723},[1492,29930,29775],{"class":3188},[1492,29932,29778],{"class":29723},[1492,29934,29781],{"class":3188},[1492,29936,29938,29941,29943,29945,29947],{"class":3184,"line":29937},15,[1492,29939,29940],{"class":3192},"26%Processing",[1492,29942,29772],{"class":29723},[1492,29944,29775],{"class":3188},[1492,29946,29778],{"class":29723},[1492,29948,29781],{"class":3188},[1492,29950,29952,29955,29957,29959,29961],{"class":3184,"line":29951},16,[1492,29953,29954],{"class":3192},"29%Processing",[1492,29956,29772],{"class":29723},[1492,29958,29775],{"class":3188},[1492,29960,29778],{"class":29723},[1492,29962,29781],{"class":3188},[1492,29964,29966,29969,29971,29973,29975],{"class":3184,"line":29965},17,[1492,29967,29968],{"class":3192},"31%Processing",[1492,29970,29772],{"class":29723},[1492,29972,29775],{"class":3188},[1492,29974,29778],{"class":29723},[1492,29976,29781],{"class":3188},[1492,29978,29980],{"class":3184,"line":29979},18,[1492,29981,29982],{"class":3223},"...\n",[1492,29984,29986,29988,29991,29993,29996,29999,30002,30004,30006,30008,30011,30013,30015],{"class":3184,"line":29985},19,[1492,29987,3220],{"class":3188},[1492,29989,29990],{"class":3192},"1047",[1492,29992,29772],{"class":29723},[1492,29994,29995],{"class":3188},") ",[1492,29997,29998],{"class":3192},"-",[1492,30000,30001],{"class":29723}," 86%Processing",[1492,30003,29772],{"class":29723},[1492,30005,29775],{"class":3188},[1492,30007,29778],{"class":29723},[1492,30009,30010],{"class":3188},") - 88%Processing images (",[1492,30012,29990],{"class":3192},[1492,30014,29772],{"class":29723},[1492,30016,30017],{"class":3188},") - 90%\n",[16,30019,30020],{},"From what I can tell this is Gridsome creating different versions of every single image on my website. This process was taking too long and the build would simply timeout each time. So I have this article about how I am starting my dream job and I can’t get it live 🤦‍♂️",[16,30022,30023,30024,30029],{},"After trying to find a solution to this problem I started thinking about it differently. I ran a build locally and it worked just fine. I have this great machine, why not let it do the work. It was then I found ",[23,30025,30028],{"href":30026,"rel":30027},"https:\u002F\u002Fgridsome.org\u002Fdocs\u002Fdeploy-to-netlify\u002F",[101],"these instructions"," that showed me how I could deploy to Netlify directly using the Netlify CLI.",[16,30031,30032],{},"I Installed the Netlify CLI, ran the build locally, and pushed it to production using the command",[16,30034,30035],{},[469,30036,30037],{},"netlify deploy --prod",[16,30039,30040],{},"This ended up not only working great but was really fast. I think I am going to take this approach going forward even If I find a solution to my problem.",[16,30042,30043],{},"If you’re interested in doing this just make sure you go into Netlify and turn off automatic builds on commits to your repository.",[28,30045,30047],{"id":30046},"groovy-4","Groovy 4",[16,30049,30050,30051,30056,30057,30062],{},"If you're new around here I’m a huge fan of ",[23,30052,30055],{"href":30053,"rel":30054},"https:\u002F\u002Fgroovy-lang.org\u002F",[101],"Groovy"," and have been for a while now. I created a ",[23,30058,30061],{"href":30059,"rel":30060},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Fapache-groovy\u002F?referralCode=7FB8CB67D3D3D17CF1EA",[101],"14-hour course"," that teaches you all the fundamentals of Groovy. I haven’t been using it as much lately but it will always be special to me.",[16,30064,30065,30070],{},[23,30066,30069],{"href":30067,"rel":30068},"https:\u002F\u002Fgroovy-lang.org\u002Freleasenotes\u002Fgroovy-4.0.html",[101],"Groovy 4 was just released"," and there are some really great new features. I will need some time to go through all of them but I will talk about one of them here. If you’re on Java 16+ you have access to records but what happens if you’re still stuck in the stone age of Java 8.",[16,30072,30073,30074,30077],{},"If you’re using Groovy 4 you can use the new  ",[161,30075,30076],{},"RecordType"," and take advantage of record style classes, regardless of what version of Java you’re on. If you’re a version that supports records the generated class will be a record but if It isn’t it will be an immutable type that resembles the characteristics of a record class. Pretty cool if you ask me 🥳",[16,30079,30080],{},[74,30081],{"alt":30082,"src":30083},"groovy_record.png","\u002Fimages\u002Fnewsletter\u002F2022\u002F02\u002F07\u002Fgroovy_record.png",[28,30085,30087],{"id":30086},"spring-boot-magic","Spring Boot Magic",[16,30089,30090],{},"I’m worked on some demo’s last week that might turn into an article, tutorial, presentation, course or all of the above. I think a lot of us build out a Spring Boot application without understanding what is happening behind the scenes.   The Spring Initializr, Spring Boot Starters and Auto Configuration can make getting started seem a little bit like magic.",[16,30092,30093],{},"As I started putting these demos together I remembered that I already have a tutorial on this. In the video below I show how to start with a simple Maven project and build out a simple Spring Framework application.",[47,30095],{"id":30096},"e8aSyQo0nHo",[16,30098,30099],{},"The next evolution of this is building out a web application with an embedded Tomcat server, logging, externalized configuration and a database connection. If you can think of anything else you would like to see in this demo please let me know.",[28,30101,10471],{"id":10470},[16,30103,30104,30105,21997,30108,30112],{},"I am going to live stream this week but I just don’t have it scheduled yet. If you’re not following me ",[23,30106,28779],{"href":28777,"rel":30107},[101],[23,30109,30111],{"href":27929,"rel":30110},[101],"subscribed to me on YouTube"," please do that now to be notified when I go live. If there are any topics you would like to see me cover please let me know.",[28,30114,21516],{"id":10953},[33,30116,11453],{"id":11452},[1271,30118,30119,30126],{},[1274,30120,30121],{},[23,30122,30125],{"href":30123,"rel":30124},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fjava\u002Fjava-on-visual-studio-code-update-january-2022\u002F",[101],"Java on Visual Studio Code Update – January 2022",[1274,30127,30128],{},[23,30129,30132],{"href":30130,"rel":30131},"https:\u002F\u002Fdashaun.hashnode.dev\u002Fspring-boot-263-arm64-image",[101],"Spring Boot 2.6.3 ARM64 Image",[33,30134,11465],{"id":30},[1271,30136,30137,30144],{},[1274,30138,30139],{},[23,30140,30143],{"href":30141,"rel":30142},"https:\u002F\u002Ffoojay.io\u002Ftoday\u002Fvideo-sdkman-explained\u002F",[101],"SDKMAN Explained",[1274,30145,30146],{},[23,30147,30150],{"href":30148,"rel":30149},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cyqfiUlx2UE",[101],"You may not need JavaScript | Simon Martinelli (EN)",[33,30152,13650],{"id":973},[1271,30154,30155,30162],{},[1274,30156,30157],{},[23,30158,30161],{"href":30159,"rel":30160},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F1a1dc9ea-c306-46b8-a835-5e248f7d4636",[101],"A Bootiful Podcast: Spring Data lead and architect extraordinaire, Oliver Drotbohm",[1274,30163,30164],{},[23,30165,30168],{"href":30166,"rel":30167},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F1c136ac9-2cc3-4b76-80fa-da458fedbafe",[101],"A Bootiful Podcast: Spring Framework co-founder and project lead, friend, and all-around amazing human being, Juergen Hoeller",[33,30170,22284],{"id":16575},[1271,30172,30173],{},[1274,30174,30175],{},[23,30176,30179],{"href":30177,"rel":30178},"https:\u002F\u002Fgithub.com\u002Fchucknorris-io\u002Fchuck-api",[101],"Chuck Norris API",[33,30181,25701],{"id":25700},[1271,30183,30184],{},[1274,30185,30186],{},[23,30187,30190],{"href":30188,"rel":30189},"https:\u002F\u002Flearning.oreilly.com\u002Fvideos\u002Fcloud-native-java\u002F9780137834051\u002F",[101],"Cloud Native Java with Kubernetes, 2nd Edition by Josh Long",[33,30192,25096],{"id":13856},[1271,30194,30195],{},[1274,30196,30197],{},[23,30198,30201],{"href":30199,"rel":30200},"https:\u002F\u002Fblockbyblock.notion.com\u002F",[101],"Block by Block Notion Conference",[33,30203,21608],{"id":384},[16,30205,30206],{},[23,30207,30208],{"href":30208,"rel":30209},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1488265020840767489",[101],[28,30211,172],{"id":171},[16,30213,25399,30214,11333],{},[23,30215,11332],{"href":11330,"rel":30216},[101],[16,30218,9630,30219,191,30221,30223,30225,30227],{},[189,30220],{},[189,30222],{},[23,30224,11491],{"href":11490},[189,30226],{},[23,30228,198],{"href":196,"rel":30229},[101],[3325,30231,30232],{},"html pre.shiki code .sZnax, html code.shiki .sZnax{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#6F42C1}html pre.shiki code .suV6U, html code.shiki .suV6U{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#032F62}html pre.shiki code .s-uPX, html code.shiki .s-uPX{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#24292E}html pre.shiki code .sECI1, html code.shiki .sECI1{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":200,"searchDepth":201,"depth":201,"links":30234},[30235,30236,30237,30238,30239,30240,30249],{"id":29633,"depth":201,"text":29634},{"id":29680,"depth":201,"text":29681},{"id":30046,"depth":201,"text":30047},{"id":30086,"depth":201,"text":30087},{"id":10470,"depth":201,"text":10471},{"id":10953,"depth":201,"text":21516,"children":30241},[30242,30243,30244,30245,30246,30247,30248],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":25700,"depth":206,"text":25701},{"id":13856,"depth":206,"text":25096},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":30251,"path":30252,"title":30253,"description":30254,"meta":30255,"body":30258},"newsletter\u002Fnewsletter\u002F2022\u002F01\u002F31\u002Fmy-first-week-vmware.md","\u002Fnewsletter\u002F2022\u002F01\u002F31\u002Fmy-first-week-vmware","My First Week at VMware","I hope you all had a great weekend and are ready to go on this Monday morning. In this edition of the newsletter, I want to talk about my first week at VMware,  a demo I put together of a Nuxt 3 application talking to the Notion API, The Kubernetes documentary, The JChampions conference, and some Spring Goodies from last week.",{"slug":30256,"date":30257},"my-first-week-vmware","2022-01-31T08:00:00.000Z",{"type":13,"value":30259,"toc":30445},[30260,30262,30266,30279,30282,30285,30300,30308,30315,30318,30322,30325,30334,30337,30340,30343,30347,30350,30355,30360,30363,30367,30374,30380,30384,30387,30417,30425,30427,30432],[16,30261,30254],{},[28,30263,30265],{"id":30264},"my-first-week-at-vmware","My first week at VMware",[16,30267,30268,30269,30272,30273,30278],{},"If you missed last week's newsletter you missed a pretty big announcement. I joined VMware as a Spring Developer advocate and wrote all about it ",[23,30270,742],{"href":29699,"rel":30271},[101],". I put together a ",[23,30274,30277],{"href":30275,"rel":30276},"https:\u002F\u002Fyoutu.be\u002FTYXdX-EakG8",[101],"video version"," of that blog post to share with my YouTube audience and it gave me a chance to expand on some of my thoughts.",[16,30280,30281],{},"My first week went about as well as I could have hoped. For as large a company as VMware is our onboarding process is really great. I was able to learn more about the company and our processes as well as get my laptop set up with everything I need to get going. The benefits are amazing and a reminder to everyone that you should always take a look at what benefits a company is offering as part of your overall compensation package. The salary is great the place to start but it isn’t everything.",[16,30283,30284],{},"I have also started building out my schedule for the year. I don’t know what I can say publicly yet but like everyone else, we are hoping we can return to some in-person events this year. I started working on what events I would be at as well as submitting to a number of conferences.",[16,30286,30287,30288,30293,30294,30299],{},"I got invited to do a live stream on the ",[23,30289,30292],{"href":30290,"rel":30291},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUC4ogdcPcIAOOMJktgBMhQnQ",[101],"IntelliJ IDEA YouTube channel"," on February 16th.  I will give some more details as we get closer but this is going to be a beginner-focused live coding session where we will take a look at building REST APIs. A huge thank you to Mala Gupta for inviting me and I can’t wait for my 2nd time chatting with her. In case you missed it ",[23,30295,30298],{"href":30296,"rel":30297},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rOUAdUOZk9E",[101],"she interviewed me"," for IntelliJ’s 20th anniversary.",[16,30301,30302,30303,30307],{},"I also want to let you know that I will be a host on Tanzu Tuesday this week. In ",[23,30304,30306],{"href":29640,"rel":30305},[101],"this week's episode",", the great Sam Brannen will talk with us about testing with Spring and JUnit 5. This session will be hands-on with live coding to give you an overview of the latest and greatest in the world of testing using JUnit Jupiter (a.k.a. JUnit 5) and the Spring Framework.",[16,30309,30310,30311,30314],{},"I’m going to do a lot more live streaming so stay tuned to this newsletter or follow me on ",[23,30312,183],{"href":181,"rel":30313},[101]," to find out when I’m going live. If you would like me to speak at your user group, conference, podcast, or join you on a live coding session please feel free to reach out to me.",[16,30316,30317],{},"I can’t even begin to tell you how excited I am to be a VMware. It was a great first week and look forward to many more.",[28,30319,30321],{"id":30320},"nuxt-3-notion-api","Nuxt 3 + Notion API",[16,30323,30324],{},"If you pay attention to anything I’m doing you probably know that I am a huge fan of Notion. I use it as a single source of truth for running my life. I schedule out all of my newsletters, YouTube videos, blog posts, courses and so much more.",[16,30326,30327,30328,30333],{},"If you have been following my ",[23,30329,30332],{"href":30330,"rel":30331},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLZV0a2jwt22tlxgTQ3ZB2KpRtDTl2K0IP",[101],"YouTube series"," on Nuxt 3 you know I’m planning on moving my personal website over to the framework this year. Something that I have wanted for a while is a way for you to vote on the content you would like to see me produce next. A lot of the time I am just creating content around the work I’m doing or things that I’m interested in. I would like to put some ideas out there and let you vote on what I should work on next.",[16,30335,30336],{},"For that to work through all of the ideas will be created and updated inside of Notion. Lucky for us Notion has an API and a way for us to work with that data. I created a tutorial on how you could create a full-stack application with Nuxt 3 that talks to the Notion API.",[47,30338],{"id":30339},"JvNhGu5ELgs",[16,30341,30342],{},"If you’re a Spring Boot fan, I have some content coming around using the Notion API in your Spring applications coming soon.",[28,30344,30346],{"id":30345},"kubernetes-documentary","Kubernetes Documentary",[16,30348,30349],{},"The Kubernetes documentary created by Honeypot was released this week. They do such an amazing job with these documentaries and I have been looking forward to this one for a long time. It was fascinating to see how Kubernetes started and a behind-the-scenes look at the container wars. If you haven’t seen this one it is a must-watch 🤩",[16,30351,30352],{},[469,30353,30354],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BE77h7dmoQU&t=2s",[16,30356,30357],{},[469,30358,30359],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=318elIq37PE",[16,30361,30362],{},"What was even crazier is that after watching this I was in a meeting with one of the creators of Kubernetes at VMware. If you didn’t know 2 of the creators work at VMware. Did I tell you how much I love working for this company!",[28,30364,30366],{"id":30365},"jchampions-conference","JChampions Conference",[16,30368,30369,30370,184],{},"The 2nd Annual JChampions Conference wrapped up last week and wow, what a conference it was. You will be hard-pressed to find a collection of Java developers like this one at any conference. If you want to see the recordings for all of the talks you can watch them on their ",[23,30371,2944],{"href":30372,"rel":30373},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUChJ6IHM_uy6dWLBiDAwYkpw\u002Fvideos",[101],[16,30375,30376],{},[23,30377,30378],{"href":30378,"rel":30379},"https:\u002F\u002Ftwitter.com\u002FJChampionsConf\u002Fstatus\u002F1486147426587226125",[101],[28,30381,30383],{"id":30382},"spring-developer-advocate-goodies","Spring Developer Advocate Goodies",[16,30385,30386],{},"Now that I get to focus on Spring and the community I should have more goodies to share with you every week. This week I have some really great recordings from a few of my teammates:",[1271,30388,30389,30396,30403,30410],{},[1274,30390,30391],{},[23,30392,30395],{"href":30393,"rel":30394},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=U-4RQ7LXZUk",[101],"Josh Long - Kubernetes Native Java",[1274,30397,30398],{},[23,30399,30402],{"href":30400,"rel":30401},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Ftanzu-tuesdays\u002F0082\u002F",[101],"Cora Iberkleid - Building Production Ready Container Images at Scale",[1274,30404,30405],{},[23,30406,30409],{"href":30407,"rel":30408},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=694soIproYE",[101],"Code: Cartographer with Josh Long and Cora Iberkleid",[1274,30411,30412],{},[23,30413,30416],{"href":30414,"rel":30415},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fbcak\u002F52\u002F",[101],"Between Chair and Keyboard: The one with Spencer Gibb",[16,30418,30419,30420,30424],{},"If you haven’t had a chance to visit the ",[23,30421,30423],{"href":22444,"rel":30422},[101],"VMware Tanzu Developer Center"," I suggest you check it out. It’s packed full of free content.",[28,30426,172],{"id":171},[16,30428,25399,30429,11333],{},[23,30430,11332],{"href":11330,"rel":30431},[101],[16,30433,9630,30434,191,30436,30438,30440,30442],{},[189,30435],{},[189,30437],{},[23,30439,11491],{"href":11490},[189,30441],{},[23,30443,198],{"href":196,"rel":30444},[101],{"title":200,"searchDepth":201,"depth":201,"links":30446},[30447,30448,30449,30450,30451,30452],{"id":30264,"depth":201,"text":30265},{"id":30320,"depth":201,"text":30321},{"id":30345,"depth":201,"text":30346},{"id":30365,"depth":201,"text":30366},{"id":30382,"depth":201,"text":30383},{"id":171,"depth":201,"text":172},{"_id":30454,"path":30455,"title":30456,"description":30457,"meta":30458,"body":30461},"newsletter\u002Fnewsletter\u002F2022\u002F01\u002F24\u002Fim-joining-vmware.md","\u002Fnewsletter\u002F2022\u002F01\u002F24\u002Fim-joining-vmware","I'm Joining VMware","Read this on danvega.dev",{"slug":30459,"date":30460},"im-joining-vmware","2022-01-24T08:00:00.000Z",{"type":13,"value":30462,"toc":30754},[30463,30469,30472,30476,30484,30489,30493,30496,30499,30504,30508,30515,30520,30526,30528,30534,30564,30566,30568,30591,30593,30616,30618,30641,30643,30666,30668,30677,30679,30688,30690,30699,30702,30723,30725,30728,30734,30736,30741],[16,30464,30465],{},[23,30466,30457],{"href":30467,"rel":30468},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fim-joining-vmware",[101],[16,30470,30471],{},"I apologize for missing the last couple of weeks but I have had a lot going on in my life. As you probably already saw from the title I am joining VMware so we will start there and I will catch you up on what I have been up to the past few weeks.",[28,30473,30475],{"id":30474},"spring-developer-advocate","Spring Developer Advocate 🥑",[16,30477,30478,30479,30483],{},"I’m excited to announce that I have joined VMware as a Spring Developer Advocate. This is literally a dream for me on so many levels. First I get to join a world-class organization that continually gets ranked as one of the best places to work. I get to join a team made of so many great developers and teachers and I can’t wait to learn from them. Finally, I get to talk about Java & Spring every single day and create content around languages, frameworks, projects, and tools that I genuinely enjoy using. If you want to read more about my decision you can ",[23,30480,30482],{"href":29699,"rel":30481},[101],"read a blog post here"," where I detailed everything.",[16,30485,30486],{},[74,30487],{"alt":27904,"src":30488},"\u002Fimages\u002Fnewsletter\u002F2022\u002F01\u002F24\u002Fvmware.png",[28,30490,30492],{"id":30491},"live-streaming-with-greg-turnquist","Live Streaming with Greg Turnquist",[16,30494,30495],{},"I forgot to mention this in my last newsletter but Greg and I did a live stream on New Year's Eve. If you’re not familiar with Greg, he works on the Spring Team (and now he’s a coworker 🥳) and is an author of some amazing Spring books.",[16,30497,30498],{},"In this stream, we talked about some of our highlights from the year as well as our predictions for  2022. We also tried to answer the question of what makes a “pro” developer. There is a lot to unpack here and certainly not enough time to cover everything. I hope I get a chance to come back and answer some of the questions fully for my blog or YouTube channel in the near future.",[16,30500,30501],{},[469,30502,30503],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Un5wpBy4aJA",[28,30505,30507],{"id":30506},"nuxt-3-nitro-server-engine","Nuxt 3 Nitro Server Engine",[16,30509,30510,30511,30514],{},"I have spent the last few weeks learning about Nuxt 3 (which is currently in beta) and taking that opportunity to take what I have learned and create some short tutorials around. In this tutorial, I take a look at Nuxt Nitro, the new server engine in Nuxt 3. With Nitro, you can create API routes by simply adding a ",[469,30512,30513],{},"server\u002Fapi"," folder and creating a JavaScript (or TypeScript) file that exports a default function. Check out the video below if you want to start creating full-stack applications in Nuxt 3.",[16,30516,30517],{},[469,30518,30519],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=FeKleFJkKNY",[16,30521,30522,30523,184],{},"If you enjoyed this you might like what I will be releasing this week. I created a tutorial on how to use Nuxt 3 + Notion API to retrieve and update a database stored in Notion. If that sounds fun make sure you subscribed to my ",[23,30524,2944],{"href":27929,"rel":30525},[101],[28,30527,2936],{"id":2935},[16,30529,2481,30530,30533],{},[23,30531,2936],{"href":2989,"rel":30532},[101]," started last week and will continue Monday and Tuesday this week. Each of the presentations is given by a Java Champion which means there are a lot of really smart people talking. Here are a few talks I enjoyed from Thursday & Friday",[1271,30535,30536,30543,30550,30557],{},[1274,30537,30538],{},[23,30539,30542],{"href":30540,"rel":30541},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=CxrwIphxsgM",[101],"Getting Started with Serverless Java",[1274,30544,30545],{},[23,30546,30549],{"href":30547,"rel":30548},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3ENintpjAIY",[101],"Functional Programming in Java, Kotlin, and Groovy",[1274,30551,30552],{},[23,30553,30556],{"href":30554,"rel":30555},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=cK19rE2V9UY",[101],"The Secrets of the Fastest Java Developers on Earth",[1274,30558,30559],{},[23,30560,30563],{"href":30561,"rel":30562},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6qOsBys7jhQ",[101],"5 tips on creating modern, cloud-native applications",[28,30565,21516],{"id":10953},[33,30567,11453],{"id":11452},[1271,30569,30570,30577,30584],{},[1274,30571,30572],{},[23,30573,30576],{"href":30574,"rel":30575},"https:\u002F\u002Fwww.entrepreneur.com\u002Farticle\u002F403948",[101],"Web3 is the Future of the Creator Economy",[1274,30578,30579],{},[23,30580,30583],{"href":30581,"rel":30582},"https:\u002F\u002Fwww.raycast.com\u002Fblog\u002Fno-code-reviews-by-default\u002F",[101],"No code reviews by default",[1274,30585,30586],{},[23,30587,30590],{"href":30588,"rel":30589},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2022\u002F01\u002Fjava-annotated-monthly-january-2022\u002F",[101],"Java Annotated Monthly – January 2022",[33,30592,11465],{"id":30},[1271,30594,30595,30602,30609],{},[1274,30596,30597],{},[23,30598,30601],{"href":30599,"rel":30600},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F1268630354",[101],"Tanzu TV - Code with Josh and Deshaun",[1274,30603,30604],{},[23,30605,30608],{"href":30606,"rel":30607},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=SDobPYHk_sQ",[101],"Introduction to VMware Tanzu Application Platform (TAP)",[1274,30610,30611],{},[23,30612,30615],{"href":30613,"rel":30614},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0JY8O1LBA7U",[101],"Vue.js Advanced Data Provider Component Patterns Explained",[33,30617,13650],{"id":973},[1271,30619,30620,30627,30634],{},[1274,30621,30622],{},[23,30623,30626],{"href":30624,"rel":30625},"https:\u002F\u002Fairhacks.fm\u002F#episode_171",[101],"airhacks.fm - Java, Jakarta EE and MicroProfile on Azure",[1274,30628,30629],{},[23,30630,30633],{"href":30631,"rel":30632},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fbcak\u002F50\u002F",[101],"Between Chair and Keyboard with Glenn Vanderburg",[1274,30635,30636],{},[23,30637,30640],{"href":30638,"rel":30639},"https:\u002F\u002Ftanzu.vmware.com\u002Fdeveloper\u002Ftv\u002Fbcak\u002F51\u002F",[101],"Between Chair and Keyboard with Heidi Waterhouse",[33,30642,22284],{"id":16575},[1271,30644,30645,30652,30659],{},[1274,30646,30647],{},[23,30648,30651],{"href":30649,"rel":30650},"https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fgithub-action-for-graalvm",[101],"GitHub Action for GraalVM",[1274,30653,30654],{},[23,30655,30658],{"href":30656,"rel":30657},"https:\u002F\u002Fexamples.deno.land\u002F",[101],"Deno by Example",[1274,30660,30661],{},[23,30662,30665],{"href":30663,"rel":30664},"https:\u002F\u002Fstaging.vuejs.org\u002F",[101],"Vue 3 docs preview",[33,30667,14122],{"id":14121},[1271,30669,30670],{},[1274,30671,30672],{},[23,30673,30676],{"href":30674,"rel":30675},"https:\u002F\u002Famzn.to\u002F3GYRryW",[101],"YouTube Formula",[33,30678,12149],{"id":12148},[2238,30680,30681],{},[16,30682,30683,30684,30687],{},"“If I had an hour to solve a problem ",[161,30685,30686],{},"I'd spend 55 minutes thinking about the problem and five minutes thinking about solutions",".” - Albert Einstein",[33,30689,25701],{"id":25700},[1271,30691,30692],{},[1274,30693,30694],{},[23,30695,30698],{"href":30696,"rel":30697},"https:\u002F\u002Ffrontendmasters.com\u002Fcourses\u002Fgetting-started-css\u002F",[101],"Getting Started with CSS",[33,30700,30701],{"id":13856},"🎓 Conferences",[1271,30703,30704,30711,30716],{},[1274,30705,30706],{},[23,30707,30710],{"href":30708,"rel":30709},"https:\u002F\u002Fcfe.dev\u002Fevents\u002Fthe-jam-2022\u002F",[101],"TheJam.dev 2022",[1274,30712,30713],{},[23,30714,2936],{"href":2989,"rel":30715},[101],[1274,30717,30718],{},[23,30719,30722],{"href":30720,"rel":30721},"https:\u002F\u002Fvuejsnation.com\u002F",[101],"VueJS Nation Conference",[33,30724,21608],{"id":384},[16,30726,30727],{},"Evan You create a version of Wordle using Vue",[16,30729,30730],{},[23,30731,30732],{"href":30732,"rel":30733},"https:\u002F\u002Ftwitter.com\u002Fyouyuxi\u002Fstatus\u002F1485202083225616385",[101],[28,30735,172],{"id":171},[16,30737,25399,30738,11333],{},[23,30739,11332],{"href":11330,"rel":30740},[101],[16,30742,9630,30743,191,30745,30747,30749,30751],{},[189,30744],{},[189,30746],{},[23,30748,11491],{"href":11490},[189,30750],{},[23,30752,198],{"href":196,"rel":30753},[101],{"title":200,"searchDepth":201,"depth":201,"links":30755},[30756,30757,30758,30759,30760,30771],{"id":30474,"depth":201,"text":30475},{"id":30491,"depth":201,"text":30492},{"id":30506,"depth":201,"text":30507},{"id":2935,"depth":201,"text":2936},{"id":10953,"depth":201,"text":21516,"children":30761},[30762,30763,30764,30765,30766,30767,30768,30769,30770],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":25700,"depth":206,"text":25701},{"id":13856,"depth":206,"text":30701},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":30773,"path":30774,"title":30775,"description":30776,"meta":30777,"body":30780},"newsletter\u002Fnewsletter\u002F2022\u002F01\u002F03\u002Fhappy-new-year-2022.md","\u002Fnewsletter\u002F2022\u002F01\u002F03\u002Fhappy-new-year-2022","Happy New Year!","Happy New Year friends. Welcome to the first installment of this newsletter in 2022. I hope this finds you and your family healthy and happy. In this edition of the newsletter, I want to talk about New Year's goals and plans to move my website over to Nuxt 3.",{"slug":30778,"date":30779},"happy-new-year-2022","2022-01-03T08:30:00.000Z",{"type":13,"value":30781,"toc":31066},[30782,30784,30788,30793,30802,30805,30822,30824,30831,30834,30836,30839,30845,30849,30855,30867,30870,30887,30890,30895,30900,30902,30904,30941,30943,30958,30960,30997,30999,31008,31010,31022,31024,31033,31035,31038,31040,31046,31048,31053],[16,30783,30776],{},[28,30785,30787],{"id":30786},"new-year-new-me-️","New Year, New Me 🤷‍♂️",[16,30789,30790],{},[74,30791],{"alt":30775,"src":30792},"https:\u002F\u002Fwww.danvega.dev\u002Fassets\u002Fstatic\u002Fkelly-sikkema-PXl_S152jNM-unsplash.09b17d9.dfdc5c082afa3b8533626a6fa862087f.jpg",[16,30794,30795,30796,30801],{},"I wrote up my annual ",[23,30797,30800],{"href":30798,"rel":30799},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2022\u002F01\u002F01\u002Fhappy-new-year-2022\u002F",[101],"New Years’ post"," in which I looked back at some of my highlights from 2021 and looked ahead to 2022. From a professional standpoint, my focus this year is on producing more quality content.",[16,30803,30804],{},"I took a look at my numbers from last year and they were a little embarrassing. I am giving myself a bit of a break because we are still in the middle of a pandemic and mentally it’s just been an exhausting couple of years. The goals I am setting when it comes to content are this:",[1271,30806,30807,30810,30813,30816,30819],{},[1274,30808,30809],{},"YouTube: 1 video per week for a total of 52 videos",[1274,30811,30812],{},"Live Streaming: 2x a month for a total of 24 live streams",[1274,30814,30815],{},"Courses: 2 New Courses",[1274,30817,30818],{},"Live Training 👀 (More on this soon)",[1274,30820,30821],{},"Blog: 1 post per month for a total of 12 posts",[33,30823,3363],{"id":4557},[16,30825,30826,30827,30830],{},"As you can see YouTube is where I want to focus this year. I’m really proud that I have been able to grow my channel to almost 14k subscribers and I have done so without being consistent. I looked back at my stats and I only published ",[161,30828,30829],{},"11 videos"," in 2021. That is less than 1 per month and I know I can do better than that.",[16,30832,30833],{},"You might be thinking that moving from 11 to 52 videos in a year is a lofty goal and I would completely agree. I think the one thing I have on my side is that I can create YouTube shorts much quicker than normal tutorials. Are you a fan of consuming shorts on YouTube? If so can you let me know what types of videos you want to see or some of your favorite creators that are creating shorts?",[28,30835,28365],{"id":25700},[16,30837,30838],{},"I love creating courses but I haven’t been able to in a while. I have been struggling with what to create and where. The one thing I know for sure is that I want to create smaller courses that are focused on a particular topic which means no more 12-15 hour courses from me. I could create them on my own platform and charge more or host them on something like Udemy and sell them for less. I have also thrown around the idea of creating a platform and inviting some other creators to build on it. Whatever I end up doing I hope to publish at least 2 courses in 2022 and I can’t wait to share those with you. Until then I am extremely blessed to have 138,000 students around the world taking my courses. Thank You 🙏",[16,30840,30841],{},[74,30842],{"alt":30843,"src":30844},"Udemy Stats","\u002Fimages\u002Fnewsletter\u002F2022\u002F01\u002F03\u002Fudemy-stats.png",[28,30846,30848],{"id":30847},"moving-my-website-to-nuxt-3","Moving my website to Nuxt 3",[16,30850,30851],{},[74,30852],{"alt":30853,"src":30854},"Dan Vega Homepage","\u002Fimages\u002Fnewsletter\u002F2022\u002F01\u002F03\u002Fdanvega-dev-homepage.png",[16,30856,30857,30858,30862,30863,30866],{},"I’m really happy with my ",[23,30859,30861],{"href":196,"rel":30860},[101],"current website",". Every time I post a new article I head over to the site to make sure it looks ok and I remember just how proud I am of it. The current version of my website is written in a framework called ",[23,30864,29689],{"href":29687,"rel":30865},[101],", which is a static site generator for VueJS. I have been really happy with Gridsome but there are a few limitations that are stopping me from doing some of the things I want to do. That and the project hasn’t been moving forward that much over the last couple of years.",[16,30868,30869],{},"Enter Nuxt 3 which just went into beta and brings a whole bunch of exciting features. There are too many to mention here but these are my favorites so far",[1271,30871,30872,30875,30878,30881,30884],{},[1274,30873,30874],{},"Vue 3 Support",[1274,30876,30877],{},"TypeScript Support",[1274,30879,30880],{},"Vite - My favorite build tool",[1274,30882,30883],{},"Nitro - Nuxt 3 Server",[1274,30885,30886],{},"FAST!",[16,30888,30889],{},"Nuxt 3 is still in beta and while I love what they are doing there are still some things missing that are going to prevent me from moving over right now. The biggest one of all is static site generation which is coming soon 🤞🏻 Lucky for me I am in no rush to move over which gives me a great opportunity to spend some time learning Nuxt 3. I put together a couple of videos recently on getting started with Nuxt 3 and Nuxt 3 + Tailwind CSS 3.",[16,30891,30892],{},[469,30893,30894],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=tdOoKKXlDCQ",[16,30896,30897],{},[469,30898,30899],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0oE2r51HyF0",[28,30901,21516],{"id":10953},[33,30903,11453],{"id":11452},[1271,30905,30906,30913,30920,30927,30934],{},[1274,30907,30908],{},[23,30909,30912],{"href":30910,"rel":30911},"https:\u002F\u002Fabout.instagram.com\u002Fblog\u002Fannouncements\u002Fintroducing-better-previews-of-your-content-outside-of-instagram\u002F",[101],"Instagram Previews on Twitter",[1274,30914,30915],{},[23,30916,30919],{"href":30917,"rel":30918},"https:\u002F\u002Fsiliconangle.com\u002F2021\u002F12\u002F17\u002Fstartups-taking-advantage-aws-whole-new-level-reinvent\u002F",[101],"Startups are taking advantage of AWS at a whole new level",[1274,30921,30922],{},[23,30923,30926],{"href":30924,"rel":30925},"https:\u002F\u002Fblog.jetbrains.com\u002Fkotlin\u002F2021\u002F12\u002Fcompose-multiplatform-1-0-is-going-live\u002F",[101],"Compose Multiplatform 1.0 is going live!",[1274,30928,30929],{},[23,30930,30933],{"href":30931,"rel":30932},"https:\u002F\u002Fwww.morling.dev\u002Fblog\u002Fannouncing-first-release-of-kcctl\u002F",[101],"Announcing the First Release of kcctl",[1274,30935,30936],{},[23,30937,30940],{"href":30938,"rel":30939},"https:\u002F\u002Frakyll.org\u002Fgenerics-facilititators\u002F",[101],"Generics facilitators in Go",[33,30942,11465],{"id":30},[1271,30944,30945,30952],{},[1274,30946,30947],{},[23,30948,30951],{"href":30949,"rel":30950},"https:\u002F\u002Fwww.youtube.com\u002Fc\u002FGopherAcademy\u002Fvideos",[101],"Gopher Con 2021 Session Videos",[1274,30953,30954],{},[23,30955,30956],{"href":30956,"rel":30957},"https:\u002F\u002Ftwitter.com\u002FBillyKorando\u002Fstatus\u002F1472959983612358657",[101],[33,30959,22284],{"id":16575},[1271,30961,30962,30969,30976,30983,30990],{},[1274,30963,30964],{},[23,30965,30968],{"href":30966,"rel":30967},"https:\u002F\u002Fspring.io\u002Fblog\u002F2021\u002F12\u002F22\u002Fspring-native-0-11-1-available-now",[101],"Spring Native 0.11.1 available now",[1274,30970,30971],{},[23,30972,30975],{"href":30973,"rel":30974},"https:\u002F\u002Fspring.io\u002Fblog\u002F2021\u002F12\u002F21\u002Fspring-boot-2-6-2-available-now",[101],"Spring Boot 2.6.2 is available now",[1274,30977,30978],{},[23,30979,30982],{"href":30980,"rel":30981},"https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Fcompose-mpp\u002F",[101],"Compose Multiplatform",[1274,30984,30985],{},[23,30986,30989],{"href":30987,"rel":30988},"https:\u002F\u002Fpicocss.com\u002F",[101],"Pico.css Minimal CSS Framework for semantic HTML",[1274,30991,30992],{},[23,30993,30996],{"href":30994,"rel":30995},"https:\u002F\u002Fgithub.com\u002FGroovyLanguageServer\u002Fgroovy-language-server",[101],"Groovy Language Server",[33,30998,14122],{"id":14121},[1271,31000,31001],{},[1274,31002,31003],{},[23,31004,31007],{"href":31005,"rel":31006},"https:\u002F\u002Fwww.patterns.dev\u002F",[101],"Patterns.dev",[33,31009,25701],{"id":25700},[1271,31011,31012],{},[1274,31013,31014],{},[23,31015,31018,31019],{"href":31016,"rel":31017},"https:\u002F\u002Fdev.to\u002Ftechworld_with_nana\u002Fgolang-tutorial-for-beginners-free-course-330",[101],"Golang Tutorial for Beginners ",[1492,31020,31021],{},"Full Course",[33,31023,18092],{"id":18091},[1271,31025,31026],{},[1274,31027,31028],{},[23,31029,31032],{"href":31030,"rel":31031},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fjosh-blog\u002Fthis-month-in-spring-december-2021",[101],"This month in Spring - December 2021",[33,31034,12149],{"id":12148},[16,31036,31037],{},"“Perfectionism is the mother of procrastination.” - Michael Hyatt",[33,31039,21608],{"id":384},[16,31041,31042],{},[23,31043,31044],{"href":31044,"rel":31045},"https:\u002F\u002Ftwitter.com\u002Fchrismunns\u002Fstatus\u002F1472960906498035712",[101],[28,31047,172],{"id":171},[16,31049,25399,31050,11333],{},[23,31051,11332],{"href":11330,"rel":31052},[101],[16,31054,9630,31055,191,31057,31059,31061,31063],{},[189,31056],{},[189,31058],{},[23,31060,11491],{"href":11490},[189,31062],{},[23,31064,198],{"href":196,"rel":31065},[101],{"title":200,"searchDepth":201,"depth":201,"links":31067},[31068,31071,31072,31073,31083],{"id":30786,"depth":201,"text":30787,"children":31069},[31070],{"id":4557,"depth":206,"text":3363},{"id":25700,"depth":201,"text":28365},{"id":30847,"depth":201,"text":30848},{"id":10953,"depth":201,"text":21516,"children":31074},[31075,31076,31077,31078,31079,31080,31081,31082],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":25700,"depth":206,"text":25701},{"id":18091,"depth":206,"text":18092},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":31085,"path":31086,"title":31087,"description":31088,"meta":31089,"body":31092},"newsletter\u002Fnewsletter\u002F2021\u002F12\u002F13\u002Fnew-contract.md","\u002Fnewsletter\u002F2021\u002F12\u002F13\u002Fnew-contract","New Contract, Log4J Vulnerability, Egghead & Tailwind v3","I hope you all had a great week last week and are excited for another productive week. Christmas is coming up on us quickly and with that the end of another year. As I have told you a few times it's been a little of a crazy year for me (and probably all of us) so I am looking forward to the new year. In this edition of the newsletter, I want to tell you about starting a new contract at work, and some exciting things that happened last week.",{"slug":31090,"date":31091},"new-contract","2021-12-13T08:30:00.000Z",{"type":13,"value":31093,"toc":31394},[31094,31096,31100,31103,31106,31117,31123,31126,31129,31133,31147,31150,31158,31162,31170,31174,31177,31180,31189,31195,31198,31214,31219,31223,31231,31261,31264,31270,31274,31277,31283,31285,31287,31312,31314,31337,31339,31358,31360,31369,31371,31374,31376,31381],[16,31095,31088],{},[28,31097,31099],{"id":31098},"started-a-new-contract-at-work","Started a new contract at work",[16,31101,31102],{},"Last week I started a new contract at work. If you don't know I work for Briebug Software and I have been with them for about a year now. When I started I was assigned to the biggest logistics company on the planet. I am still with that client but I ended up transferring to another org within the company.",[16,31104,31105],{},"With that transfer, I will have to learn a whole new side of the business and the software that runs it. Part of my responsibilities as an architect is to understand the business, the software and make recommendations where I think we can we can improve the product for both the users and the developers. As a developer, I take that last responsibility to heart. I want to make sure that I am helping anyone on that project be successful.",[16,31107,31108,31109,31112,31113,31116],{},"Most of the new software I am working on is in Spring Boot \u002F Spring Cloud \u002F Java space. I tweeted this out earlier this week but the first thing I do when I am dropped into a new project is to make sure I can build it. After a few minutes, I was able to get this project to build and my next step is to take a peek at the build file. In this case, we are using Maven so I opened up ",[469,31110,31111],{},"pom.xml"," to see what I'm working with. The first thing I noticed is there were a TON of dependencies and my first thought was there is no way we are using all of them. A quick run of ",[469,31114,31115],{},"mvn dependency:anaylze"," and my suspicions were true, there was a whole lot of unused dependencies.",[16,31118,31119],{},[23,31120,31121],{"href":31121,"rel":31122},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1467920900456697866",[101],[16,31124,31125],{},"These are the easy types of recommendations you can make right away. Removing all of these unused dependencies can speed up startup time for developers and ultimately make the executable we ship much smaller. I created a new branch and removed all of them only to come across a few errors. Remember that this tool is analyzing what dependencies you are using at compile-time and won't know which ones are being used at runtime. After fixing a few of those, we have a much faster build and a lighter JAR that will get shipped to the cloud.",[16,31127,31128],{},"What are some of the things you look for when you are first dropped into a project? I have a few more and maybe I will compile a checklist if that is something that might be helpful to others.",[28,31130,31132],{"id":31131},"log4j-vulnerability","Log4J Vulnerability",[16,31134,31135,31136,31141,31142,184],{},"If you're in the Java world chances are you have probably heard of this by now. There was an exploit found in the popular logging library, ",[23,31137,31140],{"href":31138,"rel":31139},"https:\u002F\u002Flogging.apache.org\u002Flog4j\u002F2.x\u002F",[101],"Log4J",". If you want to learn more about the exploit you can check out ",[23,31143,31146],{"href":31144,"rel":31145},"http:\u002F\u002Fcve.mitre.org\u002Fcgi-bin\u002Fcvename.cgi?name=2021-44228",[101],"CVE-2021-44228",[16,31148,31149],{},"This zero day vulnerability affects the 2.x line so if you're using the Log4J library explicitly please make sure you update to v2.15 where the behavior and root cause of the issue have been disabled by default. There is a chance you could be using it implicitly if a dependency you declared uses it, also know as a transitive dependency.",[16,31151,15415,31152,31157],{},[23,31153,31156],{"href":31154,"rel":31155},"https:\u002F\u002Fmsrc-blog.microsoft.com\u002F2021\u002F12\u002F11\u002Fmicrosofts-response-to-cve-2021-44228-apache-log4j2\u002F?s=09",[101],"great explanation from Microsoft"," on what this vulnerability is and how it works. This is a serious exploit and you should take the time to investigate if you are using Log4J. If you are using it explicitly or implicitly please take the necessary steps to fixing it.",[33,31159,31161],{"id":31160},"spring-boot-users","Spring Boot Users",[16,31163,31164,31165,31169],{},"If you're a Spring Boot users this shouldn't affect unless you have moved away from the default logging system, Logback. There is a good article on the ",[23,31166,1778],{"href":31167,"rel":31168},"https:\u002F\u002Fspring.io\u002Fblog\u002F2021\u002F12\u002F10\u002Flog4j2-vulnerability-and-spring-boot",[101]," that shares some details about this and how to fix it.",[28,31171,31173],{"id":31172},"egghead-holiday-courses","Egghead holiday courses",[16,31175,31176],{},"Learning is one of the biggest skills we need as software engineers. I think it's one of the main reasons I love what I do. If you heard me talk about this at all you know I love to learn new things.",[16,31178,31179],{},"I think everyone has a different way of learning depending on what your objective is. If you're brand new to language and programming in general you may want to take a depth vs breath approach. In that case you might want to reach for one of those big text books and learn everything about the subject.",[16,31181,31182,31183,31188],{},"In some cases you might want to learn one specific thing. For those instances I have been a big fan of Egghead courses. These courses lose the fluff and drop you right into the subject at hand.  Right now they have a ",[23,31184,31187],{"href":31185,"rel":31186},"https:\u002F\u002Fegghead.io\u002Flearn",[101],"Holiday Course Release Extravaganza"," going on where they are releasing a new course every day.",[16,31190,31191],{},[74,31192],{"alt":31193,"src":31194},"Egghead Holiday Course Release Extravaganza","\u002Fimages\u002Fnewsletter\u002F2021\u002F12\u002F13\u002Fegghead.png",[16,31196,31197],{},"I was able to go through a couple courses that I can highly recommend:",[1271,31199,31200,31207],{},[1274,31201,31202],{},[23,31203,31206],{"href":31204,"rel":31205},"https:\u002F\u002Fegghead.io\u002Fcourses\u002Fcloud-infrastructure-fundamentals-with-aws-ee4bb845",[101],"Cloud Infrastructure Fundamentals with AWS by Sam Julien",[1274,31208,31209],{},[23,31210,31213],{"href":31211,"rel":31212},"https:\u002F\u002Fegghead.io\u002Fcourses\u002Fbuild-a-digital-garden-with-nuxt-and-nuxt-content-module-9b67f0de",[101],"Build a Digital Garden with Nuxt and Nuxt Content Module by Ben Hong",[16,31215,31216],{},[734,31217,31218],{},"What are some of your favorite resources for learning?",[28,31220,31222],{"id":31221},"tailwind-css-v30","Tailwind CSS v3.0",[16,31224,31225,31226,31230],{},"Tailwind CSS, a CSS Utility framework that I happen to be a big fan of released v3.0 last week. There is a great roundup here of all the new features ",[23,31227,742],{"href":31228,"rel":31229},"https:\u002F\u002Ftailwindcss.com\u002Fblog\u002Ftailwindcss-v3",[101]," but here are a few of my favorite.",[1271,31232,31233,31239,31249,31255],{},[1274,31234,31235,31238],{},[161,31236,31237],{},"Just-in-Time, all the time"," — lightning fast build times, stackable variants, arbitrary value support, better browser performance, and more.",[1274,31240,31241,31244,31245,31248],{},[161,31242,31243],{},"Every color out of the box"," — including all of the extended palette colors like cyan, rose, fuchsia, and lime, and fifty shades of ",[8834,31246,31247],{},"grey"," gray.",[1274,31250,31251,31254],{},[161,31252,31253],{},"Colored box shadows"," — for fun glow and reflection effects, and more natural shadows on colored backgrounds.",[1274,31256,31257,31260],{},[161,31258,31259],{},"Play CDN"," — the new Just-in-Time engine squeezed into a CDN script that runs right in the browser.",[16,31262,31263],{},"If you have some time check out this video below where Simon walks us through all the cool new features.",[16,31265,31266],{},[23,31267,31268],{"href":31268,"rel":31269},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mSC6GwizOag",[101],[28,31271,31273],{"id":31272},"matrix-resurrections-official-trailer-2","Matrix Resurrections - Official Trailer 2",[16,31275,31276],{},"The original Matrix will go down as one of my all time favorite movies. I'm also probably in the minority here, but I enjoyed all 3 of the movies. That is why I am so excited for The Matrix Resurrections which comes out later this month. I have a subscription to HBO Max so I can technically watch this one at home but I think this is a good time to return to the theater.",[16,31278,31279],{},[23,31280,31281],{"href":31281,"rel":31282},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=nNpvWBuTfrc",[101],[28,31284,21516],{"id":10953},[33,31286,11453],{"id":11452},[1271,31288,31289,31294,31299,31306],{},[1274,31290,31291],{},[23,31292,23470],{"href":23468,"rel":31293},[101],[1274,31295,31296],{},[23,31297,31222],{"href":31228,"rel":31298},[101],[1274,31300,31301],{},[23,31302,31305],{"href":31303,"rel":31304},"https:\u002F\u002Fspring.io\u002Fblog\u002F2021\u002F12\u002F09\u002Fnew-aot-engine-brings-spring-native-to-the-next-level",[101],"New AOT Engine Brings Spring Native to the Next Level",[1274,31307,31308],{},[23,31309,31310],{"href":31310,"rel":31311},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Febooks\u002Fthe-state-of-spring-2021",[101],[33,31313,11465],{"id":30},[1271,31315,31316,31323,31330],{},[1274,31317,31318],{},[23,31319,31322],{"href":31320,"rel":31321},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Y1bwOL08mqs",[101],"Spring Cloud Stream with RabbitMQ",[1274,31324,31325],{},[23,31326,31329],{"href":31327,"rel":31328},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qEBEo76gKK0",[101],"Building a Course Platform in a Weekend - (Next.js Conf 2021)",[1274,31331,31332],{},[23,31333,31336],{"href":31334,"rel":31335},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=W9KdGcL80jQ",[101],"Video Editing 101: How to Edit YouTube Thumbnails",[33,31338,13650],{"id":973},[1271,31340,31341,31351],{},[1274,31342,20279,31343],{},[23,31344,31347,31348],{"href":31345,"rel":31346},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002F5878ef4e-c575-463b-a27e-67548fbad6d0",[101],"Bootiful Podcast - Josh Long with ",[161,31349,31350],{},"Patrick Chanezon",[1274,31352,31353],{},[23,31354,31357],{"href":31355,"rel":31356},"https:\u002F\u002Fsoftwareengineeringdaily.com\u002F2021\u002F12\u002F06\u002Fbuilding-go-apps-using-encore\u002F",[101],"Building Go Apps Using Encore with André Eriksson",[33,31359,14122],{"id":14121},[1271,31361,31362],{},[1274,31363,31364],{},[23,31365,31368],{"href":31366,"rel":31367},"https:\u002F\u002Fwww.coldstart.com\u002F?twclid=11468056396621139976",[101],"The Cold Start Problem",[33,31370,12149],{"id":12148},[16,31372,31373],{},"“Patience is not the ability to wait, but the ability to keep a good attitude while waiting.” - Unknown",[28,31375,172],{"id":171},[16,31377,25399,31378,11333],{},[23,31379,11332],{"href":11330,"rel":31380},[101],[16,31382,9630,31383,191,31385,31387,31389,31391],{},[189,31384],{},[189,31386],{},[23,31388,11491],{"href":11490},[189,31390],{},[23,31392,198],{"href":196,"rel":31393},[101],{"title":200,"searchDepth":201,"depth":201,"links":31395},[31396,31397,31400,31401,31402,31403,31410],{"id":31098,"depth":201,"text":31099},{"id":31131,"depth":201,"text":31132,"children":31398},[31399],{"id":31160,"depth":206,"text":31161},{"id":31172,"depth":201,"text":31173},{"id":31221,"depth":201,"text":31222},{"id":31272,"depth":201,"text":31273},{"id":10953,"depth":201,"text":21516,"children":31404},[31405,31406,31407,31408,31409],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":31412,"path":31413,"title":31414,"description":31415,"meta":31416,"body":31418},"newsletter\u002Fnewsletter\u002F2021\u002F12\u002F20\u002Flog4j.md","\u002Fnewsletter\u002F2021\u002F12\u002F20\u002Flog4j","Log4J Vulnerablity, Merry Christmas & Happy New Year!","Welcome to what might very well be the last installment of the newsletter in 2021. I only have a few days left of work for the year and honestly, I don't think I will have much to talk about. I am working on a couple of exciting things for the new year and I can't wait to share those with you. In this week's edition of the newsletter we continue our conversation about the Log4J2 Vulnerability.",{"slug":31417,"date":31091},"log4j",{"type":13,"value":31419,"toc":32354},[31420,31422,31426,31429,31447,31576,31587,31825,31832,31873,31877,31891,32065,32072,32146,32160,32212,32216,32219,32224,32227,32233,32235,32237,32260,32262,32285,32287,32296,32298,32307,32311,32321,32323,32325,32331,32335,32338,32351],[16,31421,31415],{},[28,31423,31425],{"id":31424},"are-your-spring-boot-applications-vulnerable-to-the-log4j2-exploit","Are your Spring Boot Applications vulnerable to the Log4J2 Exploit?",[16,31427,31428],{},"In last week's newsletter, I mentioned the Log4J Vulnerability that was going around. I had some more time at the beginning of the week to dig into it and more specifically if we were affected at work. This brought up a lot of questions around how logging works in Spring Boot so I thought I would go through some of that here.",[16,31430,31431,31432,31435,31436,31438,31439,31442,31443,31446],{},"The biggest thing you need to know from a Spring Boot standpoint is that if you don't deviate from the default configuration you are safe. Let's start out with how logging works out of the box. When you add a dependency like ",[469,31433,31434],{},"web (spring-boot-starter-web)"," that will bring in the ",[469,31437,13375],{}," which brings in ",[469,31440,31441],{},"spring-boot-starter-logging."," If you run ",[469,31444,31445],{},"mvn dependency:tree"," you will see something that looks like this:",[3175,31448,31450],{"className":29711,"code":31449,"language":29713,"meta":200,"style":200},"[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.6.1:compile\n[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.6.1:compile\n[INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.6.1:compile\n[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.6.1:compile\n[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.6.1:compile\n[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.7:compile\n[INFO] |  |  |  |  \\- ch.qos.logback:logback-core:jar:1.2.7:compile\n[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile\n[INFO] |  |  |  |  \\- org.apache.logging.log4j:log4j-api:jar:2.14.1:compile\n",[469,31451,31452,31457,31471,31485,31498,31511,31526,31544,31559],{"__ignoreMap":200},[1492,31453,31454],{"class":3184,"line":3185},[1492,31455,31456],{"class":3188},"[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.6.1:compile\n",[1492,31458,31459,31462,31465,31468],{"class":3184,"line":201},[1492,31460,31461],{"class":3188},"[INFO] ",[1492,31463,31464],{"class":3210},"|",[1492,31466,31467],{"class":3192},"  +-",[1492,31469,31470],{"class":29723}," org.springframework.boot:spring-boot-starter:jar:2.6.1:compile\n",[1492,31472,31473,31475,31477,31480,31482],{"class":3184,"line":206},[1492,31474,31461],{"class":3188},[1492,31476,31464],{"class":3210},[1492,31478,31479],{"class":3210},"  |",[1492,31481,31467],{"class":3192},[1492,31483,31484],{"class":29723}," org.springframework.boot:spring-boot:jar:2.6.1:compile\n",[1492,31486,31487,31489,31491,31493,31495],{"class":3184,"line":9269},[1492,31488,31461],{"class":3188},[1492,31490,31464],{"class":3210},[1492,31492,31479],{"class":3210},[1492,31494,31467],{"class":3192},[1492,31496,31497],{"class":29723}," org.springframework.boot:spring-boot-autoconfigure:jar:2.6.1:compile\n",[1492,31499,31500,31502,31504,31506,31508],{"class":3184,"line":29797},[1492,31501,31461],{"class":3188},[1492,31503,31464],{"class":3210},[1492,31505,31479],{"class":3210},[1492,31507,31467],{"class":3192},[1492,31509,31510],{"class":29723}," org.springframework.boot:spring-boot-starter-logging:jar:2.6.1:compile\n",[1492,31512,31513,31515,31517,31519,31521,31523],{"class":3184,"line":29811},[1492,31514,31461],{"class":3188},[1492,31516,31464],{"class":3210},[1492,31518,31479],{"class":3210},[1492,31520,31479],{"class":3210},[1492,31522,31467],{"class":3192},[1492,31524,31525],{"class":29723}," ch.qos.logback:logback-classic:jar:1.2.7:compile\n",[1492,31527,31528,31530,31532,31534,31536,31538,31541],{"class":3184,"line":29825},[1492,31529,31461],{"class":3188},[1492,31531,31464],{"class":3210},[1492,31533,31479],{"class":3210},[1492,31535,31479],{"class":3210},[1492,31537,31479],{"class":3210},[1492,31539,31540],{"class":3192},"  \\-",[1492,31542,31543],{"class":29723}," ch.qos.logback:logback-core:jar:1.2.7:compile\n",[1492,31545,31546,31548,31550,31552,31554,31556],{"class":3184,"line":29839},[1492,31547,31461],{"class":3188},[1492,31549,31464],{"class":3210},[1492,31551,31479],{"class":3210},[1492,31553,31479],{"class":3210},[1492,31555,31467],{"class":3192},[1492,31557,31558],{"class":29723}," org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile\n",[1492,31560,31561,31563,31565,31567,31569,31571,31573],{"class":3184,"line":29853},[1492,31562,31461],{"class":3188},[1492,31564,31464],{"class":3210},[1492,31566,31479],{"class":3210},[1492,31568,31479],{"class":3210},[1492,31570,31479],{"class":3210},[1492,31572,31540],{"class":3192},[1492,31574,31575],{"class":29723}," org.apache.logging.log4j:log4j-api:jar:2.14.1:compile\n",[16,31577,31578,31579,31582,31583,31586],{},"Spring Boot uses SLF4J which is a facade that builds on top of logging frameworks like Logback and Log4J2. If you take a look at the dependencies in ",[469,31580,31581],{},"spring-boot-starter-logging"," you will notice that ",[469,31584,31585],{},"logback-classic"," is the first dependency.",[3175,31588,31592],{"className":31589,"code":31590,"language":31591,"meta":200,"style":200},"language-xml shiki shiki-themes github-light github-dark github-light","\u003Cdependencies>\n  \u003Cdependency>\n    \u003CgroupId>ch.qos.logback\u003C\u002FgroupId>\n    \u003CartifactId>logback-classic\u003C\u002FartifactId>\n    \u003Cversion>1.2.7\u003C\u002Fversion>\n    \u003Cscope>compile\u003C\u002Fscope>\n  \u003C\u002Fdependency>\n  \u003Cdependency>\n    \u003CgroupId>org.apache.logging.log4j\u003C\u002FgroupId>\n    \u003CartifactId>log4j-to-slf4j\u003C\u002FartifactId>\n    \u003Cversion>2.14.1\u003C\u002Fversion>\n    \u003Cscope>compile\u003C\u002Fscope>\n  \u003C\u002Fdependency>\n  \u003Cdependency>\n    \u003CgroupId>org.slf4j\u003C\u002FgroupId>\n    \u003CartifactId>jul-to-slf4j\u003C\u002FartifactId>\n    \u003Cversion>1.7.32\u003C\u002Fversion>\n    \u003Cscope>compile\u003C\u002Fscope>\n  \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n","xml",[469,31593,31594,31605,31615,31630,31644,31658,31672,31681,31689,31702,31715,31728,31740,31748,31756,31769,31782,31795,31807,31815],{"__ignoreMap":200},[1492,31595,31596,31598,31602],{"class":3184,"line":3185},[1492,31597,17493],{"class":3188},[1492,31599,31601],{"class":31600},"suaqH","dependencies",[1492,31603,31604],{"class":3188},">\n",[1492,31606,31607,31610,31613],{"class":3184,"line":201},[1492,31608,31609],{"class":3188},"  \u003C",[1492,31611,31612],{"class":31600},"dependency",[1492,31614,31604],{"class":3188},[1492,31616,31617,31620,31623,31626,31628],{"class":3184,"line":206},[1492,31618,31619],{"class":3188},"    \u003C",[1492,31621,31622],{"class":31600},"groupId",[1492,31624,31625],{"class":3188},">ch.qos.logback\u003C\u002F",[1492,31627,31622],{"class":31600},[1492,31629,31604],{"class":3188},[1492,31631,31632,31634,31637,31640,31642],{"class":3184,"line":9269},[1492,31633,31619],{"class":3188},[1492,31635,31636],{"class":31600},"artifactId",[1492,31638,31639],{"class":3188},">logback-classic\u003C\u002F",[1492,31641,31636],{"class":31600},[1492,31643,31604],{"class":3188},[1492,31645,31646,31648,31651,31654,31656],{"class":3184,"line":29797},[1492,31647,31619],{"class":3188},[1492,31649,31650],{"class":31600},"version",[1492,31652,31653],{"class":3188},">1.2.7\u003C\u002F",[1492,31655,31650],{"class":31600},[1492,31657,31604],{"class":3188},[1492,31659,31660,31662,31665,31668,31670],{"class":3184,"line":29811},[1492,31661,31619],{"class":3188},[1492,31663,31664],{"class":31600},"scope",[1492,31666,31667],{"class":3188},">compile\u003C\u002F",[1492,31669,31664],{"class":31600},[1492,31671,31604],{"class":3188},[1492,31673,31674,31677,31679],{"class":3184,"line":29825},[1492,31675,31676],{"class":3188},"  \u003C\u002F",[1492,31678,31612],{"class":31600},[1492,31680,31604],{"class":3188},[1492,31682,31683,31685,31687],{"class":3184,"line":29839},[1492,31684,31609],{"class":3188},[1492,31686,31612],{"class":31600},[1492,31688,31604],{"class":3188},[1492,31690,31691,31693,31695,31698,31700],{"class":3184,"line":29853},[1492,31692,31619],{"class":3188},[1492,31694,31622],{"class":31600},[1492,31696,31697],{"class":3188},">org.apache.logging.log4j\u003C\u002F",[1492,31699,31622],{"class":31600},[1492,31701,31604],{"class":3188},[1492,31703,31704,31706,31708,31711,31713],{"class":3184,"line":29867},[1492,31705,31619],{"class":3188},[1492,31707,31636],{"class":31600},[1492,31709,31710],{"class":3188},">log4j-to-slf4j\u003C\u002F",[1492,31712,31636],{"class":31600},[1492,31714,31604],{"class":3188},[1492,31716,31717,31719,31721,31724,31726],{"class":3184,"line":29881},[1492,31718,31619],{"class":3188},[1492,31720,31650],{"class":31600},[1492,31722,31723],{"class":3188},">2.14.1\u003C\u002F",[1492,31725,31650],{"class":31600},[1492,31727,31604],{"class":3188},[1492,31729,31730,31732,31734,31736,31738],{"class":3184,"line":29895},[1492,31731,31619],{"class":3188},[1492,31733,31664],{"class":31600},[1492,31735,31667],{"class":3188},[1492,31737,31664],{"class":31600},[1492,31739,31604],{"class":3188},[1492,31741,31742,31744,31746],{"class":3184,"line":29909},[1492,31743,31676],{"class":3188},[1492,31745,31612],{"class":31600},[1492,31747,31604],{"class":3188},[1492,31749,31750,31752,31754],{"class":3184,"line":29923},[1492,31751,31609],{"class":3188},[1492,31753,31612],{"class":31600},[1492,31755,31604],{"class":3188},[1492,31757,31758,31760,31762,31765,31767],{"class":3184,"line":29937},[1492,31759,31619],{"class":3188},[1492,31761,31622],{"class":31600},[1492,31763,31764],{"class":3188},">org.slf4j\u003C\u002F",[1492,31766,31622],{"class":31600},[1492,31768,31604],{"class":3188},[1492,31770,31771,31773,31775,31778,31780],{"class":3184,"line":29951},[1492,31772,31619],{"class":3188},[1492,31774,31636],{"class":31600},[1492,31776,31777],{"class":3188},">jul-to-slf4j\u003C\u002F",[1492,31779,31636],{"class":31600},[1492,31781,31604],{"class":3188},[1492,31783,31784,31786,31788,31791,31793],{"class":3184,"line":29965},[1492,31785,31619],{"class":3188},[1492,31787,31650],{"class":31600},[1492,31789,31790],{"class":3188},">1.7.32\u003C\u002F",[1492,31792,31650],{"class":31600},[1492,31794,31604],{"class":3188},[1492,31796,31797,31799,31801,31803,31805],{"class":3184,"line":29979},[1492,31798,31619],{"class":3188},[1492,31800,31664],{"class":31600},[1492,31802,31667],{"class":3188},[1492,31804,31664],{"class":31600},[1492,31806,31604],{"class":3188},[1492,31808,31809,31811,31813],{"class":3184,"line":29985},[1492,31810,31676],{"class":3188},[1492,31812,31612],{"class":31600},[1492,31814,31604],{"class":3188},[1492,31816,31818,31821,31823],{"class":3184,"line":31817},20,[1492,31819,31820],{"class":3188},"\u003C\u002F",[1492,31822,31601],{"class":31600},[1492,31824,31604],{"class":3188},[16,31826,31827,31828,31831],{},"If we go back to that tree view there are 2 dependencies with the name log4j in them. I want to make sure we are clear here, these 2 dependencies by themselves will not make you vulnerable to the exploit.  You need to also have the ",[469,31829,31830],{},"log4j-core.jar"," on the classpath and current it is not.",[3175,31833,31835],{"className":29711,"code":31834,"language":29713,"meta":200,"style":200},"\n[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile\n[INFO] |  |  |  |  \\- org.apache.logging.log4j:log4j-api:jar:2.14.1:compile\n\n\n",[469,31836,31837,31843,31857],{"__ignoreMap":200},[1492,31838,31839],{"class":3184,"line":3185},[1492,31840,31842],{"emptyLinePlaceholder":31841},true,"\n",[1492,31844,31845,31847,31849,31851,31853,31855],{"class":3184,"line":201},[1492,31846,31461],{"class":3188},[1492,31848,31464],{"class":3210},[1492,31850,31479],{"class":3210},[1492,31852,31479],{"class":3210},[1492,31854,31467],{"class":3192},[1492,31856,31558],{"class":29723},[1492,31858,31859,31861,31863,31865,31867,31869,31871],{"class":3184,"line":206},[1492,31860,31461],{"class":3188},[1492,31862,31464],{"class":3210},[1492,31864,31479],{"class":3210},[1492,31866,31479],{"class":3210},[1492,31868,31479],{"class":3210},[1492,31870,31540],{"class":3192},[1492,31872,31575],{"class":29723},[33,31874,31876],{"id":31875},"switching-to-log4j2","Switching to Log4J2",[16,31878,31879,31880,31882,31883,31886,31887,31890],{},"So if we aren’t vulnerable by default, what actions will make us open to this exploit and how do we fix it. Remember that by default the ",[469,31881,13375],{}," will bring our ",[469,31884,31885],{},"spring-boot-logging"," starter that configures Logback for us. If you want to use a different framework like Log4J2, you need to first exclude the logging starter. Next you can include the ",[469,31888,31889],{},"spring-boot-starter-log4j2"," which will configure Log4J2.",[3175,31892,31894],{"className":29711,"code":31893,"language":29713,"meta":200,"style":200},"\u003Cdependencies>\n  \u003Cdependency>\n      \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n      \u003CartifactId>spring-boot-starter\u003C\u002FartifactId>\n      \u003Cexclusions>\n          \u003Cexclusion>\n              \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n              \u003CartifactId>spring-boot-starter-logging\u003C\u002FartifactId>\n          \u003C\u002Fexclusion>\n      \u003C\u002Fexclusions>\n  \u003C\u002Fdependency>\n  \u003Cdependency>\n      \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n      \u003CartifactId>spring-boot-starter-log4j2\u003C\u002FartifactId>\n  \u003C\u002Fdependency>\n\n\u003C\u002Fdependencies>\n",[469,31895,31896,31904,31912,31928,31941,31950,31960,31973,31985,31994,32003,32012,32020,32032,32044,32052,32056],{"__ignoreMap":200},[1492,31897,31898,31900,31902],{"class":3184,"line":3185},[1492,31899,17493],{"class":3210},[1492,31901,31601],{"class":3188},[1492,31903,31604],{"class":3210},[1492,31905,31906,31908,31910],{"class":3184,"line":201},[1492,31907,31609],{"class":3210},[1492,31909,31612],{"class":3192},[1492,31911,31604],{"class":3188},[1492,31913,31914,31917,31919,31922,31925],{"class":3184,"line":206},[1492,31915,31916],{"class":3210},"      \u003C",[1492,31918,31622],{"class":3192},[1492,31920,31921],{"class":3188},">",[1492,31923,31924],{"class":29723},"org.springframework.boot",[1492,31926,31927],{"class":3188},"\u003C\u002FgroupId>\n",[1492,31929,31930,31932,31934,31936,31938],{"class":3184,"line":9269},[1492,31931,31916],{"class":3210},[1492,31933,31636],{"class":3192},[1492,31935,31921],{"class":3188},[1492,31937,13375],{"class":29723},[1492,31939,31940],{"class":3188},"\u003C\u002FartifactId>\n",[1492,31942,31943,31945,31948],{"class":3184,"line":29797},[1492,31944,31916],{"class":3210},[1492,31946,31947],{"class":3192},"exclusions",[1492,31949,31604],{"class":3188},[1492,31951,31952,31955,31958],{"class":3184,"line":29811},[1492,31953,31954],{"class":3210},"          \u003C",[1492,31956,31957],{"class":3192},"exclusion",[1492,31959,31604],{"class":3188},[1492,31961,31962,31965,31967,31969,31971],{"class":3184,"line":29825},[1492,31963,31964],{"class":3210},"              \u003C",[1492,31966,31622],{"class":3192},[1492,31968,31921],{"class":3188},[1492,31970,31924],{"class":29723},[1492,31972,31927],{"class":3188},[1492,31974,31975,31977,31979,31981,31983],{"class":3184,"line":29839},[1492,31976,31964],{"class":3210},[1492,31978,31636],{"class":3192},[1492,31980,31921],{"class":3188},[1492,31982,31581],{"class":29723},[1492,31984,31940],{"class":3188},[1492,31986,31987,31989,31992],{"class":3184,"line":29853},[1492,31988,31954],{"class":3210},[1492,31990,31991],{"class":3192},"\u002Fexclusion",[1492,31993,31604],{"class":3188},[1492,31995,31996,31998,32001],{"class":3184,"line":29867},[1492,31997,31916],{"class":3210},[1492,31999,32000],{"class":3192},"\u002Fexclusions",[1492,32002,31604],{"class":3188},[1492,32004,32005,32007,32010],{"class":3184,"line":29881},[1492,32006,31609],{"class":3210},[1492,32008,32009],{"class":3192},"\u002Fdependency",[1492,32011,31604],{"class":3188},[1492,32013,32014,32016,32018],{"class":3184,"line":29895},[1492,32015,31609],{"class":3210},[1492,32017,31612],{"class":3192},[1492,32019,31604],{"class":3188},[1492,32021,32022,32024,32026,32028,32030],{"class":3184,"line":29909},[1492,32023,31916],{"class":3210},[1492,32025,31622],{"class":3192},[1492,32027,31921],{"class":3188},[1492,32029,31924],{"class":29723},[1492,32031,31927],{"class":3188},[1492,32033,32034,32036,32038,32040,32042],{"class":3184,"line":29923},[1492,32035,31916],{"class":3210},[1492,32037,31636],{"class":3192},[1492,32039,31921],{"class":3188},[1492,32041,31889],{"class":29723},[1492,32043,31940],{"class":3188},[1492,32045,32046,32048,32050],{"class":3184,"line":29937},[1492,32047,31609],{"class":3210},[1492,32049,32009],{"class":3192},[1492,32051,31604],{"class":3188},[1492,32053,32054],{"class":3184,"line":29951},[1492,32055,31842],{"emptyLinePlaceholder":31841},[1492,32057,32058,32060,32063],{"class":3184,"line":29965},[1492,32059,17493],{"class":3210},[1492,32061,32062],{"class":3188},"\u002Fdependencies",[1492,32064,31604],{"class":3210},[16,32066,32067,32068,32071],{},"This will result in the ",[469,32069,32070],{},"log4j-core"," dependency which is now going to make us vulnerable to the exploit.",[3175,32073,32075],{"className":29711,"code":32074,"language":29713,"meta":200,"style":200},"\u003Cdependency>\n  \u003CgroupId>org.apache.logging.log4j\u003C\u002FgroupId>\n  \u003CartifactId>log4j-core\u003C\u002FartifactId>\n  \u003Cversion>2.14.1\u003C\u002Fversion>\n  \u003Cscope>compile\u003C\u002Fscope>\n\u003C\u002Fdependency>\n",[469,32076,32077,32085,32098,32110,32124,32138],{"__ignoreMap":200},[1492,32078,32079,32081,32083],{"class":3184,"line":3185},[1492,32080,17493],{"class":3210},[1492,32082,31612],{"class":3188},[1492,32084,31604],{"class":3210},[1492,32086,32087,32089,32091,32093,32096],{"class":3184,"line":201},[1492,32088,31609],{"class":3210},[1492,32090,31622],{"class":3192},[1492,32092,31921],{"class":3188},[1492,32094,32095],{"class":29723},"org.apache.logging.log4j",[1492,32097,31927],{"class":3188},[1492,32099,32100,32102,32104,32106,32108],{"class":3184,"line":206},[1492,32101,31609],{"class":3210},[1492,32103,31636],{"class":3192},[1492,32105,31921],{"class":3188},[1492,32107,32070],{"class":29723},[1492,32109,31940],{"class":3188},[1492,32111,32112,32114,32116,32118,32121],{"class":3184,"line":9269},[1492,32113,31609],{"class":3210},[1492,32115,31650],{"class":3192},[1492,32117,31921],{"class":3188},[1492,32119,32120],{"class":29723},"2.14.1",[1492,32122,32123],{"class":3188},"\u003C\u002Fversion>\n",[1492,32125,32126,32128,32130,32132,32135],{"class":3184,"line":29797},[1492,32127,31609],{"class":3210},[1492,32129,31664],{"class":3192},[1492,32131,31921],{"class":3188},[1492,32133,32134],{"class":29723},"compile",[1492,32136,32137],{"class":3188},"\u003C\u002Fscope>\n",[1492,32139,32140,32142,32144],{"class":3184,"line":29811},[1492,32141,17493],{"class":3210},[1492,32143,32009],{"class":3188},[1492,32145,31604],{"class":3210},[16,32147,32148,32149,32152,32153,32156,32157,32159],{},"This doesn’t mean that you can’t use Log4J2, it just means you can’t use that specific version. Anything \u003C ",[469,32150,32151],{},"2.15.0"," is vulnerable and at the time of writing this newsletter the current version is ",[469,32154,32155],{},"2.17.0",". All you need to do to bump the version is to add a new property to the properties section in your ",[469,32158,31111],{}," that defines the version of Log4j2 that you want to use.",[3175,32161,32163],{"className":29711,"code":32162,"language":29713,"meta":200,"style":200},"\u003Cproperties>\n    \u003Cjava.version>17\u003C\u002Fjava.version>\n    \u003Clog4j2.version>2.17.0\u003C\u002Flog4j2.version>\n\u003C\u002Fproperties>\n",[469,32164,32165,32174,32189,32203],{"__ignoreMap":200},[1492,32166,32167,32169,32172],{"class":3184,"line":3185},[1492,32168,17493],{"class":3210},[1492,32170,32171],{"class":3188},"properties",[1492,32173,31604],{"class":3210},[1492,32175,32176,32178,32181,32183,32186],{"class":3184,"line":201},[1492,32177,31619],{"class":3210},[1492,32179,32180],{"class":3192},"java.version",[1492,32182,31921],{"class":3188},[1492,32184,32185],{"class":29723},"17",[1492,32187,32188],{"class":3188},"\u003C\u002Fjava.version>\n",[1492,32190,32191,32193,32196,32198,32200],{"class":3184,"line":206},[1492,32192,31619],{"class":3210},[1492,32194,32195],{"class":3192},"log4j2.version",[1492,32197,31921],{"class":3188},[1492,32199,32155],{"class":29723},[1492,32201,32202],{"class":3188},"\u003C\u002Flog4j2.version>\n",[1492,32204,32205,32207,32210],{"class":3184,"line":9269},[1492,32206,17493],{"class":3210},[1492,32208,32209],{"class":3188},"\u002Fproperties",[1492,32211,31604],{"class":3210},[33,32213,32215],{"id":32214},"spring-boot-log4j2-vulnerability-video","Spring Boot Log4J2 Vulnerability Video",[16,32217,32218],{},"Everything that we just talked about here is in the video below.",[16,32220,32221],{},[469,32222,32223],{},"youtube:https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=nGqVYiwu8uo",[16,32225,32226],{},"As a small YouTuber you need to try and jump on trends as they are happening. I know these are numbers are all relative but for me it was best performing video of all time in the first 1,3, and 5 days. At the time of this writing I have had over 2,000 views in the first 5 videos. If you were one of those 2,000 viewers, thank you!",[16,32228,32229],{},[74,32230],{"alt":32231,"src":32232},"log4j2_video_stats.png","\u002Fimages\u002Fnewsletter\u002F2021\u002F12\u002F13\u002Flog4j2_video_stats.png",[28,32234,21516],{"id":10953},[33,32236,11453],{"id":11452},[1271,32238,32239,32246,32253],{},[1274,32240,32241],{},[23,32242,32245],{"href":32243,"rel":32244},"https:\u002F\u002Fjoshlong.com\u002Fjl\u002FblogPost\u002Fkubernetes-java-client-and-spring-native-and-graalvm.html",[101],"The Kubernetes Java Client and GraalVM support with Spring Native 0.11.x",[1274,32247,32248],{},[23,32249,32252],{"href":32250,"rel":32251},"https:\u002F\u002Fgo.dev\u002Fblog\u002Fgo1.18beta1",[101],"Go 1.18 Beta 1 is available, with generics",[1274,32254,32255],{},[23,32256,32259],{"href":32257,"rel":32258},"https:\u002F\u002Fspring.io\u002Fblog\u002F2021\u002F12\u002F17\u002Fclient-side-development-with-spring-boot-applications",[101],"Client Side Development with Spring Boot Applications",[33,32261,11465],{"id":30},[1271,32263,32264,32271,32278],{},[1274,32265,32266],{},[23,32267,32270],{"href":32268,"rel":32269},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=7MKVCmNKT1c",[101],"Introducing AWS Amplify Studio",[1274,32272,32273],{},[23,32274,32277],{"href":32275,"rel":32276},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=GEYkwfYytAM",[101],"Effortless typography, even in dark mode — Tailwind CSS Typography v0.5",[1274,32279,32280],{},[23,32281,32284],{"href":32282,"rel":32283},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=khh6Xo8YNvY",[101],"Podcasting coming to YouTube…",[33,32286,13650],{"id":973},[1271,32288,32289],{},[1274,32290,32291],{},[23,32292,32295],{"href":32293,"rel":32294},"https:\u002F\u002Fworkingcode.dev\u002Fepisodes\u002F053-product-management-with-adam-lehman\u002F",[101],"Working Podcast: Episode 053: Product Management with Adam Lehman",[33,32297,18092],{"id":18091},[1271,32299,32300],{},[1274,32301,32302],{},[23,32303,32306],{"href":32304,"rel":32305},"https:\u002F\u002Fjamesclear.com\u002F3-2-1",[101],"James Clear",[33,32308,32310],{"id":32309},"jobs","💻 Jobs",[1271,32312,32313],{},[1274,32314,32315,32320],{},[23,32316,32319],{"href":32317,"rel":32318},"https:\u002F\u002Faxoniq.io\u002Fjob-overview\u002Ffrontend-developer-cloud-team",[101],"Frontend developer - Cloud Team (Remote)"," ****",[33,32322,12149],{"id":12148},[33,32324,21608],{"id":384},[16,32326,32327],{},[23,32328,32329],{"href":32329,"rel":32330},"https:\u002F\u002Ftwitter.com\u002FNotionHQ\u002Fstatus\u002F1470824658941341696",[101],[28,32332,32334],{"id":32333},"until-next-year","Until Next Year",[16,32336,32337],{},"Thank you for taking the time to let me ramble. I hope you enjoyed this and all of the newsletters that preceded it this year. I want to take this opportunity to wish you and your family a very happy, healthy holidays and New Year. As always friends ...",[16,32339,9630,32340,191,32342,32344,32346,32348],{},[189,32341],{},[189,32343],{},[23,32345,11491],{"href":11490},[189,32347],{},[23,32349,198],{"href":196,"rel":32350},[101],[3325,32352,32353],{},"html pre.shiki code .s-uPX, html code.shiki .s-uPX{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#24292E}html pre.shiki code .sibLe, html code.shiki .sibLe{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#D73A49}html pre.shiki code .sZnax, html code.shiki .sZnax{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#6F42C1}html pre.shiki code .suV6U, html code.shiki .suV6U{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .suaqH, html code.shiki .suaqH{--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#22863A}",{"title":200,"searchDepth":201,"depth":201,"links":32355},[32356,32360,32369],{"id":31424,"depth":201,"text":31425,"children":32357},[32358,32359],{"id":31875,"depth":206,"text":31876},{"id":32214,"depth":206,"text":32215},{"id":10953,"depth":201,"text":21516,"children":32361},[32362,32363,32364,32365,32366,32367,32368],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":18091,"depth":206,"text":18092},{"id":32309,"depth":206,"text":32310},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":32333,"depth":201,"text":32334},{"_id":32371,"path":32372,"title":32373,"description":32374,"meta":32375,"body":32378},"newsletter\u002Fnewsletter\u002F2021\u002F12\u002F06\u002Fthankful.md","\u002Fnewsletter\u002F2021\u002F12\u002F06\u002Fthankful","What I'm thankful for, AWS, Course Graphics & YouTube","After taking a week off due to Thanksgiving I'm back with another edition of the newsletter. I had some time to think about what I am thankful for over the holiday and I figured I would start by sharing that with you.",{"slug":32376,"date":32377},"thankful","2021-12-06T07:30:00.000Z",{"type":13,"value":32379,"toc":32704},[32380,32382,32386,32389,32393,32396,32399,32405,32409,32412,32416,32419,32422,32431,32434,32437,32441,32444,32447,32451,32454,32463,32472,32486,32489,32492,32501,32510,32514,32522,32531,32551,32554,32560,32562,32571,32576,32579,32581,32583,32613,32615,32638,32640,32656,32658,32665,32667,32669,32678,32681,32684,32686,32691],[16,32381,32374],{},[28,32383,32385],{"id":32384},"thankful-for","Thankful for",[16,32387,32388],{},"It's been a crazy couple of years on this planet. I have been so focused this year on things in my life that I would like to change that I lost sight of so many things I am grateful for. This isn't the entire list, but it is the important ones.",[33,32390,32392],{"id":32391},"you","You",[16,32394,32395],{},"I am thankful for each and every one of you. Thank you for signing up for this newsletter, reading my articles, watching my videos, and supporting the content that I put out there. Some of you pay for my content and honestly I'm humbled that you choose to learn from me.  I love to learn and I love to teach the things that I find interesting back to you.",[16,32397,32398],{},"I love hearing from you so please reach out to me by replying to this email or like Chol did by tweeting at me. Thank you for the kind words Chol and I am glad to hear that my monolothic solution worked for you.",[16,32400,32401],{},[23,32402,32403],{"href":32403,"rel":32404},"https:\u002F\u002Ftwitter.com\u002Factualsudo\u002Fstatus\u002F1467470501400354818",[101],[33,32406,32408],{"id":32407},"my-family","My Family",[16,32410,32411],{},"My family is the reason I get out of bed every single day. They are my rock and they push me to be a better Husband, Father, and person. I want them to be proud of me and I think about that often.  I would be lying if I said that raising 2 babies through a pandemic has been easy but I think we are all stronger and closer because of it. It's been a dream come true watching them learn and grow and I am thankful for that ❤️",[33,32413,32415],{"id":32414},"health","Health",[16,32417,32418],{},"In the time of a global pandemic, I don't know how you don't think about your health. My family has remained healthy through these tough times and I am so thankful for that.",[16,32420,32421],{},"Personally, it's been a rough year for me. For those who don't know, I have Type 2 diabetes. Outside of my family and very close friends I don't think I have ever told anyone that. It probably has something to do with me being ashamed or embarrassed but if you can't tell 4,000+ of your closest friends on a newsletter, who can you tell 🤷‍♂️",[16,32423,32424,32425,32430],{},"I don't want to get into the specifics on how I got here but I will share with you what has been going on lately. This year between stress, not sleeping (baby), lack of exercise (see previous 2), not testing every day and bad nutritional choices on my part my A1C reached an 11.1. For those of you that don't know, that is ",[734,32426,32427],{},[161,32428,32429],{},"very"," bad.",[16,32432,32433],{},"This was a huge wake-up call for me and a reminder that nothing I do is more important than my health. Your health is everything and if you don't get that right it will affect everything else in your life. I have always loved working out, it is my escape and something I get to do for myself. There was a huge lack of that this year and that has been affecting me mentally and physically. Over the last month or so I have gotten back to running and It's amazing what it can do for your mind and body!",[16,32435,32436],{},"I'm sharing this with you as a reminder that nothing is more important than your health.",[33,32438,32440],{"id":32439},"my-career","My Career",[16,32442,32443],{},"I get to do what I love each and every day and I don't know that everyone gets to say that. When I put some headphones on and sit down to write code or create content I can't tell you how happy I am. Life is too short friends, If you're not happy it's up to fix that.",[16,32445,32446],{},"I'm not telling you to go quit your job because at the end of the day most of us need to work but you need to find something that gets you out of bed in the morning and that inspires you.",[28,32448,32450],{"id":32449},"amazon-web-services-aws","Amazon Web Services (AWS)",[16,32452,32453],{},"I have some experience with AWS but mostly building tutorials and demos. I signed up for a free account about 5 years, know my way around the console and at high level can tell you what a lot of the common services are used for.",[16,32455,32456,32457,32462],{},"I put together a nice demo for my ",[23,32458,32461],{"href":32459,"rel":32460},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Fspring-boot-2\u002F?referralCode=ECB6B9F8EF104672AF4A",[101],"Spring Boot 2 course"," on how to deploy a Spring Boot Application on AWS using Elastic Beanstalk. AWS is something I have wanted to level up on and there is no time like the present.",[16,32464,32465,32466,32471],{},"With all of the Black Friday sales going on I decided to invest in myself. ",[23,32467,32470],{"href":32468,"rel":32469},"https:\u002F\u002Facloudguru.com\u002F",[101],"A Cloud Guru"," was running a 40% off promotion (it's still valid) so I decided to pickup a yearly subscription. I had a subscription to them a couple of years ago so I already knew about the amazing content they produce. My main goal with this subscription is to start preparing for certifications. These are the certs I have my eye on but I honestly have no long this will take me.",[1271,32473,32474,32477,32480,32483],{},[1274,32475,32476],{},"Cloud Practitioner",[1274,32478,32479],{},"Developer Associate",[1274,32481,32482],{},"Solutions Architect Associate",[1274,32484,32485],{},"Solutions Architect Professional",[16,32487,32488],{},"If anyone has all four of these certs I would love to know how long it took you to prepare and take the exam for all of them. I am hoping to finish these quickly but I'm not sure what a realistic goal should be.",[16,32490,32491],{},"The second part to this puzzle is architecting, building and deploying solutions on AWS. I have a couple of ideas for projects and the first one would make a great fit on AWS. To accomplish this you really need to understand the different technologies used to build out these solutions.",[16,32493,32494,32495,32500],{},"As you know I'm also a huge fan of Java & Spring Boot so to learn how to go from zero to production with Spring Boot and AWS I picked up this book ",[23,32496,32499],{"href":32497,"rel":32498},"https:\u002F\u002Fleanpub.com\u002Fstratospheric",[101],"Stratospheric"," which does a great job of covering that. I know 2 of the authors on this book Tom & Phillip and I love everything the put out there so I am really excited to dive into this one.",[16,32502,32503,32504,32509],{},"If you have any resources for AWS or tips & tricks please reach out to me. I got really jealous of all the tweets from ",[734,32505,32506],{},[161,32507,32508],{},"re:invent"," this week and I hope to be there next year!",[28,32511,32513],{"id":32512},"course-graphics","Course Graphics",[16,32515,32516,32517,32521],{},"I have a bunch of courses that I have created over at ",[23,32518,32520],{"href":24933,"rel":32519},[101],"danvega.dev\u002Fcourses",". Each of the course graphics are something that I put together and they are mostly just stock graphics I found over the years. I want to get some custom graphics designed for each of the courses and I also wanted them to follow some type of theme.",[16,32523,32524,32525,32530],{},"With that I went over to ",[23,32526,32529],{"href":32527,"rel":32528},"https:\u002F\u002Fupwork.com\u002F",[101],"Upwork"," and put up a job description of what I was looking for. In there I said that these were 3 examples of course graphics that I really love.",[1271,32532,32533,32539,32545],{},[1274,32534,32535],{},[23,32536,32537],{"href":32537,"rel":32538},"https:\u002F\u002Fvueschool.io\u002Fcourses",[101],[1274,32540,32541],{},[23,32542,32543],{"href":32543,"rel":32544},"https:\u002F\u002Fm.academy\u002Fcourses\u002F",[101],[1274,32546,32547],{},[23,32548,32549],{"href":32549,"rel":32550},"https:\u002F\u002Fegghead.io\u002Fq\u002Ftypescript",[101],[16,32552,32553],{},"I wanted something unique and I excited to share with you one of the results. The following graphic was created for my Groovy Course. What do you think?",[16,32555,32556],{},[74,32557],{"alt":32558,"src":32559},"Groovy Course Cover","\u002Fimages\u002Fnewsletter\u002F2021\u002F12\u002F06\u002Fgroovy-course-cover.jpg",[28,32561,3363],{"id":4557},[16,32563,32564,32565,32570],{},"Back in April of this year I created a video on how to ",[23,32566,32569],{"href":32567,"rel":32568},"https:\u002F\u002Fyoutu.be\u002Fe8aSyQo0nHo",[101],"Create Your First Spring App",". The idea here was to create a spring application from scratch without Spring Boot. I think this is a really great way to understand what Spring Boot is doing for you behind the scenes. A new subscriber, John left this comment and it made my day.",[2238,32572,32573],{},[16,32574,32575],{},"This is really helpful because as a beginner I now have done a lot of research until I finally had created my little big picture (LOL) in the world of Spring and what all to learn. I truly must say that without understanding whats going on under the hood of spring boot you have a much longer way to understand what this framework is about. Dependency Injection (Bean Factory vs. ApplicationContext), Annotations, Beans, (also Generics, Reflections etc.) and my conclusion is you should learn Spring before diving into Spring Boot. There are a lot of fancy courses and videos out there but without understanding the internals ... well, it's more difficult. I would like to see a video were you build a bigger Spring app with Spring MVC, JDBC, REST etc.. Thanks for the content, this helped me so much, this is exactly the maximum level of complexity I need. Hope to see more about Spring internals from you in the future. Subscribed!",[16,32577,32578],{},"I know I'm going to sound like a broken record here but I love hearing you from you guys. This comment made my day and helps validate that the content I am creating is helping people. Thanks John 👏🏻👨‍🏫",[28,32580,21516],{"id":10953},[33,32582,11453],{"id":11452},[1271,32584,32585,32592,32599,32606],{},[1274,32586,32587],{},[23,32588,32591],{"href":32589,"rel":32590},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fjava\u002Fsay-goodbye-to-project-files-in-1-1-0\u002F",[101],"Say goodbye to “.project” files in Language Support for Java™ 1.1.0",[1274,32593,32594],{},[23,32595,32598],{"href":32596,"rel":32597},"https:\u002F\u002Fapplitools.com\u002Fblog\u002Fwhats-new-cypress-9\u002F",[101],"What’s New in Cypress 9",[1274,32600,32601],{},[23,32602,32605],{"href":32603,"rel":32604},"https:\u002F\u002Fwww.peelar.dev\u002Fposts\u002Ffirst-look-at-remix",[101],"First look at Remix",[1274,32607,32608],{},[23,32609,32612],{"href":32610,"rel":32611},"https:\u002F\u002Fblog.plasmic.app\u002Fposts\u002Fwhy-remix-is-worth-your-attention\u002F",[101],"Why Remix is worth your attention",[33,32614,11465],{"id":30},[1271,32616,32617,32624,32631],{},[1274,32618,32619],{},[23,32620,32623],{"href":32621,"rel":32622},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AeiBk2hqZTI",[101],"Three Steps to Accelerate Java Application Performance (Scott Seighman)",[1274,32625,32626],{},[23,32627,32630],{"href":32628,"rel":32629},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ow5kdhDa_pk",[101],"Meet JetBrains Fleet — The Next-generation IDE by JetBrains",[1274,32632,32633],{},[23,32634,32637],{"href":32635,"rel":32636},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=8_Xs8Ik0h1w&t=3327s",[101],"AWS Amplify Studio Announcement",[33,32639,22284],{"id":16575},[1271,32641,32642,32649],{},[1274,32643,32644],{},[23,32645,32648],{"href":32646,"rel":32647},"https:\u002F\u002Fremix.run\u002F",[101],"Remix - Build Better Websites",[1274,32650,32651],{},[23,32652,32655],{"href":32653,"rel":32654},"https:\u002F\u002Fsupabase.com\u002F",[101],"Open Source PosgreSQL Studio",[33,32657,14122],{"id":14121},[1271,32659,32660],{},[1274,32661,32662],{},[23,32663,32499],{"href":32497,"rel":32664},[101],[33,32666,12149],{"id":12148},[33,32668,25701],{"id":25700},[1271,32670,32671],{},[1274,32672,32673],{},[23,32674,32677],{"href":32675,"rel":32676},"https:\u002F\u002Facloudguru.com\u002Fcourse\u002Faws-certified-cloud-practitioner-2020",[101],"AWS Certified Cloud Practitioner 2020",[33,32679,12149],{"id":32680},"️-quote-of-the-week-1",[16,32682,32683],{},"“Physical fitness is the first requisite of happiness.” – Joseph Pilates.",[28,32685,172],{"id":171},[16,32687,25399,32688,11333],{},[23,32689,11332],{"href":11330,"rel":32690},[101],[16,32692,9630,32693,191,32695,32697,32699,32701],{},[189,32694],{},[189,32696],{},[23,32698,11491],{"href":11490},[189,32700],{},[23,32702,198],{"href":196,"rel":32703},[101],{"title":200,"searchDepth":201,"depth":201,"links":32705},[32706,32712,32713,32714,32715,32724],{"id":32384,"depth":201,"text":32385,"children":32707},[32708,32709,32710,32711],{"id":32391,"depth":206,"text":32392},{"id":32407,"depth":206,"text":32408},{"id":32414,"depth":206,"text":32415},{"id":32439,"depth":206,"text":32440},{"id":32449,"depth":201,"text":32450},{"id":32512,"depth":201,"text":32513},{"id":4557,"depth":201,"text":3363},{"id":10953,"depth":201,"text":21516,"children":32716},[32717,32718,32719,32720,32721,32722,32723],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":25700,"depth":206,"text":25701},{"id":32680,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":32726,"path":32727,"title":32728,"description":32729,"meta":32730,"body":32732},"newsletter\u002Fnewsletter\u002F2021\u002F11\u002F22\u002Fcontent-creation.md","\u002Fnewsletter\u002F2021\u002F11\u002F22\u002Fcontent-creation","Content Creation & My MacBook Pro Review & Setup","It's hard to believe that it's Thanksgiving this week here in the US and that 2021 is almost over. If you're in the US and celebrating I would like to wish you and your family a Happy Thanksgiving. I don't mind fall but it's quickly moving from fall to winter here in Northeast Ohio where we recently saw some snow ❄️ and temps in the 20s 😩",{"slug":24509,"date":32731},"2021-11-22T09:00:00.000Z",{"type":13,"value":32733,"toc":32990},[32734,32736,32740,32752,32755,32758,32763,32766,32768,32771,32774,32783,32786,32792,32806,32810,32818,32821,32824,32828,32831,32833,32842,32845,32848,32851,32857,32860,32864,32867,32873,32876,32878,32880,32903,32905,32928,32930,32946,32948,32957,32959,32962,32964,32970,32972,32977],[16,32735,32729],{},[28,32737,32739],{"id":32738},"macbook-review-setup-guide","MacBook Review & Setup Guide",[16,32741,32742,32743,529,32746,32751],{},"This week I had a chance to put together a ",[23,32744,6034],{"href":29458,"rel":32745},[101],[23,32747,32750],{"href":32748,"rel":32749},"https:\u002F\u002Fyoutu.be\u002Ft-hEOyUnaXQ",[101],"YouTube video"," on my M1 MacBook Pro review and setup. I actually got all the way through the video and started editing it and realized that I was using the wrong microphone.",[16,32753,32754],{},"This is because I use a program called Krisp which does a really good job at filtering out background noise. Apparently, it selected the wrong microphone and was using the onboard one. I swear I didn't do this on purpose and it doesn't sound as good as my USB microphone but it turned out ok and is just another thing that impresses me about this laptop.",[16,32756,32757],{},"I received the following email from someone who read my review:",[2238,32759,32760],{},[16,32761,32762],{},"Hi, Dan:\nThanks for sharing information about setting up your new Mac Book.  I have never used a Mac before and was hesitant to buy an expensive laptop and not have setup information for development work.  As soon as I saw the title of your post, I decided to buy it.  Thanks again. - Jorge",[16,32764,32765],{},"I just want to say thank you for taking the time to send that in Jorge. Sometimes It can get lonely on this side of the keyboard and your feedback means a lot to me.",[28,32767,24510],{"id":24509},[16,32769,32770],{},"I have been thinking about content creation a lot lately. As we head into the holidays and the new year quickly approaches I want to clean things up a bit so I can set (and hopefully accomplish) some goals next year.",[33,32772,17231],{"id":32773},"newsletter",[16,32775,32776,32777,32782],{},"I am working on a video this week where I will show you how I create this newsletter that you are reading. Each week I start with a new template in Notion and as the week goes on I try and add content to it. At the end of the week, I will publish the newsletter on my website and send it off to you using ",[23,32778,32781],{"href":32779,"rel":32780},"https:\u002F\u002Fapp.convertkit.com\u002Freferrals\u002Fl\u002Fad254512-ed8b-4542-85d0-a02af83e2f7c",[101],"ConvertKit",". I'm hoping someone finds this useful so look out for this early this week.",[33,32784,32781],{"id":32785},"convertkit",[16,32787,9530,32788,32791],{},[23,32789,32781],{"href":32779,"rel":32790},[101],", it is an amazing tool that I am not using to my advantage. To do so I started off by cleaning up my account and removing all of the old forms and landing pages that I was no longer using. Next, I removed all of my old rules, tags, segments, and sequences. The only way you can land on my email list now is by signing up for this newsletter and I want to add a sequence (welcome email) around that.",[16,32793,32794,32795,32800,32801,32805],{},"I learned this week that ConvertKit had a feature called Tip Jars. This allows creators to create a simple form and earn tips from their audience. I decided to ",[23,32796,32799],{"href":32797,"rel":32798},"https:\u002F\u002Fdanvega.ck.page\u002Fproducts\u002Fcontent-creator-tip-jar",[101],"create one"," and you will start to see this embedded in blog posts. I might move this form to my website soon but for now, I will just host it on ConvertKit. If you want to ",[23,32802,32804],{"href":32797,"rel":32803},[101],"buy me a coffee",", this is the easiest way to do so 😉",[33,32807,32809],{"id":32808},"teachable","Teachable",[16,32811,32812,32813,32817],{},"For anyone new around here, I ",[23,32814,32816],{"href":24933,"rel":32815},[101],"teach courses online",". When I started out creating courses I did so on Udemy. When you don't have an audience a marketplace like Udemy is a great place to start. After I started to gain a following I thought that I would self host my courses and instead of splitting the profits with Udemy I would keep them for myself, well more specifically for my wife's Amazon addiction.",[16,32819,32820],{},"The problem with that was now I have to maintain my courses on two different platforms. When you don't have a marketplace you have to do all of the marketing for your courses yourself and on top of not having a lot of experience doing that, I just don't have the time. Most of my courses are still selling well on Udemy but I don't sell any courses on Teachable. For this reason, I decided that to downgrade to a free account which means I won't be selling courses on that platform anymore.",[16,32822,32823],{},"I'm not sure what this means for the future of my courses. I had a plan to release a free course on building REST APIs in Spring Boot that would turn into a full course. I will figure out how to make that happen but for now and sticking with my theme of simplifying things as we head into the new year this just seemed like the right move.",[33,32825,32827],{"id":32826},"udemy","Udemy",[16,32829,32830],{},"Speaking of Udemy, this is another part of my business that I need to get cleaned up heading into the new year. Trying to keep up with student questions on Udemy is not an easy task. In the past, I found some great people on Upwork to help me with that workload. I currently don't have anyone helping me and I need to fix that very soon. There is also a need to update course content and I just need to find some time to determine what needs updating and get it done. If you're a Udemy student of mine, thank you for your patience.",[33,32832,3363],{"id":4557},[16,32834,32835,32836,32841],{},"In addition to the MacBook Review and setup video I also released a tutorial on turning a ",[23,32837,32840],{"href":32838,"rel":32839},"https:\u002F\u002Fyoutu.be\u002FEObFO5ohikg",[101],"stream into a list"," in Java 16. For those counting that is 2 videos in a week and I haven't done that in about a year.",[16,32843,32844],{},"You know that question people ask \"If money wasn't an issue and you could do anything for work what would you do?\" for me that's easy, I would learn and teach what I've learned to others. The best place to teach is YouTube and I'm hoping to do some big things in 2022. To do so I realized that I have to have a better system for creating videos.",[16,32846,32847],{},"I have been using Notion to organize my video ideas for a while now but I haven't done a great job of turning those ideas into videos. With that, I decided to take an approach from the software development world and spend time \"grooming the backlog\".",[16,32849,32850],{},"I flush out an idea with as much detail as possible and when I feel like it's ready to go I move it into the ready-to-film column. Now when I sit down to record I don't really have to think about what that video is going to look like. That has already been figured out and I can just start creating!",[16,32852,32853],{},[74,32854],{"alt":32855,"src":32856},"Notion Video Backlog","\u002Fimages\u002Fnewsletter\u002F2021\u002F11\u002F22\u002Fnotion_video_backlog.png",[16,32858,32859],{},"If anyone is interested in seeing my Notion setup for creating videos let me know and I will put that together.",[28,32861,32863],{"id":32862},"netlify","Netlify",[16,32865,32866],{},"I am a huge fan of Netlify and this week they announced that they raised $105 million in funding. They already make building for the web easy and I am excited to see what they do next!",[16,32868,32869],{},[23,32870,32871],{"href":32871,"rel":32872},"https:\u002F\u002Ftwitter.com\u002Fnetlify\u002Fstatus\u002F1460973163823697922",[101],[16,32874,32875],{},"If anyone actually reads this whole newsletter you deserve a prize 🥳",[28,32877,21516],{"id":10953},[33,32879,11453],{"id":11452},[1271,32881,32882,32889,32896],{},[1274,32883,32884],{},[23,32885,32888],{"href":32886,"rel":32887},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2021\u002F11\u002Fkubernetes-and-docker-updates-2021-3\u002F",[101],"Kubernetes and Docker Updates in IntelliJ IDEA 2021.3",[1274,32890,32891],{},[23,32892,32895],{"href":32893,"rel":32894},"https:\u002F\u002Fdeno.com\u002Fblog\u002Fslack",[101],"Slack Introduces New Platform With Help From Deno",[1274,32897,32898],{},[23,32899,32902],{"href":32900,"rel":32901},"https:\u002F\u002Fwww.netlify.com\u002Fblog\u002F2021\u002F11\u002F17\u002Ffirst-look-announcing-api-authentication-on-netlify\u002F",[101],"First Look: Announcing API Authentication on Netlify",[33,32904,11465],{"id":30},[1271,32906,32907,32914,32921],{},[1274,32908,32909],{},[23,32910,32913],{"href":32911,"rel":32912},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=m_uo9sUvVGA",[101],"New Notion Feature - Simple Tables",[1274,32915,32916],{},[23,32917,32920],{"href":32918,"rel":32919},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WnBjGNWdayw&t=226s",[101],"Those Who Can Should Also Teach",[1274,32922,32923],{},[23,32924,32927],{"href":32925,"rel":32926},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wYk0JrNdb8g",[101],"Spring Cloud Gateway: Resilience and Security • Thomas Vitale • GOTO 2021",[33,32929,13650],{"id":973},[1271,32931,32932,32939],{},[1274,32933,32934],{},[23,32935,32938],{"href":32936,"rel":32937},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PcwGUtf95JY",[101],"Between Chair & Keyboard with Sharat Chander",[1274,32940,32941],{},[23,32942,32945],{"href":32943,"rel":32944},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qB9Zae87RbE",[101],"Deep Dive with Ali Abdaal - Krissy Cela On Finding Your Vision, Mission and Why",[33,32947,22284],{"id":16575},[1271,32949,32950],{},[1274,32951,32952],{},[23,32953,32956],{"href":32954,"rel":32955},"https:\u002F\u002Ftop10.netflix.com\u002F",[101],"Netflix Top 10 (Built with Tailwind CSS 🥳)",[33,32958,12149],{"id":12148},[16,32960,32961],{},"\"If you don't believe in yourself, who will?\" - Krissy Cela",[33,32963,21608],{"id":384},[16,32965,32966],{},[23,32967,32968],{"href":32968,"rel":32969},"https:\u002F\u002Ftwitter.com\u002Fmkbhd\u002Fstatus\u002F1460976089933787140",[101],[28,32971,172],{"id":171},[16,32973,25399,32974,11333],{},[23,32975,11332],{"href":11330,"rel":32976},[101],[16,32978,9630,32979,191,32981,32983,32985,32987],{},[189,32980],{},[189,32982],{},[23,32984,11491],{"href":11490},[189,32986],{},[23,32988,198],{"href":196,"rel":32989},[101],{"title":200,"searchDepth":201,"depth":201,"links":32991},[32992,32993,33000,33001,33009],{"id":32738,"depth":201,"text":32739},{"id":24509,"depth":201,"text":24510,"children":32994},[32995,32996,32997,32998,32999],{"id":32773,"depth":206,"text":17231},{"id":32785,"depth":206,"text":32781},{"id":32808,"depth":206,"text":32809},{"id":32826,"depth":206,"text":32827},{"id":4557,"depth":206,"text":3363},{"id":32862,"depth":201,"text":32863},{"id":10953,"depth":201,"text":21516,"children":33002},[33003,33004,33005,33006,33007,33008],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":12148,"depth":206,"text":12149},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":33011,"path":33012,"title":33013,"description":33014,"meta":33015,"body":33018},"newsletter\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fhappy-halloween.md","\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fhappy-halloween","Happy Halloween","Happy Halloween, I hope you have a spooktacular day! If you're a Visual Studio Code user James Q Quick has a Halloween theme perfect for nighttime coding.",{"slug":33016,"date":33017},"happy-halloween","2021-10-31T13:00:00.000Z",{"type":13,"value":33019,"toc":33315},[33020,33029,33032,33035,33038,33041,33045,33048,33051,33057,33060,33066,33069,33075,33078,33084,33087,33093,33106,33110,33119,33122,33143,33146,33152,33158,33164,33168,33182,33188,33195,33199,33202,33218,33220,33222,33231,33233,33249,33251,33267,33269,33292,33294,33297,33299,33302],[16,33021,33022,33023,33028],{},"Happy Halloween, I hope you have a spooktacular day! If you're a Visual Studio Code user ",[23,33024,33027],{"href":33025,"rel":33026},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=tqd3O5RpAHQ",[101],"James Q Quick has a Halloween theme"," perfect for nighttime coding.",[16,33030,33031],{},"I have been a big fan of Microsoft for a long time now. It hasn't always been that way but I think for me it started when Satya Nadella took over as CEO. They really began to embrace Open Source and have done some amazing work on tools and the cloud.",[16,33033,33034],{},"When we talk about open source software we as developers use on a daily basis Git & Github are at the top of that list for me. In 2018 Microsoft purchased Github for 7.5 billion and I remember a lot of fear from developers that they would run it into the ground.",[16,33036,33037],{},"Fast forward to 2021 and that could be nothing further from the truth. They have done nothing but improve a tool that is vital to most of us. I'm old enough to remember when we had to pay for private repositories. In fact what we tend to forget is this tool that helps us maintain, version, share, and learn code is completely FREE. I think we take this for granted sometimes. Thank you, Microsoft 🙏",[16,33039,33040],{},"Github Universe 2021 was this week so I thought I would mention a couple of highlights from the conference that I am really excited about.",[28,33042,33044],{"id":33043},"github-copilot-for-intellij","Github Copilot for IntelliJ",[16,33046,33047],{},"Earlier this year GitHub launched Copilot, an AI pair-programmer. With GitHub Copilot, get suggestions for whole lines or entire functions right inside your editor. I'm not sure if it supported Java when it was first launched but at the time of writing this, the technical preview supports Python, JavaScript, TypeScript, Ruby, Java & Go.",[16,33049,33050],{},"This week GitHub announced support for IntelliJ and I was excited to get my hands on this. To get started go to Preferences > Plugins and search for Github Copilot.",[16,33052,33053],{},[74,33054],{"alt":33055,"src":33056},"IntelliJ Plugin","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fintellij_plugin.png",[16,33058,33059],{},"To get started create a new Java class called Test. If you place your cursor inside of the class Copilot will make a suggestion for a new main method that prints out \"Hello, World!\" to the console. If you hit the tab key, that method will be completed for you.",[16,33061,33062],{},[74,33063],{"alt":33064,"src":33065},"Test Class","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Ftest_class.png",[16,33067,33068],{},"Another way to trigger Copilot is by typing the name of a method and based on the name you will get suggestions of how to complete that method. Again, hit the tab key to complete the code.",[16,33070,33071],{},[74,33072],{"alt":33073,"src":33074},"Sum Method","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fsum_method.png",[16,33076,33077],{},"Finally, you can use a comment to let Copilot know what you're trying to accomplish. In the example below I would like to write a method that will check to see if a string is a palindrome.",[16,33079,33080],{},[74,33081],{"alt":33082,"src":33083},"Comment","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fcomment.png",[16,33085,33086],{},"The real question you might have without reading through that code is \"Does it work?\". I generated a new Test and Copilot is suggesting an assertion and after running my test it passes.",[16,33088,33089],{},[74,33090],{"alt":33091,"src":33092},"Palindrome Test","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fpalindrome_test.png",[16,33094,33095,33096,33101,33102,33105],{},"It might not be up to the standard of the palindrome king ",[23,33097,33100],{"href":33098,"rel":33099},"https:\u002F\u002Ftwitter.com\u002Fkenkousen",[101],"Ken Kousen",", but it works! This is still very much a technical preview and I think there is room for improvement. I'm also not sure how valuable this is in my day-to-day work but I will test it out and report back. I hope to put together a video on this next week for my ",[23,33103,2944],{"href":27929,"rel":33104},[101]," that will include some Spring Boot examples so if you're not a subscriber what are you waiting for!",[28,33107,33109],{"id":33108},"github-command-palette","Github Command Palette",[16,33111,33112,33113,33118],{},"GitHub launched a ",[23,33114,33117],{"href":33115,"rel":33116},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fget-started\u002Fusing-github\u002Fgithub-command-palette",[101],"command palette"," to navigate, search and run commands directly from your keyboard.",[16,33120,33121],{},"Open the command palette using one of the following keyboard shortcuts:",[1271,33123,33124,33134],{},[1274,33125,33126,33127,33130,33131],{},"Windows and Linux: ",[469,33128,33129],{},"Ctl +k"," or ",[469,33132,33133],{},"Ctl + alt + k",[1274,33135,33136,33137,33130,33140],{},"Mac: ",[469,33138,33139],{},"⌘ + k",[469,33141,33142],{},"⌘ + option + k",[16,33144,33145],{},"From my personal GitHub page, it lets me quickly jump to repositories, projects & packages.",[16,33147,33148],{},[74,33149],{"alt":33150,"src":33151},"Command Palette","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fcommand_palette.png",[16,33153,33154,33155,33157],{},"If you use ",[469,33156,31921],{}," you can run commands. In this example, I want to quickly switch over to the dark dimmed theme.",[16,33159,33160],{},[74,33161],{"alt":33162,"src":33163},"Command Palette Actions","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fcp_actions.png",[28,33165,33167],{"id":33166},"githubdev","github.dev",[16,33169,33170,33171,33173,33174,33177,33178,33181],{},"This is entirely new but since we are talking about GitHub I thought I would share this little tip with you. If you're looking at a particular file in your repo you can edit the raw file but you lose out on all that code assistance and completion that we all love. Press the",[469,33172,184],{}," or swap ",[469,33175,33176],{},".com"," with ",[469,33179,33180],{},".dev"," in the URL and you will be taken directly to a Visual Studio Code environment in your browser.",[16,33183,33184],{},[74,33185],{"alt":33186,"src":33187},"github_dev.jpg","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fgithub_dev.jpeg",[16,33189,33190,33191,184],{},"It’s a quick way to edit and navigate code. It's especially useful if you want to edit multiple files at a time or take advantage of all the powerful code editing features of Visual Studio Code when making a quick change. For more information, see our ",[23,33192,9038],{"href":33193,"rel":33194},"https:\u002F\u002Fgithub.co\u002Fcodespaces-editor-help",[101],[28,33196,33198],{"id":33197},"devops-p","DevOps P",[16,33200,33201],{},"Emily Freeman who is a keynote speaker, best-selling author, and DevOps wizard was the feature of two amazing videos. I thought both of these were well thought out and the quality is great.",[1271,33203,33204,33211],{},[1274,33205,33206],{},[23,33207,33210],{"href":33208,"rel":33209},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Z66-us_VDu8",[101],"Rethinking the SDLC - GitHub Universe 2021",[1274,33212,33213],{},[23,33214,33217],{"href":33215,"rel":33216},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=kBV8gPVZNEE",[101],"What is DevOps",[28,33219,21516],{"id":10953},[33,33221,11453],{"id":11452},[1271,33223,33224],{},[1274,33225,33226],{},[23,33227,33230],{"href":33228,"rel":33229},"https:\u002F\u002Fteachable.com\u002Fblog\u002Fhandling-inconsistent-revenue-streams",[101],"Creator tip: Handling inconsistent revenue streams as a full-time course creator",[33,33232,11465],{"id":30},[1271,33234,33235,33242],{},[1274,33236,33237],{},[23,33238,33241],{"href":33239,"rel":33240},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=G8aq4n9F9E4",[101],"The Best of Both Worlds: ISG for Nuxt by Ishan Anand",[1274,33243,33244],{},[23,33245,33248],{"href":33246,"rel":33247},"https:\u002F\u002Fportal.gitnation.org\u002Fevents\u002Fvuejs-london-2021",[101],"VueJS London 2021 Recordings",[33,33250,13650],{"id":973},[1271,33252,33253,33260],{},[1274,33254,33255],{},[23,33256,33259],{"href":33257,"rel":33258},"https:\u002F\u002Fwww.javascriptjam.com\u002F",[101],"JavaScript Jam",[1274,33261,33262],{},[23,33263,33266],{"href":33264,"rel":33265},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=onN4Ecm2RXM",[101],"Groovy Podcast, S05E03 (83, with Paul King)",[33,33268,22284],{"id":16575},[1271,33270,33271,33278,33285],{},[1274,33272,33273],{},[23,33274,33277],{"href":33275,"rel":33276},"https:\u002F\u002Fv3.nuxtjs.org\u002F",[101],"Nuxt 3 Beta",[1274,33279,33280],{},[23,33281,33284],{"href":33282,"rel":33283},"https:\u002F\u002Fkaleidoscope.app\u002F",[101],"Kaleidoscope App",[1274,33286,33287],{},[23,33288,33291],{"href":33289,"rel":33290},"https:\u002F\u002Ftemplatesurf.com\u002F",[101],"Templatesurf",[33,33293,12149],{"id":12148},[16,33295,33296],{},"The answer in Chief Executive Officer Satya Nadella’s mind is clear. “Creation, creation, creation—the next 10 years is going to be as much about creation as it is about consumption and about the community around it, so it’s not creating alone,”",[28,33298,172],{"id":171},[16,33300,33301],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this installment of Coffee & Code and I will see you next Sunday morning. If you have any links you would like me to include please contact me and I might add them to a future newsletter. I hope you have a great week and as always friends...",[16,33303,9630,33304,191,33306,33308,33310,33312],{},[189,33305],{},[189,33307],{},[23,33309,11491],{"href":11490},[189,33311],{},[23,33313,198],{"href":196,"rel":33314},[101],{"title":200,"searchDepth":201,"depth":201,"links":33316},[33317,33318,33319,33320,33321,33328],{"id":33043,"depth":201,"text":33044},{"id":33108,"depth":201,"text":33109},{"id":33166,"depth":201,"text":33167},{"id":33197,"depth":201,"text":33198},{"id":10953,"depth":201,"text":21516,"children":33322},[33323,33324,33325,33326,33327],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":33330,"path":33331,"title":9950,"description":33332,"meta":33333,"body":33334},"newsletter\u002Fnewsletter\u002F2021\u002F11\u002F14\u002Fnew-macbook-pro.md","\u002Fnewsletter\u002F2021\u002F11\u002F14\u002Fnew-macbook-pro","After missing a week due to mostly not having anything to talk to you about I'm back with the newsletter so let's do it. First, we celebrated Veterans Day here in the US this week and I just want to take this opportunity to thank anyone who has or is serving. Your sacrifice and commitment to this country are greatly appreciated.",{"slug":9949,"date":33017},{"type":13,"value":33335,"toc":33549},[33336,33338,33342,33345,33351,33359,33362,33369,33372,33407,33410,33416,33418,33429,33431,33433,33456,33458,33481,33483,33499,33501,33524,33526,33532,33534,33536],[16,33337,33332],{},[28,33339,33341],{"id":33340},"macbook-pro","MacBook Pro",[16,33343,33344],{},"I ordered my new MacBook Pro the day after the announcement event and I kid you not I have been checking the tracking updates every day since then. This week it finally arrived and I was excited to get it in my hands and test it out. Here is a shot of it still in the box in front of my Cleveland print in my office.",[16,33346,33347],{},[74,33348],{"alt":33349,"src":33350},"New MacBook Pro in my office","\u002Fimages\u002Fnewsletter\u002F2021\u002F10\u002F31\u002Fnew-macbook-pro-office.JPG",[16,33352,33353,33354,33358],{},"Before it arrived I had all of these plans to create videos for my ",[23,33355,2944],{"href":33356,"rel":33357},"https:\u002F\u002Fwww.youtube.com\u002Fdanvega",[101]," on how I set up a new machine as a developer. I always found those types of videos useful and I thought I might be able to help others find new tools or just learn something new.",[16,33360,33361],{},"Mapping out each of those videos would take a long time though and I just wanted to get it set up and start using it and can you blame me? What I did though was document each of the steps I took to set up my new laptop and put it on Github. I am going to use this and my review of the MacBook Pro and create a video and or blog post on my setup soon.",[16,33363,33364],{},[23,33365,33368],{"href":33366,"rel":33367},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fnew-macbook-setup\u002Ftree\u002Fmaster\u002F2021",[101],"new-macbook-setup\u002F2021 at master · danvega\u002Fnew-macbook-setup",[16,33370,33371],{},"Full review coming soon but here are a few notes:",[1271,33373,33374,33377,33380,33383,33386,33398,33401,33404],{},[1274,33375,33376],{},"I love the 14\" size, it's a little heavier and I honestly I appreciate that.",[1274,33378,33379],{},"The display is amazing and no the notch doesn't bother me at all.",[1274,33381,33382],{},"When you open the laptop it powers on and responds to you instantly.",[1274,33384,33385],{},"The keyboard is new and so far it's been a great experience. Usually, I prefer using my external keyboard (Apple Magic Keyboard) but I actually prefer typing on this one.",[1274,33387,33388,33389],{},"I was never a fan of the touch bar and I am happy to see the physical keys return.\n",[1271,33390,33391],{},[1274,33392,33393,33394,33397],{},"The lower ",[469,33395,33396],{},"Fn"," key also serves as an Emoji Picker 🥳",[1274,33399,33400],{},"Ports - I was really happy to see the 3 USB-C ports, SD, HDMI, and MagSafe.",[1274,33402,33403],{},"The battery performance has been really good so far.",[1274,33405,33406],{},"Performance - Everything just feels smooth, fast, and snappy.",[16,33408,33409],{},"Speaking of performance I sent out this tweet this week. I pulled down the Spring Pet Clinic project and I was able to run it in 1.95 seconds.",[16,33411,33412],{},[23,33413,33414],{"href":33414,"rel":33415},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1458979393557123089",[101],[28,33417,26850],{"id":26849},[16,33419,33420,33421,529,33424,33428],{},"In my last newsletter, I talked about Github Copilot for Java Developers. Since then I wrote a ",[23,33422,6034],{"href":27570,"rel":33423},[101],[23,33425,33427],{"href":29133,"rel":33426},[101],"created a video"," tutorial. It's pretty crazy how good Github Copilot can recommend lines or even entire methods.",[28,33430,21516],{"id":10953},[33,33432,11453],{"id":11452},[1271,33434,33435,33442,33449],{},[1274,33436,33437],{},[23,33438,33441],{"href":33439,"rel":33440},"https:\u002F\u002Fwww.atomicjar.com\u002F2021\u002F11\u002Fannouncing-testcontainers-cloud\u002F",[101],"Announcing Testcontainers Cloud: Integration Testing has never been easier - AtomicJar, Inc.",[1274,33443,33444],{},[23,33445,33448],{"href":33446,"rel":33447},"https:\u002F\u002F9to5mac.com\u002F2021\u002F11\u002F08\u002Fheres-why-twitter-uber-and-more-are-giving-fully-loaded-m1-max-macbook-pros-to-engineers\u002F",[101],"Here's why Twitter, Uber, and more are giving fully loaded M1 Max MacBook Pros to engineers",[1274,33450,33451],{},[23,33452,33455],{"href":33453,"rel":33454},"https:\u002F\u002Fblog.youtube\u002Fnews-and-events\u002Fupdate-to-youtube\u002F",[101],"An update to dislikes on YouTube",[33,33457,11465],{"id":30},[1271,33459,33460,33467,33474],{},[1274,33461,33462],{},[23,33463,33466],{"href":33464,"rel":33465},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ebj0VU92YrA",[101],"Introduction to Shortcuts on macOS",[1274,33468,33469],{},[23,33470,33473],{"href":33471,"rel":33472},"https:\u002F\u002Fwww.youtube.com\u002Fc\u002FAllThingsOpen\u002Fvideos",[101],"All Things Open Conference Recordings",[1274,33475,33476],{},[23,33477,33480],{"href":33478,"rel":33479},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCEWZUAC6afuExvl-V-vbRGw",[101],"Micronaut has a YouTube Channel",[33,33482,13650],{"id":973},[1271,33484,33485,33492],{},[1274,33486,33487],{},[23,33488,33491],{"href":33489,"rel":33490},"https:\u002F\u002Fbootifulpodcast.fm\u002F#\u002Fepisodes\u002Fba1180c6-9faf-4820-8c78-c1e9dbd757dd",[101],"JMS and Messaging legend, HornetQ and Artemis cofounder, Clebert Suconic",[1274,33493,33494],{},[23,33495,33498],{"href":33496,"rel":33497},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F01493f8c",[101],"Money Lab Podcast: YouTube publishing challenge",[33,33500,22284],{"id":16575},[1271,33502,33503,33510,33517],{},[1274,33504,33505],{},[23,33506,33509],{"href":33507,"rel":33508},"https:\u002F\u002Fcodepen.io\u002Fchris__sev\u002Fpen\u002FvYJWLxM?editors=1100",[101],"Text Portrait",[1274,33511,33512],{},[23,33513,33516],{"href":33514,"rel":33515},"https:\u002F\u002Fwww.producthunt.com\u002Fposts\u002Fthunder-client",[101],"Thunder Client - REST API Client for VS Code",[1274,33518,33519],{},[23,33520,33523],{"href":33521,"rel":33522},"https:\u002F\u002Ficons8.com\u002Flunacy",[101],"Lunacy – Free Design Software for Win, Mac, Linux",[33,33525,21608],{"id":384},[16,33527,33528],{},[23,33529,33530],{"href":33530,"rel":33531},"https:\u002F\u002Ftwitter.com\u002Fmarcushellberg\u002Fstatus\u002F1458819884792434690",[101],[28,33533,172],{"id":171},[16,33535,33301],{},[16,33537,9630,33538,191,33540,33542,33544,33546],{},[189,33539],{},[189,33541],{},[23,33543,11491],{"href":11490},[189,33545],{},[23,33547,198],{"href":196,"rel":33548},[101],{"title":200,"searchDepth":201,"depth":201,"links":33550},[33551,33552,33553,33560],{"id":33340,"depth":201,"text":33341},{"id":26849,"depth":201,"text":26850},{"id":10953,"depth":201,"text":21516,"children":33554},[33555,33556,33557,33558,33559],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":33562,"path":33563,"title":33564,"description":33565,"meta":33566,"body":33569},"newsletter\u002Fnewsletter\u002F2021\u002F10\u002F24\u002Fhello-m1-max.md","\u002Fnewsletter\u002F2021\u002F10\u002F24\u002Fhello-m1-max","Hello, M1 Max","In this week's newsletter, I'm going to talk about the new MacBook Pro's and I'll give a quick review of a book that I just finished.",{"slug":33567,"date":33568},"hello-m1-max","2021-10-24T14:00:00.000Z",{"type":13,"value":33570,"toc":33800},[33571,33573,33577,33580,33583,33586,33589,33592,33617,33626,33630,33647,33650,33653,33661,33663,33665,33688,33690,33720,33722,33738,33740,33755,33758,33774,33776,33783,33785,33787],[16,33572,33565],{},[28,33574,33576],{"id":33575},"new-macbook-pros","New MacBook Pros",[16,33578,33579],{},"I happen to be heavily invested in the Apple ecosystem. I own a lot of their products and I often advocate on behalf of them. Somehow this often starts a heated discussion about Android vs iPhone or PC vs Mac and there is just no room for it. Different products just connect to different people and that is ok.",[16,33581,33582],{},"When I started out writing software 20+ years ago I did it on a desktop computer that I built myself. I ordered all of the parts from a local computer shop or New Egg and I put it together myself. I didn't have YouTube to watch a guided tutorial, I messed up and learned from those mistakes. When I was done, I had a machine that would power my passion, programming.",[16,33584,33585],{},"I'm not sure when I bought my first MacBook but I think it was around 2013. This would be the first laptop I would ever purchase on my own. I had some others through work but this was the first laptop that I could call mine, and I fell in love with it. This wasn't my first trip around Unix, in fact, I started with a Linux Laptop early on in my career. As a developer, I enjoyed the terminal experience vs Windows at the time. It was a well-designed machine that was less susceptible to bugs and lasted longer than its PC counterpart.",[16,33587,33588],{},"At the end of last year, Apple announced its new MacBook & MacBook Air based on their own silicon chips. This was exciting on a number of levels but for me, the processor world was slowing down. Moore's Law of doubling chip densities every two years just isn't happening anymore. This gave Apple a chance to come in and control the whole experience from the hardware to the software. They have done this well with the iPhone and it appears they have taken what they learned there to the mac.",[16,33590,33591],{},"Let's fast forward to the announcement this week of the new 14\" & 16\" MacBook Pros. I knew before these were announced that one of them would be my next machine but what size and configuration are where my decision would lie. I was asked by someone on Twitter why I went with the 14\" model and I share my answer with you. Apple usually gives you a reason to move up in models and in this case, they didn't. You could get the same configurations in both the 14\" and 16\" models. After I heard that it was a pretty easy choice for me. My laptop is hooked up to some external monitors 99% of the time and when it's not that means I'm on the go. When I am on the go whether it's doing some work at a coffee shop or traveling I like the smaller form factor. This is the configuration I ended up going with:",[1271,33593,33594,33597,33600,33602,33605,33608,33611,33614],{},[1274,33595,33596],{},"Apple M1 Max with 10-core CPU, 24-core GPU, 16-core Neural Engine",[1274,33598,33599],{},"32GB unified memory",[1274,33601,9967],{},[1274,33603,33604],{},"96w USB-C Power Adapter",[1274,33606,33607],{},"14-inch Liquid Retina XDR display",[1274,33609,33610],{},"Three Thunderbolt 4 ports, HDMI port, SDXC card slot, MagSafe 3 port",[1274,33612,33613],{},"Backlit Magic Keyboard with Touch ID - US English",[1274,33615,33616],{},"Accessory Kit",[16,33618,33619,33620,33625],{},"The expected delivery date is not until November 11-18th. So my question for you is do you have any interest in a live stream where I set it up as a development machine? I feel like a live stream is a big commitment. I could easily slim that down into a condensed tutorial for YouTube. I have a detailed ",[23,33621,33624],{"href":33622,"rel":33623},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2018\u002F12\u002F21\u002Fmacbook-pro-setup-my-setup-with-detailed-instructions\u002F",[101],"MacBook Pro setup guide on Github",". I will probably create a new version of this for M1 and update that along with the video tutorial.",[28,33627,33629],{"id":33628},"fundamentals-of-software-architecture","Fundamentals of Software Architecture",[16,33631,33632,33633,33637,33638,33642,33643,33646],{},"I finally got around to finishing ",[23,33634,33629],{"href":33635,"rel":33636},"https:\u002F\u002Famzn.to\u002F3pDbjSp",[101]," by Mark Richards and Neal Ford. I plan on dedicating a post on my ",[23,33639,33641],{"href":6795,"rel":33640},[101],"blog"," and or a video on my ",[23,33644,2944],{"href":27929,"rel":33645},[101]," so consider this my first impression.",[16,33648,33649],{},"Anyone who follows Mark or Neal already knows this but for those of you who don't they are simply brilliant. This book is one of the very best technical books I have ever read. If you're interested in getting into architecture it is a must-read. I thought they did a really good job of explaining what architecture is and what is expected of you in that role.",[16,33651,33652],{},"Everything in software architecture is a trade-off. This was the big theme of the book for me and I thought they did a great job of reminding you of that throughout the book. I really enjoyed how they taught me how to identify architectural characteristics and more importantly how to measure them. I also enjoyed the breakdown of taking those architectural characteristics and using them to make a decision on what architecture style to use (monolith vs distributed).",[16,33654,33655,33656,184],{},"Those are my initial thoughts. Fantastic book and would highly recommend it to anyone wanting to get into software architecture. Thank you to Mark and Neal for putting so much thought and detail into this book and I can wait for ",[23,33657,33660],{"href":33658,"rel":33659},"https:\u002F\u002Famzn.to\u002F2XJIloi",[101],"their next one",[28,33662,21516],{"id":10953},[33,33664,11453],{"id":11452},[1271,33666,33667,33674,33681],{},[1274,33668,33669],{},[23,33670,33673],{"href":33671,"rel":33672},"https:\u002F\u002Fdeveloper.okta.com\u002Fblog\u002F2021\u002F10\u002F04\u002Fspring-boot-spa",[101],"Learn How to Build a Single-Page App with Vue and Spring Boot | Okta Developer",[1274,33675,33676],{},[23,33677,33680],{"href":33678,"rel":33679},"https:\u002F\u002Ftanzu.vmware.com\u002Fcontent\u002Fblog\u002Fvmware-tanzu-community-edition-announcement",[101],"Introducing VMware Tanzu Community Edition",[1274,33682,33683],{},[23,33684,33687],{"href":33685,"rel":33686},"https:\u002F\u002Fleaddev.com\u002Fculture-engagement-motivation\u002Fwhy-flow-matters-more-passion",[101],"Why flow matters more than passion | LeadDev",[33,33689,11465],{"id":30},[1271,33691,33692,33699,33706,33713],{},[1274,33693,33694],{},[23,33695,33698],{"href":33696,"rel":33697},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=kVSYVhmvNCI",[101],"Spring Tips: GraphQL",[1274,33700,33701],{},[23,33702,33705],{"href":33703,"rel":33704},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wKXfOLfAN04",[101],"VMware Tanzu Community Edition: First Look with Amanda and Josh",[1274,33707,33708],{},[23,33709,33712],{"href":33710,"rel":33711},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sVP8xb9BrhM",[101],"Kubernetes: The documentary trailer",[1274,33714,33715],{},[23,33716,33719],{"href":33717,"rel":33718},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ChYIhEEOfrk",[101],"How to Docker with Spring Boot",[33,33721,22284],{"id":16575},[1271,33723,33724,33731],{},[1274,33725,33726],{},[23,33727,33730],{"href":33728,"rel":33729},"https:\u002F\u002Fgithub.com\u002Fvmware-tanzu\u002Fcommunity-edition",[101],"VMware Tanzu Community Edition",[1274,33732,33733],{},[23,33734,33737],{"href":33735,"rel":33736},"https:\u002F\u002Fgithub.com\u002Ftestcontainers\u002Ftestcontainers-java\u002Freleases\u002Ftag\u002F1.16.1",[101],"TestContainers 1.16.1",[33,33739,14122],{"id":14121},[1271,33741,33742,33748],{},[1274,33743,33744],{},[23,33745,33629],{"href":33746,"rel":33747},"https:\u002F\u002Famzn.to\u002F3vNGnjm",[101],[1274,33749,33750],{},[23,33751,33754],{"href":33752,"rel":33753},"https:\u002F\u002Famzn.to\u002F3ni4zXa",[101],"Software Architecture: The Hard Parts",[33,33756,33757],{"id":13856},"💻 Conferences",[1271,33759,33760],{},[1274,33761,33762,33767,33768,33773],{},[23,33763,33766],{"href":33764,"rel":33765},"https:\u002F\u002Fjamstackconf.com\u002F",[101],"Jamstack Conf 2021"," (",[23,33769,33772],{"href":33770,"rel":33771},"https:\u002F\u002Fwww.youtube.com\u002Fc\u002FJAMstackConf\u002Fvideos",[101],"Recordings",")",[33,33775,21608],{"id":384},[16,33777,33778],{},[23,33779,33782],{"href":33780,"rel":33781},"https:\u002F\u002Ftwitter.com\u002Fgraphql_java\u002Fstatus\u002F1450195999373205506",[101],"GraphQL Java is now serving 500k requests per second for Twitter.",[28,33784,172],{"id":171},[16,33786,33301],{},[16,33788,9630,33789,191,33791,33793,33795,33797],{},[189,33790],{},[189,33792],{},[23,33794,11491],{"href":11490},[189,33796],{},[23,33798,198],{"href":196,"rel":33799},[101],{"title":200,"searchDepth":201,"depth":201,"links":33801},[33802,33803,33804,33812],{"id":33575,"depth":201,"text":33576},{"id":33628,"depth":201,"text":33629},{"id":10953,"depth":201,"text":21516,"children":33805},[33806,33807,33808,33809,33810,33811],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":13856,"depth":206,"text":33757},{"id":384,"depth":206,"text":21608},{"id":171,"depth":201,"text":172},{"_id":33814,"path":33815,"title":33816,"description":33817,"meta":33818,"body":33821},"newsletter\u002Fnewsletter\u002F2021\u002F10\u002F03\u002Fmy-first-youtube-short.md","\u002Fnewsletter\u002F2021\u002F10\u002F03\u002Fmy-first-youtube-short","I uploaded my first YouTube Short","I absolutely love making videos, it's become quite the passion of mine over the last few years. If you haven't uploaded a tutorial to YouTube I don't think you can appreciate just how much time goes into making a single video. In this weeks newsletter I thought I would share with you my video creation process for a normal video and how that compares to a YouTube short.",{"slug":33819,"date":33820},"my-first-youtube-short","2021-10-03T10:00:00.000Z",{"type":13,"value":33822,"toc":33967},[33823,33825,33834,33848,33851,33854,33857,33860,33863,33866,33869,33872,33874,33877,33880,33887,33889,33892,33894,33903,33905,33921,33923,33932,33934,33943,33945,33948,33950,33952],[16,33824,33817],{},[16,33826,33827,33828,33833],{},"Each video starts with an idea and I keep a collection of these ideas on a Kanban board in ",[23,33829,33832],{"href":33830,"rel":33831},"https:\u002F\u002Fwww.notion.so\u002F",[101],"Notion",". Once I have decided I want to make a video on a particular topic it's time to start planning out the video. I have a template that breaks down my planning into the following sections:",[1271,33835,33836,33839,33842,33845],{},[1274,33837,33838],{},"Research",[1274,33840,33841],{},"Metadata (title, description, tags, resources)",[1274,33843,33844],{},"Scripts (hook, bumper, intro, screencast, conclusion)",[1274,33846,33847],{},"Shot List (a-roll, b-roll, screencast)",[16,33849,33850],{},"It's not just enough to have an idea, is this idea something that your audience will be interested in.",[16,33852,33853],{},"Once I have made that decision on a topic it's time to record it. The first challenge in my household is trying to find some time to actually record the video. I have 2 young kids and if one of them doesn't keep me up half the night, the other one does. I work my full time job from 8-5 and after work I spend some time with the family, have dinner, give baths and get the kids to bed. I can't record after everyone goes to be because my office is in the basement right below everyone's bedrooms in a split level house. So as you can see finding the time to record is challenging to say the least.",[16,33855,33856],{},"If there are talking head components to the video I need to make sure I look presentable which means finding something nice to wear and doing my hair. My talking head videos are usually just an intro to the tutorial but I feel like they give it a personal touch and connection to the audience.",[16,33858,33859],{},"The screencast portion of the video is usually what people have clicked on the video for. This starts with some thought and planning by putting together a demo and determining what the audience wants to get out of it. After I have the demo code it's time to record the screencast and upload that code to Github.",[16,33861,33862],{},"After all of the recording has been completed it's time to edit. I use Adobe Premiere Pro and this is where I bring in all of my recordings and begin to trim them down. You see each recording is full of mistakes and different takes and I need to trim them down to tell the story I want told. After that I need to add in any music, fix the audio so it's not too loud or soft, perform any color corrections and add in any graphical elements. I then export the media file to disk and prepare to upload the video.",[16,33864,33865],{},"It's finally time to upload the video to YouTube and add fill in all the details. I start with a title, description, custom thumbnail and tags. There are other items that need to be created like cards and end screens. When it's done rendering and ready to publish I change the visibility to Public and hit save.",[16,33867,33868],{},"You might think that is the end of a video lifecycle but it isn't. I need to promote this on my different social media platforms. This usually just involves coming up with a good post and adding it to Twitter and LinkedIn. Depending on the content I might post it on my Spring Boot Developers Facebook group and If I think it's really good I might try and submit it on Reddit.",[16,33870,33871],{},"I realize that was a lot and if you made it this far, congratulations. The point I wanted to make is that for a simple 10 minute tutorial I usually spend anywhere from 8-10 hours from start to end.",[28,33873,18827],{"id":18826},[16,33875,33876],{},"Shorts is the spot to shoot, share, and binge short videos (think 60 seconds or less) on YouTube. I have been intrigued by shorts because YouTube really seems to be pushing them and they seem like a great way to build an audience. I know that subscribers to my channel like my in depth tutorials and this isn't going to replace that. This is a chance for me to create short videos and or tutorials to help grow my audience.",[16,33878,33879],{},"This week I decided to create my first YouTube short around the new Oracle Licensing for Java 17. The video isn't ground breaking by any means but for me the process was. Because this video had to be 60 seconds or less I was able to research, film, edit and upload this video on my lunch break inside of an hour. In 5 days the video has received 550 views, 47 likes, 1 dislike and 2 comments. You can find a link to the video below and as I make more shorts I will gladly share my process with you if you're interested. What are your thoughts on consuming or creating shorts? I would love to hear from you.",[16,33881,33882],{},[23,33883,33886],{"href":33884,"rel":33885},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZddzOO_ovz8",[101],"Java is now FREE for everyone #shorts",[28,33888,21516],{"id":10953},[16,33890,33891],{},"These are things I found cool around the web this week.",[33,33893,11465],{"id":30},[1271,33895,33896],{},[1274,33897,33898],{},[23,33899,33902],{"href":33900,"rel":33901},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Xkh5sa3vjTE",[101],"Making use of Sealed classes in Java",[33,33904,13650],{"id":973},[1271,33906,33907,33914],{},[1274,33908,33909],{},[23,33910,33913],{"href":33911,"rel":33912},"https:\u002F\u002Finside.java\u002F2021\u002F09\u002F14\u002Fpodcast-019\u002F",[101],"Inside Java: Java 17 is Here! Part 1",[1274,33915,33916],{},[23,33917,33920],{"href":33918,"rel":33919},"https:\u002F\u002Finside.java\u002F2021\u002F09\u002F27\u002Fpodcast-020\u002F",[101],"Inside Java: Java 17 is Here! Part 2",[33,33922,22284],{"id":16575},[1271,33924,33925],{},[1274,33926,33927],{},[23,33928,33931],{"href":33929,"rel":33930},"https:\u002F\u002F9elements.github.io\u002Ffancy-border-radius\u002F#72.42.44.12--.",[101],"Fancy Border Radius Generator",[33,33933,14122],{"id":14121},[1271,33935,33936],{},[1274,33937,33938],{},[23,33939,33942],{"href":33940,"rel":33941},"https:\u002F\u002Fwww.notion.so\u002FI-m-back-7e3f721217514dfa9968c7bac2ef3d13",[101],"Building Microservices, 2nd Edition - Sam Newman",[33,33944,12149],{"id":12148},[16,33946,33947],{},"“Live as if you were to die tomorrow. Learn as if you were to live forever.” – Mahatma Gandhi",[28,33949,172],{"id":171},[16,33951,33301],{},[16,33953,9630,33954,33956,33957,33959,33961,33962,33964],{},[189,33955],{},"\nDan Vega  ",[189,33958],{},[23,33960,11491],{"href":11490},"  ",[189,33963],{},[23,33965,198],{"href":196,"rel":33966},[101],{"title":200,"searchDepth":201,"depth":201,"links":33968},[33969,33970,33977],{"id":18826,"depth":201,"text":18827},{"id":10953,"depth":201,"text":21516,"children":33971},[33972,33973,33974,33975,33976],{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":33979,"path":33980,"title":33981,"description":33982,"meta":33983,"body":33986},"newsletter\u002Fnewsletter\u002F2021\u002F09\u002F27\u002Fim-back.md","\u002Fnewsletter\u002F2021\u002F09\u002F27\u002Fim-back","I'm back","Hello friends,",{"slug":33984,"date":33985},"im-back","2021-09-27T07:00:00.000Z",{"type":13,"value":33987,"toc":34135},[33988,33990,33993,34002,34006,34014,34016,34019,34025,34028,34037,34042,34049,34055,34057,34059,34061,34070,34072,34081,34083,34092,34094,34103,34105,34112,34114,34117,34119,34121],[16,33989,33982],{},[16,33991,33992],{},"After a long absence from the newsletter I am excited to be back and writing to you. The reason I started this newsletter is because I enjoy writing and this keeps me doing so on weekly basis. I ended up stopping in March of 2020 right when the pandemic hit and until recently I honestly didn't feel like writing. The last year and half was tough on me mentally but we won't get into that here.",[16,33994,33995,33996,34001],{},"The week started out great with a ",[23,33997,34000],{"href":33998,"rel":33999},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1439945285371891712",[101],"Victory Monday"," as my Cleveland Browns got a win on Sunday. The game was at home and I was able to attend my first sporting event in a long long time which was exciting.",[28,34003,34005],{"id":34004},"springone-2021","SpringOne 2021",[16,34007,34008,34009,34013],{},"I recently gave a presentation at SpringOne on full-stack development with Spring Boot and VueJS. The recording for that talk has been posted on the ",[23,34010,9091],{"href":34011,"rel":34012},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VkrGHqwSPVA&t=1866s",[101],". If you didn't happen to catch it live there was a problem with Zoom and I ended up presenting to myself for about four minutes. If you notice a little bit of a gap, that is why. I put together this blog post that contains more info about the presentation along with links to the slides and code.",[28,34015,3363],{"id":4557},[16,34017,34018],{},"This week I put together a tutorial on a cool project called Java Faker. This project allows you to create sample data, quickly and easily. I build a lot of demos and I often need some good data to test out certain functionality. In this tutorial I create a simple Spring Boot application and use Faker to populate 200 records in my H2 database.",[16,34020,34021],{},[23,34022,34023],{"href":34023,"rel":34024},"https:\u002F\u002Fyoutu.be\u002FUzBOv_SHUng",[101],[28,34026,24024],{"id":34027},"currently-reading",[16,34029,34030,34031,34036],{},"I'm currently reading a new book, ",[23,34032,34035],{"href":34033,"rel":34034},"https:\u002F\u002Famzn.to\u002F3AC45k8",[101],"Building Microservices 2nd Edition by Sam Newman",". Sam is an amazing author and speaker and I have been looking forward to getting into this book for awhile. I'm currently in the first section of the book titled \"What are Microservices\". I thought Sam's description of Microservices was succinct.",[2238,34038,34039],{},[16,34040,34041],{},"Microservices are independently releasable services that are modeled around a business domain. A service encapsulates functionality and makes it accessible to other services via networks—you construct a more complex system from these building blocks.",[16,34043,34044,34045,34048],{},"I have spent a lot of time in Microservices this year and its an architectural pattern that I am continuing to expand my knowledge on. I will share more with you as I make my way through this book but in the meantime I threw this out on ",[23,34046,183],{"href":11330,"rel":34047},[101]," this week, what books are you currently reading?",[16,34050,34051],{},[23,34052,34053],{"href":34053,"rel":34054},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1441141090006933504",[101],[28,34056,21516],{"id":10953},[16,34058,33891],{},[33,34060,11453],{"id":11452},[1271,34062,34063],{},[1274,34064,34065],{},[23,34066,34069],{"href":34067,"rel":34068},"https:\u002F\u002Fblogs.oracle.com\u002Fjava\u002Fpost\u002Ffree-java-license",[101],"Introducing the Free Java License",[33,34071,11465],{"id":30},[1271,34073,34074],{},[1274,34075,34076],{},[23,34077,34080],{"href":34078,"rel":34079},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=GBTdnfD6s5Q",[101],"When to use Microservices (And When Not To) - Sam Newman and Martin Fowler",[33,34082,13650],{"id":973},[1271,34084,34085],{},[1274,34086,34087],{},[23,34088,34091],{"href":34089,"rel":34090},"https:\u002F\u002Fworkingcode.dev\u002Fepisodes\u002F041-the-third-age-of-javascript-with-shawn-swyx-wang\u002F",[101],"Working Code Podcast: 041: The Third Age of JavaScript, with Shawn @swyx Wang",[33,34093,22284],{"id":16575},[1271,34095,34096],{},[1274,34097,34098],{},[23,34099,34102],{"href":34100,"rel":34101},"https:\u002F\u002Fgithub.com\u002FDiUS\u002Fjava-faker",[101],"Java Faker",[33,34104,14122],{"id":14121},[1271,34106,34107],{},[1274,34108,34109],{},[23,34110,33942],{"href":34033,"rel":34111},[101],[33,34113,12149],{"id":12148},[16,34115,34116],{},"“I have no special talents. I am only passionately curious.” – Albert Einstein",[28,34118,172],{"id":171},[16,34120,33301],{},[16,34122,9630,34123,34125,34126,34128,1195,34130,34132],{},[189,34124],{},"\nDan Vega ",[189,34127],{},[23,34129,11491],{"href":11490},[189,34131],{},[23,34133,198],{"href":196,"rel":34134},[101],{"title":200,"searchDepth":201,"depth":201,"links":34136},[34137,34138,34139,34140,34148],{"id":34004,"depth":201,"text":34005},{"id":4557,"depth":201,"text":3363},{"id":34027,"depth":201,"text":24024},{"id":10953,"depth":201,"text":21516,"children":34141},[34142,34143,34144,34145,34146,34147],{"id":11452,"depth":206,"text":11453},{"id":30,"depth":206,"text":11465},{"id":973,"depth":206,"text":13650},{"id":16575,"depth":206,"text":22284},{"id":14121,"depth":206,"text":14122},{"id":12148,"depth":206,"text":12149},{"id":171,"depth":201,"text":172},{"_id":34150,"path":34151,"title":34152,"description":34153,"meta":34154,"body":34157},"newsletter\u002Fnewsletter\u002F2020\u002F03\u002F15\u002F30.md","\u002Fnewsletter\u002F2020\u002F03\u002F15\u002F30","Coffee & Code Newsletter: #30","Welcome to Coffee and Code with me, Dan Vega for the week of Mar 8 - Feb 14, 2020.",{"slug":34155,"date":34156},"coffee-and-code-newsletter-30","2020-03-15T07:00:00.000Z",{"type":13,"value":34158,"toc":34397},[34159,34161,34164,34168,34171,34177,34180,34183,34186,34189,34195,34200,34203,34205,34208,34231,34235,34250,34254,34257,34259,34261,34264,34294,34296,34312,34314,34337,34340,34356,34359,34375,34381,34384],[16,34160,34153],{},[16,34162,34163],{},"It's a scary time in my home, city, state, country, and world. I know that this won't last forever but it is a reminder to all of us that the problems we have on a day to day basis are pretty minor in comparison. I hope all of you are doing well and it's my job to take your mind off of what's going on and do what I love to do, teach. If you don't already have one grab a cup and your favorite beverage and let's get to it.",[28,34165,34167],{"id":34166},"previous-week","Previous Week",[16,34169,34170],{},"This week started with a couple of tweets from ✌🏻YouTubers that I look up to.",[16,34172,34173],{},[23,34174,34175],{"href":34175,"rel":34176},"https:\u002F\u002Ftwitter.com\u002FMKBHD\u002Fstatus\u002F1236710481441763335",[101],[16,34178,34179],{},"This was a great reminder from two channels that have over 30 million subscribers combined. I know my videos from a production standpoint aren't great but what they lack in transitions and effects they make up for with my passion for the topic. I am confident that I have a unique way of teaching and 20 years of programming experience to lean on.",[16,34181,34182],{},"After reading these tweets and spending a little time reflecting on them I have some thoughts on how I can improve going forward. Every single creator I look up to is constantly reminding me that it is my job to tell a story. I need to stop looking at a tutorial as a series of steps to resolution and an opportunity to put my personal experience behind it. There is a story in every tutorial, review or discussion, I just need to find it.",[16,34184,34185],{},"It's hard to do 20 years later but I need to remind myself of just how lost I felt at times when I started programming. I would often search for answers to my problems and come across very technical articles that were supposed to answer my question but left me scratching my head.",[16,34187,34188],{},"That is part of the reason I started a blog 15 years ago. I knew there was a better way to explain solutions to those of us who aren't computer science geniuses. I was reminded this week by my friend Brian on Twitter that I was able to take something that can be complicated and break it down to a few easy steps (Thanks, Brian!)",[16,34190,34191],{},[23,34192,34193],{"href":34193,"rel":34194},"https:\u002F\u002Ftwitter.com\u002FCrashbox\u002Fstatus\u002F1237754447666823168",[101],[2238,34196,34197],{},[16,34198,34199],{},"There are no unique messages, only unique messengers.",[16,34201,34202],{},"If you can't tell I am really into this. I love to learn and I love helping others. Something strange happened over the last year though, I have started to fall in love with the entire video creation process. I am currently a sponge and trying to soak up everything I can. I know that was a bit of a tangent but what it comes down to is you will probably see me doing a variety of experiments so I can see what works.",[33,34204,3363],{"id":4557},[16,34206,34207],{},"I was able to upload 3 new videos this week and I am pretty happy with the way they turned out.",[1271,34209,34210,34217,34224],{},[1274,34211,34212],{},[23,34213,34216],{"href":34214,"rel":34215},"https:\u002F\u002Fyoutu.be\u002FpNiRNRgi5Ws",[101],"Spring Boot Unit vs Integration Tests",[1274,34218,34219],{},[23,34220,34223],{"href":34221,"rel":34222},"https:\u002F\u002Fyoutu.be\u002FRboyQ6IQDyI",[101],"Create A Full Fake REST API With JSON Server in a Vue application",[1274,34225,34226],{},[23,34227,34230],{"href":34228,"rel":34229},"https:\u002F\u002Fyoutu.be\u002F5MmlRZZxTqk",[101],"Java 11 HttpClient",[33,34232,34234],{"id":34233},"mentions","Mentions",[16,34236,34237,34238,34243,34244,34249],{},"Thank you to Anthony Gore and the ",[23,34239,34242],{"href":34240,"rel":34241},"https:\u002F\u002Fvuejsdevelopers.com\u002Fnewsletter\u002Fissue\u002F159\u002F",[101],"Vue.js Developers Newsletter"," for featuring my ",[23,34245,34248],{"href":34246,"rel":34247},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=HmdKqXP8JR8",[101],"Vue 3: Smaller, Faster Stronger"," video.",[28,34251,34253],{"id":34252},"upcoming-week","Upcoming Week",[16,34255,34256],{},"This newsletter is a little bit of a milestone for me as we hit #30. It might not seem like a lot but committing to a newsletter each week for 30 weeks (minus a couple of weeks off during the holidays) is something I am really proud of 🥳 With that said I am not sure how much longer I am going to continue it in this format. I am going to take a break from my weekly cadence and figure out what I want this newsletter to look like. If you have any feedback please reach out to me.",[28,34258,21516],{"id":10953},[16,34260,33891],{},[33,34262,34263],{"id":11452},"Articles",[1271,34265,34266,34273,34280,34287],{},[1274,34267,34268],{},[23,34269,34272],{"href":34270,"rel":34271},"https:\u002F\u002Fwww.netlify.com\u002Fblog\u002F2020\u002F03\u002F10\u002Freactivity-in-vue-3",[101],"Reactivity in Vue 3",[1274,34274,34275],{},[23,34276,34279],{"href":34277,"rel":34278},"https:\u002F\u002Finsomnia.rest\u002Fblog\u002Fplugin-hub",[101],"Insomnia REST Client: Plugin Hub 1.0",[1274,34281,34282],{},[23,34283,34286],{"href":34284,"rel":34285},"https:\u002F\u002Ftechcrunch.com\u002F2020\u002F03\u002F04\u002Ftwitter-starts-testing-its-own-version-of-stories-called-fleets-which-disappear-after-24-hours\u002F",[101],"Twitter \"Fleets\" that disappear after 24 hours",[1274,34288,34289],{},[23,34290,34293],{"href":34291,"rel":34292},"https:\u002F\u002Fjoelhooks.com\u002FdSLR-webcam-for-live-streaming",[101],"Joel Hooks: Using a dSLR as a Webcam for Live Streaming",[33,34295,31],{"id":30},[1271,34297,34298,34305],{},[1274,34299,34300],{},[23,34301,34304],{"href":34302,"rel":34303},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sqt04KPErTY",[101],"Two Big Announcements: Academind Pro & A Brand-New Course",[1274,34306,34307],{},[23,34308,34311],{"href":34309,"rel":34310},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fjamstack-full-course\u002F",[101],"JAMstack Tutorial – How to Build Fast, Secure Websites – a Free 4-hour course",[33,34313,974],{"id":973},[1271,34315,34316,34323,34330],{},[1274,34317,34318],{},[23,34319,34322],{"href":34320,"rel":34321},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F121",[101],"Go Time: Pow! Pow! Power tools!",[1274,34324,34325],{},[23,34326,34329],{"href":34327,"rel":34328},"https:\u002F\u002Fwww.thatcreative.life\u002Fepisodes\u002Fmkbhd",[101],"That Creative Life: MKBHD - His Expanding Tech Empire, 10 Million Subscribers and Are We At \"Peak Smartphone\"?",[1274,34331,34332],{},[23,34333,34336],{"href":34334,"rel":34335},"https:\u002F\u002Fwww.ecpodcast.io\u002Fepisodes\u002F23-eve-porcello-alex-banks-how-to-build-a-business-as-a-workshop-instructor",[101],"The Entrepreneurial Coder Podcast: Eve Porcello & Alex Banks - How to Build a Business as a Workshop Instructor",[33,34338,34339],{"id":16575},"Projects",[1271,34341,34342,34349],{},[1274,34343,34344],{},[23,34345,34348],{"href":34346,"rel":34347},"https:\u002F\u002Fcode.visualstudio.com\u002Fupdates\u002Fv1_43",[101],"Visual Studio Code: February 2020 (version 1.43)",[1274,34350,34351],{},[23,34352,34355],{"href":34353,"rel":34354},"https:\u002F\u002Ftwitter.com\u002Fvuejs\u002Fstatus\u002F1237753080885710858",[101],"Vue 3 Roadmap Updates",[33,34357,34358],{"id":18091},"Newsletters",[1271,34360,34361,34368],{},[1274,34362,34363],{},[23,34364,34367],{"href":34365,"rel":34366},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-reactive",[101],"Tales from the jar side: Reactive Spring, Kotlin, and Coronavirus Jokes",[1274,34369,34370],{},[23,34371,34374],{"href":34372,"rel":34373},"https:\u002F\u002Fcontent.pivotal.io\u002Fjosh-blog\u002Fthis-month-in-spring-march-2020",[101],"This Month in Spring - March 2020",[28,34376,34377,34378],{"id":171},"Until Next ",[8834,34379,34380],{},"Week",[16,34382,34383],{},"Thank you for reading my words, watching my videos and sharing this journey with me friends. I hope you have a great week and as always friends...",[16,34385,9630,34386,191,34388,34390,34392,34394],{},[189,34387],{},[189,34389],{},[23,34391,11491],{"href":11490},[189,34393],{},[23,34395,198],{"href":196,"rel":34396},[101],{"title":200,"searchDepth":201,"depth":201,"links":34398},[34399,34403,34404,34411],{"id":34166,"depth":201,"text":34167,"children":34400},[34401,34402],{"id":4557,"depth":206,"text":3363},{"id":34233,"depth":206,"text":34234},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":34405},[34406,34407,34408,34409,34410],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":18091,"depth":206,"text":34358},{"id":171,"depth":201,"text":172},{"_id":34413,"path":34414,"title":34415,"description":34416,"meta":34417,"body":34420},"newsletter\u002Fnewsletter\u002F2020\u002F03\u002F08\u002F29.md","\u002Fnewsletter\u002F2020\u002F03\u002F08\u002F29","Coffee & Code Newsletter: #29","Welcome to Coffee and Code with me, Dan Vega for the week of Mar 1 - Mar 7, 2020.  This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have one grab a cup and your favorite beverage and let's get to it.",{"slug":34418,"date":34419},"coffee-and-code-newsletter-29","2020-03-08T07:00:00.000Z",{"type":13,"value":34421,"toc":34663},[34422,34424,34426,34429,34435,34441,34445,34448,34454,34457,34462,34465,34471,34476,34478,34484,34489,34492,34498,34500,34503,34505,34507,34509,34539,34541,34550,34552,34575,34577,34607,34609,34646,34648,34650],[16,34423,34416],{},[28,34425,34167],{"id":34166},[16,34427,34428],{},"The news this week was dominated by the Coronavirus and rightfully so. My Twitter timeline was filled with news of so many conferences canceling. While it was probably a hard decision for the conference organizers, it was the right one.",[16,34430,34431,34432,184],{},"Next, I want to say thank you to my friends over at JS & Friends Conference for mentioning me in the ",[161,34433,34434],{},"Developer Community Spotlight",[16,34436,34437],{},[23,34438,34439],{"href":34439,"rel":34440},"https:\u002F\u002Ftwitter.com\u002FJSFriendsConf\u002Fstatus\u002F1235792222986989568",[101],[33,34442,34444],{"id":34443},"youtube-channel-updates","YouTube Channel Updates",[16,34446,34447],{},"I mentioned this last week but to nobody's surprise when you get more consistent with your content you can expect to see improvements in your analytics. I am really encouraged and excited to see these numbers going up and I hope this trend continues. If you have been following along I have some pretty big goals and goal #1 of 10,000 subscribers is insight.",[16,34449,34450],{},[74,34451],{"alt":34452,"src":34453},"Analytics","\u002Fimages\u002Fnewsletter\u002F2020\u002F03\u002F08\u002Fanalytics.png",[16,34455,34456],{},"I produced three new videos this week, I hope you enjoy them!",[16,34458,34459],{},[161,34460,34461],{},"Spring Boot Quick Start: Spring Boot Tutorial for Beginners",[16,34463,34464],{},"In this presentation, I am going to talk to you about some of the new and exciting features coming to Vue 3. I originally put this presentation together for a conference here in Ohio called CodeMash. I put a lot of work into this presentation and have only given it twice now so I decided to sit down and record it for YouTube.",[16,34466,34467],{},[23,34468,34469],{"href":34469,"rel":34470},"https:\u002F\u002Fyoutu.be\u002Fdf7Dso9q700",[101],[16,34472,34473],{},[161,34474,34475],{},"Vue 3: Smaller, Faster & Stronger",[16,34477,34464],{},[16,34479,34480],{},[23,34481,34482],{"href":34482,"rel":34483},"https:\u002F\u002Fyoutu.be\u002FHmdKqXP8JR8",[101],[16,34485,34486],{},[161,34487,34488],{},"Creating Your First Github Pull Request",[16,34490,34491],{},"In this tutorial, I am going to show you how to create a simple pull request by submitting your first pull request to Github. After we walk through submitting your first pull request to Github I am going to show you how to find issues that you can work on in some of your favorite open-source projects. If you want to contribute on open-source projects these days it is important to understand how to find issues that you can work on and understand the process for getting your changes into a project.",[16,34493,34494],{},[23,34495,34496],{"href":34496,"rel":34497},"https:\u002F\u002Fyoutu.be\u002FTWPXAbPVcio",[101],[28,34499,34253],{"id":34252},[16,34501,34502],{},"This week I am working on something really exciting that I hoping to share with you very soon. I was able to record 3 videos this weekend so as long as I can get them edited I will have them published",[28,34504,21516],{"id":10953},[16,34506,33891],{},[33,34508,34263],{"id":11452},[1271,34510,34511,34518,34525,34532],{},[1274,34512,34513],{},[23,34514,34517],{"href":34515,"rel":34516},"https:\u002F\u002Fblog.golang.org\u002Fa-new-go-api-for-protocol-buffers",[101],"A new Go API for Protocol Buffers",[1274,34519,34520],{},[23,34521,34524],{"href":34522,"rel":34523},"https:\u002F\u002Fkousenit.org\u002F2020\u002F03\u002F03\u002Fwhy-use-mocks\u002F",[101],"Why Use Mocks?",[1274,34526,34527],{},[23,34528,34531],{"href":34529,"rel":34530},"https:\u002F\u002Fwww.raymondcamden.com\u002F2020\u002F03\u002F04\u002Fvue-quick-shot-using-a-loading-message",[101],"Vue Quick Shot - Using a Loading Message",[1274,34533,34534],{},[23,34535,34538],{"href":34536,"rel":34537},"https:\u002F\u002Fwww.netlify.com\u002Fpress\u002Fafter-onboarding-800000-developers-netlify-raises-53m-in-series-c-funding-to-fuel-enterprise-growth\u002F",[101],"After Onboarding 800,000 Developers, Netlify Raises $53M in Series C Funding to Fuel Enterprise Growth | Netlify",[33,34540,31],{"id":30},[1271,34542,34543],{},[1274,34544,34545],{},[23,34546,34549],{"href":34547,"rel":34548},"https:\u002F\u002Fwww.vuemastery.com\u002Ffree-weekend\u002F",[101],"Vue Mastery Free Weekend",[33,34551,974],{"id":973},[1271,34553,34554,34561,34568],{},[1274,34555,34556],{},[23,34557,34560],{"href":34558,"rel":34559},"http:\u002F\u002Fwww.fullstackradio.com\u002F135",[101],"Full Stack Radio: 35: Lessons Learned Building Tailwind UI",[1274,34562,34563],{},[23,34564,34567],{"href":34565,"rel":34566},"https:\u002F\u002Fwww.thatcreative.life\u002Fepisodes\u002Fstephenhackett",[101],"That Creative Life: Stephen Hackett - Co-founder of Relay FM",[1274,34569,34570],{},[23,34571,34574],{"href":34572,"rel":34573},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F228\u002Fmore-on-severless-databases-files-secrets-auth-more",[101],"More on Severless - Databases × Files × Secrets × Auth × More!",[33,34576,34339],{"id":16575},[1271,34578,34579,34586,34593,34600],{},[1274,34580,34581],{},[23,34582,34585],{"href":34583,"rel":34584},"https:\u002F\u002Fgithub.com\u002Fquarkusio\u002Fquarkus\u002Freleases\u002Ftag\u002F1.3.0.CR1",[101],"Quarkus 1.3.0",[1274,34587,34588],{},[23,34589,34592],{"href":34590,"rel":34591},"https:\u002F\u002Fwww.notion.vip\u002Ficons\u002F",[101],"Notion Icons",[1274,34594,34595],{},[23,34596,34599],{"href":34597,"rel":34598},"http:\u002F\u002Fknutsynstad.com\u002Ffauxcode\u002F",[101],"Faux Code Generator",[1274,34601,34602],{},[23,34603,34606],{"href":34604,"rel":34605},"https:\u002F\u002Fpattle.github.io\u002Fsimpsons-in-css\u002F",[101],"The Simpsons in CSS",[33,34608,34358],{"id":18091},[1271,34610,34611,34618,34625,34632,34639],{},[1274,34612,34613],{},[23,34614,34617],{"href":34615,"rel":34616},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-the-start",[101],"Tales from the jar side: The Start of the No Fluff, Just Stuff Season",[1274,34619,34620],{},[23,34621,34624],{"href":34622,"rel":34623},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2020\u002F03\u002Fjava-annotated-monthly-march-2020\u002F",[101],"Java Annotated Monthly – March 2020",[1274,34626,34627],{},[23,34628,34631],{"href":34629,"rel":34630},"https:\u002F\u002Fwww.baeldung.com\u002Fjava-weekly-323",[101],"Java Weekly, Issue 323",[1274,34633,34634],{},[23,34635,34638],{"href":34636,"rel":34637},"https:\u002F\u002Fblogs.oracle.com\u002Fjavamagazine\u002F",[101],"Java Magazine",[1274,34640,34641],{},[23,34642,34645],{"href":34643,"rel":34644},"http:\u002F\u002Fgroovycalamari.com\u002Fissues\u002F175",[101],"Groovy Calamari",[28,34647,172],{"id":171},[16,34649,33301],{},[16,34651,9630,34652,191,34654,34656,34658,34660],{},[189,34653],{},[189,34655],{},[23,34657,11491],{"href":11490},[189,34659],{},[23,34661,198],{"href":196,"rel":34662},[101],{"title":200,"searchDepth":201,"depth":201,"links":34664},[34665,34668,34669,34676],{"id":34166,"depth":201,"text":34167,"children":34666},[34667],{"id":34443,"depth":206,"text":34444},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":34670},[34671,34672,34673,34674,34675],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":18091,"depth":206,"text":34358},{"id":171,"depth":201,"text":172},{"_id":34678,"path":34679,"title":34680,"description":34681,"meta":34682,"body":34685},"newsletter\u002Fnewsletter\u002F2020\u002F03\u002F01\u002F28.md","\u002Fnewsletter\u002F2020\u002F03\u002F01\u002F28","Coffee & Code Newsletter: #28","Welcome to Coffee and Code with me, Dan Vega for the week of Feb 23 - Feb 29, 2020. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have one grab a cup and your favorite beverage and let's get to it.",{"slug":34683,"date":34684},"coffee-and-code-newsletter-28","2020-03-01T07:00:00.000Z",{"type":13,"value":34686,"toc":34942},[34687,34689,34691,34694,34700,34707,34711,34717,34720,34726,34730,34736,34739,34742,34748,34750,34753,34755,34757,34759,34796,34798,34821,34823,34846,34848,34871,34875,34898,34900,34923,34925,34927],[16,34688,34681],{},[28,34690,34167],{"id":34166},[16,34692,34693],{},"This week I added two new videos to my YouTube channel. If you have been following along I have some big goals for my channel and I have had a lot of fun learning about what does and doesn't work on YouTube. In a surprise to nobody, I have noticed an increase in all the important metrics on my channel over the last month in which I have been more consistent with uploading videos.",[16,34695,34696],{},[74,34697],{"alt":34698,"src":34699},"YouTube Analytics","\u002Fimages\u002Fnewsletter\u002F2020\u002F03\u002F01\u002Fyoutube_analytics.png",[16,34701,34702,34703,34706],{},"So now the only question is how do I get more consistent with limited time to work on it. My goal for March is to upload 2-3 videos and see if this trend continues. If you haven't already ",[23,34704,5781],{"href":33356,"rel":34705},[101]," what are you waiting for 🤔",[33,34708,34710],{"id":34709},"spring-boot-java-h2-database-setup-in-intellij","Spring Boot Java H2 Database Setup in IntelliJ",[16,34712,34713],{},[74,34714],{"alt":34715,"src":34716},"Spring Boot H2 IntelliJ Database Tools","\u002Fimages\u002Fnewsletter\u002F2020\u002F03\u002F01\u002Fspring-boot-h2-database-thumbnail.png",[16,34718,34719],{},"In this tutorial, you are going to learn how to connect to an H2 database using IntelliJ's database tools. We will start by creating a new Spring Boot application with the Web, H2, JPA and DevTools dependencies. We will learn how to configure the H2 database and provide a schema and seed data. Finally, we will create an H2 file database and connect to it from IntelliJ's database tools.",[16,34721,34722],{},[23,34723,34724],{"href":34724,"rel":34725},"https:\u002F\u002Fyoutu.be\u002F8QBJMxyXIqc",[101],[33,34727,34729],{"id":34728},"how-to-find-new-and-popular-vscode-themes-and-my-favorite-vscode-theme","How to find new and popular vscode themes and my favorite vscode theme",[16,34731,34732],{},[74,34733],{"alt":34734,"src":34735},"Visual Studio Code Theme","\u002Fimages\u002Fnewsletter\u002F2020\u002F03\u002F01\u002Ffavorite_vscode_theme.png",[16,34737,34738],{},"In this video, you are going to learn about my favorite Visual Studio Code theme and how you can find yours. We make a big deal about customizing themes in our IDE and text editors because it's the first thing that we see.",[16,34740,34741],{},"There are so many great vscode themes out there and I am excited to talk about my favorite theme, Synthwave 84. We will also take a look at how to find the most popular, recent and highest rated themes. Finally, I will show you a website that will display popular vscode themes in a thumbnail view so you can easily find a theme that matches your style.",[16,34743,34744],{},[23,34745,34746],{"href":34746,"rel":34747},"https:\u002F\u002Fyoutu.be\u002FNuHCSe_VAX4",[101],[28,34749,34253],{"id":34252},[16,34751,34752],{},"I will have at least two new videos going up this week and maybe a third. In one video I am going to get back to some basics of Spring Boot with a new quick start guide walkthrough. In another, I sat down and recording my presentation from CodeMash, Vue 3: Smaller, Faster & Stronger. As always, If you have any suggestions on videos you would like to see please let me know.",[28,34754,21516],{"id":10953},[16,34756,33891],{},[33,34758,34263],{"id":11452},[1271,34760,34761,34768,34775,34782,34789],{},[1274,34762,34763],{},[23,34764,34767],{"href":34765,"rel":34766},"https:\u002F\u002Fdev.to\u002Flemuelogbunude\u002Fintroducing-java-14-records-3od3",[101],"Introducing Java 14 Records",[1274,34769,34770],{},[23,34771,34774],{"href":34772,"rel":34773},"https:\u002F\u002Fbuttercms.com\u002Fblog\u002Fhow-to-build-a-plugin-with-gridsome",[101],"How To Build A Plugin With Gridsome",[1274,34776,34777],{},[23,34778,34781],{"href":34779,"rel":34780},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2020\u002F02\u002Fmusic-manager-nuxtjs-expressjs\u002F",[101],"How To Build A Music Manager With Nuxt.js And Express.js",[1274,34783,34784],{},[23,34785,34788],{"href":34786,"rel":34787},"https:\u002F\u002Ftechcrunch.com\u002F2020\u002F02\u002F26\u002Fhasura-raises-9-9m-series-a-to-simplify-graphql-for-developers\u002F",[101],"Hasura raises $9.9M Series A to simplify GraphQL for developers",[1274,34790,34791],{},[23,34792,34795],{"href":34793,"rel":34794},"https:\u002F\u002Fwww.engadget.com\u002F2020\u002F02\u002F27\u002F35-raspberry-pi-4-double-ram-2-GB\u002F",[101],"The $35 Raspberry Pi 4 now comes with double the RAM",[33,34797,31],{"id":30},[1271,34799,34800,34807,34814],{},[1274,34801,34802],{},[23,34803,34806],{"href":34804,"rel":34805},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6m3OdxgtKpI",[101],"One Simple Thing Big YouTubers Do to Grow (That Most of Us Don't)",[1274,34808,34809],{},[23,34810,34813],{"href":34811,"rel":34812},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=OrxmtDw4pVI",[101],"Vue.js: The Documentary",[1274,34815,34816],{},[23,34817,34820],{"href":34818,"rel":34819},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=7dUTsi0Kxuw&t=0s",[101],"Scott Tries Whimsical - Flowcharts, Wireframes, Sticky Notes, and Mind Maps",[33,34822,974],{"id":973},[1271,34824,34825,34832,34839],{},[1274,34826,34827],{},[23,34828,34831],{"href":34829,"rel":34830},"https:\u002F\u002Fenjoythevue.io\u002Fepisodes\u002F5",[101],"Enjoy the Vue: Productivity Tools, Workflows & Tabs vs Spaces",[1274,34833,34834],{},[23,34835,34838],{"href":34836,"rel":34837},"https:\u002F\u002Fnofluffjuststuff.com\u002Fpodcast\u002F1\u002Fjava_is_not_dead",[101],"NFJS: Is Java Dead?",[1274,34840,34841],{},[23,34842,34845],{"href":34843,"rel":34844},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F119",[101],"Go Time: Stop the presses",[33,34847,34339],{"id":16575},[1271,34849,34850,34857,34864],{},[1274,34851,34852],{},[23,34853,34856],{"href":34854,"rel":34855},"https:\u002F\u002Ftailwindui.com\u002F",[101],"Tailwind UI Early Access",[1274,34858,34859],{},[23,34860,34863],{"href":34861,"rel":34862},"https:\u002F\u002Fcodepen.io\u002Fsdras\u002Ffull\u002FRwwQapa",[101],"How does the Virtual DOM work?",[1274,34865,34866],{},[23,34867,34870],{"href":34868,"rel":34869},"https:\u002F\u002Fwww.heroicons.com\u002F",[101],"Heroicons are a unique set of icons for your marketing website that make it easy to customize with CSS to better align to your brand.",[33,34872,34874],{"id":34873},"training","Training",[1271,34876,34877,34884,34891],{},[1274,34878,34879],{},[23,34880,34883],{"href":34881,"rel":34882},"https:\u002F\u002Flearning.oreilly.com\u002Flive-training\u002Fcourses\u002Freactive-spring-and-spring-boot\u002F0636920357261\u002F",[101],"O'Reilly Live Training: Reactive Spring and Spring Boot (Ken Kousen)",[1274,34885,34886],{},[23,34887,34890],{"href":34888,"rel":34889},"https:\u002F\u002Flearning.oreilly.com\u002Flive-training\u002Fcourses\u002Fkotlin-spring-boot-essentials\u002F0636920370468\u002F",[101],"O'Reilly Live Training: Kotlin + Spring Boot Essentials (Ken Kousen)",[1274,34892,34893],{},[23,34894,34897],{"href":34895,"rel":34896},"https:\u002F\u002Flearning.oreilly.com\u002Flive-training\u002Fcourses\u002Fpractical-go-modules\u002F0636920365570\u002F",[101],"O'Reilly Live Training: Practical Go Modules (Benjamin Muschko)",[33,34899,34358],{"id":18091},[1271,34901,34902,34909,34916],{},[1274,34903,34904],{},[23,34905,34908],{"href":34906,"rel":34907},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-devnexus",[101],"Tales from the jar side: DevNexus, Null Pointers, and Hunting the Wild Kotlin",[1274,34910,34911],{},[23,34912,34915],{"href":34913,"rel":34914},"https:\u002F\u002Fnews.vuejs.org\u002Fissues\u002F176",[101],"Official Vue.js Newsletter: #176",[1274,34917,34918],{},[23,34919,34922],{"href":34920,"rel":34921},"https:\u002F\u002Fwww.baeldung.com\u002Fjava-weekly-322",[101],"Java Weekly, Issue 322",[28,34924,172],{"id":171},[16,34926,33301],{},[16,34928,9630,34929,191,34931,34933,34935,34937,34940],{},[189,34930],{},[189,34932],{},[23,34934,11491],{"href":11490},[189,34936],{},[23,34938,198],{"href":196,"rel":34939},[101],[189,34941],{},{"title":200,"searchDepth":201,"depth":201,"links":34943},[34944,34948,34949,34957],{"id":34166,"depth":201,"text":34167,"children":34945},[34946,34947],{"id":34709,"depth":206,"text":34710},{"id":34728,"depth":206,"text":34729},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":34950},[34951,34952,34953,34954,34955,34956],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":34873,"depth":206,"text":34874},{"id":18091,"depth":206,"text":34358},{"id":171,"depth":201,"text":172},{"_id":34959,"path":34960,"title":34961,"description":34962,"meta":34963,"body":34966},"newsletter\u002Fnewsletter\u002F2020\u002F02\u002F23\u002F27.md","\u002Fnewsletter\u002F2020\u002F02\u002F23\u002F27","Coffee & Code Newsletter: #27","Welcome to Coffee and Code with me, Dan Vega for the week of Feb 17 - Feb 23, 2020. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have one grab a cup and your favorite beverage and let's get to it.",{"slug":34964,"date":34965},"coffee-and-code-newsletter-27","2020-02-23T07:00:00.000Z",{"type":13,"value":34967,"toc":35241},[34968,34970,34972,34991,34999,35009,35012,35016,35019,35025,35034,35040,35044,35060,35062,35065,35067,35069,35071,35101,35103,35126,35128,35151,35153,35190,35192,35201,35203,35224,35226,35228],[16,34969,34962],{},[28,34971,34167],{"id":34166},[16,34973,34974,34975,34980,34981,34986,34987,34990],{},"This week I ",[23,34976,34979],{"href":34977,"rel":34978},"https:\u002F\u002Fyoutu.be\u002FBkiM3qu-2vo",[101],"posted a new video"," where I discussed the results of the ",[23,34982,34985],{"href":34983,"rel":34984},"https:\u002F\u002Fresearch.hackerrank.com\u002Fdeveloper-skills\u002F2020",[101],"2020 HackerRank Developer Skills Report",". In this report, one of the metrics that I thought was really interesting was that ",[161,34988,34989],{},"Go"," was the #1 programming language that developers wanted to learn this year. I started learning Go towards the end of last year and I couldn't agree more, it's a fascinating language and I hope to share more of that journey soon.",[16,34992,34993,34994,34998],{},"The title for the video that I posted was ",[23,34995,34997],{"href":34977,"rel":34996},[101],"The #1 Programming Language that Developers want to learn in 2020",". I had a couple of people mention to me that it sounded clickbaity and while I would agree with that I need to defend my thought process and offer up an alternative way of thinking about it.",[16,35000,35001,35002,529,35005,35008],{},"I think there is a clear distinction between ",[161,35003,35004],{},"click bait",[161,35006,35007],{},"clickable titles",". When it comes to click bait you are deceiving the viewer for clicks and I don't ever want to do that. As a small YouTuber who really wants to grow his channel I need to do a couple of things. First and this is the big one, I need to be more consistent with the tutorials. Second, I also need to create content that will reach a larger audience.",[16,35010,35011],{},"This is why you might see more experiments with this type of content so I would love to hear your feedback.",[28,35013,35015],{"id":35014},"traversy-media","Traversy Media",[16,35017,35018],{},"While we are on the subject of YouTube I need to take a minute and congratulate Brad Traversy. If you don't know Brad is a YouTuber who teaches a wide variety of programming topics on YouTube. Brad creates some amazing tutorials and is the epitome of consistency. He crossed 1 million subscribers this week and it is a well-deserved milestone. Congrats Brad and looking forward to you hitting 2 million.",[16,35020,35021],{},[74,35022],{"alt":35023,"src":35024},"Brad Traversy","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F23\u002Ftraversymedia.png",[16,35026,35027,35028,35033],{},"I watched a tutorial from Brad this week on creating a clone of ",[23,35029,35032],{"href":35030,"rel":35031},"http:\u002F\u002Fmicrosoft.com",[101],"Microsoft.com"," using CSS Grid, Flex, and media queries. It was really good and got it me thinking about creating a similar tutorial using Tailwind CSS. I have had a lot of fun building layouts with Tailwind lately and I thought I would like to share those. I have an initial version on my Github and if you're interested in YouTube tutorials on Tailwind please let me know.",[16,35035,35036],{},[23,35037,35038],{"href":35038,"rel":35039},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fmicrosoft-wind",[101],[33,35041,35043],{"id":35042},"vue","Vue",[16,35045,35046,35047,35051,35052,35055,35056,35059],{},"A huge thank you to Anthony Gore for including me in this weeks ",[23,35048,34242],{"href":35049,"rel":35050},"https:\u002F\u002Fvuejsdevelopers.com\u002Fnewsletter\u002Fissue\u002F156\u002F",[101],". My article on when to use ",[469,35053,35054],{},"ref()"," vs ",[469,35057,35058],{},"reactive()"," was including in the Newsletter and I am grateful for being included with so many great articles.",[28,35061,34253],{"id":34252},[16,35063,35064],{},"My focus is on YouTube and I should be able to release two videos this week. I want to try and get on a consistent schedule so my thought is Tuesday and Friday but as you know plans can always change. Look out for a video on how to connect IntelliJ's Database Tools to an H2 database in a Spring Boot application & Visual Studio Code themes.",[28,35066,21516],{"id":10953},[16,35068,33891],{},[33,35070,34263],{"id":11452},[1271,35072,35073,35080,35087,35094],{},[1274,35074,35075],{},[23,35076,35079],{"href":35077,"rel":35078},"https:\u002F\u002Fwww.raymondcamden.com\u002F2020\u002F02\u002F17\u002Fionicons-in-vue",[101],"Ray Camden: Ionicons in Vue.js",[1274,35081,35082],{},[23,35083,35086],{"href":35084,"rel":35085},"https:\u002F\u002Fblog.logrocket.com\u002Fcharting-with-vue-a-comparison\u002F",[101],"Ray Camden: Charting with Vue: A comparison",[1274,35088,35089],{},[23,35090,35093],{"href":35091,"rel":35092},"https:\u002F\u002Fjoelhooks.com\u002Fself-paced-email-course",[101],"Creating a self-paced email course with ConvertKit, Typeform, and Zapier",[1274,35095,35096],{},[23,35097,35100],{"href":35098,"rel":35099},"https:\u002F\u002Fcss-tricks.com\u002Fgetting-acquainted-with-svelte-the-new-framework-on-the-block",[101],"Getting Acquainted With Svelte, the New Framework on the Block",[33,35102,31],{"id":30},[1271,35104,35105,35112,35119],{},[1274,35106,35107],{},[23,35108,35111],{"href":35109,"rel":35110},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eiUgVa2Td_k",[101],"The State of Vue.js in 2020 - Why You Should Make The Leap - Gwendolyn Faraday - YouTube",[1274,35113,35114],{},[23,35115,35118],{"href":35116,"rel":35117},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=uKgn-To1C4Q",[101],"Microsoft Homepage Clone - CSS Grid, Flex & Media Queries",[1274,35120,35121],{},[23,35122,35125],{"href":35123,"rel":35124},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6zIuAyLZPH0",[101],"Get Started with Tailwind CSS in 15 Minutes",[33,35127,974],{"id":973},[1271,35129,35130,35137,35144],{},[1274,35131,35132],{},[23,35133,35136],{"href":35134,"rel":35135},"https:\u002F\u002Fenjoythevue.io\u002Fepisodes\u002F4\u002F",[101],"Enjoy the Vue: JAMming, MCing, Vuex & More with Divya Sasidharan",[1274,35138,35139],{},[23,35140,35143],{"href":35141,"rel":35142},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F118",[101],"Go Time: Quack like a wha-?",[1274,35145,35146],{},[23,35147,35150],{"href":35148,"rel":35149},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F224\u002Fserverless-cloud-functions-part-1",[101],"Syntax.fm: Serverless \u002F Cloud Functions - Part 1",[33,35152,34339],{"id":16575},[1271,35154,35155,35162,35169,35176,35183],{},[1274,35156,35157],{},[23,35158,35161],{"href":35159,"rel":35160},"https:\u002F\u002Fdevblogs.microsoft.com\u002Ftypescript\u002Fannouncing-typescript-3-8\u002F",[101],"Announcing TypeScript 3.8 | TypeScript",[1274,35163,35164],{},[23,35165,35168],{"href":35166,"rel":35167},"https:\u002F\u002Fshopify.github.io\u002Fdraggable\u002F",[101],"Draggable JS – JavaScript drag and drop library",[1274,35170,35171],{},[23,35172,35175],{"href":35173,"rel":35174},"https:\u002F\u002Fishadeed.com\u002Farticle\u002Flearn-css-positioning",[101],"Learn CSS Positioning with 😸",[1274,35177,35178],{},[23,35179,35182],{"href":35180,"rel":35181},"https:\u002F\u002Fgithub.com\u002Fevanw\u002Fesbuild\u002F",[101],"esbuild: JavaScript Bundler written in Go",[1274,35184,35185],{},[23,35186,35189],{"href":35187,"rel":35188},"https:\u002F\u002Fgitexplorer.com\u002F",[101],"Git Command Explorer",[33,35191,28365],{"id":25700},[1271,35193,35194],{},[1274,35195,35196],{},[23,35197,35200],{"href":35198,"rel":35199},"https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Facademy\u002F",[101],"JetBrains Academy: Java, Kotlin & Python Courses",[33,35202,34358],{"id":18091},[1271,35204,35205,35212,35218],{},[1274,35206,35207],{},[23,35208,35211],{"href":35209,"rel":35210},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-spring-training",[101],"Tales from the jar side: Spring training, Groovy 3, and other updates",[1274,35213,35214],{},[23,35215,35217],{"href":35049,"rel":35216},[101],"Vue.js Developers Newsletter Issue #156",[1274,35219,35220],{},[23,35221,34645],{"href":35222,"rel":35223},"http:\u002F\u002Fgroovycalamari.com\u002Fissues\u002F174?#start",[101],[28,35225,172],{"id":171},[16,35227,33301],{},[16,35229,9630,35230,191,35232,35234,35236,35238],{},[189,35231],{},[189,35233],{},[23,35235,11491],{"href":11490},[189,35237],{},[23,35239,198],{"href":196,"rel":35240},[101],{"title":200,"searchDepth":201,"depth":201,"links":35242},[35243,35244,35247,35248,35256],{"id":34166,"depth":201,"text":34167},{"id":35014,"depth":201,"text":35015,"children":35245},[35246],{"id":35042,"depth":206,"text":35043},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":35249},[35250,35251,35252,35253,35254,35255],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":18091,"depth":206,"text":34358},{"id":171,"depth":201,"text":172},{"_id":35258,"path":35259,"title":35260,"description":35261,"meta":35262,"body":35265},"newsletter\u002Fnewsletter\u002F2020\u002F02\u002F16\u002F26.md","\u002Fnewsletter\u002F2020\u002F02\u002F16\u002F26","Coffee & Code Newsletter: #26","Welcome to Coffee and Code with me, Dan Vega for the week of Feb 9 - Feb 15, 2020.  This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have one grab a cup and your favorite beverage and let's get to it.",{"slug":35263,"date":35264},"coffee-and-code-newsletter-26","2020-02-16T07:00:00.000Z",{"type":13,"value":35266,"toc":35526},[35267,35269,35275,35277,35285,35288,35291,35300,35306,35313,35319,35321,35328,35351,35353,35355,35357,35387,35389,35419,35421,35444,35446,35469,35471,35480,35482,35491,35493,35509,35511,35513],[16,35268,35261],{},[16,35270,35271],{},[74,35272],{"alt":35273,"src":35274},"Coffee and Code 26","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F16\u002Fcoffee_and_code_26.png",[28,35276,34167],{"id":34166},[16,35278,35279,35280,35055,35282,35284],{},"This week I was able to publish a detailed article and video on ",[469,35281,35054],{},[469,35283,35058],{}," in Vue 3.",[16,35286,35287],{},"I think what I am most excited about Vue 3 is to see how other developers embrace it and use it. While I have had a chance to play with it over the last few months I know that isn't the case for everyone.",[16,35289,35290],{},"The biggest feature coming to Vue 3 is the Composition API. This offers an alternative approach to creating components that is much different than the existing options API. I have no problem admitting that when I first saw it, I didn't get it. The more I use it though the more it just makes sense. While you won't go rewriting entire applications using the Composition API it will make you think about how create components and compose functionality going forward.",[16,35292,35293,35294,35299],{},"I have ",[23,35295,35298],{"href":35296,"rel":35297},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2020\u002F01\u002F09\u002Fcodemash-2020\u002F",[101],"given a couple"," of presentations on Vue 3 recently and one question that keeps coming up is when do I use Ref vs Reactive to declare a reactive property. I never had a great answer for this so over the past couple of weeks I set out to answer this question and this article is the result of that research.",[16,35301,35302],{},[74,35303],{"alt":35304,"src":35305},"Vue 3: Ref vs Reactive","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F16\u002Fvue3-ref-vs-reactive-cover.png",[16,35307,35308,35309,184],{},"You can read the rest of the article using the link below or check out the video on the same topic ",[23,35310,742],{"href":35311,"rel":35312},"https:\u002F\u002Fyoutu.be\u002FcRwG96MOHp0",[101],[16,35314,35315],{},[23,35316,35317],{"href":35317,"rel":35318},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2020\u002F02\u002F12\u002Fvue3-ref-vs-reactive\u002F",[101],[28,35320,34253],{"id":34252},[16,35322,35323,35324,35327],{},"I am going to try something new this week. I have content ready to go for the following topics and I would like you to help me pick which video to work on next. All you have to do is respond to this email or let me know on ",[23,35325,183],{"href":11330,"rel":35326},[101],". You can also contact me If you would like to see something that is not on this list.",[1271,35329,35330,35333,35336,35339,35345,35348],{},[1274,35331,35332],{},"Groovy 3 has been released, let's take a look at the new features (Multiple videos)",[1274,35334,35335],{},"What is my Visual Studio Code theme and some tips on how to find new ones.",[1274,35337,35338],{},"HankerRank 2020 Developer Report",[1274,35340,2481,35341,35344],{},[469,35342,35343],{},"watch()"," method in Vue 3 Composition API.",[1274,35346,35347],{},"Converting a Vue 2 component into a Vue 3 Component",[1274,35349,35350],{},"Using JSON-Server in a Vue app as an API to prototype an application.",[28,35352,21516],{"id":10953},[16,35354,33891],{},[33,35356,34263],{"id":11452},[1271,35358,35359,35366,35373,35380],{},[1274,35360,35361],{},[23,35362,35365],{"href":35363,"rel":35364},"https:\u002F\u002Fwww.sanity.io\u002Fblog\u002Fintroducing-squizzy-our-totally-serverless-kahoot-clone-powered-by-sanity-io",[101],"Introducing Squizzy: Our totally serverless Kahoot clone powered by Sanity.io",[1274,35367,35368],{},[23,35369,35372],{"href":35370,"rel":35371},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002FRefresh-Proof-Vue-Forms-with-Local-Storage\u002F",[101],"Refresh-Proof Vue Forms with Local Storage | Vue Mastery",[1274,35374,35375],{},[23,35376,35379],{"href":35377,"rel":35378},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2020\u002F02\u002Fapi-mocking-mirage-vue-javascript\u002F",[101],"Setting Up API Mocking With Mirage JS And Vue.js — Smashing Magazine",[1274,35381,35382],{},[23,35383,35386],{"href":35384,"rel":35385},"https:\u002F\u002Fspring.io\u002Fblog\u002F2020\u002F02\u002F14\u002Fannouncing-the-new-spring-website",[101],"Announcing: The NEW Spring Website!",[33,35388,31],{"id":30},[1271,35390,35391,35398,35405,35412],{},[1274,35392,35393],{},[23,35394,35397],{"href":35395,"rel":35396},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wbp_ro-eWwQ",[101],"Vuex visually explained by Adam Jahr",[1274,35399,35400],{},[23,35401,35404],{"href":35402,"rel":35403},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1M9PzQlH1Nk",[101],"10 Tips to Edit 10x Faster in Premiere Pro",[1274,35406,35407],{},[23,35408,35411],{"href":35409,"rel":35410},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=2EmYw-O-WLI&feature=emb_title",[101],"Vue.js: The Documentary (TRAILER)",[1274,35413,35414],{},[23,35415,35418],{"href":35416,"rel":35417},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BI3xnQ_iJ3I&feature=emb_title",[101],"Vue 3 for library authors by Damian Dulisz - YouTube",[33,35420,974],{"id":973},[1271,35422,35423,35430,35437],{},[1274,35424,35425],{},[23,35426,35429],{"href":35427,"rel":35428},"https:\u002F\u002Fchangelog.com\u002Fjsparty\u002F113",[101],"JS Party: Fullstack D3 with Amelia Wattenberger",[1274,35431,35432],{},[23,35433,35436],{"href":35434,"rel":35435},"https:\u002F\u002Fshoptalkshow.com\u002F398\u002F",[101],"Shop Talk Show: An Event Apart, Subgrid, Grid, Chrome engine, & more with Eric Meyer",[1274,35438,35439],{},[23,35440,35443],{"href":35441,"rel":35442},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F116",[101],"Go Time: Unusual uses for Go: GUIs",[33,35445,34339],{"id":16575},[1271,35447,35448,35455,35462],{},[1274,35449,35450],{},[23,35451,35454],{"href":35452,"rel":35453},"http:\u002F\u002Fgroovy-lang.org\u002Freleasenotes\u002Fgroovy-3.0.html",[101],"Groovy 3.0 Released",[1274,35456,35457],{},[23,35458,35461],{"href":35459,"rel":35460},"https:\u002F\u002Fgithub.blog\u002F2020-02-12-supercharge-your-command-line-experience-github-cli-is-now-in-beta",[101],"Supercharge your command line experience: GitHub CLI is now in beta - The GitHub Blog",[1274,35463,35464],{},[23,35465,35468],{"href":35466,"rel":35467},"https:\u002F\u002Fblog.angular.io\u002Fversion-9-of-angular-now-available-project-ivy-has-arrived-23c97b63cfa3",[101],"Version 9 of Angular Now Available — Project Ivy has arrived!",[33,35470,22754],{"id":14121},[1271,35472,35473],{},[1274,35474,35475],{},[23,35476,35479],{"href":35477,"rel":35478},"https:\u002F\u002Fleanpub.com\u002Freactive-spring",[101],"Reactive Spring by Josh Long",[33,35481,28365],{"id":25700},[1271,35483,35484],{},[1274,35485,35486],{},[23,35487,35490],{"href":35488,"rel":35489},"https:\u002F\u002Fegghead.io\u002Fplaylists\u002Fbuilding-a-serverless-jamstack-todo-app-with-netlify-gatsby-graphql-and-faunadb-53bb",[101],"Building a Serverless JAMStack Todo app with Netlify, Gatsby, GraphQL, and FaunaDB on @eggheadio",[33,35492,34358],{"id":18091},[1271,35494,35495,35502],{},[1274,35496,35497],{},[23,35498,35501],{"href":35499,"rel":35500},"http:\u002F\u002Fgroovycalamari.com\u002Fissues\u002F173#start",[101],"Groovy Calamari - Issue 173",[1274,35503,35504],{},[23,35505,35508],{"href":35506,"rel":35507},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2020\u002F02\u002Fjava-annotated-monthly-february-2020",[101],"Java Annotated Monthly – February 2020",[28,35510,172],{"id":171},[16,35512,33301],{},[16,35514,9630,35515,191,35517,35519,35521,35523],{},[189,35516],{},[189,35518],{},[23,35520,11491],{"href":11490},[189,35522],{},[23,35524,198],{"href":196,"rel":35525},[101],{"title":200,"searchDepth":201,"depth":201,"links":35527},[35528,35529,35530,35539],{"id":34166,"depth":201,"text":34167},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":35531},[35532,35533,35534,35535,35536,35537,35538],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":14121,"depth":206,"text":22754},{"id":25700,"depth":206,"text":28365},{"id":18091,"depth":206,"text":34358},{"id":171,"depth":201,"text":172},{"_id":35541,"path":35542,"title":35543,"description":35544,"meta":35545,"body":35548},"newsletter\u002Fnewsletter\u002F2020\u002F02\u002F09\u002F25.md","\u002Fnewsletter\u002F2020\u002F02\u002F09\u002F25","Coffee & Code Newsletter: #25","Welcome to Coffee and Code with me, Dan Vega for the week of Feb 2 - Feb 9, 2020. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have one grab a cup and your favorite beverage and let's get to it.",{"slug":35546,"date":35547},"coffee-and-code-newsletter-25","2020-02-09T07:00:00.000Z",{"type":13,"value":35549,"toc":35782},[35550,35552,35558,35560,35563,35567,35576,35580,35589,35593,35596,35602,35604,35607,35609,35611,35613,35643,35645,35668,35670,35693,35695,35718,35720,35729,35731,35754,35756,35765,35767,35769],[16,35551,35544],{},[16,35553,35554],{},[74,35555],{"alt":35556,"src":35557},"Coffee and Code #25 Cover","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F09\u002Fcoffee_and_code_25.png",[28,35559,34167],{"id":34166},[16,35561,35562],{},"It was a busy week along with some pretty exciting personal news, so let's get into it...",[33,35564,35566],{"id":35565},"are-you-rob-base","Are you Rob Base?",[16,35568,35569,35570,35575],{},"This week I put out a video where I wrote a silly application in Vue called ",[23,35571,35574],{"href":35572,"rel":35573},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_dPX3tT3EnU&feature=youtu.be",[101],"Are you Rob Base",". I start out the tutorial by talking about how as a developer we need to keep building things, even if they seem silly. You can read all the articles, watch all the videos but until you start writing code you just aren't going to learn. I have started to take my own advice and have been building out some smaller demos. I hope you find this tutorial useful and learned something new.",[33,35577,35579],{"id":35578},"vue-30-smaller-faster-and-stronger","Vue 3.0 Smaller, Faster and Stronger",[16,35581,35582,35583,35588],{},"My talk from CodeMash was recorded and it has been [published on Pluralsight](Vue 3.0 Better, Faster, and Stronger: CodeMash). You should be able to watch the presentation even if you aren't a Pluralsight subscriber. I also gave this presentation to the ",[23,35584,35587],{"href":35585,"rel":35586},"https:\u002F\u002Fwww.meetup.com\u002Fvuecle\u002Fevents\u002F267933150\u002F",[101],"Vue CLE Meetup"," this week and was happy to see a great turnout and some really good conversation about Vue 3.",[33,35590,35592],{"id":35591},"personal-news","Personal News",[16,35594,35595],{},"In a bit of personal news, I am excited to finally share that our family will be growing in August. We had a gender reveal party this weekend with family and found out that Bella is going to have a baby sister. I can't wait to meet this little angel and we are officially on the clock!",[16,35597,35598],{},[74,35599],{"alt":35600,"src":35601},"Gender Party","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F09\u002Fgender-party.jpeg",[28,35603,34253],{"id":34252},[16,35605,35606],{},"I think I have simplified my screencasting setup and hope to produce more videos. My plan for this week is to release 2 new videos on YouTube and I am going to be adding some new content to my Getting Started with Vue.js course. Stay tuned!!",[28,35608,21516],{"id":10953},[16,35610,33891],{},[33,35612,34263],{"id":11452},[1271,35614,35615,35622,35629,35636],{},[1274,35616,35617],{},[23,35618,35621],{"href":35619,"rel":35620},"https:\u002F\u002Fmattstauffer.com\u002Fblog\u002Fsetting-up-your-webcam-lights-and-audio-for-remote-work-podcasting-videos-and-streaming\u002F",[101],"Setting Up Your Webcam, Lights, and Audio for Remote Work, Podcasting, Videos, and Streaming",[1274,35623,35624],{},[23,35625,35628],{"href":35626,"rel":35627},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2020\u002F02\u002Fheadless-wordpress-site-jamstack\u002F",[101],"How To Create A Headless WordPress Site On The JAMstack — Smashing Magazine",[1274,35630,35631],{},[23,35632,35635],{"href":35633,"rel":35634},"https:\u002F\u002Fwww.raymondcamden.com\u002F2020\u002F02\u002F01\u002Fbuilding-table-sorting-and-pagination-in-vuejs-with-async-data",[101],"Building Table Sorting and Pagination in Vue.js - with Async Data",[1274,35637,35638],{},[23,35639,35642],{"href":35640,"rel":35641},"https:\u002F\u002Fwww.cypress.io\u002Fblog\u002F2020\u002F02\u002F06\u002Fintroducing-firefox-and-edge-support-in-cypress-4-0",[101],"Introducing Firefox and Edge Support in Cypress 4.0",[33,35644,31],{"id":30},[1271,35646,35647,35654,35661],{},[1274,35648,35649],{},[23,35650,35653],{"href":35651,"rel":35652},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=d4I35tkZnNg",[101],"Mirage JS with Vue",[1274,35655,35656],{},[23,35657,35660],{"href":35658,"rel":35659},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QpJOpgsS_SA",[101],"Groovy Podcast ep. 78 (S04E04)",[1274,35662,35663],{},[23,35664,35667],{"href":35665,"rel":35666},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VHVKYDIEtaI",[101],"Building sustainable enterprise apps with Vue.js - Chris Fritz",[33,35669,974],{"id":973},[1271,35671,35672,35679,35686],{},[1274,35673,35674],{},[23,35675,35678],{"href":35676,"rel":35677},"https:\u002F\u002Fenjoythevue.io\u002Fepisodes\u002F1\u002F",[101],"Enjoy the Vue: Welcome to Vue: Meet your panel",[1274,35680,35681],{},[23,35682,35685],{"href":35683,"rel":35684},"https:\u002F\u002Fenjoythevue.io\u002Fepisodes\u002F2\u002F",[101],"Enjoy the Vue: What We Love About Vue CLI",[1274,35687,35688],{},[23,35689,35692],{"href":35690,"rel":35691},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F115",[101],"Grokking Go.dev",[33,35694,34339],{"id":16575},[1271,35696,35697,35704,35711],{},[1274,35698,35699],{},[23,35700,35703],{"href":35701,"rel":35702},"https:\u002F\u002Fgithub.com\u002Ftailwindcss\u002Ftailwindcss\u002Freleases\u002Ftag\u002Fv1.2.0#user-content-css-grid-support",[101],"Tailwind CSS: Release v1.2.0",[1274,35705,35706],{},[23,35707,35710],{"href":35708,"rel":35709},"https:\u002F\u002Fgo.dev\u002F",[101],"Go.dev: Getting Started with Go",[1274,35712,35713],{},[23,35714,35717],{"href":35715,"rel":35716},"https:\u002F\u002Fcode.visualstudio.com\u002Fupdates\u002Fv1_42#_contributions-to-extensions",[101],"Visual Studio Code January 2020",[33,35719,28365],{"id":25700},[1271,35721,35722],{},[1274,35723,35724],{},[23,35725,35728],{"href":35726,"rel":35727},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fhere-are-380-ivy-league-courses-you-can-take-online-right-now-for-free-9b3ffcbd7b8c\u002F",[101],"Here are 450 Ivy League courses you can take online right now for free",[33,35730,34358],{"id":18091},[1271,35732,35733,35740,35747],{},[1274,35734,35735],{},[23,35736,35739],{"href":35737,"rel":35738},"https:\u002F\u002Fnews.vuejs.org\u002Fissues\u002F173",[101],"The Official Vue News",[1274,35741,35742],{},[23,35743,35746],{"href":35744,"rel":35745},"https:\u002F\u002Fkenkousen.substack.com\u002Fp\u002Ftales-from-the-jar-side-kotlin-android",[101],"Tales from the jar side: Kotlin, Android, Spring, and LIV",[1274,35748,35749],{},[23,35750,35753],{"href":35751,"rel":35752},"https:\u002F\u002Fwww.baeldung.com\u002Fjava-weekly-319",[101],"Java Weekly, Issue 319 | Baeldung",[33,35755,22045],{"id":13856},[1271,35757,35758],{},[1274,35759,35760],{},[23,35761,35764],{"href":35762,"rel":35763},"https:\u002F\u002Fwww.pluralsight.com\u002Fsearch?q=CodeMash&categories=course",[101],"CodeMash Conference Recordings",[28,35766,172],{"id":171},[16,35768,33301],{},[16,35770,9630,35771,191,35773,35775,35777,35779],{},[189,35772],{},[189,35774],{},[23,35776,11491],{"href":11490},[189,35778],{},[23,35780,198],{"href":196,"rel":35781},[101],{"title":200,"searchDepth":201,"depth":201,"links":35783},[35784,35789,35790,35799],{"id":34166,"depth":201,"text":34167,"children":35785},[35786,35787,35788],{"id":35565,"depth":206,"text":35566},{"id":35578,"depth":206,"text":35579},{"id":35591,"depth":206,"text":35592},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":35791},[35792,35793,35794,35795,35796,35797,35798],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":18091,"depth":206,"text":34358},{"id":13856,"depth":206,"text":22045},{"id":171,"depth":201,"text":172},{"_id":35801,"path":35802,"title":35803,"description":35804,"meta":35805,"body":35808},"newsletter\u002Fnewsletter\u002F2020\u002F02\u002F02\u002F24.md","\u002Fnewsletter\u002F2020\u002F02\u002F02\u002F24","Coffee & Code Newsletter: #24","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #23 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":35806,"date":35807},"coffee-and-code-newsletter-24","2020-02-02T07:00:00.000Z",{"type":13,"value":35809,"toc":36022},[35810,35819,35825,35827,35830,35834,35843,35849,35853,35856,35862,35864,35867,35870,35873,35878,35880,35883,35885,35887,35889,35912,35914,35937,35939,35962,35964,35973,35975,36005,36007,36009],[16,35811,35812,35813,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout ",[23,35814,35817],{"href":35815,"rel":35816},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F23",[101],"Coffee and Code #23 here",". If you don't already have a cup of coffee grab one now and let's get to it.",[16,35820,35821],{},[74,35822],{"alt":35823,"src":35824},"Coffee & Code: 24","\u002Fimages\u002Fnewsletter\u002F2020\u002F02\u002F02\u002Fcoffee_and_code_24.png",[28,35826,34167],{"id":34166},[16,35828,35829],{},"Thanks for everyone's feedback on my YouTube thumbnail art. I heard from a couple folks that the font was hard to read so I ended up switch it up to what you see above. With that let's get into this weeks topics.",[28,35831,35833],{"id":35832},"vuejs-for-beginners","Vue.JS for beginners",[16,35835,35836,35837,35842],{},"If you follow me at all you probably already know this but I recently released a new course called ",[23,35838,35841],{"href":35839,"rel":35840},"https:\u002F\u002Fwww.youtube.com\u002Fredirect?v=zjYBw7lN8X4&event=video_description&redir_token=yQh8clKfvyxIDONs8rOkFaN8zGx8MTU4MDY3MzY3OUAxNTgwNTg3Mjc5&q=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fvue-intro%2F%3FreferralCode%3DE9DECFF78CA706D7A68A",[101],"Vue.js for Beginners: Up and Running with Vue",". I haven't really mentioned it to my YouTube audience yet so I thought I would do that this week. I recorded a quick video with my motivation for creating the course and I played the course trailer. If you're interested in watching that video the link is below and If you're not a subscriber on YouTube yet, what are you waiting for 😉",[16,35844,35845],{},[23,35846,35847],{"href":35847,"rel":35848},"https:\u002F\u002Fyoutu.be\u002FzjYBw7lN8X4",[101],[33,35850,35852],{"id":35851},"stir-trek-call-for-papers","Stir Trek Call for papers",[16,35854,35855],{},"By the time you're reading this, the call for papers for Stir Trek 2020 has ended. As usual, I waited until the very last minute to submit a talk but I was able to submit one. The title for the talk is \"Vue 3: Smaller, Faster & Stronger\". This is the talk I gave to CodeMash but I have already made a few updates and if this gets accepted I have some ideas for a few more.",[16,35857,35858],{},[23,35859,35860],{"href":35860,"rel":35861},"https:\u002F\u002Fstirtrek.com\u002F",[101],[28,35863,34253],{"id":34252},[16,35865,35866],{},"What I have planned for this week...",[33,35868,34248],{"id":35869},"vue-3-smaller-faster-stronger",[16,35871,35872],{},"If you're in the Cleveland area I will be giving a presentation on Vue 3. This is the same presentation I gave at CodeMash and I am excited to give it again.",[16,35874,35875],{},[23,35876,35585],{"href":35585,"rel":35877},[101],[33,35879,26751],{"id":26750},[16,35881,35882],{},"I should have another 2 videos out this week. The first is going to be on building a silly app in Vue called Are You Rob Base. I had a lot of fun building this out and I hope you learn something from it. The 2nd I haven't recorded yet so I don't want to announce it just yet but if you have a topic you would like to see me cover please let me know.",[28,35884,21516],{"id":10953},[16,35886,33891],{},[33,35888,34263],{"id":11452},[1271,35890,35891,35898,35905],{},[1274,35892,35893],{},[23,35894,35897],{"href":35895,"rel":35896},"https:\u002F\u002Fwww.raymondcamden.com\u002F2020\u002F01\u002F27\u002Fvue-and-form-fields",[101],"Ray Camden: Vue and Form Fields",[1274,35899,35900],{},[23,35901,35904],{"href":35902,"rel":35903},"https:\u002F\u002Fdev.to\u002Fphilnash\u002Fhow-to-find-cfps-for-developer-conferences-307n",[101],"How to find CFPs for developer conferences",[1274,35906,35907],{},[23,35908,35911],{"href":35909,"rel":35910},"https:\u002F\u002Fdev.to\u002Fvuevixens\u002F2019-retrospective-and-2020-roadmap-41m2",[101],"Vue Vixens: 2019 Retrospective and 2020 Roadmap",[33,35913,31],{"id":30},[1271,35915,35916,35923,35930],{},[1274,35917,35918],{},[23,35919,35922],{"href":35920,"rel":35921},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCmXVXfidLZQkppLPaATcHag",[101],"Chris on Code",[1274,35924,35925],{},[23,35926,35929],{"href":35927,"rel":35928},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qaGjS7-qWzg",[101],"Is reduce() bad? - HTTP 203",[1274,35931,35932],{},[23,35933,35936],{"href":35934,"rel":35935},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCoSvlWS5XcwaSzIcbuJ-Ysg",[101],"Notion Office Hours: YouTube",[33,35938,974],{"id":973},[1271,35940,35941,35948,35955],{},[1274,35942,35943],{},[23,35944,35947],{"href":35945,"rel":35946},"http:\u002F\u002Fwww.fullstackradio.com\u002F133",[101],"Full Stack Radio: 133: Sam Selikoff - Building Production-Ready SPAs Fast with Mirage.js",[1274,35949,35950],{},[23,35951,35954],{"href":35952,"rel":35953},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F217\u002Fhasty-treat-building-a-community-slack-discord-spectrum-discourse-forums",[101],"Hasty Treat - Building A Community Slack, Discord, Spectrum, Discourse, Forums",[1274,35956,35957],{},[23,35958,35961],{"href":35959,"rel":35960},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F215\u002Fhasty-treat-picking-the-stack-for-uses-tech-gatsby-react-context-styled-components",[101],"Syntax FM: Hasty Treat - Picking the Stack for uses.tech - Gatsby, React, Context, Styled Components",[33,35963,22754],{"id":14121},[1271,35965,35966],{},[1274,35967,35968],{},[23,35969,35972],{"href":35970,"rel":35971},"https:\u002F\u002Fleanpub.com\u002Fydkjsy-get-started",[101],"You Don't Know JS Yet: Get Started",[33,35974,34339],{"id":16575},[1271,35976,35977,35984,35991,35998],{},[1274,35978,35979],{},[23,35980,35983],{"href":35981,"rel":35982},"https:\u002F\u002Froughjs.com\u002F",[101],"Rough.js: Create graphics with a hand-drawn, sketchy, appearance",[1274,35985,35986],{},[23,35987,35990],{"href":35988,"rel":35989},"https:\u002F\u002Ftiny-helpers.dev\u002F",[101],"Tiny Helpers: A collection of free single-purpose online tools for web developers...",[1274,35992,35993],{},[23,35994,35997],{"href":35995,"rel":35996},"https:\u002F\u002Fvscodethemes.com\u002F",[101],"VS Code Themes Showcase: Preview themes from the VSCode marketplace.",[1274,35999,36000],{},[23,36001,36004],{"href":36002,"rel":36003},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuepress\u002Fblob\u002Fmaster\u002FCHANGELOG.md",[101],"VuePress 1.3.0: Minimalistic Vue-powered static site generator",[28,36006,172],{"id":171},[16,36008,33301],{},[16,36010,9630,36011,191,36013,36015,36017,36019],{},[189,36012],{},[189,36014],{},[23,36016,11491],{"href":11490},[189,36018],{},[23,36020,198],{"href":196,"rel":36021},[101],{"title":200,"searchDepth":201,"depth":201,"links":36023},[36024,36025,36028,36032,36039],{"id":34166,"depth":201,"text":34167},{"id":35832,"depth":201,"text":35833,"children":36026},[36027],{"id":35851,"depth":206,"text":35852},{"id":34252,"depth":201,"text":34253,"children":36029},[36030,36031],{"id":35869,"depth":206,"text":34248},{"id":26750,"depth":206,"text":26751},{"id":10953,"depth":201,"text":21516,"children":36033},[36034,36035,36036,36037,36038],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":14121,"depth":206,"text":22754},{"id":16575,"depth":206,"text":34339},{"id":171,"depth":201,"text":172},{"_id":36041,"path":36042,"title":36043,"description":36044,"meta":36045,"body":36048},"newsletter\u002Fnewsletter\u002F2020\u002F01\u002F26\u002F23.md","\u002Fnewsletter\u002F2020\u002F01\u002F26\u002F23","Coffee & Code Newsletter: #23","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #22 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":36046,"date":36047},"coffee-and-code-newsletter-23","2020-01-26T07:00:00.000Z",{"type":13,"value":36049,"toc":36255},[36050,36057,36063,36065,36068,36072,36080,36086,36090,36093,36099,36103,36112,36114,36116,36118,36134,36136,36152,36154,36177,36179,36195,36197,36206,36208,36238,36240,36242],[16,36051,36052,36053,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #22 ",[23,36054,742],{"href":36055,"rel":36056},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F22",[101],[16,36058,36059],{},[74,36060],{"alt":36061,"src":36062},"Coffee and Code #23 Cover","\u002Fimages\u002Fnewsletter\u002F2020\u002F01\u002F26\u002Fcoffee_and_code_23.png",[28,36064,34167],{"id":34166},[16,36066,36067],{},"It was another busy week for me and I am finally getting back into the swing of things and I finally feel like the new year has finally started. With that let's get into it...",[33,36069,36071],{"id":36070},"vue-3-fragments-video","Vue 3 Fragments Video",[16,36073,36074,36079],{},[23,36075,36078],{"href":36076,"rel":36077},"https:\u002F\u002Fyoutu.be\u002FiC9smVwm7GE",[101],"In this tutorial,"," you are going to learn all about a new feature in Vue 3 called Fragments. You will learn about the problem as it exists in Vue 2 and how Vue 3 is making this issue go away.",[16,36081,36082],{},[74,36083],{"alt":36084,"src":36085},"Vue 3 Fragments","\u002Fimages\u002Fnewsletter\u002F2020\u002F01\u002F26\u002Fvue3_fragments_thumbnail.png",[33,36087,36089],{"id":36088},"thumbnail-design","Thumbnail Design",[16,36091,36092],{},"The one thing that always stresses me out when I create a new video is the thumbnail. I know they are really important when it comes to YouTube but it takes me way too long to come up with a good design. I started playing with a new design this week that I could reuse for every tutorial and just switch up the theme based on the content. I would love your thoughts on the image above, below and the overall theme.",[16,36094,36095],{},[74,36096],{"alt":36097,"src":36098},"Grammarly extension for Visual Studio Code","\u002Fimages\u002Fnewsletter\u002F2020\u002F01\u002F26\u002Fgrammarly_visual_studio_code_extension_thumbnail.png",[33,36100,36102],{"id":36101},"new-domain-name","New domain name",[16,36104,36105,36106,36111],{},"I am the king of buying new domain names and letting them sit. With that said I bought a new domain this week that I think I am actually going to do something with. The domain is ",[23,36107,36110],{"href":36108,"rel":36109},"http:\u002F\u002Fwww.intervue.com",[101],"www.intervue.com"," and my thought is to do some kind of application that helps anyone going for a new job where Vue is the primary framework. There will be questions around HTML, CSS, JavaScript and of course Vue. If you have any interest in this please let me know.",[28,36113,21516],{"id":10953},[16,36115,33891],{},[33,36117,34263],{"id":11452},[1271,36119,36120,36127],{},[1274,36121,36122],{},[23,36123,36126],{"href":36124,"rel":36125},"https:\u002F\u002Fgist.github.com\u002Fchrisvfritz\u002F52490a5d2e42876edcf7d7e5f94dee87",[101],"Chris Fritz is leaving the Vue Core Team",[1274,36128,36129],{},[23,36130,36133],{"href":36131,"rel":36132},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2020\u002F01\u002Fintellij-idea-2020-1-eap\u002F",[101],"IntelliJ IDEA 2020.1 EAP",[33,36135,31],{"id":30},[1271,36137,36138,36145],{},[1274,36139,36140],{},[23,36141,36144],{"href":36142,"rel":36143},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vRUGJZK129Y",[101],"Toddcast - Episode 2: RetroPie, Elementary OS And The M5Stack",[1274,36146,36147],{},[23,36148,36151],{"href":36149,"rel":36150},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F540247999",[101],"JavaScript & Friends: Gridsome Introduction by Ray Camden",[33,36153,974],{"id":973},[1271,36155,36156,36163,36170],{},[1274,36157,36158],{},[23,36159,36162],{"href":36160,"rel":36161},"https:\u002F\u002Ftwitter.com\u002FWVFRM\u002Fstatus\u002F1220669306205364224",[101],"Waveform: How we make our YouTube Videos",[1274,36164,36165],{},[23,36166,36169],{"href":36167,"rel":36168},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F216\u002Ftech-to-watch-in-2020",[101],"Syntax FM: Tech to Watch in 2020",[1274,36171,36172],{},[23,36173,36176],{"href":36174,"rel":36175},"https:\u002F\u002Fwww.ladybug.dev\u002F20-tips-for-devs",[101],"Ladybug Podcast: 20 design tips for developers in 2020",[33,36178,28365],{"id":25700},[1271,36180,36181,36188],{},[1274,36182,36183],{},[23,36184,36187],{"href":36185,"rel":36186},"https:\u002F\u002Fwww.udacity.com\u002Fcourse\u002Fcloud-developer-nanodegree--nd9990",[101],"Udacity: Become a cloud developer",[1274,36189,36190],{},[23,36191,36194],{"href":36192,"rel":36193},"https:\u002F\u002Fwww.vuemastery.com\u002Fcourses\u002Funit-testing\u002Fwhat-to-test",[101],"Vue Mastery: Unit Testing",[33,36196,22754],{"id":14121},[1271,36198,36199],{},[1274,36200,36201],{},[23,36202,36205],{"href":36203,"rel":36204},"https:\u002F\u002Fitrevolution.com\u002Fthe-unicorn-project\u002F",[101],"The Unicorn Project",[33,36207,34339],{"id":16575},[1271,36209,36210,36217,36224,36231],{},[1274,36211,36212],{},[23,36213,36216],{"href":36214,"rel":36215},"https:\u002F\u002Fwww.vuescreencasts.com\u002F",[101],"Vue Screencasts Launches",[1274,36218,36219],{},[23,36220,36223],{"href":36221,"rel":36222},"https:\u002F\u002Fwww.channelsstack.com\u002F",[101],"Channels Stack",[1274,36225,36226],{},[23,36227,36230],{"href":36228,"rel":36229},"https:\u002F\u002Ftableplus.com\u002F",[101],"TablePlus",[1274,36232,36233],{},[23,36234,36237],{"href":36235,"rel":36236},"https:\u002F\u002Fmiragejs.com\u002F",[101],"Mirage JS: An API Mocking Library for Frontend developers",[28,36239,172],{"id":171},[16,36241,33301],{},[16,36243,9630,36244,191,36246,36248,36250,36252],{},[189,36245],{},[189,36247],{},[23,36249,11491],{"href":11490},[189,36251],{},[23,36253,198],{"href":196,"rel":36254},[101],{"title":200,"searchDepth":201,"depth":201,"links":36256},[36257,36262,36270],{"id":34166,"depth":201,"text":34167,"children":36258},[36259,36260,36261],{"id":36070,"depth":206,"text":36071},{"id":36088,"depth":206,"text":36089},{"id":36101,"depth":206,"text":36102},{"id":10953,"depth":201,"text":21516,"children":36263},[36264,36265,36266,36267,36268,36269],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":25700,"depth":206,"text":28365},{"id":14121,"depth":206,"text":22754},{"id":16575,"depth":206,"text":34339},{"id":171,"depth":201,"text":172},{"_id":36272,"path":36273,"title":36274,"description":36275,"meta":36276,"body":36279},"newsletter\u002Fnewsletter\u002F2020\u002F01\u002F19\u002F22.md","\u002Fnewsletter\u002F2020\u002F01\u002F19\u002F22","Coffee & Code Newsletter: #22","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #21 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":36277,"date":36278},"coffee-and-code-newsletter-22","2020-01-19T07:00:00.000Z",{"type":13,"value":36280,"toc":36497},[36281,36288,36290,36293,36297,36305,36318,36322,36328,36331,36334,36340,36344,36350,36353,36356,36362,36366,36369,36375,36381,36383,36385,36387,36410,36412,36428,36430,36439,36441,36449,36451,36480,36482,36484],[16,36282,36283,36284,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #21 ",[23,36285,742],{"href":36286,"rel":36287},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F21",[101],[28,36289,34167],{"id":34166},[16,36291,36292],{},"I'm back! Sorry for taking a few weeks off but I was super busy and I can't wait to tell you all about it. I hope all of your holidays were wonderful and you're all recharged and ready for the new year. I have a bunch to get into so let's do it.",[33,36294,36296],{"id":36295},"codemash-2020","CodeMash 2020",[16,36298,36299,36300,36304],{},"I was really busy over the holidays preparing for ",[23,36301,3404],{"href":36302,"rel":36303},"http:\u002F\u002Fcodemash.org",[101],". This was my very first time attending and speaking at CodeMash so I had my hands full. This was an amazing conference and I can't recommend it enough. I have two blog posts below that recap both the conference and my talk.",[1271,36306,36307,36312],{},[1274,36308,36309],{},[23,36310,34475],{"href":35296,"rel":36311},[101],[1274,36313,36314],{},[23,36315,36317],{"href":20831,"rel":36316},[101],"CodeMash 2020 Recap",[33,36319,36321],{"id":36320},"start-using-vue-3-in-a-project-right-now-screencast","Start using Vue 3 in a project right now (Screencast)",[16,36323,36324],{},[74,36325],{"alt":36326,"src":36327},"start-using-vue3-today-cover.png","\u002Fimages\u002Fnewsletter\u002F2020\u002F01\u002F19\u002Fstart-using-vue3-today-cover.png",[16,36329,36330],{},"So you've heard of Vue 3 and you want to start playing around with it but not sure where to start. Did you know that you can add Vue 3 to a new project using the Vue CLI? In this tutorial, I will show you how to create a new project using the Vue CLI and then using a new plugin, add Vue 3 Alpha to your project.",[16,36332,36333],{},"With Vue 3 installed we will walk through creating a new component using the Composition API. We will start by creating a simple Counter component and it might be a trivial example it does allow you to see the building blocks of Vue's new Composition API.",[16,36335,36336],{},[23,36337,36338],{"href":36338,"rel":36339},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2020\u002F01\u002F17\u002Fstart-using-vue3-today\u002F",[101],[33,36341,36343],{"id":36342},"grammarly-visual-studio-code-extension","Grammarly Visual Studio Code Extension",[16,36345,36346],{},[74,36347],{"alt":36348,"src":36349},"Grammarly_Visual_Studio_Code_Extension.png","\u002Fimages\u002Fnewsletter\u002F2020\u002F01\u002F19\u002FGrammarly_Visual_Studio_Code_Extension.png",[16,36351,36352],{},"In this tutorial, I am going to show you a new extension that brings Grammarly support to Visual Studio Code. Personally, I have been interested in Grammarly for Code for a long time now so you can imagine how excited I was to find out someone released an extension.",[16,36354,36355],{},"I will walk through how to find it, install it, use it and how you can customize it. I also show another extension that you might need to disable to get this to work properly. I have only been using Grammarly for Visual Studio Code for a few days now but it's already become one of my favorite extensions.",[16,36357,36358],{},[23,36359,36360],{"href":36360,"rel":36361},"https:\u002F\u002Fyoutu.be\u002FPfmrs9F7S-g",[101],[33,36363,36365],{"id":36364},"_7000-youtube-subscribers","7,000+ YouTube Subscribers",[16,36367,36368],{},"I hit another big milestone this week as I crossed 7,000 subscribers on YouTube. I want to thank all of you for subscribing and if you haven't yet, what are you waiting for 😉I uploaded two more videos this week and it's a constant learning process for me. I don't have a big room with natural light so I am always experimenting with new ways to record tutorials. If you have any feedback for me or tutorials you would like to see please don't hesitate reaching out.",[16,36370,36371],{},[23,36372,36373],{"href":36373,"rel":36374},"http:\u002F\u002Fwww.youtube.com\u002Ftherealdanvega",[101],[16,36376,36377],{},[23,36378,36379],{"href":36379,"rel":36380},"https:\u002F\u002Fyoutu.be\u002Fo-jiS563yI8",[101],[28,36382,21516],{"id":10953},[16,36384,33891],{},[33,36386,34263],{"id":11452},[1271,36388,36389,36396,36403],{},[1274,36390,36391],{},[23,36392,36395],{"href":36393,"rel":36394},"https:\u002F\u002Fillustrated.dev\u002Fresources\u002F",[101],"Illustrated.dev resources to improve your drawing and visual thinking skills.",[1274,36397,36398],{},[23,36399,36402],{"href":36400,"rel":36401},"https:\u002F\u002Fznck.dev\u002Fblog\u002F2019-grammarly-in-code",[101],"How Rahul Kadyan built a Grammarly Extension for Visual Studio Code",[1274,36404,36405],{},[23,36406,36409],{"href":36407,"rel":36408},"https:\u002F\u002Fblogs.windows.com\u002Fmsedgedev\u002F2020\u002F01\u002F15\u002Fupgrading-new-microsoft-edge-79-chromium\u002F",[101],"The new Microsoft Edge is out of preview and available for download",[33,36411,31],{"id":30},[1271,36413,36414,36421],{},[1274,36415,36416],{},[23,36417,36420],{"href":36418,"rel":36419},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=DD1fEhcEzY8",[101],"Test driven development with Vue.js by Sarah Dayan",[1274,36422,36423],{},[23,36424,36427],{"href":36425,"rel":36426},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=R50q4NES6Iw",[101],"dotCSS 2019 - Sarah Dayan - In Defense of Utility-First CSS",[33,36429,974],{"id":973},[1271,36431,36432],{},[1274,36433,36434],{},[23,36435,36438],{"href":36436,"rel":36437},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F213\u002Fhasty-treat-a-month-on-firefox",[101],"Syntax FM: Hasty Treat - A Month On Firefox",[33,36440,28365],{"id":25700},[1271,36442,36443],{},[1274,36444,36445],{},[23,36446,36447],{"href":36447,"rel":36448},"https:\u002F\u002Fegghead.io\u002Fplaylists\u002Fintroduction-to-tailwind-and-the-utility-first-workflow-0b697b10",[101],[33,36450,34339],{"id":16575},[1271,36452,36453,36459,36466,36473],{},[1274,36454,36455],{},[23,36456,36343],{"href":36457,"rel":36458},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=znck.grammarly",[101],[1274,36460,36461],{},[23,36462,36465],{"href":36463,"rel":36464},"https:\u002F\u002Fuses.tech\u002F",[101],"A list of \u002Fuses pages detailing developer setups, gear, software and configs.",[1274,36467,36468],{},[23,36469,36472],{"href":36470,"rel":36471},"https:\u002F\u002Fgithub.com\u002Fjakubroztocil\u002Fhttpie\u002Freleases\u002Ftag\u002F2.0.0",[101],"HTTPie 2.0",[1274,36474,36475],{},[23,36476,36479],{"href":36477,"rel":36478},"https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Fmono\u002F",[101],"JetBrains Mono",[28,36481,172],{"id":171},[16,36483,33301],{},[16,36485,9630,36486,191,36488,36490,36492,36494],{},[189,36487],{},[189,36489],{},[23,36491,11491],{"href":11490},[189,36493],{},[23,36495,198],{"href":196,"rel":36496},[101],{"title":200,"searchDepth":201,"depth":201,"links":36498},[36499,36505,36512],{"id":34166,"depth":201,"text":34167,"children":36500},[36501,36502,36503,36504],{"id":36295,"depth":206,"text":36296},{"id":36320,"depth":206,"text":36321},{"id":36342,"depth":206,"text":36343},{"id":36364,"depth":206,"text":36365},{"id":10953,"depth":201,"text":21516,"children":36506},[36507,36508,36509,36510,36511],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":25700,"depth":206,"text":28365},{"id":16575,"depth":206,"text":34339},{"id":171,"depth":201,"text":172},{"_id":36514,"path":36515,"title":36516,"description":36517,"meta":36518,"body":36521},"newsletter\u002Fnewsletter\u002F2019\u002F12\u002F22\u002F21.md","\u002Fnewsletter\u002F2019\u002F12\u002F22\u002F21","Coffee & Code Newsletter: #21","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #20 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":36519,"date":36520},"coffee-and-code-newsletter-21","2019-12-22T07:00:00.000Z",{"type":13,"value":36522,"toc":36705},[36523,36530,36532,36546,36550,36553,36559,36563,36566,36573,36575,36577,36579,36616,36618,36641,36643,36659,36661,36677,36679,36688,36690,36692],[16,36524,36525,36526,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #20 ",[23,36527,742],{"href":36528,"rel":36529},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F20",[101],[28,36531,34167],{"id":34166},[16,36533,36534,36535,21997,36540,36545],{},"Last week was the first time I missed a newsletter and I would like to apologize for that. This past weekend was the culmination of months of planning for me and my team. I run an event called Toys for Shots here in Cleveland and Saturday night was our 12th time doing so. If you're interested in learning more you can visit ",[23,36536,36539],{"href":36537,"rel":36538},"http:\u002F\u002Fwww.toysforshots.com",[101],"www.toysforshots.com",[23,36541,36544],{"href":36542,"rel":36543},"https:\u002F\u002Fphotos.google.com\u002Fshare\u002FAF1QipPKY5YQ-Jh8C4XJJZZ8BEnQKkdLryxWhlx98evSPJ3u-TVFFjxoJDkUdJ_-Fdo1Dg?key=RVZWc1BMYjRQcVBwUldrWjh5UWJIcDRQS2lGN3NR",[101],"check out some pictures"," from the event.",[33,36547,36549],{"id":36548},"new-course-blog-post","New Course: Blog Post",[16,36551,36552],{},"I already sent out an email about this but I wrote up my motivation behind creating my new course. If you end up taking the course I would really love your feedback.",[16,36554,36555],{},[23,36556,36557],{"href":36557,"rel":36558},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F12\u002F19\u002Fup-and-running-with-vuejs\u002F",[101],[33,36560,36562],{"id":36561},"state-of-javascript-2109","State of JavaScript 2109",[16,36564,36565],{},"The state of JavaScript survey was sent out earlier this year and the results are in. What I really love about this survey is the amazing job they do to present the data. Data on its own isn't all that exciting but the results are both fun to read through and look at. Did any of the results stand out for you?",[16,36567,36568],{},[23,36569,36572],{"href":36570,"rel":36571},"https:\u002F\u002F2019.stateofjs.com\u002Fresources\u002F#blogs_news_magazines_others",[101],"https:\u002F\u002F2019.stateofjs.com",[28,36574,21516],{"id":10953},[16,36576,33891],{},[33,36578,34263],{"id":11452},[1271,36580,36581,36588,36595,36602,36609],{},[1274,36582,36583],{},[23,36584,36587],{"href":36585,"rel":36586},"https:\u002F\u002Fwww.raymondcamden.com\u002F2019\u002F11\u002F26\u002Fsanitizing-html-in-vuejs",[101],"Sanitizing HTML in Vue.js",[1274,36589,36590],{},[23,36591,36594],{"href":36592,"rel":36593},"https:\u002F\u002Fdev.to\u002Ffirstclown\u002Fwhat-s-the-purpose-of-vuex-1bag",[101],"What's the purpose of Vuex?",[1274,36596,36597],{},[23,36598,36601],{"href":36599,"rel":36600},"https:\u002F\u002Fwww.raymondcamden.com\u002F2019\u002F12\u002F11\u002Fusing-bearer-for-easier-oauth-and-api-calls",[101],"Using Bearer for Easier OAuth and API Calls",[1274,36603,36604],{},[23,36605,36608],{"href":36606,"rel":36607},"https:\u002F\u002Fblog.digitalocean.com\u002Fscotch-io-is-joining-digitalocean\u002F",[101],"Scotch.io is joining DigitalOcean",[1274,36610,36611],{},[23,36612,36615],{"href":36613,"rel":36614},"https:\u002F\u002Fmedium.com\u002Fflutter\u002Fweb-support-for-flutter-goes-beta-35b64a1217c0",[101],"Web support for Flutter goes beta",[33,36617,31],{"id":30},[1271,36619,36620,36627,36634],{},[1274,36621,36622],{},[23,36623,36626],{"href":36624,"rel":36625},"https:\u002F\u002Fvuetoronto.com\u002Fvideos\u002Fdesign-principles-of-vue-3-evan-you\u002F",[101],"Design Principles of Vue 3.0",[1274,36628,36629],{},[23,36630,36633],{"href":36631,"rel":36632},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qQ1oQJJn1nQ",[101],"Why are there Four Firefoxes?",[1274,36635,36636],{},[23,36637,36640],{"href":36638,"rel":36639},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_IDDT1_LfY0",[101],"Evan You: State of UI Components",[33,36642,974],{"id":973},[1271,36644,36645,36652],{},[1274,36646,36647],{},[23,36648,36651],{"href":36649,"rel":36650},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F204\u002F2019-gift-guide",[101],"Syntax.fm: 2019 Gift Guide",[1274,36653,36654],{},[23,36655,36658],{"href":36656,"rel":36657},"https:\u002F\u002Fchangelog.com\u002Fjsparty\u002F106",[101],"JS Party #16: Mikeal schools us on ES Modules",[33,36660,28365],{"id":25700},[1271,36662,36663,36670],{},[1274,36664,36665],{},[23,36666,36669],{"href":36667,"rel":36668},"https:\u002F\u002Fegghead.io\u002Fcourses\u002Fbuild-a-video-chat-app-with-twilio-and-gatsby",[101],"Build a Video Chat App with Twilio and Gatsby",[1274,36671,36672],{},[23,36673,36676],{"href":36674,"rel":36675},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=her_7pa0vrg",[101],"Spring Security Full Course",[33,36678,34339],{"id":16575},[1271,36680,36681],{},[1274,36682,36683],{},[23,36684,36687],{"href":36685,"rel":36686},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt.js\u002Freleases\u002Ftag\u002Fv2.11.0",[101],"Nuxt v2.11.0 Release",[28,36689,172],{"id":171},[16,36691,33301],{},[16,36693,9630,36694,191,36696,36698,36700,36702],{},[189,36695],{},[189,36697],{},[23,36699,11491],{"href":11490},[189,36701],{},[23,36703,198],{"href":196,"rel":36704},[101],{"title":200,"searchDepth":201,"depth":201,"links":36706},[36707,36711,36718],{"id":34166,"depth":201,"text":34167,"children":36708},[36709,36710],{"id":36548,"depth":206,"text":36549},{"id":36561,"depth":206,"text":36562},{"id":10953,"depth":201,"text":21516,"children":36712},[36713,36714,36715,36716,36717],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":25700,"depth":206,"text":28365},{"id":16575,"depth":206,"text":34339},{"id":171,"depth":201,"text":172},{"_id":36720,"path":36721,"title":36722,"description":36723,"meta":36724,"body":36727},"newsletter\u002Fnewsletter\u002F2019\u002F12\u002F08\u002F20.md","\u002Fnewsletter\u002F2019\u002F12\u002F08\u002F20","Coffee & Code Newsletter: #20","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #19 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":36725,"date":36726},"coffee-and-code-newsletter-20","2019-12-08T07:00:00.000Z",{"type":13,"value":36728,"toc":37006},[36729,36736,36738,36741,36745,36748,36751,36758,36762,36769,36775,36779,36794,36800,36806,36810,36817,36820,36823,36826,36832,36841,36843,36845,36847,36870,36872,36902,36904,36927,36929,36945,36947,36984,36986,36993],[16,36730,36731,36732,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #19 ",[23,36733,742],{"href":36734,"rel":36735},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F19",[101],[28,36737,34167],{"id":34166},[16,36739,36740],{},"This week I worked on my new course, a blog post and a video for YouTube. If someone would have invited me on a podcast I would have completed the content dream 🤣I have a lot to talk about this week so let's get right into it.",[33,36742,36744],{"id":36743},"up-running-with-vue-trailer","Up & Running with Vue Trailer",[16,36746,36747],{},"This week I was able to record, edit and publish a trailer for my new course. This course is an introduction to Vue for beginners. Previously I just had the first video as the trailer and that is never a good idea. I wanted a short trailer letting potential students know what they can expect from the course and what my motivation behind creating it was. I haven't really promoted this course much because I wanted to have this in place first.",[16,36749,36750],{},"You can check out the trailer on the course landing page using the link below. For anyone who has already purchased the course or purchases it in the future, I appreciate the support!",[16,36752,36753],{},[23,36754,36757],{"href":36755,"rel":36756},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Fvue-intro\u002F?referralCode=E9DECFF78CA706D7A68A",[101],"Up & Running with Vue.js on Udemy",[33,36759,36761],{"id":36760},"top-ways-to-learn-vue-3","Top ways to learn Vue 3",[16,36763,36764,36765,36768],{},"I wrote a blog post for Vue Mastery and it was published on Monday. In this blog post I walk you through some of my favorite resources for learning Vue 3. This was especially helpful for me as I am preparing for a Vue 3 talk at ",[23,36766,3404],{"href":20823,"rel":36767},[101]," in January.",[16,36770,36771],{},[23,36772,36773],{"href":36773,"rel":36774},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002Ftop-ways-to-learn-Vue-3",[101],[33,36776,36778],{"id":36777},"creating-a-bare-vue-project-using-the-vue-cli","Creating a bare Vue project using the Vue CLI",[16,36780,36781,36782,36785,36786,36789,36790,36793],{},"When I watch others create new Vue projects using the Vue CLI I often see the same steps. They will create the project, and then remove all of the boilerplate code that the CLI gives you. They start with removing the ",[469,36783,36784],{},"HelloWorld.vue"," component and the code needed to import it and display it in ",[469,36787,36788],{},"App.vue",". Whenever I tell them that there is an option you can pass to the ",[469,36791,36792],{},"vue create"," command to remove that boilerplate code they are amazed. This video is a short one but definitely helpful, hope you enjoy it.",[16,36795,36796],{},[23,36797,36798],{"href":36798,"rel":36799},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ki4Z3rI-6pg&t=10s",[101],[16,36801,36802],{},[74,36803],{"alt":36804,"src":36805},"Vue CLI YouTube Video Cover","\u002Fimages\u002Fnewsletter\u002F2019\u002F12\u002F08\u002Fvue-cli-bare-cover.png",[33,36807,36809],{"id":36808},"closing-in-on-100000-monthly-page-views","Closing in on 100,000 monthly page views!",[16,36811,36812,36813,36816],{},"I started this year off by creating the website ",[23,36814,198],{"href":198,"rel":36815},[101],". I wanted to get my blog off of WordPress and on to a static site and Vue + Gridsome seemed to be a great fit for what I wanted to do. I started off with 0 blog posts and just started writing about whatever inspired me that day. I really enjoyed the workflow of writing in markdown, committing to Git and the article being live on my site.",[16,36818,36819],{},"I decided pretty early on that I was going to move my existing posts over but I needed to figure out how to do it. I have been blogging for 15 years and had accumulated nearly 1000 posts. I knew that a lot of them were no longer relevant or didn't contain much value. I want all of the articles on my blog to be helpful and not some review of some movie I watched last weekend. It is the end of the year I am happy to say that all of the posts I wanted to move are now moved over.",[16,36821,36822],{},"About a month ago I got rid of Google Analytics and forked over the $9 a month to Netlify for their analytics and I did this for a couple of reasons. Netlify is just such a fantastic service that I wanted to give them money for something, no I'm not kidding about that. Second, Google Analytics can be blocked and by my tech-savvy audience, it is probably being blocked more times than not. Because of this, I don't think I have ever got a real good gauge on where I was stats wise.",[16,36824,36825],{},"I have been paying attention to my stats lately and they have been on the rise. I logged in this week and to my surprise I had 92,463 page views in the last month. I can't believe that I am closing in on 100,000 and I am going to make the push to get there.",[16,36827,36828],{},[74,36829],{"alt":36830,"src":36831},"danvega.dev Analytics","\u002Fimages\u002Fnewsletter\u002F2019\u002F12\u002F08\u002Fdanvega-dev-analytics.png",[16,36833,36834,36835,36840],{},"I attribute these stats to a couple of things. The first is I cut out a lot of content that wasn't really valuable to anyone. I learned this from an episode of the Smart Passive Income with Pat Flynn titled ",[23,36836,36839],{"href":36837,"rel":36838},"https:\u002F\u002Fwww.smartpassiveincome.com\u002Fpodcasts\u002Fhow-to-do-a-content-audit-with-todd-tresidder\u002F",[101],"How Deleting a Third of Your Content Can Triple Your Traffic—How to Do a Content Audit with Todd Tresidder",". After that, it was all about providing good content to my readers along with a new super-fast static website. I'm excited about the future of this blog and thank all of you who support it.",[28,36842,21516],{"id":10953},[16,36844,33891],{},[33,36846,34263],{"id":11452},[1271,36848,36849,36856,36863],{},[1274,36850,36851],{},[23,36852,36855],{"href":36853,"rel":36854},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002Fwhy-nuxtjs-is-the-perfect-framework-for-building-static-websites",[101],"Why Nuxt.js is the perfect framework for building static websites",[1274,36857,36858],{},[23,36859,36862],{"href":36860,"rel":36861},"https:\u002F\u002Fcodingcoach.io\u002Fblog\u002Fnetlify-serverless-function-instagram-api\u002F",[101],"Instagram Feed API",[1274,36864,36865],{},[23,36866,36869],{"href":36867,"rel":36868},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fdotnet\u002Fintroducing-net-5\u002F",[101],"Introducing .NET 5",[33,36871,31],{"id":30},[1271,36873,36874,36881,36888,36895],{},[1274,36875,36876],{},[23,36877,36880],{"href":36878,"rel":36879},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=T_JEsOBuI7U",[101],"Reactivity in Vue 3 Compositional functions API - VueJs Columbus Meetup",[1274,36882,36883],{},[23,36884,36887],{"href":36885,"rel":36886},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0pThnRneDjw",[101],"Web Development In 2020 - A Practical Guide",[1274,36889,36890],{},[23,36891,36894],{"href":36892,"rel":36893},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ff4fgQxPaO0",[101],"Faster apps with JSON.parse (Chrome Dev Summit 2019)",[1274,36896,36897],{},[23,36898,36901],{"href":36899,"rel":36900},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WSjj-IhBiSY&feature=youtu.be",[101],"The State of Java Relational Persistence by Maciej Walkowiak @ Spring I\u002FO 2019",[33,36903,974],{"id":973},[1271,36905,36906,36913,36920],{},[1274,36907,36908],{},[23,36909,36912],{"href":36910,"rel":36911},"https:\u002F\u002Fchangelog.com\u002Fpodcast\u002F370",[101],"The Changelog: The making of GitHub Sponsors",[1274,36914,36915],{},[23,36916,36919],{"href":36917,"rel":36918},"https:\u002F\u002Fwww.ecpodcast.io\u002Fepisodes\u002F17-greg-schier-how-i-built-and-sold-insomnia",[101],"The Entrepreneurial Coder: #17 - Greg Schier - How I Built and Sold Insomnia",[1274,36921,36922],{},[23,36923,36926],{"href":36924,"rel":36925},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F202\u002Fpotluck-tabs-are-better-coding-music-seo-is-angular-good-biggie-smalls-soy-sauce-more",[101],"Syntax.fm Potluck",[33,36928,28365],{"id":25700},[1271,36930,36931,36938],{},[1274,36932,36933],{},[23,36934,36937],{"href":36935,"rel":36936},"https:\u002F\u002Fm.academy\u002Fp\u002Fmagento-2-coding-kickstart",[101],"Magento 2 Coding Kickstart",[1274,36939,36940],{},[23,36941,36944],{"href":36942,"rel":36943},"https:\u002F\u002Fwww.vuemastery.com\u002Fcourses\u002Fvue-3-essentials\u002F",[101],"Vue Mastery: Vue 3 Essentials",[33,36946,34339],{"id":16575},[1271,36948,36949,36956,36963,36970,36977],{},[1274,36950,36951],{},[23,36952,36955],{"href":36953,"rel":36954},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-apollo\u002Freleases\u002Ftag\u002Fv4.0.0-alpha.1",[101],"vue-apollo v4.0.0-alpha.1",[1274,36957,36958],{},[23,36959,36962],{"href":36960,"rel":36961},"https:\u002F\u002Fgithub.com\u002Fjoaoeudes7\u002FV-Emoji-Picker",[101],"V-Emoji-Picker",[1274,36964,36965],{},[23,36966,36969],{"href":36967,"rel":36968},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnpkill",[101],"npkill",[1274,36971,36972],{},[23,36973,36976],{"href":36974,"rel":36975},"https:\u002F\u002Fspeak.dev\u002F",[101],"Speak.dev",[1274,36978,36979],{},[23,36980,36983],{"href":36981,"rel":36982},"https:\u002F\u002Fwww.producthunt.com\u002Fposts\u002Fcraiglist-for-mobile",[101],"Craigslist gets a mobile app 24 years later!",[28,36985,172],{"id":171},[16,36987,36988,36989,36992],{},"Thanks for reading the 20th issue of Coffee and Code. I honestly didn't know if I would keep this up for 5 issues let alone 20 but I am having fun doing so. According to my stats, a few of you are actually opening these emails so I hope you're reading them and finding value. If you have any suggestions you can reply to this email or reach out to me on ",[23,36990,183],{"href":181,"rel":36991},[101],". I hope you have a great week and as always friends...",[16,36994,9630,36995,191,36997,36999,37001,37003],{},[189,36996],{},[189,36998],{},[23,37000,11491],{"href":11490},[189,37002],{},[23,37004,198],{"href":196,"rel":37005},[101],{"title":200,"searchDepth":201,"depth":201,"links":37007},[37008,37014,37021],{"id":34166,"depth":201,"text":34167,"children":37009},[37010,37011,37012,37013],{"id":36743,"depth":206,"text":36744},{"id":36760,"depth":206,"text":36761},{"id":36777,"depth":206,"text":36778},{"id":36808,"depth":206,"text":36809},{"id":10953,"depth":201,"text":21516,"children":37015},[37016,37017,37018,37019,37020],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":25700,"depth":206,"text":28365},{"id":16575,"depth":206,"text":34339},{"id":171,"depth":201,"text":172},{"_id":37023,"path":37024,"title":37025,"description":37026,"meta":37027,"body":37030},"newsletter\u002Fnewsletter\u002F2019\u002F12\u002F01\u002F19.md","\u002Fnewsletter\u002F2019\u002F12\u002F01\u002F19","Coffee & Code Newsletter: #19","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #18 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":37028,"date":37029},"coffee-and-code-newsletter-19","2019-12-01T07:00:00.000Z",{"type":13,"value":37031,"toc":37184},[37032,37039,37041,37044,37048,37051,37054,37057,37060,37067,37073,37075,37077,37079,37102,37104,37120,37122,37138,37140,37149,37151,37167,37169,37171],[16,37033,37034,37035,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #18 ",[23,37036,742],{"href":37037,"rel":37038},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F18",[101],[28,37040,34167],{"id":34166},[16,37042,37043],{},"It was Thanksgiving this week here in the US and I just want to start this issue off by saying thank you to all of you. I appreciate that you are all here on my mailing list and that you give me a chance to ramble once a week. With that said, let's get into this week (shorter than normal) issue.",[33,37045,37047],{"id":37046},"new-course-up-and-running-with-vuejs","New Course: Up and Running with Vue.js",[16,37049,37050],{},"If you have been paying attention to this blog at all you know that I am a huge fan of Vue. One of my favorite features of Vue is just how approachable it is for beginners. I was looking around at the landscape of Vue courses in the marketplace and I had a few thoughts.",[16,37052,37053],{},"First, there are some really great courses from some awesome authors out there. Second, a lot of the introductions to Vue come with hours of additional content which can seem overwhelming to beginners.",[16,37055,37056],{},"With that, I set out to build a course for absolute beginners. I had a couple of goals that I wanted to stick to when I began building out this course. The first was I wanted to keep this course short and the finished version comes in under 2 hours. Next, I wanted to make sure that reinforce concepts that you were learning along the way with quizzes, exercises, and coding challenges. Finally, I wanted to target developers who just wanted to drop a script tag on a page and go. This means that that you don't need to understand Node & NPM and there are no command-line interfaces (CLI) to install.",[16,37058,37059],{},"I am really happy with the result and I will have more to share with you in the near future but I wanted to share it with you. If you use the link below you can grab the course for $9.99. If you know someone who might be interested in the course please pass the link along and I appreciate you supporting me friends.",[16,37061,37062],{},[23,37063,37066],{"href":37064,"rel":37065},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Fvue-intro\u002F?couponCode=E8832D7EDBEE693C295E",[101],"Up and Running with Vue.js",[16,37068,37069],{},[74,37070],{"alt":37071,"src":37072},"Course Landing Page","\u002Fimages\u002Fnewsletter\u002F2019\u002F12\u002F01\u002Fcourse-landing-page.png",[28,37074,21516],{"id":10953},[16,37076,33891],{},[33,37078,34263],{"id":11452},[1271,37080,37081,37088,37095],{},[1274,37082,37083],{},[23,37084,37087],{"href":37085,"rel":37086},"https:\u002F\u002Fdev.to\u002Fmartinheinz\u002Fgoing-serverless-with-openfaas-and-golang-building-optimized-templates-29ic",[101],"Going Serverless with OpenFaaS and Golang - Building Optimized Templates",[1274,37089,37090],{},[23,37091,37094],{"href":37092,"rel":37093},"https:\u002F\u002Fsnipcart.com\u002Fblog\u002Fvue-component-example-tutorial",[101],"How Vue Components Work (& How They Simplify Web Development)",[1274,37096,37097],{},[23,37098,37101],{"href":37099,"rel":37100},"https:\u002F\u002Fblog.logrocket.com\u002Fanimating-vue-with-greensock\u002F",[101],"Animating Vue with GreenSock",[33,37103,31],{"id":30},[1271,37105,37106,37113],{},[1274,37107,37108],{},[23,37109,37112],{"href":37110,"rel":37111},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=nHXy2due_fA",[101],"What's New in Gradle 6.0",[1274,37114,37115],{},[23,37116,37119],{"href":37117,"rel":37118},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=apR_jIM0rb4",[101],"Why I Chose Vue over React & Why I'm not going back",[33,37121,974],{"id":973},[1271,37123,37124,37131],{},[1274,37125,37126],{},[23,37127,37130],{"href":37128,"rel":37129},"http:\u002F\u002Fwww.fullstackradio.com\u002F129",[101],"Full Stack Radio: Evan You - What's Coming in Vue.js 3.0",[1274,37132,37133],{},[23,37134,37137],{"href":37135,"rel":37136},"https:\u002F\u002Fwww.ifelsepodcast.com\u002Fepisodes\u002Freact-vs-vue-with-guests-cassidy-williams-erik-hanchett",[101],"if\u002Felse: React vs. Vue: With Guests Cassidy Williams & Erik Hanchett",[33,37139,22754],{"id":14121},[1271,37141,37142],{},[1274,37143,37144],{},[23,37145,37148],{"href":37146,"rel":37147},"https:\u002F\u002Fwww.packtpub.com\u002Fprogramming\u002Ftesting-vue-js-components-with-jest",[101],"Testing Vue.js Components with Jest",[33,37150,28365],{"id":25700},[1271,37152,37153,37160],{},[1274,37154,37155],{},[23,37156,37159],{"href":37157,"rel":37158},"https:\u002F\u002Fbeginnerjavascript.com\u002F",[101],"Wes Bos: Beginner JavaScript",[1274,37161,37162],{},[23,37163,37166],{"href":37164,"rel":37165},"https:\u002F\u002Ftestingjavascript.com\u002F",[101],"Kent C. Dodds: Testing JavaScript",[28,37168,172],{"id":171},[16,37170,33301],{},[16,37172,9630,37173,191,37175,37177,37179,37181],{},[189,37174],{},[189,37176],{},[23,37178,11491],{"href":11490},[189,37180],{},[23,37182,198],{"href":196,"rel":37183},[101],{"title":200,"searchDepth":201,"depth":201,"links":37185},[37186,37189,37196],{"id":34166,"depth":201,"text":34167,"children":37187},[37188],{"id":37046,"depth":206,"text":37047},{"id":10953,"depth":201,"text":21516,"children":37190},[37191,37192,37193,37194,37195],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":14121,"depth":206,"text":22754},{"id":25700,"depth":206,"text":28365},{"id":171,"depth":201,"text":172},{"_id":37198,"path":37199,"title":37200,"description":37201,"meta":37202,"body":37205},"newsletter\u002Fnewsletter\u002F2019\u002F11\u002F24\u002F18.md","\u002Fnewsletter\u002F2019\u002F11\u002F24\u002F18","Coffee & Code Newsletter: #18","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #17 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":37203,"date":37204},"coffee-and-code-newsletter-18","2019-11-18T07:00:00.000Z",{"type":13,"value":37206,"toc":37414},[37207,37214,37216,37219,37223,37232,37235,37238,37242,37251,37254,37258,37267,37273,37278,37282,37285,37287,37289,37291,37314,37316,37332,37334,37357,37359,37368,37370,37386,37388,37397,37399,37401],[16,37208,37209,37210,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #17 ",[23,37211,742],{"href":37212,"rel":37213},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F17",[101],[28,37215,34167],{"id":34166},[16,37217,37218],{},"It has been a busy week for me wrapping up some work projects as I get a nice little vacation next week. With that let's get right into it.",[28,37220,37222],{"id":37221},"spring-boot-in-visual-studio-code-blog-post","Spring Boot in Visual Studio Code Blog Post",[16,37224,37225,37226,37231],{},"A few weeks ago I ",[23,37227,37230],{"href":37228,"rel":37229},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5mpHejytgFE&feature=youtu.be",[101],"created a new tutorial"," for YouTube that showed you how to create a Spring Boot application in Visual Studio Code. I created this is a video tutorial for YouTube but what I have been struggling to figure out is how can I reuse this content on my blog.",[16,37233,37234],{},"If users are reading my blog posts and come across this post with the video my hope is that If they find value in it I can gain them as a subscriber over on YouTube. My first thought was I can just create a new post, embed the video and be done with it.",[16,37236,37237],{},"That is the path of least resistance for me but I have some problems with it. This doesn't add any value to the video or even give the reader a reason to watch it. It also doesn't have any text which means it won't be picked it up by the search engines which begs the point why have a blog post at all?",[33,37239,37241],{"id":37240},"failing-fast","Failing Fast",[16,37243,37244,37245,37250],{},"My first attempt this week was to order a transcription of the entire video using ",[23,37246,37249],{"href":37247,"rel":37248},"http:\u002F\u002Frev.com",[101],"rev.com",". I was going to add the video to the blog post and then a transcription of the video below it. My initial thoughts were that this wasn't going to be very helpful and I was right. After reading through it I realized that nobody was going to read this and it wasn't very search engine friendly.",[16,37252,37253],{},"Another attempt was to create an actual blog post like I normally would if I wanted to teach someone how to create a Spring Boot project in Visual Studio Code. I got about half way through this post and I was not having fun at all. I think it was because I already created this tutorial but I was having a hard time getting through it so I scrapped it.",[33,37255,37257],{"id":37256},"a-solution","A Solution",[16,37259,37260,37261,37266],{},"I finally found a result that I was happy with and you can ",[23,37262,37265],{"href":37263,"rel":37264},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F11\u002F21\u002Fspring-boot-visual-studio-code\u002F",[101],"read it here",". Yes I embedded the YouTube video in the blog post but I also gave some context as to what this video was about without giving you the whole tutorial in text. I also got some good feedback on Twitter from a few folks. I can add things like code snippets if its code that someone might want to copy or even timestamps to point out where things in the video take place. I really like that and I think it adds value.",[16,37268,37269],{},[74,37270],{"alt":37271,"src":37272},"Spring Boot in VS Code","\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F18\u002Fspring-boot-in-vscode.png",[16,37274,37275],{},[23,37276,37263],{"href":37263,"rel":37277},[101],[33,37279,37281],{"id":37280},"content-syndication-what-are-you-doing","Content Syndication: What are you doing?",[16,37283,37284],{},"If you're still reading this (give yourself a high-five) I would love to know what you think of the short form post and the video embed. I am also curious to hear what others are doing in this scenario. I have a full-time job, a family and hobbies. I only have so much time each week to produce content and I am constantly striving to be efficient with my time.",[28,37286,21516],{"id":10953},[16,37288,33891],{},[33,37290,34263],{"id":11452},[1271,37292,37293,37300,37307],{},[1274,37294,37295],{},[23,37296,37299],{"href":37297,"rel":37298},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2019\u002F11\u002Fmeet-grazie-the-ultimate-spelling-grammar-and-style-checker-for-intellij-idea\u002F",[101],"Meet Grazie: the ultimate spelling, grammar, and style checker for IntelliJ IDEA",[1274,37301,37302],{},[23,37303,37306],{"href":37304,"rel":37305},"https:\u002F\u002Fdev.to\u002Fstackbit\u002F15-jamstack-resources-you-need-as-a-web-developer-2j7n",[101],"15 JAMstack Resources You Need as a Web Developer",[1274,37308,37309],{},[23,37310,37313],{"href":37311,"rel":37312},"https:\u002F\u002Fdev.to\u002Ffirstclown\u002Fthe-basics-of-mapstate-it-s-not-as-hard-as-it-looks-18pn",[101],"The basics of mapState (it's not as hard as it looks)",[33,37315,31],{"id":30},[1271,37317,37318,37325],{},[1274,37319,37320],{},[23,37321,37324],{"href":37322,"rel":37323},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=NByw6KZY1Vk",[101],"VSCode Vim Mode: Vim for Non Vim Users",[1274,37326,37327],{},[23,37328,37331],{"href":37329,"rel":37330},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Fbo4pttBZ9k&t=556s",[101],"An Introduction To Vue Testing With Jest - (Realworld App)",[33,37333,974],{"id":973},[1271,37335,37336,37343,37350],{},[1274,37337,37338],{},[23,37339,37342],{"href":37340,"rel":37341},"https:\u002F\u002Fpodcasts.apple.com\u002Fus\u002Fpodcast\u002Four-favorite-underrated-youtube-channels-mechanical\u002Fid1474429475?i=1000456880083",[101],"Waveform: Our Favorite YouTube Channels, Mechanical Keyboards, & Tech Embargoes Explained",[1274,37344,37345],{},[23,37346,37349],{"href":37347,"rel":37348},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F198\u002Fhow-to-get-better-at-problem-solving",[101],"Syntax.fm: How To Get Better At Problem Solving",[1274,37351,37352],{},[23,37353,37356],{"href":37354,"rel":37355},"https:\u002F\u002Fmegaphone.link\u002FLMM6357957666",[101],"MoneyLab: Frictionless Course Creation",[33,37358,34339],{"id":16575},[1271,37360,37361],{},[1274,37362,37363],{},[23,37364,37367],{"href":37365,"rel":37366},"https:\u002F\u002Fdev.to\u002Fbanthagroup\u002Fintroducing-new-vue-js-lightbox-4609",[101],"VueJS Lightbox",[33,37369,34358],{"id":18091},[1271,37371,37372,37379],{},[1274,37373,37374],{},[23,37375,37378],{"href":37376,"rel":37377},"https:\u002F\u002Fnews.vuejs.org\u002Fissues\u002F166",[101],"Official Vue News: Thursday, November 21, 2019",[1274,37380,37381],{},[23,37382,37385],{"href":37383,"rel":37384},"https:\u002F\u002Fwww.baeldung.com\u002Fjava-weekly-308?utm_source=email-newsletter",[101],"Baeldung: Java Weekly, Issue 308",[33,37387,28365],{"id":25700},[1271,37389,37390],{},[1274,37391,37392],{},[23,37393,37396],{"href":37394,"rel":37395},"https:\u002F\u002Fthoughtbot.com\u002Fupcase\u002Fonramp-to-vim",[101],"Onramp to Vim",[28,37398,172],{"id":171},[16,37400,33301],{},[16,37402,9630,37403,191,37405,37407,37409,37411],{},[189,37404],{},[189,37406],{},[23,37408,11491],{"href":11490},[189,37410],{},[23,37412,198],{"href":196,"rel":37413},[101],{"title":200,"searchDepth":201,"depth":201,"links":37415},[37416,37417,37422,37430],{"id":34166,"depth":201,"text":34167},{"id":37221,"depth":201,"text":37222,"children":37418},[37419,37420,37421],{"id":37240,"depth":206,"text":37241},{"id":37256,"depth":206,"text":37257},{"id":37280,"depth":206,"text":37281},{"id":10953,"depth":201,"text":21516,"children":37423},[37424,37425,37426,37427,37428,37429],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":18091,"depth":206,"text":34358},{"id":25700,"depth":206,"text":28365},{"id":171,"depth":201,"text":172},{"_id":37432,"path":37433,"title":37434,"description":37435,"meta":37436,"body":37439},"newsletter\u002Fnewsletter\u002F2019\u002F11\u002F17\u002F17.md","\u002Fnewsletter\u002F2019\u002F11\u002F17\u002F17","Coffee & Code Newsletter: #17","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #16 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":37437,"date":37438},"coffee-and-code-newsletter-17","2019-11-17T07:00:00.000Z",{"type":13,"value":37440,"toc":37688},[37441,37448,37450,37453,37455,37468,37477,37483,37487,37490,37499,37502,37507,37511,37514,37521,37528,37530,37532,37534,37564,37566,37589,37591,37614,37616,37646,37650,37671,37673,37675],[16,37442,37443,37444,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #16 ",[23,37445,742],{"href":37446,"rel":37447},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F16",[101],[28,37449,34167],{"id":34166},[16,37451,37452],{},"I had a pretty busy week that includes some website updates, a new video on YouTube",[28,37454,10014],{"id":10013},[16,37456,37457,37458,37463,37464,37467],{},"I pushed a few updates to my website this week and I think they are for the better. The first thing you might ",[23,37459,37462],{"href":37460,"rel":37461},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F04\u002F30\u002Fup-and-running-with-vue\u002F",[101],"notice"," is the font family has changed to ",[469,37465,37466],{},"Roboto Slab"," and it is much larger, 22px to be specific.",[16,37469,37470,37471,37476],{},"I also updated the footer for each blog post. I had this large obnoxious newsletter signup form and I just wasn't happy with it. I still have the newsletter signup but its not as obtrusive now and I have added comments to blog posts. I have been holding off on adding comments but after giving it some thought I really wanted to add them in. I decided to go with ",[23,37472,37475],{"href":37473,"rel":37474},"https:\u002F\u002Fdisqus.com\u002F",[101],"Disqus"," which I was using for my old blog but this time I decided to pay for and remove those annoying ads.",[16,37478,37479],{},[74,37480],{"alt":37481,"src":37482},"Blog Post Footer","\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F17\u002Fblog-post-footer.png",[28,37484,37486],{"id":37485},"hello-vue-3","Hello, Vue 3",[16,37488,37489],{},"I have begun preparing for a talk I am giving at CodeMash 2020 \"Vue 3: Smaller, Faster, Stronger\". If you're going to be at CodeMash please make sure you say hi 👋🏻. I also may or may not be turning this into a course in the new year so If that is of any interest to you let me know.",[16,37491,37492,37493,37498],{},"Vue 3.0 won't be out until the end of Q1 2020 but that doesn't mean you can't start playing with it right now. I created a new ",[23,37494,37497],{"href":37495,"rel":37496},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=UAgO2JanN9Y",[101],"tutorial for my YouTube channel"," that shows you how to get started with Vue 3 today.",[16,37500,37501],{},"In this tutorial, you will create a simple example in Vue 2 by just dropping a script tag on a page. Next, we will download the Vue 3 source code (currently pre-alpha) from Github, build it and drop it on a page and recreate that example using the composition API.",[16,37503,37504],{},[74,37505],{"alt":37486,"src":37506},"\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F17\u002Fhello-vue-3.png",[28,37508,37510],{"id":37509},"my-courses-on-packt-oreilly","My Courses on Packt & O'Reilly",[16,37512,37513],{},"You can now find some of my current courses on Packt & O'Reilly Learning.  This is really cool to see and I can't wait to publish some more content on these platforms soon!",[16,37515,37516],{},[23,37517,37520],{"href":37518,"rel":37519},"https:\u002F\u002Fwww.packtpub.com\u002Fcatalogsearch\u002Fresult\u002F?q=Dan%20Vega",[101],"https:\u002F\u002Fwww.packtpub.com\u002Fcatalogsearch\u002Fresult\u002F?q=Dan Vega",[16,37522,37523],{},[23,37524,37527],{"href":37525,"rel":37526},"https:\u002F\u002Flearning.oreilly.com\u002Fsearch\u002F?query=%22Dan%20Vega%22",[101],"https:\u002F\u002Flearning.oreilly.com\u002Fsearch\u002F?query=\"Dan Vega\"",[28,37529,21516],{"id":10953},[16,37531,33891],{},[33,37533,34263],{"id":11452},[1271,37535,37536,37543,37550,37557],{},[1274,37537,37538],{},[23,37539,37542],{"href":37540,"rel":37541},"https:\u002F\u002Fjerickson.net\u002Fhow-to-query-your-api-using-vuex-in-your-vue-application\u002F",[101],"How to query your API using Vuex in your Vue application",[1274,37544,37545],{},[23,37546,37549],{"href":37547,"rel":37548},"http:\u002F\u002Fwww.defgroovy.com\u002F2019\u002F11\u002Fgroovy-in-enterprise-in-2019.html",[101],"Groovy in the Enterprise in 2019",[1274,37551,37552],{},[23,37553,37556],{"href":37554,"rel":37555},"https:\u002F\u002Fdev.to\u002Fstackbit\u002Fgating-content-in-jamstack-sites-40o0",[101],"Gating Content in JAMstack Sites",[1274,37558,37559],{},[23,37560,37563],{"href":37561,"rel":37562},"https:\u002F\u002Foctoverse.github.com\u002F#home",[101],"The State of the Octoverse",[33,37565,31],{"id":30},[1271,37567,37568,37575,37582],{},[1274,37569,37570],{},[23,37571,37574],{"href":37572,"rel":37573},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_H38A6E8Nsg",[101],"Building a Kanban Board with Tailwind CSS",[1274,37576,37577],{},[23,37578,37581],{"href":37579,"rel":37580},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=uDAv4qOU_04",[101],"MKBHD: 16\" Macbook Pro First Impressions!",[1274,37583,37584],{},[23,37585,37588],{"href":37586,"rel":37587},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vbsPXHCu8Xg&t=2s",[101],"ReactiveConf 2019 - Sebastien Chopin: Be Lazy, Be Smart, Be Nuxt.",[33,37590,974],{"id":973},[1271,37592,37593,37600,37607],{},[1274,37594,37595],{},[23,37596,37599],{"href":37597,"rel":37598},"https:\u002F\u002Fanchor.fm\u002Fducktapes\u002Fepisodes\u002FSVGs-with-Chris-Coyier-e8tdq2",[101],"SVGs with Chris Coyier",[1274,37601,37602],{},[23,37603,37606],{"href":37604,"rel":37605},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F106",[101],"Code editors and language servers",[1274,37608,37609],{},[23,37610,37613],{"href":37611,"rel":37612},"https:\u002F\u002Frealtalkjavascript.simplecast.com\u002Fepisodes\u002Feb67f4f6",[101],"RealTalk JavaScript: You Better Shop Around - with Kelly Vaughn",[33,37615,34339],{"id":16575},[1271,37617,37618,37625,37632,37639],{},[1274,37619,37620],{},[23,37621,37624],{"href":37622,"rel":37623},"https:\u002F\u002Fgreensock.com\u002F3\u002F",[101],"GSAP 3 Is Available Now!",[1274,37626,37627],{},[23,37628,37631],{"href":37629,"rel":37630},"https:\u002F\u002Fgithub.com\u002Fmobile",[101],"Github for mobile",[1274,37633,37634],{},[23,37635,37638],{"href":37636,"rel":37637},"https:\u002F\u002Fwww.gatsbyjs.com\u002Fcloud\u002F",[101],"Gatsby Cloud",[1274,37640,37641],{},[23,37642,37645],{"href":37643,"rel":37644},"https:\u002F\u002Fgithub.com\u002Fgetnacelle",[101],"Nacelle",[33,37647,37649],{"id":37648},"follow-this-person","Follow This Person",[16,37651,37652,37653,37658,37659,37664,37665,37670],{},"This week must follow is ",[23,37654,37657],{"href":37655,"rel":37656},"https:\u002F\u002Ftwitter.com\u002Fchriscoyier",[101],"Chris Coyier",". Chris is the Co-Founder of CodePen, creator of ",[23,37660,37663],{"href":37661,"rel":37662},"https:\u002F\u002Fcss-tricks.com\u002F",[101],"https:\u002F\u002Fcss-tricks.com"," and you can hear him on his podcast, ",[23,37666,37669],{"href":37667,"rel":37668},"https:\u002F\u002Ftwitter.com\u002FShopTalkShow",[101],"Shop Talk Show",". Chris has probably forgotten more about that web then most of us know.",[28,37672,172],{"id":171},[16,37674,33301],{},[16,37676,9630,37677,191,37679,37681,37683,37685],{},[189,37678],{},[189,37680],{},[23,37682,11491],{"href":11490},[189,37684],{},[23,37686,198],{"href":196,"rel":37687},[101],{"title":200,"searchDepth":201,"depth":201,"links":37689},[37690,37691,37692,37693,37694,37701],{"id":34166,"depth":201,"text":34167},{"id":10013,"depth":201,"text":10014},{"id":37485,"depth":201,"text":37486},{"id":37509,"depth":201,"text":37510},{"id":10953,"depth":201,"text":21516,"children":37695},[37696,37697,37698,37699,37700],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":37703,"path":37704,"title":37705,"description":37706,"meta":37707,"body":37710},"newsletter\u002Fnewsletter\u002F2019\u002F11\u002F10\u002F16.md","\u002Fnewsletter\u002F2019\u002F11\u002F10\u002F16","Coffee & Code Newsletter: #16","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #15 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":37708,"date":37709},"coffee-and-code-newsletter-16","2019-11-10T07:00:00.000Z",{"type":13,"value":37711,"toc":37970},[37712,37719,37721,37724,37728,37731,37737,37743,37748,37751,37757,37763,37768,37771,37777,37781,37791,37798,37802,37811,37814,37820,37822,37824,37826,37856,37858,37888,37890,37899,37901,37924,37926,37935,37937,37940,37946,37948,37962,37964,37966],[16,37713,37714,37715,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #15 ",[23,37716,742],{"href":37717,"rel":37718},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F15",[101],[28,37720,34167],{"id":34166},[16,37722,37723],{},"It was a busy week for me (when is it not these days) as I was able to release a new video on YouTube and wrap up step one of my new course.",[28,37725,37727],{"id":37726},"up-and-running-with-vuejs","Up and Running with VueJS",[16,37729,37730],{},"This week I completed the free lessons for my next course \"Up and Running with VueJS\". My original plan was to release these as a teaser to the full paid course but I have been going back and forth with a couple of different ideas. This is what the first six lessons in the course look like.",[16,37732,37733],{},[74,37734],{"alt":37735,"src":37736},"Up and Running with Vue","\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F10\u002Fup-and-running-vue-cover.png",[16,37738,37739,37742],{},[161,37740,37741],{},"Welcome","\nIn this lesson, I will give you a quick introduction to the course. We will discuss what you can expect to learn in the course along with what the prerequisites for taking this course are and what hardware and software are required.",[16,37744,37745],{},[161,37746,37747],{},"What is Vue",[16,37749,37750],{},"In this lesson, I will give you a quick introduction to what Vue is. We will also go into a little bit of a discussion on selecting the right JavaScript framework for you.",[16,37752,37753,37756],{},[161,37754,37755],{},"Why Vue","\nNow that you know what Vue is it would be helpful to understand why you should use Vue. There are a lot of really great libraries and frameworks out there, so why choose Vue? If you haven't already guessed Vue is my favorite framework and I have some reasons that I think it's really great for everyone of all skill levels but especially beginners.",[16,37758,37759,37762],{},[161,37760,37761],{},"Moving from jQuery to Vue","\nIt was jQuery that really got me interested in JavaScript (again). I think it was just how easy jQuery made everything. You could just drop in a script tag on a page and start adding some pretty cool features without knowing much. I look at Vue the same way and in this lesson, I will discuss how you can move from jQuery to Vue.",[16,37764,37765],{},[161,37766,37767],{},"Hello, Vue",[16,37769,37770],{},"No introduction to a language or framework would be complete without the quintessential Hello, World! In this lesson, we will drop a script tag on to a blank page and walk through every line of code that it takes to create a Hello, World. Spoiler alert: It isn't much!",[16,37772,37773,37776],{},[161,37774,37775],{},"Resources & Next Steps","\nHave I scratched an itch? Do you want to learn more? I am going to give you a going-away present with a list of resources that I find are very helpful when trying to learn Vue. I will, of course, point you to the continuation of this course which will be coming out soon!",[33,37778,37780],{"id":37779},"up-running-with-vue-free-lessons","Up & Running with Vue Free Lessons",[16,37782,37783,37784,37787,37788,184],{},"If you're interested in watching these lessons you can check them out using the link below. Please understand this is a really rough draft of the course and has no pretty landing pages associated with it. Also, if you have a minute I would really appreciate some feedback on the course. Feel free to reach out to me on ",[23,37785,183],{"href":181,"rel":37786},[101]," or send me an ",[23,37789,37790],{"href":11490},"email",[16,37792,37793],{},[23,37794,37797],{"href":37795,"rel":37796},"https:\u002F\u002Ftherealdanvega.teachable.com\u002Fpurchase?product_id=1436764",[101],"Get the FREE Course Here",[28,37799,37801],{"id":37800},"create-spring-boot-applications-in-visual-studio-code","Create Spring Boot Applications in Visual Studio Code",[16,37803,37804,37805,37810],{},"I was able to ",[23,37806,37809],{"href":37807,"rel":37808},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5mpHejytgFE%5D(https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5mpHejytgFE)",[101],"post a new video on YouTube"," this week. I thought it would be cool to show how you could create a new Spring Boot Project (using the Spring Initializr) right in Visual Studio Code. I'm a huge fan of IntelliJ and still purchase a personal license for myself and I won't be giving that up anytime soon.",[16,37812,37813],{},"That being said I do find myself working on projects that are both frontend (Vue) and backend (Spring Boot) and in those situations I am just more comfortable in Visual Studio Code. In this tutorial I create a new Spring Boot Project and Vue Project in VS Code and have the two talk to each other. It's a pretty trivial example but I think it's a great introduction.",[16,37815,37816],{},[74,37817],{"alt":37818,"src":37819},"Spring Boot in Visual Studio Code","\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F10\u002Fspring-boot-in-vscode.png",[28,37821,21516],{"id":10953},[16,37823,33891],{},[33,37825,34263],{"id":11452},[1271,37827,37828,37835,37842,37849],{},[1274,37829,37830],{},[23,37831,37834],{"href":37832,"rel":37833},"https:\u002F\u002Fdev.to\u002Ffirstclown\u002Floading-dynamic-images-in-a-vue-component-50k7",[101],"Loading dynamic images in a Vue Component",[1274,37836,37837],{},[23,37838,37841],{"href":37839,"rel":37840},"https:\u002F\u002Fwww.stackbit.com\u002Fblog\u002Fdevto-stackbit\u002F",[101],"Own Your Content, Broaden Your Audience",[1274,37843,37844],{},[23,37845,37848],{"href":37846,"rel":37847},"https:\u002F\u002Fdev.to\u002Fdevteam\u002Fspecial-announcement-from-the-dev-founders-hel",[101],"Special Announcement From the DEV Founders",[1274,37850,37851],{},[23,37852,37855],{"href":37853,"rel":37854},"https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fupdates\u002Fazure-spring-cloud-service-is-now-in-private-preview\u002F",[101],"Azure Spring Cloud service is now in private preview",[33,37857,31],{"id":30},[1271,37859,37860,37867,37874,37881],{},[1274,37861,37862],{},[23,37863,37866],{"href":37864,"rel":37865},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=JG1xINOkBoY",[101],"Quill is the company about to take on Slack",[1274,37868,37869],{},[23,37870,37873],{"href":37871,"rel":37872},"https:\u002F\u002Fyoutu.be\u002FkwcillcWOg0",[101],"Teachable Machine 1: Image Classification",[1274,37875,37876],{},[23,37877,37880],{"href":37878,"rel":37879},"https:\u002F\u002Fyoutu.be\u002FJ5rruXYkFuo",[101],"What's New in Premiere Pro 2020 v14.0",[1274,37882,37883],{},[23,37884,37887],{"href":37885,"rel":37886},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6xgMkGMIudE",[101],"Building an Inbox UI with Tailwind CSS",[33,37889,974],{"id":973},[1271,37891,37892],{},[1274,37893,37894],{},[23,37895,37898],{"href":37896,"rel":37897},"https:\u002F\u002Fdevmode.fm\u002Fepisodes\u002Fhow-when-and-why-to-use-the-jamstack",[101],"defMode.fm: How, when, and why to use the JAMstack",[33,37900,34339],{"id":16575},[1271,37902,37903,37910,37917],{},[1274,37904,37905],{},[23,37906,37909],{"href":37907,"rel":37908},"https:\u002F\u002Fvisualstudio.microsoft.com\u002Fservices\u002Fvisual-studio-online\u002F",[101],"Visual Studio Online",[1274,37911,37912],{},[23,37913,37916],{"href":37914,"rel":37915},"https:\u002F\u002Fdevblogs.microsoft.com\u002Ftypescript\u002Fannouncing-typescript-3-7\u002F",[101],"Announcing TypeScript 3.7",[1274,37918,37919],{},[23,37920,37923],{"href":37921,"rel":37922},"https:\u002F\u002Fdev.to\u002Fliyasthomas\u002Fi-created-postwoman-an-online-open-source-api-request-builder-41md",[101],"Postwoman API request builder",[33,37925,28365],{"id":25700},[1271,37927,37928],{},[1274,37929,37930],{},[23,37931,37934],{"href":37932,"rel":37933},"https:\u002F\u002Fdoubleyourfreelancing.com\u002Fmastering-convertkit",[101],"Mastering ConvertKit",[33,37936,22045],{"id":13856},[16,37938,37939],{},"I am very jealous of anyone attending VueConf Toronto this week and I can't wait to see some pictures and recordings from the conference.",[16,37941,37942],{},[23,37943,37944],{"href":37944,"rel":37945},"https:\u002F\u002Fvuetoronto.com\u002F",[101],[33,37947,37649],{"id":37648},[16,37949,37652,37950,37955,37956,37961],{},[23,37951,37954],{"href":37952,"rel":37953},"https:\u002F\u002Ftwitter.com\u002Fgustojs",[101],"Gusto"," who is a VueJS core team member and the administrator of the ",[23,37957,37960],{"href":37958,"rel":37959},"https:\u002F\u002Ft.co\u002FNfb5gWGlfU?amp=1",[101],"VueLand Discord",". Gusto is very involved in the Vue community and I always enjoy the content that he continues to put out.",[28,37963,172],{"id":171},[16,37965,33301],{},[16,37967,9630,37968,191],{},[189,37969],{},{"title":200,"searchDepth":201,"depth":201,"links":37971},[37972,37973,37976,37977,37986],{"id":34166,"depth":201,"text":34167},{"id":37726,"depth":201,"text":37727,"children":37974},[37975],{"id":37779,"depth":206,"text":37780},{"id":37800,"depth":201,"text":37801},{"id":10953,"depth":201,"text":21516,"children":37978},[37979,37980,37981,37982,37983,37984,37985],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":13856,"depth":206,"text":22045},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":37988,"path":37989,"title":37990,"description":37991,"meta":37992,"body":37995},"newsletter\u002Fnewsletter\u002F2019\u002F11\u002F03\u002F15.md","\u002Fnewsletter\u002F2019\u002F11\u002F03\u002F15","Coffee & Code Newsletter: #15","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #14 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":37993,"date":37994},"coffee-and-code-newsletter-15","2019-11-03T07:00:00.000Z",{"type":13,"value":37996,"toc":38199},[37997,38004,38006,38009,38013,38022,38027,38041,38044,38053,38057,38066,38072,38074,38076,38078,38094,38096,38133,38135,38151,38153,38169,38171,38180,38182,38191,38193,38195],[16,37998,37999,38000,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #14 ",[23,38001,742],{"href":38002,"rel":38003},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F14",[101],[28,38005,34167],{"id":34166},[16,38007,38008],{},"This week I posted a new video on YouTube and the third and final part of my series on Unit testing in Vue was released.",[28,38010,38012],{"id":38011},"vue-for-beginners-tutorial","Vue for beginners Tutorial",[16,38014,38015,38016,38021],{},"This week I posted a new video on YouTube ",[23,38017,38020],{"href":38018,"rel":38019},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=YGgXAHbQHeI",[101],"Vue for beginners",". I know that getting started with a new framework can be pretty intimidating and even more so in the JavaScript ecosystem. The point of this video was to demonstrate just how versatile Vue is and how I think it's perfect for beginners.",[16,38023,38024],{},[74,38025],{"alt":38020,"src":38026},"\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F03\u002Fvue-for-beginners-cover.jpg",[16,38028,38029,38030,38034,38035,38040],{},"When you visit ",[23,38031,38033],{"href":29542,"rel":38032},[101],"https:\u002F\u002Fvuejs.org"," the first thing you will see is that Vue is known as ",[161,38036,38037],{},[734,38038,38039],{},"The Progressive JavaScript Framework",". At first, this might seem like some marketing jargon but it's not and for me, it's part of the story that makes Vue so welcoming.",[16,38042,38043],{},"This just means that you can incrementally adopt Vue as your needs start to grow. You can start using Vue right now by dropping a script tag on a page and you are ready to go. No need to buy into build processes, code splitting or module bundlers.",[16,38045,38046,38047,38052],{},"This video walks you through how to use Vue on a new page or in an existing application by just including a script tag. This type of content is what I have been working on for my new course \"Up and Running with VueJS\". ",[23,38048,38051],{"href":38049,"rel":38050},"https:\u002F\u002Fdanvega.ck.page\u002F823d5f3bee",[101],"Sign up the course landing page"," and you will get the first 5 lessons of this course for free! More information on this new course coming soon.",[28,38054,38056],{"id":38055},"unit-testing-in-vue","Unit Testing in Vue",[16,38058,38059,38060,38065],{},"The third and final article in the the ",[23,38061,38064],{"href":38062,"rel":38063},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002FUnit-Testing-in%20Vue-More-complex-components",[101],"series I did for Vue Mastery"," has been released. In part three we learn more about writing Unit tests in Vue by looking at a few more complex examples. I really enjoyed putting this series together and I hope you learned something from it.",[16,38067,38068],{},[74,38069],{"alt":38070,"src":38071},"Unit Testing for Vue Mastery","\u002Fimages\u002Fnewsletter\u002F2019\u002F11\u002F03\u002Funit-testing-vue-mastery.jpg",[28,38073,21516],{"id":10953},[16,38075,33891],{},[33,38077,34263],{"id":11452},[1271,38079,38080,38087],{},[1274,38081,38082],{},[23,38083,38086],{"href":38084,"rel":38085},"https:\u002F\u002Fsolomon.io\u002Fbetter-markdown-visual-studio-code\u002F",[101],"Better Markdown in Visual Studio Code",[1274,38088,38089],{},[23,38090,38093],{"href":38091,"rel":38092},"https:\u002F\u002Fblogs.oracle.com\u002Fjavamagazine\u002Foctober-2019-v2",[101],"Java Magazine: October 2019 Issue",[33,38095,31],{"id":30},[1271,38097,38098,38105,38112,38119,38126],{},[1274,38099,38100],{},[23,38101,38104],{"href":38102,"rel":38103},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0Qm5nS2PMBs",[101],"Photoshop Sneak Peek: New Object Selection Tool",[1274,38106,38107],{},[23,38108,38111],{"href":38109,"rel":38110},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=009e_fTfUI4",[101],"S06E12 Modern Web Podcast - Vue 3, Code Education, & the Vue Community",[1274,38113,38114],{},[23,38115,38118],{"href":38116,"rel":38117},"https:\u002F\u002Fwww.twitch.tv\u002Fvideos\u002F500884074",[101],"Getting Started with VueJS as a newbie",[1274,38120,38121],{},[23,38122,38125],{"href":38123,"rel":38124},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Pj_MqNx22Bo",[101],"Hot Tips Scripting on the Twitter Web UI",[1274,38127,38128],{},[23,38129,38132],{"href":38130,"rel":38131},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Q9eh2iJsjxE",[101],"Scott Tolinski & The Origins of LevelUpTuts | mini-doc",[33,38134,974],{"id":973},[1271,38136,38137,38144],{},[1274,38138,38139],{},[23,38140,38143],{"href":38141,"rel":38142},"http:\u002F\u002Fstories.wosu.org\u002Frivet\u002Fa-bootcamp\u002F",[101],"WOSU Public Media: A Bootcamp",[1274,38145,38146],{},[23,38147,38150],{"href":38148,"rel":38149},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002FThis-Month-in-Vue-Oct-2019",[101],"VueMastery: This Month in Vue - October 2019",[33,38152,34339],{"id":16575},[1271,38154,38155,38162],{},[1274,38156,38157],{},[23,38158,38161],{"href":38159,"rel":38160},"https:\u002F\u002Fraindrop.io\u002F",[101],"Raindrop bookmark manager",[1274,38163,38164],{},[23,38165,38168],{"href":38166,"rel":38167},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools\u002Freleases\u002Ftag\u002Fv5.3.1",[101],"Vue DevTools v5.3.1",[33,38170,28365],{"id":25700},[1271,38172,38173],{},[1274,38174,38175],{},[23,38176,38179],{"href":38177,"rel":38178},"https:\u002F\u002Fdiscover.teachable.com\u002F",[101],"Teachable launches a Marketplace",[33,38181,37649],{"id":37648},[16,38183,38184,38185,38190],{},"My must follow of the week is ",[23,38186,38189],{"href":38187,"rel":38188},"https:\u002F\u002Ftwitter.com\u002FVueScreencasts",[101],"Vue Screencasts",". Jeffrey Biles does a great job with his tutorials on YouTube and is pretty active on Twitter. If you're in the Vue community give him a follow and check out his YouTube channel.",[28,38192,172],{"id":171},[16,38194,33301],{},[16,38196,9630,38197,191],{},[189,38198],{},{"title":200,"searchDepth":201,"depth":201,"links":38200},[38201,38202,38203,38204,38212],{"id":34166,"depth":201,"text":34167},{"id":38011,"depth":201,"text":38012},{"id":38055,"depth":201,"text":38056},{"id":10953,"depth":201,"text":21516,"children":38205},[38206,38207,38208,38209,38210,38211],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":38214,"path":38215,"title":38216,"description":38217,"meta":38218,"body":38221},"newsletter\u002Fnewsletter\u002F2019\u002F10\u002F27\u002F14.md","\u002Fnewsletter\u002F2019\u002F10\u002F27\u002F14","Coffee & Code Newsletter: #14","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #13 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":38219,"date":38220},"coffee-and-code-newsletter-14","2019-10-27T07:00:00.000Z",{"type":13,"value":38222,"toc":38409},[38223,38230,38232,38246,38254,38275,38281,38289,38295,38304,38308,38316,38318,38320,38322,38338,38340,38349,38351,38367,38369,38390,38392,38395,38401,38403,38405],[16,38224,38225,38226,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #13 ",[23,38227,742],{"href":38228,"rel":38229},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F13",[101],[28,38231,34167],{"id":34166},[16,38233,38234,38235,38240,38241,184],{},"I spent a lot of my free time this week working on my website. One of the first things I did was upgrade ",[23,38236,38239],{"href":38237,"rel":38238},"https:\u002F\u002Fgridsome.org\u002Fblog\u002F2019\u002F09\u002F17\u002Fgridsome-v07\u002F",[101],"Gridsome to 0.7.x"," and it's something I have been meaning to get around to for a while. With this upgrade, there were a few things I had to do. The big one was moving any route definitions (which is being deprecated) into a new feature called ",[23,38242,38245],{"href":38243,"rel":38244},"https:\u002F\u002Fgridsome.org\u002Fblog\u002F2019\u002F09\u002F17\u002Fgridsome-v07\u002F#new-template-configuration",[101],"template configurations",[3175,38247,38252],{"className":38248,"code":38250,"language":38251},[38249],"language-text","templates: {\n  Post: \"\u002Fblog\u002F:year\u002F:month\u002F:day\u002F:slug\",\n  Tag: \"\u002Ftag\u002F:title\",\n  Newsletter: \"\u002Fnewsletter\u002Fcoffee-and-code\u002F:issue\"\n},\n","text",[469,38253,38250],{"__ignoreMap":200},[16,38255,38256,38257,38262,38263,38268,38269,38274],{},"With that in place, I wanted to add a ",[23,38258,38261],{"href":38259,"rel":38260},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter",[101],"newsletter landing page"," where I could send people to sign up for the newsletter. I also created a nice ",[23,38264,38267],{"href":38265,"rel":38266},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fthank-you\u002F",[101],"thank you page"," for subscribers after they signed up letting them know that the next issue of the newsletter will come out this Sunday along with some links to the last 3 issues. Finally, I created ",[23,38270,38273],{"href":38271,"rel":38272},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Farchives\u002F",[101],"an archives page"," that I don't really link to anywhere but I thought I would give that to all of you in case you wanted it.",[16,38276,38277],{},[74,38278],{"alt":38279,"src":38280},"Newsletter Screenshot","\u002Fimages\u002Fnewsletter\u002F2019\u002F10\u002F27\u002Fnewsletter.png",[16,38282,38283,38284,38288],{},"I also put together a quick landing page that shows off all of my ",[23,38285,38287],{"href":24933,"rel":38286},[101],"current and upcoming courses",". I would like to have individual landing pages for each of my courses but that is going to come with time. I am not the greatest designer but I am happy with it knowing that these are projects I hope to have money to pay a professional to do later down the road.",[16,38290,38291],{},[74,38292],{"alt":38293,"src":38294},"Courses Screenshot","\u002Fimages\u002Fnewsletter\u002F2019\u002F10\u002F27\u002Fcourses.png",[16,38296,38297,38298,38303],{},"If you weren't aware all of the source code for my personal website is up on ",[23,38299,38302],{"href":38300,"rel":38301},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fdanvega-dev",[101],"Github"," if you're interested in checking it out.",[33,38305,38307],{"id":38306},"vuetify","Vuetify",[16,38309,38310,38311,38315],{},"I was able to use ",[23,38312,38307],{"href":38313,"rel":38314},"https:\u002F\u002Fvuetifyjs.com\u002Fen\u002F",[101]," in a project at work this week and I have to say I was impressed. I am someone who cares about how an application looks but often doesn't have the time or skill to create them. I really appreciate just how easy it is to install, use and customize. The number of components that come out of the box is very impressive and they have pretty much everything you need to build beautiful and functional applications. This is not a paid sponsorship, I am just truly impressed with the project so if you have a chance I would check them out.",[28,38317,21516],{"id":10953},[16,38319,33891],{},[33,38321,34263],{"id":11452},[1271,38323,38324,38331],{},[1274,38325,38326],{},[23,38327,38330],{"href":38328,"rel":38329},"https:\u002F\u002Fwww.divio.com\u002Fblog\u002Fdocumentation\u002F",[101],"What nobody tells you about documentation",[1274,38332,38333],{},[23,38334,38337],{"href":38335,"rel":38336},"https:\u002F\u002Fdev.to\u002Ftherajsaxena\u002Fjava-9-to-java-13-top-features-362l",[101],"Java 9 to Java 13 - Top features",[33,38339,31],{"id":30},[1271,38341,38342],{},[1274,38343,38344],{},[23,38345,38348],{"href":38346,"rel":38347},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3hLmDS179YE",[101],"AWS Certified Cloud Practitioner Training 2019 - Full Course",[33,38350,974],{"id":973},[1271,38352,38353,38360],{},[1274,38354,38355],{},[23,38356,38359],{"href":38357,"rel":38358},"https:\u002F\u002Fdevchat.tv\u002Fviews-on-vue\u002Fvov-084-nuxt-js-with-sebastien-chopin\u002F",[101],"VoV 084: Nuxt.JS With Sebastien Chopin",[1274,38361,38362],{},[23,38363,38366],{"href":38364,"rel":38365},"https:\u002F\u002Fchangelog.com\u002Fgotime\u002F104",[101],"Go Time: Building search tools in Go",[33,38368,34339],{"id":16575},[1271,38370,38371,38376,38383],{},[1274,38372,38373],{},[23,38374,38307],{"href":38313,"rel":38375},[101],[1274,38377,38378],{},[23,38379,38382],{"href":38380,"rel":38381},"https:\u002F\u002Fhacks.mozilla.org\u002F2019\u002F10\u002Ffirefox-70-a-bountiful-release-for-all\u002F",[101],"Firefox 70",[1274,38384,38385],{},[23,38386,38389],{"href":38387,"rel":38388},"https:\u002F\u002Fwww.ecpodcast.io\u002Fepisodes\u002F16-daniel-vassallo-why-i-quit-a-500k-job-at-amazon-to-work-for-myself",[101],"#16 - Daniel Vassallo - Why I Left a $500k\u002Fyear Job at AWS to Work For Myself",[33,38391,37649],{"id":37648},[16,38393,38394],{},"I have been working a lot lately with Adam Jahr of Vue Mastery and it's been an absolute pleasure. When you have a chance to work with people who are passionate about what they do it makes work not feel like work. Adam is a great teacher and what he and his team over at Vue Mastery is doing is pretty darn impressive. Adam is my must follow of the week!",[16,38396,38397],{},[23,38398,38399],{"href":38399,"rel":38400},"https:\u002F\u002Ftwitter.com\u002FAdamJahr",[101],[28,38402,172],{"id":171},[16,38404,33301],{},[16,38406,9630,38407,191],{},[189,38408],{},{"title":200,"searchDepth":201,"depth":201,"links":38410},[38411,38414,38421],{"id":34166,"depth":201,"text":34167,"children":38412},[38413],{"id":38306,"depth":206,"text":38307},{"id":10953,"depth":201,"text":21516,"children":38415},[38416,38417,38418,38419,38420],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":38423,"path":38424,"title":38425,"description":38426,"meta":38427,"body":38430},"newsletter\u002Fnewsletter\u002F2019\u002F10\u002F20\u002F13.md","\u002Fnewsletter\u002F2019\u002F10\u002F20\u002F13","Coffee & Code Newsletter: #13","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #12 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":38428,"date":38429},"coffee-and-code-newsletter-13","2019-10-20T07:00:00.000Z",{"type":13,"value":38431,"toc":38672},[38432,38439,38441,38444,38453,38459,38461,38473,38487,38490,38499,38514,38516,38518,38520,38550,38552,38582,38584,38600,38602,38611,38613,38643,38645,38653,38655,38658,38664,38666,38668],[16,38433,38434,38435,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #12 ",[23,38436,742],{"href":38437,"rel":38438},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002Fcoffee-and-code\u002F12",[101],[28,38440,34167],{"id":34166},[16,38442,38443],{},"If you didn't already know I am the President of a non-profit in Cleveland OH called CLE Cares. Every December we partner with the Marines Toys for Tots Foundation to raise toys for those less fortunate right here in Northeast Ohio. We throw a big event called Toys for Shots and the idea is simple, you bring us a toy and we will give you some drinks.",[16,38445,38446,38447,38452],{},"I was looking at the current website this year and it was getting kind of stale. With not a lot of time on my hands, I decided to purchase a template and use that to update our website. The template was great but it was for a single page site and I really wanted to have multiple pages so even using a template took me some time to strip it down to just want I wanted which was essentially the home page graphics. I have this ",[23,38448,38451],{"href":38449,"rel":38450},"https:\u002F\u002Ftoysforshots.netlify.com\u002F",[101],"hosted on Netlify"," and I am still tweaking some things but I would love your feedback.",[16,38454,38455],{},[74,38456],{"alt":38457,"src":38458},"Toys for Shots Redesign","\u002Fimages\u002Fnewsletter\u002F2019\u002F10\u002F20\u002Ftoysforshots.png",[33,38460,27331],{"id":27873},[16,38462,2481,38463,38466,38467,38472],{},[23,38464,27331],{"href":27329,"rel":38465},[101]," call for papers deadline was this week and as always I was a master at procrastination waiting until the very last minute to submit a few talks. If you want to read the full descriptions of my submissions they are available for this conference and every other conference I submit to ",[23,38468,38471],{"href":38469,"rel":38470},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fcall-for-papers",[101],"over on my Github",". These are the talks I ended up submitting:",[1271,38474,38475,38478,38481,38484],{},[1274,38476,38477],{},"Vue 3.0 Better, Faster & Stronger",[1274,38479,38480],{},"A beginners guide to testing in Vue.js",[1274,38482,38483],{},"Moving my blog from WordPress to Gridsome",[1274,38485,38486],{},"Serverless and Vue",[33,38488,38489],{"id":13559},"Meetup",[16,38491,38492,38493,38498],{},"The other big news of the week was Meetups' ",[23,38494,38497],{"href":38495,"rel":38496},"https:\u002F\u002Fwww.meetup.com\u002Flp\u002Fpaymentchanges?mpId=9038",[101],"announcement of pricing changes",". The proposed change would charge each attendee $2 to RSVP for a meetup or the organizers could pick up that bill. As someone who runs a meetup I had a lot of problems with this and apparently so did everyone else in the community.",[16,38500,38501,38502,38507,38508,38513],{},"It was really great to see freeCodeCamp announce that they were going to build an alternative to Meetup called Chapter. If you want to learn more about this project you can check out their ",[23,38503,38506],{"href":38504,"rel":38505},"https:\u002F\u002Fgithub.com\u002FfreeCodeCamp\u002Fchapter",[101],"Github repo",". Finally, if you're looking for alternatives to Meetup I found this ",[23,38509,38512],{"href":38510,"rel":38511},"https:\u002F\u002Fphacks.dev\u002Fmeetup-com-alternatives",[101],"really great article by Nicolas Goutay"," where he discusses some options that he found.",[28,38515,21516],{"id":10953},[16,38517,33891],{},[33,38519,34263],{"id":11452},[1271,38521,38522,38529,38536,38543],{},[1274,38523,38524],{},[23,38525,38528],{"href":38526,"rel":38527},"https:\u002F\u002Fdev.to\u002Fazure\u002Ftoo-hard-too-soft-just-right-rendering-html-with-lit-html-1km8",[101],"Too Hard, Too Soft, Just Right - Rendering HTML with lit-html",[1274,38530,38531],{},[23,38532,38535],{"href":38533,"rel":38534},"https:\u002F\u002Fgridsome.org\u002Fblog\u002F2019\u002F10\u002F08\u002Finfinite-loading-with-gridsome\u002F",[101],"How to integrate Infinite Loading with Gridsome",[1274,38537,38538],{},[23,38539,38542],{"href":38540,"rel":38541},"https:\u002F\u002Fnesslabs.com\u002Ffocus-on-the-process",[101],"Focus on the process: stop thinking and start doing",[1274,38544,38545],{},[23,38546,38549],{"href":38547,"rel":38548},"https:\u002F\u002Fwww.netlify.com\u002Fblog\u002F2019\u002F10\u002F16\u002Fcreating-and-using-your-first-netlify-build-plugin\u002F",[101],"Creating and using your first Netlify Build Plugin",[33,38551,31],{"id":30},[1271,38553,38554,38561,38568,38575],{},[1274,38555,38556],{},[23,38557,38560],{"href":38558,"rel":38559},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=wO70Pnv0yeo&",[101],"Opening Keynote (Firebase Summit 2019)",[1274,38562,38563],{},[23,38564,38567],{"href":38565,"rel":38566},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCh5UlGiu9d6LegIeUCW4N1w\u002Fvideos",[101],"Mozilla Developer",[1274,38569,38570],{},[23,38571,38574],{"href":38572,"rel":38573},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002FgoPivotal\u002Fvideos",[101],"Spring One Conference Recordings",[1274,38576,38577],{},[23,38578,38581],{"href":38579,"rel":38580},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mT5siI19gtc",[101],"Netlify Tutorial - How to build and deploy websites using Netlify",[33,38583,974],{"id":973},[1271,38585,38586,38593],{},[1274,38587,38588],{},[23,38589,38592],{"href":38590,"rel":38591},"https:\u002F\u002Fchangelog.com\u002Fnews\u002FbWR9\u002Fvisit",[101],"Go Time: Creating the Go programming language",[1274,38594,38595],{},[23,38596,38599],{"href":38597,"rel":38598},"https:\u002F\u002Fchangelog.com\u002Fnews\u002FV2A1\u002Fvisit",[101],"Go Time: Serverless and Go",[33,38601,22754],{"id":14121},[1271,38603,38604],{},[1274,38605,38606],{},[23,38607,38610],{"href":38608,"rel":38609},"https:\u002F\u002Flearning.oreilly.com\u002Flibrary\u002Fview\u002Fthe-go-programming\u002F9780134190570\u002F",[101],"The Go Programming Language",[33,38612,34339],{"id":16575},[1271,38614,38615,38622,38629,38636],{},[1274,38616,38617],{},[23,38618,38621],{"href":38619,"rel":38620},"https:\u002F\u002Fgitsheet.wtf\u002F",[101],"GitSheet",[1274,38623,38624],{},[23,38625,38628],{"href":38626,"rel":38627},"http:\u002F\u002Fmystery.knightlab.com\u002F",[101],"SQL Murder Mystery",[1274,38630,38631],{},[23,38632,38635],{"href":38633,"rel":38634},"https:\u002F\u002Fflickity.metafizzy.co\u002F",[101],"Flickity - Touch, responsive, flickable carousels",[1274,38637,38638],{},[23,38639,38642],{"href":38640,"rel":38641},"https:\u002F\u002Fcloudblogs.microsoft.com\u002Fsqlserver\u002F2019\u002F10\u002F17\u002Fmssql-extension-for-visual-studio-code-now-has-object-explorer-and-intellicode\u002F",[101],"Mssql extension for Visual Studio Code",[33,38644,34358],{"id":18091},[1271,38646,38647],{},[1274,38648,38649],{},[23,38650,34645],{"href":38651,"rel":38652},"http:\u002F\u002Fgroovycalamari.com\u002Fissues\u002F167?#start",[101],[33,38654,37649],{"id":37648},[16,38656,38657],{},"I have a been a huge fan of everything Adam Wathan does from his course on Advanced Vue Component Design to his podcast and now his work on Tailwind CSS. Adam is a software developer, entrepreneur, podcaster, educator and so much more. If you're not following Adam over on Twitter he is my must follow of the week.",[16,38659,38660],{},[23,38661,38662],{"href":38662,"rel":38663},"https:\u002F\u002Ftwitter.com\u002Fadamwathan",[101],[28,38665,172],{"id":171},[16,38667,33301],{},[16,38669,9630,38670,191],{},[189,38671],{},{"title":200,"searchDepth":201,"depth":201,"links":38673},[38674,38678,38687],{"id":34166,"depth":201,"text":34167,"children":38675},[38676,38677],{"id":27873,"depth":206,"text":27331},{"id":13559,"depth":206,"text":38489},{"id":10953,"depth":201,"text":21516,"children":38679},[38680,38681,38682,38683,38684,38685,38686],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":14121,"depth":206,"text":22754},{"id":16575,"depth":206,"text":34339},{"id":18091,"depth":206,"text":34358},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":38689,"path":38690,"title":38691,"description":38692,"meta":38693,"body":38696},"newsletter\u002Fnewsletter\u002F2019\u002F10\u002F13\u002F12.md","\u002Fnewsletter\u002F2019\u002F10\u002F13\u002F12","Coffee & Code Newsletter: #12","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #11 here. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":38694,"date":38695},"coffee-and-code-newsletter-12","2019-10-13T07:00:00.000Z",{"type":13,"value":38697,"toc":38934},[38698,38705,38707,38710,38715,38730,38813,38815,38822,38824,38826,38828,38851,38853,38876,38878,38894,38896,38905,38907,38916,38918,38926,38928,38930],[16,38699,38700,38701,35818],{},"Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you missed last week's newsletter you can checkout Coffee and Code #11 ",[23,38702,742],{"href":38703,"rel":38704},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002F2019\u002F10\u002F06\u002Fcoffee-and-code-11\u002F",[101],[28,38706,34167],{"id":34166},[16,38708,38709],{},"I don't have anything in the form of new content but I did spend some time cleaning up my office this weekend. I had a lot of people asking me about my gear so I thought I would share it with you. This is an image of my office and I will walk through some of my gear below.",[16,38711,38712],{},[74,38713],{"alt":200,"src":38714},"\u002Fimages\u002Fnewsletter\u002F2019\u002F10\u002F13\u002Foffice.jpeg",[16,38716,38717,38718,38723,38724,38729],{},"I have been searching for a good mount to go behind my monitor that I could put my DSLR on and I finally found one. ",[23,38719,38722],{"href":38720,"rel":38721},"https:\u002F\u002Famzn.to\u002F2M8CfVU",[101],"Elgato came out with a Multi-Mount"," which clamps right on my desk and at the minimum height still fits over my widescreen monitor. It also extends higher so If I want to stand up and do some talking head videos I can. I also have the ",[23,38725,38728],{"href":38726,"rel":38727},"https:\u002F\u002Famzn.to\u002F35tGVx0",[101],"green screen from Elgato"," and I just love everything they release!",[1271,38731,38732,38743,38749,38783,38789,38795,38801,38807],{},[1274,38733,38734,38735],{},"MacBook Pro (Retina, 15-inch, Mid 2015)\n",[1271,38736,38737,38740],{},[1274,38738,38739],{},"2.2 GHz Quad-Core Intel Core i7",[1274,38741,38742],{},"16 GB DDR3",[1274,38744,38745],{},[23,38746,38748],{"href":38726,"rel":38747},[101],"Bestand Laptop Stand",[1274,38750,38751,38755],{},[23,38752,38754],{"href":38726,"rel":38753},[101],"Canon 70D DSLR Camera",[1271,38756,38757,38764,38770,38777],{},[1274,38758,38759],{},[23,38760,38763],{"href":38761,"rel":38762},"https:\u002F\u002Famzn.to\u002F2ozWliE",[101],"Canon EF-s 24mm f\u002F2.8 STM Lens",[1274,38765,38766],{},[23,38767,38769],{"href":38761,"rel":38768},[101],"ACK-E6 Camera AC Power Adapter Charging Kit",[1274,38771,38772],{},[23,38773,38776],{"href":38774,"rel":38775},"https:\u002F\u002Famzn.to\u002F33rhLO0",[101],"Wireless Remote Control",[1274,38778,38779],{},[23,38780,38782],{"href":38774,"rel":38781},[101],"Lexar 128GB SD Card",[1274,38784,38785],{},[23,38786,38788],{"href":38720,"rel":38787},[101],"Audio-Technica AT2020USB+ Microphone",[1274,38790,38791],{},[23,38792,38794],{"href":38720,"rel":38793},[101],"Dell UltraSharp U3415W Curved Monitor",[1274,38796,38797],{},[23,38798,38800],{"href":38720,"rel":38799},[101],"Amazon Echo - Black (1st Generator)",[1274,38802,38803],{},[23,38804,38806],{"href":38720,"rel":38805},[101],"Logitech K750 Wireless Keyboard",[1274,38808,38809],{},[23,38810,38812],{"href":38774,"rel":38811},[101],"2\"x12\"x12\" Soundproof Foam Wedge Tiles",[28,38814,34253],{"id":34252},[16,38816,38817,38818,38821],{},"Please update your address books. I am moving this newsletter's from address to ",[469,38819,38820],{},"newsletter@danvega.dev"," next week.",[28,38823,21516],{"id":10953},[16,38825,33891],{},[33,38827,34263],{"id":11452},[1271,38829,38830,38837,38844],{},[1274,38831,38832],{},[23,38833,38836],{"href":38834,"rel":38835},"https:\u002F\u002Fdev.to\u002Fjennapederson\u002Fbuilding-a-playground-with-nuxt-and-markdown-4c5e",[101],"Building A Playground with Nuxt and Markdown",[1274,38838,38839],{},[23,38840,38843],{"href":38841,"rel":38842},"https:\u002F\u002Fdev.to\u002Fsimonholdorf\u002F9-projects-you-can-do-to-become-a-frontend-master-in-2020-n2h",[101],"9 Projects you can do to become a Frontend Master in 2020",[1274,38845,38846],{},[23,38847,38850],{"href":38848,"rel":38849},"https:\u002F\u002Fdev.to\u002Fsimonholdorf\u002F10-vue-directives-that-make-your-dev-lives-easier-5dm7",[101],"10 Vue Directives that make your dev lives easier!",[33,38852,31],{"id":30},[1271,38854,38855,38862,38869],{},[1274,38856,38857],{},[23,38858,38861],{"href":38859,"rel":38860},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6HUjDKVn0e0&list=WL&index=2&t=2s",[101],"Why the Vue 3 Composition API?",[1274,38863,38864],{},[23,38865,38868],{"href":38866,"rel":38867},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ty49_v1tV44",[101],"Go Tutorial Basic | Golang",[1274,38870,38871],{},[23,38872,38875],{"href":38873,"rel":38874},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=4deVCNJq3qc",[101],"Learn Vue.js - Full Course for Beginners - 2019",[33,38877,974],{"id":973},[1271,38879,38880,38887],{},[1274,38881,38882],{},[23,38883,38886],{"href":38884,"rel":38885},"https:\u002F\u002Fdevchat.tv\u002Fviews-on-vue\u002Fvov-082-developer-tooling-and-dev-setup-for-working-with-vue\u002F",[101],"Views on Vue 082: Developer Tooling and Dev Setup for Working With Vue",[1274,38888,38889],{},[23,38890,38893],{"href":38891,"rel":38892},"http:\u002F\u002Fwww.fullstackradio.com\u002F125",[101],"Full Stack Radio: 125: Rob Walling - Choosing the Right Product Idea",[33,38895,34339],{"id":16575},[1271,38897,38898],{},[1274,38899,38900],{},[23,38901,38904],{"href":38902,"rel":38903},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-next",[101],"Vue 3 (Pre-Alpha Release)",[33,38906,28365],{"id":25700},[1271,38908,38909],{},[1274,38910,38911],{},[23,38912,38915],{"href":38913,"rel":38914},"https:\u002F\u002Fwww.vuemastery.com\u002Fcourses\u002Fvue-3-essentials\u002Fwhy-the-composition-api",[101],"Vue 3 Essentials",[33,38917,37649],{"id":37648},[16,38919,38184,38920,38925],{},[23,38921,38924],{"href":38922,"rel":38923},"https:\u002F\u002Ftwitter.com\u002Fbencodezen",[101],"Ben Hong",". Ben is all over the place these days and is a huge contributor to the Vue community. Ben is a core team member of VuePress and you will hear him on a couple of podcasts that deal with Vue.",[28,38927,172],{"id":171},[16,38929,33301],{},[16,38931,9630,38932,191],{},[189,38933],{},{"title":200,"searchDepth":201,"depth":201,"links":38935},[38936,38937,38938,38946],{"id":34166,"depth":201,"text":34167},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":38939},[38940,38941,38942,38943,38944,38945],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":38948,"path":38949,"title":38950,"description":38951,"meta":38952,"body":38955},"newsletter\u002Fnewsletter\u002F2019\u002F10\u002F06\u002Fcofee-and-code-11.md","\u002Fnewsletter\u002F2019\u002F10\u002F06\u002Fcofee-and-code-11","Coffee & Code Newsletter: #11","Welcome to Coffee and Code with me, Dan Vega. This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have a cup of coffee grab one now and let's get to it.",{"slug":38953,"date":38954},"coffee-and-code-newsletter-11","2019-10-06T07:00:00.000Z",{"type":13,"value":38956,"toc":39137},[38957,38959,38961,38964,38970,38976,38980,38983,38988,38990,38992,38994,38996,39033,39035,39058,39060,39069,39071,39094,39096,39110,39112,39121,39123,39129,39131,39133],[16,38958,38951],{},[28,38960,34167],{"id":34166},[16,38962,38963],{},"I created two new videos this week for YouTube and I had a lot of fun putting them together. I still don't know what I am doing on YouTube but what I realized is I am not going to figure it out by sitting around and doing nothing. This is why I have been mixing up with tutorials and discussions and I would love to hear your feedback.",[16,38965,38966],{},[23,38967,38968],{"href":38968,"rel":38969},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=a3TISMIWzP8",[101],[16,38971,38972],{},[23,38973,38974],{"href":38974,"rel":38975},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eXJ9yKa-aJ0",[101],[33,38977,38979],{"id":38978},"vue-3","Vue 3",[16,38981,38982],{},"Probably the best news of the week was when Even You dropped the bomb at Vue London dropped Vue 3 alpha. If you haven't had a chance you can download Vue 3 and start hacking away right now!",[16,38984,38985],{},[74,38986],{"alt":200,"src":38987},"\u002Fimages\u002Fnewsletter\u002F2019\u002F10\u002F06\u002Fevan-you-tweet.png",[28,38989,34253],{"id":34252},[28,38991,21516],{"id":10953},[16,38993,33891],{},[33,38995,34263],{"id":11452},[1271,38997,38998,39005,39012,39019,39026],{},[1274,38999,39000],{},[23,39001,39004],{"href":39002,"rel":39003},"https:\u002F\u002Fdev.to\u002Frubiin\u002Fvim-quickies-cheatsheet-30gm",[101],"Vim quickies \u002F cheatsheet",[1274,39006,39007],{},[23,39008,39011],{"href":39009,"rel":39010},"https:\u002F\u002Fdev.to\u002Fsimonholdorf\u002F10-tips-tricks-to-make-you-a-better-vuejs-developer-4n4d",[101],"10 Tips & Tricks to make you a better VueJS Developer",[1274,39013,39014],{},[23,39015,39018],{"href":39016,"rel":39017},"https:\u002F\u002Fdev.to\u002Fbnb\u002Fan-unintentionally-comprehensive-introduction-to-github-actions-ci-blm",[101],"An Unintentionally Comprehensive Introduction to GitHub Actions CI",[1274,39020,39021],{},[23,39022,39025],{"href":39023,"rel":39024},"https:\u002F\u002Fdev.to\u002Fraymondcamden\u002Fusing-oauth-and-vue-js-to-build-an-untappd-stats-page-ok6",[101],"Using OAuth and Vue.js to Build an Untappd Stats Page",[1274,39027,39028],{},[23,39029,39032],{"href":39030,"rel":39031},"https:\u002F\u002Fmichaelnthiessen.com\u002Flevels-of-vue-scope",[101],"4 Levels of Vue Scope",[33,39034,31],{"id":30},[1271,39036,39037,39044,39051],{},[1274,39038,39039],{},[23,39040,39043],{"href":39041,"rel":39042},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PE1rGl1HKr4",[101],"Create a Personal Blog with Nuxt.js & Headless CMS (Ghost) - 1 of 2",[1274,39045,39046],{},[23,39047,39050],{"href":39048,"rel":39049},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=T4qLTXGvJ7k",[101],"Create a Personal Blog with Nuxt.js & Headless CMS (Ghost) - 2 of 2",[1274,39052,39053],{},[23,39054,39057],{"href":39055,"rel":39056},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fhow-to-build-and-deploy-websites-using-netlify-a-comprehensive-tutorial\u002F",[101],"How to build and deploy websites using Netlify - a comprehensive tutorial",[33,39059,974],{"id":973},[1271,39061,39062],{},[1274,39063,39064],{},[23,39065,39068],{"href":39066,"rel":39067},"https:\u002F\u002Fnews.vuejs.org\u002Fissues\u002F159",[101],"Vue News Podcast",[33,39070,34339],{"id":16575},[1271,39072,39073,39080,39087],{},[1274,39074,39075],{},[23,39076,39079],{"href":39077,"rel":39078},"https:\u002F\u002Fmicronaut-projects.github.io\u002Fmicronaut-data\u002Flatest\u002Fguide\u002F",[101],"Micronaut Data 1.0.0.M2 Release",[1274,39081,39082],{},[23,39083,39086],{"href":39084,"rel":39085},"https:\u002F\u002Ftwitter.com\u002Fnuxt_js\u002Fstatus\u002F1178598763331493888",[101],"Nuxt.js Website Updates",[1274,39088,39089],{},[23,39090,39093],{"href":39091,"rel":39092},"https:\u002F\u002Fwww.tailwindui.com\u002F",[101],"Tailwind UI Landing Page (Coming Soon!)",[33,39095,22045],{"id":13856},[1271,39097,39098,39104],{},[1274,39099,39100],{},[23,39101,36296],{"href":39102,"rel":39103},"http:\u002F\u002Fwww.codemash.org\u002F",[101],[1274,39105,39106],{},[23,39107,39108],{"href":39108,"rel":39109},"https:\u002F\u002Fus.vuejs.org\u002Fcall-for-papers",[101],[33,39111,34358],{"id":18091},[1271,39113,39114],{},[1274,39115,39116],{},[23,39117,39120],{"href":39118,"rel":39119},"https:\u002F\u002Fblog.jetbrains.com\u002Fidea\u002F2019\u002F10\u002Fjava-annotated-monthly-october-2019",[101],"Java Annotated Monthly",[33,39122,37649],{"id":37648},[16,39124,39125],{},[23,39126,39127],{"href":39127,"rel":39128},"https:\u002F\u002Ftwitter.com\u002FMichaelThiessen",[101],[28,39130,172],{"id":171},[16,39132,33301],{},[16,39134,9630,39135,191],{},[189,39136],{},{"title":200,"searchDepth":201,"depth":201,"links":39138},[39139,39142,39143,39152],{"id":34166,"depth":201,"text":34167,"children":39140},[39141],{"id":38978,"depth":206,"text":38979},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":39144},[39145,39146,39147,39148,39149,39150,39151],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":13856,"depth":206,"text":22045},{"id":18091,"depth":206,"text":34358},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":39154,"path":39155,"title":39156,"description":38951,"meta":39157,"body":39160},"newsletter\u002Fnewsletter\u002F2019\u002F09\u002F29\u002Fcoffee-and-code-10.md","\u002Fnewsletter\u002F2019\u002F09\u002F29\u002Fcoffee-and-code-10","Coffee & Code Newsletter: #10",{"slug":39158,"date":39159},"coffee-and-code-newsletter-10","2019-09-29T07:00:00.000Z",{"type":13,"value":39161,"toc":39450},[39162,39164,39166,39169,39173,39182,39188,39191,39197,39203,39207,39214,39220,39222,39225,39230,39238,39243,39248,39251,39257,39260,39263,39270,39272,39279,39287,39289,39291,39293,39330,39332,39362,39364,39380,39382,39391,39393,39402,39404,39413,39415,39431,39433,39436,39442,39444,39446],[16,39163,38951],{},[28,39165,34167],{"id":34166},[16,39167,39168],{},"This has been an amazing week for me and I have a lot of great news to share with you so let's get straight to it.",[33,39170,39172],{"id":39171},"vue-mastery","Vue Mastery",[16,39174,39175,39176,39181],{},"I have been dropping some hints to you guys that I was working on a big article and I am happy to announce that it has been released. The first article in a 3 part series has been released on Vue Mastery titled ",[23,39177,39180],{"href":39178,"rel":39179},"https:\u002F\u002Fwww.vuemastery.com\u002Fblog\u002Funit-testing-vue-1",[101],"\"A beginner's guide: Unit Testing in Vue\"",". I really want to thank Adam Jhar and the team over at Vue Mastery for this opportunity to get my writing in front of such a great audience.",[16,39183,39184],{},[74,39185],{"alt":39186,"src":39187},"Vue Mastery Unit Testing for beginners","\u002Fimages\u002Fnewsletter\u002F2019\u002F09\u002F29\u002Fvue-mastery-cover.jpeg",[16,39189,39190],{},"If this wasn't exciting enough I got mentioned in a tweet by Vue Mastery and VueJS!",[16,39192,39193],{},[23,39194,39195],{"href":39195,"rel":39196},"https:\u002F\u002Ftwitter.com\u002FVueMastery\u002Fstatus\u002F1177696674787012609",[101],[16,39198,39199],{},[23,39200,39201],{"href":39201,"rel":39202},"https:\u002F\u002Ftwitter.com\u002Fvuejs\u002Fstatus\u002F1177701970305527809",[101],[33,39204,39206],{"id":39205},"code-mash-2020","Code Mash 2020",[16,39208,39209,39210,39213],{},"I am excited to announce that I have been accepted to speak at ",[23,39211,36296],{"href":39102,"rel":39212},[101],". This conference takes place on January 7-10 2020 about an hour away from me in Sandusky OH. I will be talking about all of the awesome new features in Vue 3. If you're going to be there please let me know and let's hang out!",[16,39215,39216],{},[74,39217],{"alt":39218,"src":39219},"Code Mash","\u002Fimages\u002Fnewsletter\u002F2019\u002F09\u002F29\u002Fcodemash.png",[33,39221,26751],{"id":26750},[16,39223,39224],{},"In the last newsletter, I told you I was working hard on producing higher quality and more consistent videos for YouTube. This week was the first step in that process as I released 2 new videos. I know that If I am going to meet my goals on YouTube the first step in that process is to be consistent. I don't have an idea of what my bandwidth is going to be but I think for now my goal is to upload at least 1 video per week. I like the idea of a tutorial and some type of discussion or product review.",[16,39226,39227],{},[161,39228,39229],{},"CSS Grid Generator",[16,39231,34974,39232,39237],{},[23,39233,39236],{"href":39234,"rel":39235},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZopBBEs9TPg",[101],"released a tutorial"," on how to create CSS Grid Layouts using an awesome tool called the CSS Grid Generator.",[16,39239,39240],{},[74,39241],{"alt":39229,"src":39242},"\u002Fimages\u002Fnewsletter\u002F2019\u002F09\u002F29\u002Fcss-grid-generator.png",[16,39244,39245],{},[161,39246,39247],{},"Learn to code: One language at a time",[16,39249,39250],{},"As I was working on few different projects I put out the following tweet earlier this week.",[16,39252,39253],{},[23,39254,39255],{"href":39255,"rel":39256},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1176882121060880384",[101],[16,39258,39259],{},"This tweet seems to really hit home for a bunch of people so I decided to create a video on the same topic. What I hoped to convey in this message is that it is overwhelming to learn a single programming language. It's even harder when you start thinking to yourself how am I ever going to learn all of these languages and frameworks that people are telling me I need to know.",[16,39261,39262],{},"The simple truth is you're never going to learn everything and the sooner you can accept that the better. You can though, over time understand that the core concepts you learn of one programming language can carry over to the next. I have been doing this for 20 years now so my advice is to stay patient, keep learning and the rest will come.",[16,39264,39265],{},[23,39266,39269],{"href":39267,"rel":39268},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=AkXVA6ukdcc",[101],"Learn to code one language at a time",[28,39271,34253],{"id":34252},[16,39273,39274,39275,39278],{},"I have a new tutorial coming this week on YouTube that covers the Vue CLI 3. In this tutorial I walk you through how to install the Vue CLI and how to use a few of the commands. One command I don't see being mentioned often is ",[469,39276,39277],{},"vue serve"," which allows you to serve a single file component in development mode.",[16,39280,39281,39282,39286],{},"If you aren't already ",[23,39283,39285],{"href":36373,"rel":39284},[101],"subscribed"," do so now and be on the lookout for that one this week!",[28,39288,21516],{"id":10953},[16,39290,33891],{},[33,39292,34263],{"id":11452},[1271,39294,39295,39302,39309,39316,39323],{},[1274,39296,39297],{},[23,39298,39301],{"href":39299,"rel":39300},"https:\u002F\u002Fdev.to\u002Fremotesynth\u002Fwhat-s-wrong-with-the-tech-interview-process-3b3m",[101],"What's Wrong with the Tech Interview Process?",[1274,39303,39304],{},[23,39305,39308],{"href":39306,"rel":39307},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fdotnet\u002Fannouncing-net-core-3-0\u002F",[101],"Announcing .NET Core 3.0",[1274,39310,39311],{},[23,39312,39315],{"href":39313,"rel":39314},"https:\u002F\u002Fdev.to\u002Fvoluntadpear\u002Fcomparing-react-hooks-with-vue-composition-api-4b32",[101],"Comparing React Hooks with Vue Composition API",[1274,39317,39318],{},[23,39319,39322],{"href":39320,"rel":39321},"https:\u002F\u002Fdev.to\u002Fdevteam\u002Fyou-can-now-generate-self-hostable-static-blogs-right-from-your-dev-content-via-stackbit-7a5",[101],"You can now generate self-hostable static blogs right from your DEV content via Stackbit",[1274,39324,39325],{},[23,39326,39329],{"href":39327,"rel":39328},"https:\u002F\u002Fwww.wired.com\u002Fstory\u002Fwant-free-coding-lessons-twitch-real-time\u002F",[101],"Want Free Coding Lessons? Twitch Makes It Happen in Real Time",[33,39331,31],{"id":30},[1271,39333,39334,39341,39348,39355],{},[1274,39335,39336],{},[23,39337,39340],{"href":39338,"rel":39339},"https:\u002F\u002Fdotnet.microsoft.com\u002Flearn\u002Fvideos",[101],".NET Videos",[1274,39342,39343],{},[23,39344,39347],{"href":39345,"rel":39346},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=yefmcX57Eyg",[101],"IntelliJ IDEA for beginners",[1274,39349,39350],{},[23,39351,39354],{"href":39352,"rel":39353},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=YS4e4q9oBaU",[101],"freeCodeCamp: Learn Go Programming - Golang Tutorial for Beginners",[1274,39356,39357],{},[23,39358,39361],{"href":39359,"rel":39360},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=e-ThzHtBnys&list=PLFZAa7EupbB61QMSYFB8YX9qQUKnWxu_M",[101],"Gridsome Remark",[33,39363,974],{"id":973},[1271,39365,39366,39373],{},[1274,39367,39368],{},[23,39369,39372],{"href":39370,"rel":39371},"https:\u002F\u002Fladybug.dev\u002Fepisode\u002Fteaching-code\u002F",[101],"Ladybug Podcast: How To Teach Code",[1274,39374,39375],{},[23,39376,39379],{"href":39377,"rel":39378},"https:\u002F\u002Fshoptalkshow.com\u002Fepisodes\u002F379\u002F",[101],"Shop Talk Show: Making money on the web",[33,39381,34339],{"id":16575},[1271,39383,39384],{},[1274,39385,39386],{},[23,39387,39390],{"href":39388,"rel":39389},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcascadia-code",[101],"Cascadia Code Open Source Font by Microsoft",[16,39392,22754],{},[1271,39394,39395],{},[1274,39396,39397],{},[23,39398,39401],{"href":39399,"rel":39400},"https:\u002F\u002Fleanpub.com\u002FGoNotebook",[101],"A Go Developer's Notebook",[33,39403,28365],{"id":25700},[1271,39405,39406],{},[1274,39407,39408],{},[23,39409,39412],{"href":39410,"rel":39411},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Flearn-data-structures-from-a-google-engineer\u002F",[101],"Learn Data Structures from a Google Engineer",[33,39414,22045],{"id":13856},[1271,39416,39417,39424],{},[1274,39418,39419],{},[23,39420,39423],{"href":39421,"rel":39422},"https:\u002F\u002Fyoutu.be\u002FW8yL8vRnUnA",[101],".NET Conf 2019 (Day 1)",[1274,39425,39426],{},[23,39427,39430],{"href":39428,"rel":39429},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Dd37HBvfnRk",[101],".NET Conf 2019 (Day 2)",[33,39432,37649],{"id":37648},[16,39434,39435],{},"My person to follow this week is my friend Mark Shust. Mark lives in Cleveland near me and is an online instructor focusing on PHP & Magento. If you are into either of those technologies Mark is a great instructor and a must-follow!",[16,39437,39438],{},[23,39439,39440],{"href":39440,"rel":39441},"https:\u002F\u002Ftwitter.com\u002Fmarkshust",[101],[28,39443,172],{"id":171},[16,39445,33301],{},[16,39447,9630,39448,191],{},[189,39449],{},{"title":200,"searchDepth":201,"depth":201,"links":39451},[39452,39457,39458,39467],{"id":34166,"depth":201,"text":34167,"children":39453},[39454,39455,39456],{"id":39171,"depth":206,"text":39172},{"id":39205,"depth":206,"text":39206},{"id":26750,"depth":206,"text":26751},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":39459},[39460,39461,39462,39463,39464,39465,39466],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":13856,"depth":206,"text":22045},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":39469,"path":39470,"title":39471,"description":38951,"meta":39472,"body":39475},"newsletter\u002Fnewsletter\u002F2019\u002F09\u002F22\u002Fcoffee-and-code-09.md","\u002Fnewsletter\u002F2019\u002F09\u002F22\u002Fcoffee-and-code-09","Coffee & Code Newsletter: #9",{"slug":39473,"date":39474},"coffee-and-code-newsletter-9","2019-09-22T07:00:00.000Z",{"type":13,"value":39476,"toc":39788},[39477,39479,39481,39495,39498,39506,39514,39659,39662,39664,39666,39668,39697,39699,39715,39717,39726,39728,39744,39746,39748,39757,39759,39768,39771,39777,39779,39781,39785],[16,39478,38951],{},[28,39480,34167],{"id":34166},[16,39482,39483,39484,39489,39490,39494],{},"My focus this week was spent learning how to create and produce better videos. This will help me when creating course content but my main focus for the rest of this year and into 2020 is YouTube. I finished reading the book ",[23,39485,39488],{"href":39486,"rel":39487},"https:\u002F\u002Famzn.to\u002F30cOJnR",[101],"YouTube Secrets"," this week and I really enjoyed it. I appreciate books that give you tangible action items and this book was packed full of them. I have a video coming out this week so make sure you ",[23,39491,39493],{"href":36373,"rel":39492},[101],"give me a follow on YouTube"," and let me know what you think about it.",[33,39496,29689],{"id":39497},"gridsome",[16,39499,39500,39501,39505],{},"If you aren't aware, this website is built on a framework called ",[23,39502,29689],{"href":39503,"rel":39504},"https:\u002F\u002Fgridsome.org",[101],". This week Gridsome had a couple of really big things happen. First, the framework turned one on September 16 so if you have a chance send them some Birthday wishes.",[16,39507,39508,39509,39513],{},"The other big news of the week was the ",[23,39510,39512],{"href":38237,"rel":39511},[101],"release of version 0.7",". There were a lot of really great features in this release but none bigger than the ability to use components in Markdown. This will allow us to create custom components that can be used in your markdown blog posts.",[3175,39515,39519],{"className":39516,"code":39517,"language":39518,"meta":200,"style":200},"language-md shiki shiki-themes github-light github-dark github-light","---\ntitle: A cool title\nexcerpt: A cool description\n---\n\n\u002F\u002F Import any Vue Component. Even other .md files!\nimport YouTube from '~\u002Fcomponents\u002FYouTube.vue'\nimport AboutUs from '~\u002Fsections\u002FAboutUs.md'\n\n\u002F\u002F Import any JSON if you need data.\nimport data from '~\u002Fdata\u002Fyoutube.json'\n\n\u002F\u002F Use front-matter fields anywhere.\n\n# {{ $frontmatter.title }}\n\n> {{ $frontmatter.excerpt }}\n\n\u002F\u002F Use your imported Vue Components.\n\u003CYouTube :id=\"data.id\" \u002F>\n\u003CAboutUs \u002F>\n\nIsn't it great? 🥳\n","md",[469,39520,39521,39526,39536,39546,39550,39554,39559,39564,39569,39573,39578,39583,39587,39592,39596,39602,39606,39611,39615,39620,39638,39648,39653],{"__ignoreMap":200},[1492,39522,39523],{"class":3184,"line":3185},[1492,39524,39525],{"class":3188},"---\n",[1492,39527,39528,39531,39533],{"class":3184,"line":201},[1492,39529,39530],{"class":31600},"title",[1492,39532,4443],{"class":3188},[1492,39534,39535],{"class":29723},"A cool title\n",[1492,39537,39538,39541,39543],{"class":3184,"line":206},[1492,39539,39540],{"class":31600},"excerpt",[1492,39542,4443],{"class":3188},[1492,39544,39545],{"class":29723},"A cool description\n",[1492,39547,39548],{"class":3184,"line":9269},[1492,39549,39525],{"class":3188},[1492,39551,39552],{"class":3184,"line":29797},[1492,39553,31842],{"emptyLinePlaceholder":31841},[1492,39555,39556],{"class":3184,"line":29811},[1492,39557,39558],{"class":3188},"\u002F\u002F Import any Vue Component. Even other .md files!\n",[1492,39560,39561],{"class":3184,"line":29825},[1492,39562,39563],{"class":3188},"import YouTube from '~\u002Fcomponents\u002FYouTube.vue'\n",[1492,39565,39566],{"class":3184,"line":29839},[1492,39567,39568],{"class":3188},"import AboutUs from '~\u002Fsections\u002FAboutUs.md'\n",[1492,39570,39571],{"class":3184,"line":29853},[1492,39572,31842],{"emptyLinePlaceholder":31841},[1492,39574,39575],{"class":3184,"line":29867},[1492,39576,39577],{"class":3188},"\u002F\u002F Import any JSON if you need data.\n",[1492,39579,39580],{"class":3184,"line":29881},[1492,39581,39582],{"class":3188},"import data from '~\u002Fdata\u002Fyoutube.json'\n",[1492,39584,39585],{"class":3184,"line":29895},[1492,39586,31842],{"emptyLinePlaceholder":31841},[1492,39588,39589],{"class":3184,"line":29909},[1492,39590,39591],{"class":3188},"\u002F\u002F Use front-matter fields anywhere.\n",[1492,39593,39594],{"class":3184,"line":29923},[1492,39595,31842],{"emptyLinePlaceholder":31841},[1492,39597,39598],{"class":3184,"line":29937},[1492,39599,39601],{"class":39600},"sfWZ8","# {{ $frontmatter.title }}\n",[1492,39603,39604],{"class":3184,"line":29951},[1492,39605,31842],{"emptyLinePlaceholder":31841},[1492,39607,39608],{"class":3184,"line":29965},[1492,39609,39610],{"class":31600},"> {{ $frontmatter.excerpt }}\n",[1492,39612,39613],{"class":3184,"line":29979},[1492,39614,31842],{"emptyLinePlaceholder":31841},[1492,39616,39617],{"class":3184,"line":29985},[1492,39618,39619],{"class":3188},"\u002F\u002F Use your imported Vue Components.\n",[1492,39621,39622,39624,39626,39629,39632,39635],{"class":3184,"line":31817},[1492,39623,17493],{"class":3188},[1492,39625,3363],{"class":31600},[1492,39627,39628],{"class":3192}," :id",[1492,39630,39631],{"class":3188},"=",[1492,39633,39634],{"class":29723},"\"data.id\"",[1492,39636,39637],{"class":3188}," \u002F>\n",[1492,39639,39641,39643,39646],{"class":3184,"line":39640},21,[1492,39642,17493],{"class":3188},[1492,39644,39645],{"class":31600},"AboutUs",[1492,39647,39637],{"class":3188},[1492,39649,39651],{"class":3184,"line":39650},22,[1492,39652,31842],{"emptyLinePlaceholder":31841},[1492,39654,39656],{"class":3184,"line":39655},23,[1492,39657,39658],{"class":3188},"Isn't it great? 🥳\n",[16,39660,39661],{},"This is going to open up a whole lot of possibilities and allow me to do a few things on the blog that I have wanted to do since I launched it. If anyone wants to see some blog posts or videos around this let me know.",[28,39663,21516],{"id":10953},[16,39665,33891],{},[33,39667,34263],{"id":11452},[1271,39669,39670,39677,39684,39690],{},[1274,39671,39672],{},[23,39673,39676],{"href":39674,"rel":39675},"https:\u002F\u002Fmedium.com\u002Fdarklang\u002Funveiling-dark-e0be6f1e0b06",[101],"Unveiling Dark",[1274,39678,39679],{},[23,39680,39683],{"href":39681,"rel":39682},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fvisualstudio\u002Fjava-on-visual-studio-code-september-update\u002F",[101],"Java on Visual Studio Code September Update",[1274,39685,39686],{},[23,39687,39688],{"href":39688,"rel":39689},"https:\u002F\u002Fblog.pocketcasts.com\u002Fmajor-new-update\u002F",[101],[1274,39691,39692],{},[23,39693,39696],{"href":39694,"rel":39695},"https:\u002F\u002Fdevblogs.microsoft.com\u002Fcommandline\u002Fcascadia-code\u002F",[101],"Cascadia Code",[33,39698,31],{"id":30},[1271,39700,39701,39708],{},[1274,39702,39703],{},[23,39704,39707],{"href":39705,"rel":39706},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=HjlqoCNHGqc",[101],"Fighting Diabetes with Technology: Oracle Code One Keynote",[1274,39709,39710],{},[23,39711,39714],{"href":39712,"rel":39713},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=xlTBof3P4Xc",[101],"Java Language Futures: 2019 Edition",[33,39716,974],{"id":973},[1271,39718,39719],{},[1274,39720,39721],{},[23,39722,39725],{"href":39723,"rel":39724},"https:\u002F\u002Fmegaphone.link\u002FLMM4290950291",[101],"Money Lab: Share The YouTube Experiment Worked And Made $12K+",[33,39727,34339],{"id":16575},[1271,39729,39730,39737],{},[1274,39731,39732],{},[23,39733,39736],{"href":39734,"rel":39735},"https:\u002F\u002Fsvgporn.com",[101],"SVG Porn",[1274,39738,39739],{},[23,39740,39743],{"href":39741,"rel":39742},"https:\u002F\u002Fhacktoberfest.digitalocean.com\u002F",[101],"Hacktoberfest 2019",[33,39745,28365],{"id":25700},[33,39747,22045],{"id":13856},[1271,39749,39750],{},[1274,39751,39752],{},[23,39753,39756],{"href":39754,"rel":39755},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCdDhYMT2USoLdh4SZIsu_1g\u002Fvideos",[101],"Oracle Code One (YouTube Channel)",[33,39758,37649],{"id":37648},[16,39760,39761,39762,39767],{},"I have known ",[23,39763,39766],{"href":39764,"rel":39765},"https:\u002F\u002Fwww.raymondcamden.com\u002F",[101],"Ray"," for most of my development career and have always looked up to him as a mentor. He inspired me to start a blog I owe him a lot for his ColdFusion blogging platform. On top of being an awesome developer, he's even a better guy to know and I am lucky to call him a friend.",[16,39769,39770],{},"These days Ray blogs a lot about JavaScript and VueJS. I really enjoy following what Ray is up to and you will to.",[16,39772,39773],{},[23,39774,39775],{"href":39775,"rel":39776},"https:\u002F\u002Ftwitter.com\u002Fraymondcamden",[101],[28,39778,172],{"id":171},[16,39780,33301],{},[16,39782,9630,39783,191],{},[189,39784],{},[3325,39786,39787],{},"html pre.shiki code .s-uPX, html code.shiki .s-uPX{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#24292E}html pre.shiki code .suaqH, html code.shiki .suaqH{--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#22863A}html pre.shiki code .suV6U, html code.shiki .suV6U{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#032F62}html pre.shiki code .sfWZ8, html code.shiki .sfWZ8{--shiki-default:#005CC5;--shiki-default-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold;--shiki-sepia:#005CC5;--shiki-sepia-font-weight:bold}html pre.shiki code .sZnax, html code.shiki .sZnax{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#6F42C1}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":200,"searchDepth":201,"depth":201,"links":39789},[39790,39793,39802],{"id":34166,"depth":201,"text":34167,"children":39791},[39792],{"id":39497,"depth":206,"text":29689},{"id":10953,"depth":201,"text":21516,"children":39794},[39795,39796,39797,39798,39799,39800,39801],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":13856,"depth":206,"text":22045},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":39804,"path":39805,"title":39806,"description":38951,"meta":39807,"body":39810},"newsletter\u002Fnewsletter\u002F2019\u002F09\u002F15\u002Fcoffee-and-code-08.md","\u002Fnewsletter\u002F2019\u002F09\u002F15\u002Fcoffee-and-code-08","Coffee & Code Newsletter: #8",{"slug":39808,"date":39809},"coffee-and-code-newsletter-8","2019-09-15T07:00:00.000Z",{"type":13,"value":39811,"toc":40032},[39812,39814,39816,39819,39822,39833,39837,39840,39845,39859,39868,39871,39874,39883,39886,39896,39898,39900,39902,39904,39934,39936,39952,39954,39970,39972,39981,39983,39992,39994,40010,40012,40019,40024,40026,40028],[16,39813,38951],{},[28,39815,34167],{"id":34166},[16,39817,39818],{},"I try and keep all things negative off of social media because there is enough of it on there. With that said I have posted some tweets of late that weren't all that positive that had to do with burnout and I just want to thank all of you who reached out. I appreciate all of you so, so much.",[16,39820,39821],{},"I have some exciting news to share with you about Tech Elevator but a little news about what I was up to this week. I was able to finish the rough draft of that huge article I was working on for the Vue community. It has gone through the editing process and now I just need to make some corrections and it should be ready to be published soon so stay on the lookout for that.",[16,39823,39824,39825,39828,39829,184],{},"I did some testing in my office this week with video sets, green screens and I even ran a quick test on ",[23,39826,28779],{"href":28777,"rel":39827},[101],". I think I have a pretty solid setup and I might even try another Twitch stream after this newsletter goes out so if you haven't done so already ",[23,39830,39832],{"href":28777,"rel":39831},[101],"please follow me",[33,39834,39836],{"id":39835},"tech-elevator","Tech Elevator",[16,39838,39839],{},"Next week we welcome over 200 students across 5 locations in 3 states as new cohorts begin. I just want to wish all of our students good luck. It is not easy but if you work hard you will get through it. Now, on to some really exciting news!",[16,39841,39842],{},[74,39843],{"alt":200,"src":39844},"\u002Fimages\u002Fnewsletter\u002F2019\u002F09\u002F15\u002Fphiladelphia.png",[16,39846,39847,39848,39852,39853,39858],{},"This was a huge week at ",[23,39849,39836],{"href":39850,"rel":39851},"https:\u002F\u002Fwww.techelevator.com\u002F",[101]," where we announced our 6th location would be opening up in Philadelphia. If you want to read more about why we are so excited about this opportunity I would encourage you to ",[23,39854,39857],{"href":39855,"rel":39856},"https:\u002F\u002Fwww.linkedin.com\u002Fpulse\u002Fliberating-potential-birthplace-america-anthony-hughes\u002F",[101],"read this article"," by our CEO, Anthony Hughes. As exciting as expansion is, growth without a mission isn't sustainable.",[16,39860,39861,39862,39867],{},"You will find a lot of coding bootcamps boasting about their numbers without any verified data to back them up. Here at Tech Elevator, we submit all of our results to ",[23,39863,39866],{"href":39864,"rel":39865},"https:\u002F\u002Fcirr.org\u002F",[101],"CIRR",", The Council on Integrity in Results Reporting. CIRR is an independent, non-profit organization whose members believe that prospective students should know a school's outcomes before deciding whether to enroll.",[16,39869,39870],{},"CIRR posted our result this week and Tech Elevator is graduating 95% of students across all our campuses and of that 94% are getting placed within 180 days of graduating. The starting salary of students entering our program is $30,000 and the average starting salary when they leave is $58,000. This means that in just 14 weeks students are leaving with double their salary and a career that they are excited about.",[16,39872,39873],{},"This allows all of you to see what I already know, Tech Elevator is all about changing our student's lives. This makes me so happy because not only are we growing but we are doing it the right way and this is something I am incredibly proud of.",[16,39875,39876,39877,39882],{},"So enough bragging, what does this mean for you? First, we are hiring across many of our ",[23,39878,39881],{"href":39879,"rel":39880},"https:\u002F\u002Fwww.techelevator.com\u002Fjoin-our-team",[101],"locations for multiple positions",". If you enjoy mentoring and have a real passion for software development you might be a great fit as an instructor. If you would like to hear more about becoming an instructor or have any questions please feel free to contact me.",[16,39884,39885],{},"This also means that if you have any friends or family in the Philadelphia area that are interested in a career in software development you need to tell them about Tech Elevator. Our results speak for themselves, we give you everything you need to start a new career in software development. I truly believe in what we do here and again if you have any questions, please feel free to reach out.",[16,39887,39888],{},[734,39889,39890,39891,184],{},"I posted this article over on ",[23,39892,39895],{"href":39893,"rel":39894},"https:\u002F\u002Fdev.to\u002Ftherealdanvega\u002Ftech-elevator-launches-in-philidelphia-54eo",[101],"dev.to",[28,39897,34253],{"id":34252},[28,39899,21516],{"id":10953},[16,39901,33891],{},[33,39903,34263],{"id":11452},[1271,39905,39906,39913,39920,39927],{},[1274,39907,39908],{},[23,39909,39912],{"href":39910,"rel":39911},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fcoding-bootcamp-handbook\u002F",[101],"The Coding Bootcamp Handbook: How Do Bootcamps Work and Are They Right for You?",[1274,39914,39915],{},[23,39916,39919],{"href":39917,"rel":39918},"https:\u002F\u002Fdev.to\u002Fzooly\u002Ffast-static-site-with-gridsome-and-bulma-in-5-minutes-4md9",[101],"Fast Static Site with Gridsome and Bulma in 5 minutes",[1274,39921,39922],{},[23,39923,39926],{"href":39924,"rel":39925},"https:\u002F\u002Fdev.to\u002Flampewebdev\u002Fcss-quickies-css-variables-or-how-you-create-a-white-dark-theme-easily-1i0i",[101],"CSS Quickies: CSS Variables - Or how you create a 🌞white\u002F🌑dark theme easily",[1274,39928,39929],{},[23,39930,39933],{"href":39931,"rel":39932},"https:\u002F\u002Fscotch.io\u002Ftutorials\u002Fusing-parcel-in-a-vuejs-app",[101],"Using Parcel in a Vue.js App",[33,39935,31],{"id":30},[1271,39937,39938,39945],{},[1274,39939,39940],{},[23,39941,39944],{"href":39942,"rel":39943},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fspring-boot-tutorial\u002F",[101],"Spring Boot in 2 hours",[1274,39946,39947],{},[23,39948,39951],{"href":39949,"rel":39950},"https:\u002F\u002Fsupport.ecamm.com\u002Fen\u002Farticles\u002F3323109-discover-ecamm-live-all-tutorial-videos",[101],"Ecamm Live Tutorials",[33,39953,974],{"id":973},[1271,39955,39956,39963],{},[1274,39957,39958],{},[23,39959,39962],{"href":39960,"rel":39961},"https:\u002F\u002Fsyntax.fm\u002Fshow\u002F178\u002Fhow-we-record-edit-and-host-our-courses",[101],"Syntax.fm: How We Record, Edit, and Host Our Courses",[1274,39964,39965],{},[23,39966,39969],{"href":39967,"rel":39968},"https:\u002F\u002Fnofluffjuststuff.com\u002Fpodcast\u002F1\u002Fmini_episode_the_state_of_java_in_2019",[101],"Mini-Episode: The state of Java in 2019",[33,39971,34339],{"id":16575},[1271,39973,39974],{},[1274,39975,39976],{},[23,39977,39980],{"href":39978,"rel":39979},"https:\u002F\u002Fgithub.com\u002Fdenysdovhan\u002Fwtfjs",[101],"wtfjs",[33,39982,28365],{"id":25700},[1271,39984,39985],{},[1274,39986,39987],{},[23,39988,39991],{"href":39989,"rel":39990},"https:\u002F\u002Fdev.to\u002Fpluralsight\u002Fvue-getting-started-3cf0",[101],"Vue: Getting Started by John Papa",[33,39993,22754],{"id":14121},[1271,39995,39996,40003],{},[1274,39997,39998],{},[23,39999,40002],{"href":40000,"rel":40001},"https:\u002F\u002Fleanpub.com\u002Ftestingvuejscomponentswithjest",[101],"Testing Vue.js components with Jest",[1274,40004,40005],{},[23,40006,40009],{"href":40007,"rel":40008},"https:\u002F\u002Fgithub.com\u002Fgetify\u002FYou-Dont-Know-JS",[101],"You Don't Know JS",[33,40011,37649],{"id":37648},[16,40013,39761,40014,40018],{},[23,40015,20907],{"href":40016,"rel":40017},"https:\u002F\u002Ftwitter.com\u002Frecursivecodes",[101]," for a long time and he is just one of those great people you come across in life. In a former life, we were both ColdFusion developers living around Cleveland until he decided to move out to Georgia. Todd is now a developer advocate for Oracle and he builds some pretty cool things. On top of that, he's a great family man and I am lucky to call him a friend.",[16,40020,40021],{},[23,40022,40016],{"href":40016,"rel":40023},[101],[28,40025,172],{"id":171},[16,40027,33301],{},[16,40029,9630,40030,191],{},[189,40031],{},{"title":200,"searchDepth":201,"depth":201,"links":40033},[40034,40037,40038,40047],{"id":34166,"depth":201,"text":34167,"children":40035},[40036],{"id":39835,"depth":206,"text":39836},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":40039},[40040,40041,40042,40043,40044,40045,40046],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":14121,"depth":206,"text":22754},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":40049,"path":40050,"title":40051,"description":38951,"meta":40052,"body":40055},"newsletter\u002Fnewsletter\u002F2019\u002F09\u002F08\u002Fcoffee-and-code-07.md","\u002Fnewsletter\u002F2019\u002F09\u002F08\u002Fcoffee-and-code-07","Coffee & Code Newsletter: #7",{"slug":40053,"date":40054},"coffee-and-code-newsletter-7","2019-09-08T07:00:00.000Z",{"type":13,"value":40056,"toc":40221},[40057,40059,40061,40064,40073,40080,40083,40085,40087,40089,40112,40114,40147,40149,40158,40160,40190,40192,40201,40203,40206,40212,40214,40217],[16,40058,38951],{},[28,40060,34167],{"id":34166},[16,40062,40063],{},"There isn't a whole lot to talk about as far as new content goes from me. I did want to share a couple of things with you that I hope you find exciting.",[16,40065,40066,40067,40072],{},"First off if you're in the Cleveland area or know anyone who is and you're interested in working for an amazing company, ",[23,40068,40071],{"href":40069,"rel":40070},"https:\u002F\u002Fwww.techelevator.com\u002Fbecome-an-instructor",[101],"Tech Elevator is looking for another instructor",". I absolutely love Tech Elevator because every single person in the company cares about the students' outcome. If you have a passion for programming and want to help others this is a perfect opportunity for you.",[16,40074,40075,40079],{},[23,40076,40078],{"href":39741,"rel":40077},[101],"Hacktoberfest"," is only a few weeks away and I want to make sure all of you sign up for it. Hacktoberfest is a great program that encourages more participation in the open-source community. If you can complete the 2019 challenge you will earn a limited edition t-shirt. I have to tell you that the shirts they give out every year are really awesome and I am hoping to get my hands on one of them this year. I might even set up some issues that I could use some help on in a few my projects so stay tuned.",[16,40081,40082],{},"Finally, I have been working really hard on an article for the Vue community. This thing is massive and approaching 5,000 words but I imagine it will get cut down some. The only reason I am telling you about it is so that you don't think I am over here slacking on you guys. This is what has been taking up my time and I hope to have something to share with you soon.",[28,40084,21516],{"id":10953},[16,40086,33891],{},[33,40088,34263],{"id":11452},[1271,40090,40091,40098,40105],{},[1274,40092,40093],{},[23,40094,40097],{"href":40095,"rel":40096},"https:\u002F\u002Fwattenberger.com\u002Fblog\u002Fd3",[101],"How to Learn D3.js",[1274,40099,40100],{},[23,40101,40104],{"href":40102,"rel":40103},"https:\u002F\u002Fbeta.music.apple.com\u002Fus\u002Fbrowse",[101],"Apple Music Launches on the web",[1274,40106,40107],{},[23,40108,40111],{"href":40109,"rel":40110},"https:\u002F\u002Fmedium.com\u002Fyoung-coder\u002Fhow-javascript-grew-up-and-became-a-real-language-17a0b948b77f",[101],"How JavaScript Grew Up and Became a Real Language",[33,40113,31],{"id":30},[1271,40115,40116,40123,40130,40137],{},[1274,40117,40118],{},[23,40119,40122],{"href":40120,"rel":40121},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lHBE0mIDTHk",[101],"New & Experimental CSS Tools in Firefox",[1274,40124,40125],{},[23,40126,40129],{"href":40127,"rel":40128},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=6Ievupll1ng",[101],"This Dot State of Frameworks- August 2019",[1274,40131,40132],{},[23,40133,40136],{"href":40134,"rel":40135},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eveoy_So-nA",[101],"Ecamm Live 3.2 Announcement",[1274,40138,40139],{},[23,40140,40143,40144],{"href":40141,"rel":40142},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=JMU4eYGpES8",[101],"YouTube Live: Top 5 New Features in Live Control Room ",[1492,40145,40146],{},"Sneak Peek",[33,40148,974],{"id":973},[1271,40150,40151],{},[1274,40152,40153],{},[23,40154,40157],{"href":40155,"rel":40156},"https:\u002F\u002Fthatsmyjamstack.com\u002Fposts\u002Fraymond-camden\u002F",[101],"Raymond Camden on the history of Static, hosting, side projects and more!",[33,40159,34339],{"id":16575},[1271,40161,40162,40169,40176,40183],{},[1274,40163,40164],{},[23,40165,40168],{"href":40166,"rel":40167},"https:\u002F\u002Fdarklang.com\u002F",[101],"Dark Programming Language",[1274,40170,40171],{},[23,40172,40175],{"href":40173,"rel":40174},"https:\u002F\u002Fcode.visualstudio.com\u002Fupdates\u002Fv1_38",[101],"Visual Studio Code - August 2019 (version 1.38)",[1274,40177,40178],{},[23,40179,40182],{"href":40180,"rel":40181},"https:\u002F\u002Fdevblogs.microsoft.com\u002Ftypescript\u002Fannouncing-typescript-3-6\u002F",[101],"Announcing TypeScript 3.6",[1274,40184,40185],{},[23,40186,40189],{"href":40187,"rel":40188},"https:\u002F\u002Fwww.wappalyzer.com",[101],"Wappalyzer",[33,40191,22754],{"id":14121},[1271,40193,40194],{},[1274,40195,40196],{},[23,40197,40200],{"href":40198,"rel":40199},"https:\u002F\u002Famzn.to\u002F2A0aOqp",[101],"Superfans: The Easy Way to Stand Out, Grow Your Tribe, and Build a Successful Business",[33,40202,37649],{"id":37648},[16,40204,40205],{},"Anthony Gore is the creator of VueJS Developers which is an online community the teaches Vue through a series of articles, courses, and a weekly newsletter. Anthony is an awesome teacher and I am always learning something from him. Give him a follow on Twitter and let him know you appreciate his work 👋",[16,40207,40208],{},[23,40209,40210],{"href":40210,"rel":40211},"https:\u002F\u002Ftwitter.com\u002Fanthonygore",[101],[28,40213,172],{"id":171},[16,40215,40216],{},"Thanks for sitting down and sharing a cup of coffee with me my friend. I hope you enjoyed this first installment of Coffee & Code and I will see you next Sunday morning. If you have any links you would like me to include please contact me and I might add them to a future newsletter. I hope you have a great week and as always friends...",[16,40218,9630,40219,191],{},[189,40220],{},{"title":200,"searchDepth":201,"depth":201,"links":40222},[40223,40224,40232],{"id":34166,"depth":201,"text":34167},{"id":10953,"depth":201,"text":21516,"children":40225},[40226,40227,40228,40229,40230,40231],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":14121,"depth":206,"text":22754},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":40234,"path":40235,"title":40236,"description":38951,"meta":40237,"body":40240},"newsletter\u002Fnewsletter\u002F2019\u002F09\u002F01\u002Fcoffee-and-code-06.md","\u002Fnewsletter\u002F2019\u002F09\u002F01\u002Fcoffee-and-code-06","Coffee & Code Newsletter: #6",{"slug":40238,"date":40239},"coffee-and-code-newsletter-6","2019-09-01T07:00:00.000Z",{"type":13,"value":40241,"toc":40422},[40242,40244,40246,40249,40251,40260,40263,40265,40268,40274,40277,40285,40292,40299,40306,40313,40315,40317,40319,40321,40337,40339,40355,40357,40373,40375,40384,40388,40397,40399,40414,40416,40418],[16,40243,38951],{},[28,40245,34167],{"id":34166},[16,40247,40248],{},"This week was a busy week for me. I published a new blog article, a tutorial on YouTube, and launched a back to school promotion for all of my courses on Udemy.",[33,40250,3363],{"id":4557},[16,40252,40253,40254,40259],{},"I also ",[23,40255,40258],{"href":40256,"rel":40257},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=fi4ZjqNcSQc",[101],"published a new video on YouTube"," about Web Template Studio, which is a Visual Studio Code Extension. Web Template Studio (WebTS) is a user-friendly wizard to quickly bootstrap a web application. Best of all, Web Template Studio is open-source on GitHub.",[16,40261,40262],{},"I installed the extension for the first time and walked through bootstrapping a new web application using Vue + Express.",[33,40264,28365],{"id":25700},[16,40266,40267],{},"I'm a life-long learner and it is something I really enjoy doing. Since you're a student here on Udemy I am guessing most of you are the same. I mean we pretty much have to be in the field that we are in right?",[16,40269,40270],{},[74,40271],{"alt":40272,"src":40273},"Back to School Sale on my Udemy Courses","\u002Fimages\u002Fnewsletter\u002F2019\u002F09\u002F01\u002Fback-to-school.jpg",[16,40275,40276],{},"When students of all ages start going back to school it reminds me of getting those fresh school supplies and heading to school eager to learn something new. If you want to learn something new over the holiday weekend I am offering up all of my courses for $9.99. If you're interested you can use the links below but grab these coupons fast, the back to school sale ends September 2nd.",[16,40278,40279,40280],{},"Coupon: ",[161,40281,40282],{},[734,40283,40284],{},"BACKTOSCHOOL",[16,40286,40287],{},[23,40288,40291],{"href":40289,"rel":40290},"https:\u002F\u002Fwww.udemy.com\u002Fspring-boot-intro\u002F?couponCode=BACKTOSCHOOL",[101],"Learn Spring Boot",[16,40293,40294],{},[23,40295,40298],{"href":40296,"rel":40297},"https:\u002F\u002Fwww.udemy.com\u002Fspring-boot-2\u002F?couponCode=BACKTOSCHOOL",[101],"Getting Started with Spring Boot 2",[16,40300,40301],{},[23,40302,40305],{"href":40303,"rel":40304},"https:\u002F\u002Fwww.udemy.com\u002Fapache-groovy\u002F?couponCode=BACKTOSCHOOL",[101],"The Complete Apache Groovy Developer Course",[16,40307,40308],{},[23,40309,40312],{"href":40310,"rel":40311},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Fangular-4-java-developers\u002F?couponCode=BACKTOSCHOOL",[101],"Angular 4 Java Developers",[28,40314,34253],{"id":34252},[28,40316,21516],{"id":10953},[16,40318,33891],{},[33,40320,34263],{"id":11452},[1271,40322,40323,40330],{},[1274,40324,40325],{},[23,40326,40329],{"href":40327,"rel":40328},"https:\u002F\u002Fdev.to\u002Fdobromirhristov\u002Fthe-developer-s-guide-to-the-vue-ecosystem-4amb",[101],"The Developers Guide to the Vue Ecosystem",[1274,40331,40332],{},[23,40333,40336],{"href":40334,"rel":40335},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2019\u002F08\u002Fvuepress-documentation\u002F",[101],"VuePress: Documentation Made Easy",[33,40338,31],{"id":30},[1271,40340,40341,40348],{},[1274,40342,40343],{},[23,40344,40347],{"href":40345,"rel":40346},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=FPA_3dXzH7A",[101],"Groovy 3 & Beyond: An Insider's Guide",[1274,40349,40350],{},[23,40351,40354],{"href":40352,"rel":40353},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=aCv29JKmHNY",[101],"Inside Bill's Brain: Decoding Bill Gates",[33,40356,974],{"id":973},[1271,40358,40359,40366],{},[1274,40360,40361],{},[23,40362,40365],{"href":40363,"rel":40364},"https:\u002F\u002Fdevchat.tv\u002Fviews-on-vue\u002Fvov-076-typescript-tell-all-with-jack-koppa\u002F",[101],"Views on Vue: TypeScript tell all with Jack Koppa",[1274,40367,40368],{},[23,40369,40372],{"href":40370,"rel":40371},"https:\u002F\u002Fwww.scottadamssays.com\u002F2019\u002F08\u002F28\u002Fepisode-644-scott-adams-the-happiness-formula\u002F",[101],"Coffee with Scott Adams: The Happiness Formula",[33,40374,34339],{"id":16575},[1271,40376,40377],{},[1274,40378,40379],{},[23,40380,40383],{"href":40381,"rel":40382},"https:\u002F\u002Fvue-community.org\u002F",[101],"Vue Community Guide",[33,40385,40387],{"id":40386},"products","Products",[1271,40389,40390],{},[1274,40391,40392],{},[23,40393,40396],{"href":40394,"rel":40395},"https:\u002F\u002Fwww.mozilla.org\u002Fen-US\u002Ffirefox\u002Fdeveloper\u002F",[101],"FireFox Quantum: Developer Edition",[33,40398,37649],{"id":37648},[16,40400,40401,40402,40407,40408,40413],{},"I got a chance to watch ",[23,40403,40406],{"href":40404,"rel":40405},"https:\u002F\u002Ftwitter.com\u002Flizcodes",[101],"@lizcodes"," coding on her ",[23,40409,40412],{"href":40410,"rel":40411},"https:\u002F\u002Fwww.twitch.tv\u002Filluminatedspace",[101],"live stream"," last week. She in the middle of building a project using Gatsby and React which I don't use at all but I found myself wanting to stick around. She is not only a super talented engineer but she just has a lot of fun writing code and talking to anyone in the room. If you haven't had a chance to check her out, do it now!",[28,40415,172],{"id":171},[16,40417,40216],{},[16,40419,9630,40420,191],{},[189,40421],{},{"title":200,"searchDepth":201,"depth":201,"links":40423},[40424,40428,40429,40437],{"id":34166,"depth":201,"text":34167,"children":40425},[40426,40427],{"id":4557,"depth":206,"text":3363},{"id":25700,"depth":206,"text":28365},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":40430},[40431,40432,40433,40434,40435,40436],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":40386,"depth":206,"text":40387},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":40439,"path":40440,"title":40441,"description":38951,"meta":40442,"body":40445},"newsletter\u002Fnewsletter\u002F2019\u002F08\u002F25\u002Fcoffee-and-code-05.md","\u002Fnewsletter\u002F2019\u002F08\u002F25\u002Fcoffee-and-code-05","Coffee & Code Newsletter: #5",{"slug":40443,"date":40444},"coffee-and-code-newsletter-5","2019-08-25T08:00:00.000Z",{"type":13,"value":40446,"toc":40680},[40447,40449,40451,40454,40458,40476,40479,40485,40490,40493,40501,40507,40509,40511,40513,40543,40545,40561,40563,40579,40581,40604,40606,40629,40631,40654,40656,40663,40666,40672,40674,40676],[16,40448,38951],{},[28,40450,34167],{"id":34166},[16,40452,40453],{},"It was my birthday this week (I lost count at this point) and I want to thank everyone who reached out to me to wish me a Happy Birthday.",[33,40455,40457],{"id":40456},"vue-composition-api","Vue Composition API",[16,40459,40460,40461,40466,40467,184],{},"Back in June VueJS released an RFC (request for comments) called ",[161,40462,40463],{},[734,40464,40465],{},"Function-based Component API",". There were some that got really upset with this proposal and it caused a lot of conversation in the community. This week the Vue Core Team released an updated version of the RFC titled ",[23,40468,40471],{"href":40469,"rel":40470},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Frfcs\u002Fpull\u002F78",[101],[161,40472,40473],{},[734,40474,40475],{},"Composition API",[16,40477,40478],{},"I think a lot of the complaints came from everyone thinking that this is how they would have to write their Single File Components (SFC) and that just wasn't the case. There are some important changes to the RFC and if you want to learn more about the Composition API there is an entire documentation site dedicated to it.",[16,40480,40481],{},[23,40482,40483],{"href":40483,"rel":40484},"https:\u002F\u002Fvue-composition-api-rfc.netlify.com\u002F#summary",[101],[33,40486,40487],{"id":33641},[161,40488,40489],{},"Blog",[16,40491,40492],{},"I don't have any new articles this week but I do have one that a bunch of folks have been sharing on Twitter lately. If you are in the JavaScript ecosystem you know there is this package manager called NPM.",[16,40494,40495,40496,184],{},"Most of us just use it as away to pull dependencies into our projects but have you ever thought about creating your NPM package? if so I have this really great article that walks you through creating and publishing your ",[23,40497,40500],{"href":40498,"rel":40499},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F02\u002F10\u002Fcreating-your-first-npm-package",[101],"first NPM package",[16,40502,40503],{},[74,40504],{"alt":40505,"src":40506},"Create Your First NPM Package Blog Post","\u002Fimages\u002Fnewsletter\u002F2019\u002F08\u002F25\u002Ffirst-npm-package.png",[28,40508,21516],{"id":10953},[16,40510,33891],{},[33,40512,34263],{"id":11452},[1271,40514,40515,40522,40529,40536],{},[1274,40516,40517],{},[23,40518,40521],{"href":40519,"rel":40520},"https:\u002F\u002Fdaverupert.com\u002F2019\u002F07\u002Fwhat-i-like-about-vue\u002F",[101],"What I like About Vue - Dave Rupert",[1274,40523,40524],{},[23,40525,40528],{"href":40526,"rel":40527},"https:\u002F\u002Fscotch.io\u002Ftutorials\u002Fbuild-an-infinite-scroll-image-gallery-with-gatsby-and-netlify-functions",[101],"Build an infinite scroll image gallery with Gatsby and Netlify functions",[1274,40530,40531],{},[23,40532,40535],{"href":40533,"rel":40534},"https:\u002F\u002Fcss-tricks.com\u002Flets-build-a-jamstack-e-commerce-store-with-netlify-functions\u002F",[101],"Let’s Build a JAMstack E-Commerce Store with Netlify Functions",[1274,40537,40538],{},[23,40539,40542],{"href":40540,"rel":40541},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2019\u002F07\u002Fusing-slots-vue-js\u002F",[101],"Using Slots in VueJS",[33,40544,22754],{"id":14121},[1271,40546,40547,40554],{},[1274,40548,40549],{},[23,40550,40553],{"href":40551,"rel":40552},"https:\u002F\u002Fleanpub.com\u002Ffirstyearincode",[101],"You first year in code",[1274,40555,40556],{},[23,40557,40560],{"href":40558,"rel":40559},"https:\u002F\u002Fgettogetherbook.com",[101],"Get Together Book",[33,40562,31],{"id":30},[1271,40564,40565,40572],{},[1274,40566,40567],{},[23,40568,40571],{"href":40569,"rel":40570},"https:\u002F\u002Fwww.smashingmagazine.com\u002F2019\u002F08\u002Fsmashingconf-toronto-2019-video\u002F",[101],"SmashingConf Toronto Conference Playlist",[1274,40573,40574],{},[23,40575,40578],{"href":40576,"rel":40577},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=l4P53_nGnmg&t=799s",[101],"From Swift Developer to YouTuber",[33,40580,974],{"id":973},[1271,40582,40583,40590,40597],{},[1274,40584,40585],{},[23,40586,40589],{"href":40587,"rel":40588},"https:\u002F\u002Fkentcdodds.com\u002Fchats-with-kent-podcast\u002Fseasons\u002F01\u002Fepisodes\u002Fgetting-started-with-code-live-streaming-with-suz-hinton",[101],"Chats with Kent: Getting Started with Code Live Streaming - Suz Hinton",[1274,40591,40592],{},[23,40593,40596],{"href":40594,"rel":40595},"https:\u002F\u002Fnofluffjuststuff.com\u002Fpodcast\u002F1\u002Fraju_gandhi_on_vuejs_and_evaluating_web_frameworks",[101],"Raju Gandhi on Vuejs and Evaluating web frameworks",[1274,40598,40599],{},[23,40600,40603],{"href":40601,"rel":40602},"https:\u002F\u002Fpodcasts.apple.com\u002Fus\u002Fpodcast\u002Fyoutube-sues-elon-tweets-and-apple-has-battery-problems\u002Fid1474429475?i=1000447602345",[101],"MKBHD: YouTube Sues, Elon Tweets, and Apple Has Battery Problems",[33,40605,34339],{"id":16575},[1271,40607,40608,40615,40622],{},[1274,40609,40610],{},[23,40611,40614],{"href":40612,"rel":40613},"https:\u002F\u002Fhelp.github.com\u002Fen\u002Farticles\u002Fabout-github-package-registry",[101],"The Github Package Registry is now in beta",[1274,40616,40617],{},[23,40618,40621],{"href":40619,"rel":40620},"https:\u002F\u002Fgithub.com\u002Ftesting-library\u002Fvue-testing-library",[101],"Vue Testing Library",[1274,40623,40624],{},[23,40625,40628],{"href":40626,"rel":40627},"https:\u002F\u002Ftwitter.com\u002Fthis_vid",[101],"Download This Video",[33,40630,22045],{"id":13856},[1271,40632,40633,40640,40647],{},[1274,40634,40635],{},[23,40636,40639],{"href":40637,"rel":40638},"https:\u002F\u002Fcfe.dev\u002Fevents\u002Fflashback-conference-2020\u002F",[101],"Flashback Conference",[1274,40641,40642],{},[23,40643,40646],{"href":40644,"rel":40645},"https:\u002F\u002Fvuejs.london\u002F",[101],"Vue.js London 2019",[1274,40648,40649],{},[23,40650,40653],{"href":40651,"rel":40652},"http:\u002F\u002Fwww.codemash.org\u002Fcall-speakers\u002F",[101],"Code Mash CFP",[33,40655,37649],{"id":37648},[16,40657,40658,40659,40662],{},"I came across a presentation by Raju Gandhi on testing for some research I am doing on the topic and I was just blown away. When I come across people like this I try to find as much content from them as possible. I also listened to a ",[23,40660,2375],{"href":40594,"rel":40661},[101]," that he was on talking about how much he enjoys working with VueJS.",[16,40664,40665],{},"Raju has a Java background, loves Vue and dabbles in all kinds of tech. Did I mention he also lives in Ohio? I need to tak some time, head down to Columbus and hang out with Raju soon! Please give him a follow on Twitter using the link below.",[16,40667,40668],{},[23,40669,40670],{"href":40670,"rel":40671},"https:\u002F\u002Ftwitter.com\u002Flooselytyped",[101],[28,40673,172],{"id":171},[16,40675,40216],{},[16,40677,9630,40678,191],{},[189,40679],{},{"title":200,"searchDepth":201,"depth":201,"links":40681},[40682,40686,40695],{"id":34166,"depth":201,"text":34167,"children":40683},[40684,40685],{"id":40456,"depth":206,"text":40457},{"id":33641,"depth":206,"text":40489},{"id":10953,"depth":201,"text":21516,"children":40687},[40688,40689,40690,40691,40692,40693,40694],{"id":11452,"depth":206,"text":34263},{"id":14121,"depth":206,"text":22754},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":13856,"depth":206,"text":22045},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":40697,"path":40698,"title":40699,"description":30457,"meta":40700,"body":40703},"newsletter\u002Fnewsletter\u002F2019\u002F08\u002F18\u002Fcoffee-and-code-04.md","\u002Fnewsletter\u002F2019\u002F08\u002F18\u002Fcoffee-and-code-04","Coffee & Code Newsletter: #4",{"slug":40701,"date":40702},"coffee-and-code-newsletter-4","2019-08-18T08:00:00.000Z",{"type":13,"value":40704,"toc":40848},[40705,40711,40713,40715,40724,40727,40733,40739,40742,40748,40750,40757,40760,40762,40764,40766,40775,40777,40786,40788,40804,40806,40829,40831,40834,40840,40842,40844],[16,40706,40707],{},[23,40708,30457],{"href":40709,"rel":40710},"https:\u002F\u002Fwww.danvega.dev\u002Fnewsletter\u002F2019\u002F08\u002F18\u002Fcoffee-and-code-04",[101],[16,40712,38951],{},[28,40714,34167],{"id":34166},[16,40716,40717,40718,40723],{},"This week I started a discussion on dev.to called \"",[23,40719,40722],{"href":40720,"rel":40721},"https:\u002F\u002Fdev.to\u002Ftherealdanvega\u002Fwhat-is-your-conference-talk-walkup-song-36kb",[101],"What is your conference walk up song","\". I thought it was an interesting idea and if you have a chance I would love to hear what yours would be. Other than that I don't have any new articles to share with you but I do have some pretty exciting news. I have some very cool projects in the works that should help get my writing in front of more people which should lead to helping out a lot more people.",[16,40725,40726],{},"I told you that I got accepted to freeCodeCamp last week. This week I also had a really good meeting with someone who I instantly clicked with in the Vue community. I am going to be working on some content with him and I sent out this cryptic tweet to let everyone know what I was working on. 😉",[16,40728,40729],{},[23,40730,40731],{"href":40731,"rel":40732},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1161620722445410304",[101],[33,40734,40736],{"id":40735},"live-stream",[161,40737,40738],{},"Live Stream",[16,40740,40741],{},"No live stream this week but I did send this tweet out that I would love your thoughts on.",[16,40743,40744],{},[23,40745,40746],{"href":40746,"rel":40747},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega\u002Fstatus\u002F1162351000440725506",[101],[28,40749,34253],{"id":34252},[16,40751,40752,40753,40756],{},"Now that our summer cohort students have graduated at ",[23,40754,39836],{"href":39850,"rel":40755},[101]," I think things should quiet down over the next month. I will be working on the 2 big articles I told you about earlier and trying to lock down a live streaming schedule.",[16,40758,40759],{},"PS - It's my birthday Wednesday so if you want to say hi on Twitter that would make an old man feel loved.",[28,40761,21516],{"id":10953},[16,40763,33891],{},[33,40765,34263],{"id":11452},[1271,40767,40768],{},[1274,40769,40770],{},[23,40771,40774],{"href":40772,"rel":40773},"https:\u002F\u002Fblog.bitsrc.io\u002Fvue-js-3-future-oriented-programming-54dee797988b",[101],"VueJS 3.0 - Future-Oriented Programming",[33,40776,31],{"id":30},[1271,40778,40779],{},[1274,40780,40781],{},[23,40782,40785],{"href":40783,"rel":40784},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Y9uDghYuld4",[101],"Raymond Camden: Vue JS Introduction and tutorial",[33,40787,974],{"id":973},[1271,40789,40790,40797],{},[1274,40791,40792],{},[23,40793,40796],{"href":40794,"rel":40795},"https:\u002F\u002Fkentcdodds.com\u002Fchats-with-kent-podcast\u002Fseasons\u002F01\u002Fepisodes\u002Fgrowing-your-skills-and-career-through-teaching-with-ali-spittel",[101],"Chats with Kent Season 1 (14 Episodes)",[1274,40798,40799],{},[23,40800,40803],{"href":40801,"rel":40802},"https:\u002F\u002Fwww.hanselminutes.com\u002F696\u002Fthe-pragmatic-programmer-celebrates-20-years-with-dave-thomas-and-andy-hunt",[101],"Hanselminutes: The Pragmatic Programmer celebrates 20 years.",[33,40805,28365],{"id":25700},[1271,40807,40808,40815,40822],{},[1274,40809,40810],{},[23,40811,40814],{"href":40812,"rel":40813},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PL7CcGwsqRpSM3w9BT_21tUU8JN2SnyckR",[101],"Adam Wathan: Designing with Tailwind CSS Playlist (15 videos)",[1274,40816,40817],{},[23,40818,40821],{"href":40819,"rel":40820},"http:\u002F\u002Fflexboxfroggy.com\u002F",[101],"Flexbox Froggy",[1274,40823,40824],{},[23,40825,40828],{"href":40826,"rel":40827},"https:\u002F\u002Flearn.hasura.io\u002F",[101],"GraphQL Tutorials from Hasura",[33,40830,37649],{"id":37648},[16,40832,40833],{},"This is someone I really enjoy following on Twitter and I think you should check them out.",[16,40835,40836],{},[23,40837,40839],{"href":39775,"rel":40838},[101],"Raymond Camden",[28,40841,172],{"id":171},[16,40843,40216],{},[16,40845,9630,40846,191],{},[189,40847],{},{"title":200,"searchDepth":201,"depth":201,"links":40849},[40850,40853,40854,40861],{"id":34166,"depth":201,"text":34167,"children":40851},[40852],{"id":40735,"depth":206,"text":40738},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":40855},[40856,40857,40858,40859,40860],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":25700,"depth":206,"text":28365},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":40863,"path":40864,"title":40865,"description":38951,"meta":40866,"body":40869},"newsletter\u002Fnewsletter\u002F2019\u002F08\u002F11\u002Fcoffee-and-code-03.md","\u002Fnewsletter\u002F2019\u002F08\u002F11\u002Fcoffee-and-code-03","Coffee & Code Newsletter: #3",{"slug":40867,"date":40868},"coffee-and-code-newsletter-3","2019-08-11T08:00:00.000Z",{"type":13,"value":40870,"toc":41074},[40871,40878,40880,40888,40893,40900,40902,40909,40914,40917,40920,40935,40938,40944,40946,40953,40956,40960,40969,40972,40974,40976,40978,40994,40996,41012,41014,41037,41039,41055,41057,41059,41066,41068,41070],[16,40872,40873,40874,40877],{},"Welcome to Coffee and Code with me, ",[23,40875,8258],{"href":196,"rel":40876},[101],". This newsletter is a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. If you don't already have a cup of coffee grab one now and let's get to it.",[28,40879,34167],{"id":34166},[16,40881,40882,40883,40887],{},"A couple of months ago I applied to become an author for ",[23,40884,13001],{"href":40885,"rel":40886},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002F",[101]," and this weekend I received the following email that I am so excited to share with you.",[16,40889,40890],{},[74,40891],{"alt":200,"src":40892},"\u002Fimages\u002Fnewsletter\u002F2019\u002F08\u002F11\u002Ffreecodecamp-email.jpeg",[16,40894,40895,40896,184],{},"I have been a huge admirer of what freeCodeCamp does for our community and I can't wait to start contributing. A huge thanks to Quincy Larson for approving my application. Now the real question is what should my first article be about? If you have any thoughts please ",[23,40897,40899],{"href":181,"rel":40898},[101],"tweet at me",[33,40901,40489],{"id":33641},[16,40903,40904],{},[23,40905,40908],{"href":40906,"rel":40907},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F08\u002F08\u002Fcss-grid-generator",[101],"Learn how to use CSS Grid with a FREE tool CSS Grid Generator",[16,40910,40911],{},[74,40912],{"alt":200,"src":40913},"\u002Fimages\u002Fnewsletter\u002F2019\u002F08\u002F11\u002Fcss-grid-generator-cover.png",[16,40915,40916],{},"As someone who has been developing web applications for almost 20 years now, I have seen it all. I started in FrontPage, moved to Dreamweaver, nested tables inside of tables and learned how to float and clear fix everything.",[16,40918,40919],{},"While you won't see any awards for my designs on my bookshelf I am able to create some very nice simple and clean layouts. That said I have never really enjoyed it because it has always been a huge pain in the a$$. I have always felt like I was just hacking away until my layout looked almost like what I had in mind.",[16,40921,40922,40923,40928,40929,40934],{},"This is why when tools like ",[23,40924,40927],{"href":40925,"rel":40926},"https:\u002F\u002Fcss-tricks.com\u002Fsnippets\u002Fcss\u002Fcomplete-guide-grid\u002F",[101],"CSS Grid"," & ",[23,40930,40933],{"href":40931,"rel":40932},"https:\u002F\u002Fcss-tricks.com\u002Fsnippets\u002Fcss\u002Fa-guide-to-flexbox\u002F",[101],"Flexbox"," came along I was beyond excited about the possibilities of creating clean layouts. I think if you combine these 2 technologies along with just how far JavaScript has come it is what has really got me excited about front end development these days.",[16,40936,40937],{},"While I have a pretty good understanding of CSS Grid at this point I know it can be a little bit confusing to get started. That is why I am really excited to share with you a new tool that I came across that I really think can help you out if you're trying to understand CSS Grid.",[16,40939,40940],{},[23,40941,40943],{"href":40906,"rel":40942},[101],"Continue Reading",[33,40945,3363],{"id":4557},[16,40947,40948],{},[23,40949,40952],{"href":40950,"rel":40951},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3vO8FTNyHww",[101],"Installing Java with SDKMan",[16,40954,40955],{},"Nothing new this week in video format so I am pulling this one from my archives. One of my favorite tools around is called SDKMan. In this tutorial, I introduce you to SDKMan and how to use it.",[33,40957,40959],{"id":40958},"learning","Learning",[16,40961,40962,40963,40968],{},"Listen, I realize that I have a problem and I'm ok with it. 🤷‍♂️ I love learning new things and when I found out about a new(ish) JavaScript framework for the server I just had to check it out. This week I finally had a chance to play around with ",[23,40964,40967],{"href":40965,"rel":40966},"https:\u002F\u002Fnestjs.com\u002F",[101],"NestJS",". While I didn't build anything that exciting I was able to produce a CRUD application that talked to a MongoDB database.",[16,40970,40971],{},"This might sound a little strange given the fact that they are not the same tech stacks but It felt a lot like using Spring Boot. I was able to get something done quickly and I feel like NestJS enables me to be a more productive developer. If you're interested in learning more about NestJS or have your opinions about it please reach out to me.",[28,40973,21516],{"id":10953},[16,40975,33891],{},[33,40977,34263],{"id":11452},[1271,40979,40980,40987],{},[1274,40981,40982],{},[23,40983,40986],{"href":40984,"rel":40985},"https:\u002F\u002Fdev.to\u002Ffirstclown\u002Fshould-you-always-use-getters-in-vuex-4p0c",[101],"Should you always use getters in Vuex?",[1274,40988,40989],{},[23,40990,40993],{"href":40991,"rel":40992},"https:\u002F\u002Fdev.to\u002Fraymondcamden\u002Fdrag-and-drop-file-upload-in-vue-js-11kd",[101],"Drag & Drop File Upload in VueJS",[33,40995,31],{"id":30},[1271,40997,40998,41005],{},[1274,40999,41000],{},[23,41001,41004],{"href":41002,"rel":41003},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=TFmYL75RleM&list=WL&index=17&t=0s",[101],"Getting Started with Vuetify 2.0",[1274,41006,41007],{},[23,41008,41011],{"href":41009,"rel":41010},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sqkwHUyV-YY",[101],"Behind the scenes with Coding Train",[33,41013,974],{"id":973},[1271,41015,41016,41023,41030],{},[1274,41017,41018],{},[23,41019,41022],{"href":41020,"rel":41021},"https:\u002F\u002Fdevmode.fm\u002Fepisodes\u002Fwebpack-inside-out-with-sean-larkin",[101],"devmode.fm: Webpack inside and out with Sean Larkin",[1274,41024,41025],{},[23,41026,41029],{"href":41027,"rel":41028},"https:\u002F\u002Fdevchat.tv\u002Fviews-on-vue\u002Fvov-073-contributing-to-open-source-with-debbie-obrien\u002F",[101],"Contributing to open source with Debbie O'Brien",[1274,41031,41032],{},[23,41033,41036],{"href":41034,"rel":41035},"https:\u002F\u002Frealtalkjavascript.simplecast.fm\u002F71af117a",[101],"Real Talk JavaScript: Long time Java & GO to First time with JavaScript",[33,41038,34339],{"id":16575},[1271,41040,41041,41048],{},[1274,41042,41043],{},[23,41044,41047],{"href":41045,"rel":41046},"https:\u002F\u002Ftailwind.run\u002F",[101],"Tailwind.run()",[1274,41049,41050],{},[23,41051,41054],{"href":41052,"rel":41053},"https:\u002F\u002Ftornis.robbowen.digital\u002F",[101],"Tornis",[33,41056,37649],{"id":37648},[16,41058,40833],{},[16,41060,41061],{},[23,41062,41065],{"href":41063,"rel":41064},"https:\u002F\u002Ftwitter.com\u002Fsarah_edo",[101],"Sarah Drasner",[28,41067,172],{"id":171},[16,41069,40216],{},[16,41071,9630,41072,191],{},[189,41073],{},{"title":200,"searchDepth":201,"depth":201,"links":41075},[41076,41081,41088],{"id":34166,"depth":201,"text":34167,"children":41077},[41078,41079,41080],{"id":33641,"depth":206,"text":40489},{"id":4557,"depth":206,"text":3363},{"id":40958,"depth":206,"text":40959},{"id":10953,"depth":201,"text":21516,"children":41082},[41083,41084,41085,41086,41087],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172},{"_id":41090,"path":41091,"title":41092,"description":38951,"meta":41093,"body":41096},"newsletter\u002Fnewsletter\u002F2019\u002F08\u002F04\u002Fcoffee-and-code-02.md","\u002Fnewsletter\u002F2019\u002F08\u002F04\u002Fcoffee-and-code-02","Coffee & Code Newsletter: #2",{"slug":41094,"date":41095},"coffee-and-code-newsletter-2","2019-08-04T08:00:00.000Z",{"type":13,"value":41097,"toc":41269},[41098,41103,41105,41114,41118,41125,41131,41138,41142,41150,41152,41159,41162,41164,41167,41170,41172,41174,41176,41198,41200,41223,41225,41248,41252,41261,41263,41265],[16,41099,40873,41100,40877],{},[23,41101,8258],{"href":196,"rel":41102},[101],[28,41104,34167],{"id":34166},[16,41106,41107,41108,41113],{},"I was really busy this week but I was able to sneak in a live coding session yesterday so we can talk about that. I also started playing around with ",[23,41109,41112],{"href":41110,"rel":41111},"https:\u002F\u002Fmicronaut.io\u002F",[101],"Micronaut"," this week. If you're a Java developer have you had a chance to check it out yet? So far I am really enjoying just how fast and easy to use it is. If you have used it before or you're interested in seeing some content from me on it please let me know.",[33,41115,41116],{"id":40735},[161,41117,40738],{},[16,41119,41120,41121,41124],{},"I was able to sneak a live stream in yesterday and it was a lot of fun. I was going to try streaming on ",[23,41122,28779],{"href":28777,"rel":41123},[101]," but I had some problems so I ended up just going live on YouTube. I am still learning the platforms and figuring out how to use them so I apologize for any issues.",[16,41126,41127,41128,41130],{},"In this coding session, I wanted to start building out a newsletter archive. I want you to have the ability to read a newsletter item online and share it with friends. If you are reading this in an email client you can look towards the top where there is a ",[469,41129,30457],{}," link.",[16,41132,41133,41134,184],{},"We spent some time talking about how to add a new file system source and a new content type. If you're interested in watching the replay it has been posted on ",[23,41135,3363],{"href":41136,"rel":41137},"https:\u002F\u002Fyoutu.be\u002F5lXmyp4DJxg",[101],[33,41139,41140],{"id":33641},[161,41141,40489],{},[16,41143,41144,41145,184],{},"I don't have anything new this week but I will share with you an article that I mentioned in the live stream. Each of my blog posts has a lot of metadata at the top of the markdown file. I don't like having to look these up and write them by hand so I wrote a ",[23,41146,41149],{"href":41147,"rel":41148},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F04\u002F23\u002Fgridsome-blog-post-generator\u002F",[101],"generator for creating blog posts in Gridsome",[33,41151,3363],{"id":4557},[16,41153,41154],{},[23,41155,41158],{"href":41156,"rel":41157},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=K2_3rrcZVgg&feature=youtu.be",[101],"How to Remove Elements from an ArrayList in Java.",[16,41160,41161],{},"In this tutorial, we are going to learn how to safely remove elements from an ArrayList in Java while using a for loop to loop over that same list.",[28,41163,34253],{"id":34252},[16,41165,41166],{},"I can't believe it but we have another cohort graduating from Tech Elevator in 2 weeks. I am a product manager for a team of students building their final capstone project so between that and my own project work is going to take up most of my time.",[16,41168,41169],{},"I need to find a way to schedule out these live coding sessions. Would it be helpful if they were at the same time every week? Reach out to me and let me know.",[28,41171,21516],{"id":10953},[16,41173,33891],{},[33,41175,34263],{"id":11452},[1271,41177,41178,41185,41191],{},[1274,41179,41180],{},[23,41181,41184],{"href":41182,"rel":41183},"https:\u002F\u002Fdev.to\u002Ffirstclown\u002Funderstanding-data-flow-in-vuex-b5b",[101],"Understanding data flow in Vuex",[1274,41186,41187],{},[23,41188,41190],{"href":40519,"rel":41189},[101],"What I like about Vue",[1274,41192,41193],{},[23,41194,41197],{"href":41195,"rel":41196},"https:\u002F\u002Fdev.to\u002Fraymondcamden\u002Fmultiple-ways-of-api-integration-in-your-jamstack-4mh6",[101],"Multiple ways of API Integration in your JamStack",[33,41199,31],{"id":30},[1271,41201,41202,41209,41216],{},[1274,41203,41204],{},[23,41205,41208],{"href":41206,"rel":41207},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=pws4qzGn5ak",[101],"Wes Bos - Get Better at JavaScript with just JavaScript",[1274,41210,41211],{},[23,41212,41215],{"href":41213,"rel":41214},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=t54tuaoHVLo",[101],"Rebuilding Discord w\u002F Tailwind CSS v1.0",[1274,41217,41218],{},[23,41219,41222],{"href":41220,"rel":41221},"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCCBVCTuk6uJrN3iFV_3vurg\u002Fvideos",[101],"Devoxx YouTube Channel",[33,41224,974],{"id":973},[1271,41226,41227,41234,41241],{},[1274,41228,41229],{},[23,41230,41233],{"href":41231,"rel":41232},"https:\u002F\u002Fdevmode.fm\u002Fepisodes\u002Fnew-awesomeness-coming-in-vuejs-3-0",[101],"devMode.fm: New awesomeness coming in Vue.JS 3.0",[1274,41235,41236],{},[23,41237,41240],{"href":41238,"rel":41239},"http:\u002F\u002Fdifferential.libsyn.com\u002Fanthony-hughes-company-is-world-class-at-transforming-lives",[101],"Differential: Anthony Hughes company is world class at transforming lives",[1274,41242,41243],{},[23,41244,41247],{"href":41245,"rel":41246},"https:\u002F\u002Fmegaphone.link\u002FLMM3473364591",[101],"Money Lab: Small Changes, Big Payoffs",[33,41249,41251],{"id":41250},"follow-on-twitter","Follow on Twitter",[1271,41253,41254],{},[1274,41255,41256],{},[23,41257,41260],{"href":41258,"rel":41259},"https:\u002F\u002Ftwitter.com\u002Ffirstclown",[101],"Joe Erickson: @firstclown",[28,41262,172],{"id":171},[16,41264,33301],{},[16,41266,9630,41267,191],{},[189,41268],{},{"title":200,"searchDepth":201,"depth":201,"links":41270},[41271,41276,41277,41283],{"id":34166,"depth":201,"text":34167,"children":41272},[41273,41274,41275],{"id":40735,"depth":206,"text":40738},{"id":33641,"depth":206,"text":40489},{"id":4557,"depth":206,"text":3363},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":41278},[41279,41280,41281,41282],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":41250,"depth":206,"text":41251},{"id":171,"depth":201,"text":172},{"_id":41285,"path":41286,"title":41287,"description":41288,"meta":41289,"body":41292},"newsletter\u002Fnewsletter\u002F2019\u002F07\u002F28\u002Fcoffee-and-code-01.md","\u002Fnewsletter\u002F2019\u002F07\u002F28\u002Fcoffee-and-code-01","Coffee & Code Newsletter: #1","Welcome to the first installment of Coffee and Code with me, Dan Vega. It's a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. I will try and keep these pretty short and digestible. So if you don't have a cup of coffee go and grab one and if you do, let's get to it.",{"slug":41290,"date":41291},"coffee-and-code-newsletter-1","2019-07-28T08:00:00.000Z",{"type":13,"value":41293,"toc":41488},[41294,41301,41303,41307,41310,41313,41316,41324,41328,41337,41339,41342,41356,41359,41361,41363,41365,41374,41376,41392,41394,41416,41418,41441,41443,41459,41461,41470,41472,41474,41480,41482,41484],[16,41295,41296,41297,41300],{},"Welcome to the first installment of Coffee and Code with me, ",[23,41298,8258],{"href":196,"rel":41299},[101],". It's a little insight into what I was up to this week, things I found interesting and anything on my radar for the upcoming week. I will try and keep these pretty short and digestible. So if you don't have a cup of coffee go and grab one and if you do, let's get to it.",[28,41302,34167],{"id":34166},[33,41304,41305],{"id":40735},[161,41306,40738],{},[16,41308,41309],{},"This week I ran my very first live stream and while I was a little bit nervous I was really happy with the way everything turned out. I have been saying for a while now that I wanted to start live streaming and I finally stopped coming up with excuses and jumped right in. I want to thank all of you who took time out of your day to join me. It is much easier to do these live sessions with an interactive audience.",[16,41311,41312],{},"In this live stream, I started by giving the current state of web application architecture types. Then we dove into what static site generators are and spent a little bit of time on what the \"JAM Stack\" is.",[16,41314,41315],{},"Finally, we wrapped up by looking at a VueJS static site generator called Gridsome. This is the framework I used to build my new site and I have been impressed with it. I walked you through setting up your first Gridsome site and I showed you the start of how you could build your own blog.",[16,41317,41318,41319,184],{},"If you weren't able to make the live stream the ",[23,41320,41323],{"href":41321,"rel":41322},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=UEBTiMpvgas",[101],"recording is posted on YouTube",[33,41325,41326],{"id":33641},[161,41327,40489],{},[16,41329,41330,41331,41336],{},"This week I also ",[23,41332,41335],{"href":41333,"rel":41334},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002F2019\u002F07\u002F23\u002Fwebsite-new-features-improvements",[101],"wrote an article"," on new features and improvements to my website. These were a series of new features that I have been working on and I was excited to get these out there.",[28,41338,34253],{"id":34252},[16,41340,41341],{},"I am still working on a schedule for live streaming but here are a few topics I have in mind.",[1271,41343,41344,41347,41350,41353],{},[1274,41345,41346],{},"Adding a Newsletter archive to my website",[1274,41348,41349],{},"Building a Gridsome Starter with my blog theme",[1274,41351,41352],{},"Vuex Intro",[1274,41354,41355],{},"Vue Function Based Component API",[16,41357,41358],{},"If you have an idea for something you would like to see me cover in a live stream please feel free to reach out to me.",[28,41360,21516],{"id":10953},[16,41362,33891],{},[33,41364,34263],{"id":11452},[1271,41366,41367],{},[1274,41368,41369],{},[23,41370,41373],{"href":41371,"rel":41372},"https:\u002F\u002Fscotch.io\u002Ftutorials\u002Fbuilding-an-animal-adoption-site-with-node-and-vue-part-1",[101],"Building an Animal Adoption Site with Node and Vue - Part 1",[33,41375,31],{"id":30},[1271,41377,41378,41385],{},[1274,41379,41380],{},[23,41381,41384],{"href":41382,"rel":41383},"https:\u002F\u002Fvimeo.com\u002F348717993",[101],"Sarah Drasner on Let's Write a Vue App From Scratch",[1274,41386,41387],{},[23,41388,41391],{"href":41389,"rel":41390},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=g9bSmxnx-O0",[101],"CJ on Build a Hacker New Client with the Vue 3 Function Based Component API",[33,41393,974],{"id":973},[1271,41395,41396,41402,41409],{},[1274,41397,41398],{},[23,41399,41401],{"href":41231,"rel":41400},[101],"New awesomeness coming in Vue.js 3.0",[1274,41403,41404],{},[23,41405,41408],{"href":41406,"rel":41407},"https:\u002F\u002Fdevchat.tv\u002Fviews-on-vue\u002Fvov-071-gridsome-with-gift-egwuenu\u002F",[101],"Gridsome with Gift Egwuenu",[1274,41410,41411],{},[23,41412,41415],{"href":41413,"rel":41414},"https:\u002F\u002Fwww.redhat.com\u002Fen\u002Fcommand-line-heroes\u002Fseason-3\u002Fcreating-javascript",[101],"Command Line Heroes: Season 3: Creating JavaScript",[33,41417,34339],{"id":16575},[1271,41419,41420,41427,41434],{},[1274,41421,41422],{},[23,41423,41426],{"href":41424,"rel":41425},"https:\u002F\u002Fgithub.com\u002Fhugomd\u002Fparrot.live",[101],"curl parrot.live",[1274,41428,41429],{},[23,41430,41433],{"href":41431,"rel":41432},"https:\u002F\u002Fwww.notion.so\u002Fdanvega\u002FCoffee-Code-1-07-28-2019-cfc553c3953a4e989688ceb9942d511b#9a65ac73276a474cba39d96959c1bd22",[101],"vue-function-api",[1274,41435,41436],{},[23,41437,41440],{"href":41438,"rel":41439},"https:\u002F\u002Fgithub.com\u002Fu3u\u002Fvue-hooks",[101],"vue-hooks",[33,41442,28365],{"id":25700},[1271,41444,41445,41452],{},[1274,41446,41447],{},[23,41448,41451],{"href":41449,"rel":41450},"https:\u002F\u002Fwww.leveluptutorials.com\u002Ftutorials\u002Fdev-tools-and-debugging",[101],"Level Up Tutorials: DevTools & Debugging",[1274,41453,41454],{},[23,41455,41458],{"href":41456,"rel":41457},"https:\u002F\u002Fegghead.io\u002Fcourses\u002Fjavascript-es2019-in-practice",[101],"Egghead.io: JavaScript ES2019 in Practice",[33,41460,22045],{"id":13856},[1271,41462,41463],{},[1274,41464,41465,41469],{},[23,41466,41468],{"href":27780,"rel":41467},[101],"JavaScript & Friends"," August 02, 2019",[33,41471,37649],{"id":37648},[16,41473,40833],{},[16,41475,41476],{},[23,41477,41478],{"href":41478,"rel":41479},"https:\u002F\u002Ftwitter.com\u002Fchrisoncode",[101],[28,41481,172],{"id":171},[16,41483,40216],{},[16,41485,9630,41486,191],{},[189,41487],{},{"title":200,"searchDepth":201,"depth":201,"links":41489},[41490,41494,41495,41504],{"id":34166,"depth":201,"text":34167,"children":41491},[41492,41493],{"id":40735,"depth":206,"text":40738},{"id":33641,"depth":206,"text":40489},{"id":34252,"depth":201,"text":34253},{"id":10953,"depth":201,"text":21516,"children":41496},[41497,41498,41499,41500,41501,41502,41503],{"id":11452,"depth":206,"text":34263},{"id":30,"depth":206,"text":31},{"id":973,"depth":206,"text":974},{"id":16575,"depth":206,"text":34339},{"id":25700,"depth":206,"text":28365},{"id":13856,"depth":206,"text":22045},{"id":37648,"depth":206,"text":37649},{"id":171,"depth":201,"text":172}]