Devoxx
Devoxx
  • Видео 3 578
  • Просмотров 17 877 268
[VDTRIESTE24] Open sourcing a library: how hard can that be? - Conference by Johan Hutting
Open sourcing your code seems easy these days: you pick an appropriate license, select a free hosting service that fits your needs, upload the code and interact with the community. Libraries however pose some interesting challenges: your consumers and dependencies change, you'll need to submit it to a repository and the added need for proper documentation.
In this talk we'll cover the benefits of open sourcing your library as well as the steps you'll need to take using a real-world example. We'll also cover some of the added challenges you'll face such as releasing to Maven central, keeping your code up to date and secure as well as the altered consumers of your code. We'll walk through su...
Просмотров: 499

Видео

[VDTRIESTE24] Fail your tasks successfully - Flash Talk by Borut Jogan
Просмотров 4047 часов назад
In our day-to-day activities we learn how to manage code, machines, and processes, collaborate with our colleagues, deal with clients, and comply with requests from our company and managers. But sometimes life can be overwhelming. Other factors, like anxiety or depression, can step in and make us feel like our work and life are impossible to handle. In this talk, I will offer practical advice o...
[VDTRIESTE24] Server Components are React's superweapon in the Stack Wars - by Edoardo Dusi
Просмотров 2977 часов назад
In this talk, we're going to have a little fun with the React community by revealing a secret: React has always had a plan to eliminate PHP from the world, and now we see the final superweapon! We'll dive into the world of React Server Components, exploring their origins, their impact on web development, and the obvious similarities between this (relatively) new pattern and PHP. Through a techn...
[VDTRIESTE24] Unleashing the Power of Vector Search and Semantic Caching in Java - by Luigi Fugaro
Просмотров 3987 часов назад
Vector databases are redefining data handling, enabling semantic searches across text, images, and audio encoded as vectors. Redis OM for Java simplifies this innovative approach, making it accessible even for those new to vector data. This presentation explores the cutting-edge features of vector search and semantic caching in Java, highlighting the Redis OM library through a demonstration app...
[VDTRIESTE24] Wear glasses with NodeJS, Puppeteer, and Chrome - Conference by Vincenzo D'Amore
Просмотров 1367 часов назад
Step into a world where innovation meets elegance, where the quest for the perfect pair of glasses is transformed into an enchanting digital experience. The Virtual-Try-On is capable to digitally wear glasses on customer faces using a simple user photo. The talk explores the innovative application of NodeJS, Puppeteer and Google Chrome to create this Virtual-Try-On solution. The speaker delves ...
[VDTRIESTE24] Getting Started with Architectural Decision Records - Conference by Antonio Dell'Ava
Просмотров 5697 часов назад
In the ever-evolving landscape of software development, making sound architectural decisions is crucial for long-term project success. Architectural Decision Records (ADRs) provide a systematic approach to documenting, communicating, and evolving these decisions. This talk delves into the core concepts of ADRs, guiding you through the process of implementing and utilizing them effectively. We'l...
[VDTRIESTE24] Building a Video Player from Scratch with React Native - Conference by Omar Diop
Просмотров 2087 часов назад
Join me for a 4-year retrospective as we explore the lessons learned from building a video player from scratch with React Native. I'll share insights, pitfalls, and key takeaways from this development journey. We'll explore essential considerations before diving into custom video player development with React Native, including challenges like background audio management, platform nuances betwee...
[VDTRIESTE24] Debugging with IntelliJ IDEA - Tools-in-action by Vitaly Bragilevsky
Просмотров 5937 часов назад
Historically, debuggers are used to help locate and fix bugs. Nowadays, the debugger in IntelliJ IDEA can help you do much more than that. Let's see how the debugger helps make the development process more productive. I demo various features for debugging Java applications, including not-so-standard ones, like: * Lambda breakpoints * Stream chain tracing * Dropping the frame * Emulated method b...
Three Principles To Bring Your Legacy Code Into the Future by Roland Weisleder
Просмотров 65814 часов назад
Although developers know the best practices for good code, I keep seeing some fresh code that is the exact opposite: difficult to understand, with unexpected side effects, not documented, insufficiently tested. This becomes a problem once we have to change this code again to add new features or to fix bugs. In addition to the effort to make the actual change, we still have to invest time to und...
A fun and absurd introduction to Vector Databases by Alexander Chatzizacharias
Просмотров 82514 часов назад
Vector databases have emerged as an exciting new tech in the world of data storage. Unsurprisingly enough, they have become the go-to choice for storing vectors (who would have thought?!) and are widely used in conjunction with generative AI. Apart from their use in AI applications, they can also be extremely handy as search engines, especially if you are looking to implement natural language i...
TDD & DDD from the Ground Up Live Coding by Chris Simon
Просмотров 14 тыс.14 часов назад
Are you interested in using Domain-Driven Design (DDD) to create maintainable and scalable software, but not sure how to get started? Or perhaps you've heard that DDD is only suitable for complex domains - and when starting out, you're not sure if your project will need it? Join me for a live coding demonstration that will show you how to apply Test-Driven Development (TDD) from the very beginn...
Fighters, Bards, Druids and Wizards in It - how to talk to them? by Paweł Zajączkowski
Просмотров 13214 часов назад
Fighters, Bards, Druids and Wizards in It - how to talk to them? by Paweł Zajączkowski
From Zero to Hero: Conquering Your DXP with Low Code Kung Fu by Tim Braun
Просмотров 11114 часов назад
From Zero to Hero: Conquering Your DXP with Low Code Kung Fu by Tim Braun
Java 22 and Beyond: A Roadmap of Innovations by Ana-Maria Mihalceanu
Просмотров 47714 часов назад
Java 22 and Beyond: A Roadmap of Innovations by Ana-Maria Mihalceanu
Durable Execution: The Next Leap for Microservices Architectures by Giselle van Dongen
Просмотров 43814 часов назад
Durable Execution: The Next Leap for Microservices Architectures by Giselle van Dongen
Dapr in Practice by Marc Klefter
Просмотров 22514 часов назад
Dapr in Practice by Marc Klefter
Java meets AI: Build LLM-Powered Apps with LangChain4j by Lize Raes
Просмотров 39914 часов назад
Do you want to build applications powered by Large Language Models (LLMs) using Java? We built LangChain4j exactly for that! The framework allows you to easily create AI-powered chatbots, process loads of unstructured data, and automate processes with the help of AI Services, that can use various tools: call APIs, access databases, and even dynamically execute generated code. You will get a han...
Implementing Kubernetes operators in Java with Micronaut by Álvaro Sánchez-Mariscal Arnaiz
Просмотров 34714 часов назад
Micronaut is a modern, JVM-based, full stack Java framework designed for building modular, easily testable JVM applications. Micronaut supports a wide range of technologies, one of which is Kubernetes, allowing application developers to write cloud-native applications that are to be deployed on a Kubernetes cluster, and can benefit from features such as distributed configuration and service dis...
Introduction to confidential computing - protecting sensitive workloads by Fabien Petitcolas
Просмотров 22314 часов назад
Introduction to confidential computing - techniques aimed at protecting sensitive workloads on public ‘cloud’ Confidential computing refers to a set of techniques and technologies designed to protect sensitive data while they are being processed, specifically during computation within microprocessors. The primary goal of confidential computing is to ensure that data remain encrypted and protect...
AI Orchestration with Semantic Kernel by Soham Dasgupta
Просмотров 17314 часов назад
Semantic Kernel is an open-source SDK that combines AI services such as OpenAI, Azure OpenAI, and Hugging Face, enabling developers to create AI apps by integrating them with their existing code. It supports Java, Python, and C# and offers connectors for adding memories and AI services to simulate the "brain" of the application. Additionally, AI plugins can be added as the "body" of the app. Th...
Getting Unstuck Strategies for Surviving in a Rapidly Changing Post-Agile World - Sander Hoogendoorn
Просмотров 10714 часов назад
Getting Unstuck Strategies for Surviving in a Rapidly Changing Post-Agile World - Sander Hoogendoorn
Mastering RAG and Vector Search with Elastic by Evelien Schellekens
Просмотров 14714 часов назад
Mastering RAG and Vector Search with Elastic by Evelien Schellekens
Hitting the “refresh” button on your Spring web application by Stéphane Nicoll
Просмотров 15614 часов назад
Hitting the “refresh” button on your Spring web application by Stéphane Nicoll
Clean Code in AI era by Jonathan Vila
Просмотров 19814 часов назад
Clean Code in AI era by Jonathan Vila
SELECT 'amazing features' FROM "postgresql" by Kevin Davin
Просмотров 37614 часов назад
SELECT 'amazing features' FROM "postgresql" by Kevin Davin
Building Lean Spring Boot Applications for the Cloud by Patrick Baumgartner
Просмотров 21414 часов назад
Building Lean Spring Boot Applications for the Cloud by Patrick Baumgartner
Docker and Legal Compliance: Navigating the Containerized World by Antoine Thomas
Просмотров 10014 часов назад
Docker and Legal Compliance: Navigating the Containerized World by Antoine Thomas
Platform Engineering: Raise the Level of Abstraction using Kubernetes Operators by Tom De Wolf
Просмотров 15614 часов назад
Platform Engineering: Raise the Level of Abstraction using Kubernetes Operators by Tom De Wolf
Keynote: Coding Tomorrow by Lize Raes
Просмотров 15714 часов назад
Keynote: Coding Tomorrow by Lize Raes
Will AI replace All coders? by Gerasimos Michalitsis
Просмотров 23014 часов назад
Will AI replace All coders? by Gerasimos Michalitsis

Комментарии

  • @gniitwala3807
    @gniitwala3807 2 часа назад

    can i get code or github repo

  • @mediahost2243
    @mediahost2243 5 часов назад

    Good Talk

  • @pablon3115
    @pablon3115 12 часов назад

    Thank you for the talk. It helped me a lot to finally understand Collection API.

  • @pavloskairis9994
    @pavloskairis9994 14 часов назад

    excellent presentation, thank you Dr. ast

  • @devenwen4368
    @devenwen4368 15 часов назад

    Great talk, this talk is a excellent as a crash course for TDD.

  • @Nick-yd3rc
    @Nick-yd3rc 20 часов назад

    Awesome talk, thanks!🎉

  • @RealEyes24
    @RealEyes24 20 часов назад

    not every programmer is anti social...

  • @Rave_believe
    @Rave_believe 23 часа назад

    a great overview. understand his fear. he can improve

  • @drugsbunny_8641
    @drugsbunny_8641 День назад

    thats amazing!

  • @TheSqdf
    @TheSqdf День назад

    Really good video!!

  • @mr_possible6197
    @mr_possible6197 2 дня назад

    Very useful, Thankyou Vitaly

  • @grousemoriarty
    @grousemoriarty 2 дня назад

    stupids think contianers n auto scaling are good ideas lol same who think agiel n devops are good ideas LOL

  • @Gregorysharkov
    @Gregorysharkov 2 дня назад

    That is the thing I am still failing to understand. Google positions BQ as a tool to develop reliable, fast data solutions with low time to market. They have spent so much time integrating so many external functionalities to SQL like model calls, streaming data support etc. But in the end all those things a tidiously hard to test and hence could be OK for quick prototyping, but when being exposed to production environment, they are so hard to scale, maintain and test... 😢 Thnka a lot for this talk. I can feel how much blood, sweat and tears behind it...

  • @guai9632
    @guai9632 2 дня назад

    looks like it's the only talk on devoxx not about ml. instant thumb up for that alone. would give another one for the content if I could

  • @IvanRandomDude
    @IvanRandomDude 2 дня назад

    Intellij IDEA really screams at me when I pass optional as method argument.

    • @ChrisSimonAu
      @ChrisSimonAu 2 дня назад

      Yes, the Java team recommends Optional is only used for return types. In return types, it is to make it explicit to the caller that they would need to handle a None case. For method arguments, they discouraged it, for a bunch of pragmatic reasons - if you google "java optional as method argument" there are some great stackoverflow discussions on the topic with for and against arguments. Personally, having familiarity in more functional languages, I'm very comfortable using a Maybe/Option type as an argument - but try to follow the Java recommendations/idiomatic approach in this demo. I actually don't recall using it as a method argument in this demo though - can you remind me where I may have done that?

    • @IvanRandomDude
      @IvanRandomDude 2 дня назад

      @@ChrisSimonAu 25:03

    • @ChrisSimonAu
      @ChrisSimonAu 2 дня назад

      ​@@IvanRandomDude Great catch - thanks so much! I think the Java idiomatic thing to do here would be to not pass an Optional<Room> in, and instead just pass in a Room and have the controller look like: Course newCourse = roomRepository.findById(courseRequest.getRoomId()) .map(r -> Course.includeInCatalog(courseRequest.getName(), r)) .orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST)); Keeping the functional/monadic style separate from the entity method. I'll update my repo for future demonstrations :)

  • @TheBearTN
    @TheBearTN 2 дня назад

    Great ✨

  • @LjuboThePro
    @LjuboThePro 2 дня назад

    Great talk!

  • @Daniel-wn2lw
    @Daniel-wn2lw 2 дня назад

    Great presentation on Devoxx Poland this year :D thx

  • @sagarrout007
    @sagarrout007 2 дня назад

    Nice stuff. Learnt first time breaking things makes more sense rather than doing in one go, as you rightly expressed about balance between testing vs implementation. I have one question,. how do you see REST (Resource) + DTO vs Domain... how they go or should go from your view ?

    • @ChrisSimonAu
      @ChrisSimonAu 2 дня назад

      Thanks! Great question - I think a DTO to define the payload of a REST resource request or response is a very useful pattern for at least 2 scenarios: 1. You want to have some private data on the domain model that you don't want exposed via the API 2. You want to ensure a consistent contract on the API but have the freedom to change your domain model. In this demo, it starts with just sending the domain model as the API response. However, the tests include their own copy of the API payload - so effectively, a DTO specifying the API Consumer expectation. If you modify the domain model such that it breaks the test, then that could be solved at that time by creating a DTO on the application isde and setting up a mapping.from the domain model. To further protect things, you should ensure the tests use 'strict' deserialisation - e.g. unexpected fields cause deserialisation failure.

  • @akankshagupta3687
    @akankshagupta3687 3 дня назад

    Great video ! Thank you 🙏🏻

  • @ArtavazdBalayan
    @ArtavazdBalayan 3 дня назад

    Great talk, thanks 🙏

  • @dfurmans
    @dfurmans 4 дня назад

    Great stuff! Very well done conducted and convey! savvy!!

  • @PhillipMaier-nv8lj
    @PhillipMaier-nv8lj 4 дня назад

    Honestly it is one of the most reliabe and fast sites, really trusted and worthy, many thanks to those responsible for this wonderful service

  • @Ezzedini
    @Ezzedini 4 дня назад

    cool, so this is like initilizr spring but for jhipster?

  • @PaulSebastianM
    @PaulSebastianM 4 дня назад

    I liked the demo but I can't help but feel that it's too much on the happy path which does not help show how TDD helps you course correct immediately when something doesn't feel right.

    • @ChrisSimonAu
      @ChrisSimonAu 4 дня назад

      Thanks for the comment - I agree - when I practice TDD in real life, it's much more of a winding route than this demo illustrates, with often more refactoring steps and sometimes backwards undos. However, with only 50 mins, my goal with this talk is to demonstrate 3 key things: 1. the value of the 'many more much smaller steps' approach to TDD 2. how approaches to domain modelling (such as event storming) can help with more valuable and simpler designs 3. how TDD as a general philosophy supports even large scale design changes To that end, each third of the talk is roughly about each point in sequence. And even then it feels like a very 'full' talk! But yes, I 100% agree with you and would love to do more demos that illustrate more 'real world TDD' :)

  • @OleguitoSwagbucks
    @OleguitoSwagbucks 4 дня назад

    fucking camera

  • @IlyaDenisov
    @IlyaDenisov 4 дня назад

    Nice presentation. By the way, shouldn't concurrency be handled by use of proper SQL transaction isolation level (I think Repeatable Read is what you need in that case)? And then if transaction commit failed because of the isolation level (meaning that some of the values you've read has been modified concurrently), you just execute your controller method (or a method in the enrollment service if all of the logic is there) once again from scratch.

    • @ChrisSimonAu
      @ChrisSimonAu 4 дня назад

      There are a number of technical mechanisms for "solving" the concurrency issue - transaction isolation level is potentially one, as are a variety of pessimistic and optimistic concurrency controls. They each have their tradeoffs, balancing throughput and waittimes. If one of those mechanisms was used, then as you point out, whichever way the concurrent activity is detected, the operation could be retried in a new transaction which would protect the business rule. In this case, cause one of the students to be told their enrolment was no longer possible. The point of that part of the talk wasn't really the particular mechanism but more to highlight that a deeper understanding of the domain can remove the concurrency risk all together - and lead to a better outcome as students are less likely to experience their enrolments failing and the education provider can service more students overall.

    • @IlyaDenisov
      @IlyaDenisov 4 дня назад

      @@ChrisSimonAu Sure thing :) I just wanted to share that locking / versioning doesn't have to be implemented by a programmer (as this implementation will then have to be maintained), instead - features of the components that are already part of the system (database) could be used to achieve the desired behavior.

    • @alexsmart2612
      @alexsmart2612 4 дня назад

      ​@@IlyaDenisov Yes, it is possible to use database as your concurrency control mechanism and that is typically fine for small projects and prototypes, but if your application scales, you run into problems. For instance, you start having some long running transactions and because you have put everything inside "@Transactional", you soon enough run into lock wait timeouts and deadlocks. Also, think about what happens if at some point, you want to introduce some caching into your application, so that not every single request hits the database. Now that task has become significantly more difficult because you were relying on your reads and updates being in the same transaction boundary for your application's correctness. I am not saying that your approach is always incorrect, but keep in mind that every design decision has consequences.

    • @IlyaDenisov
      @IlyaDenisov 4 дня назад

      ​@@alexsmart2612 Good point. Yet I think this aspect (concurrency handling for the feature) should evolve incrementally in the same way as other aspects of the app, so that initial implementation that is suitable for the described logic and project state, could be as simple as transaction isolation levels. That kind-of resonates with the idea behind TDD approach highligthed by Chris in the video - engineer will benefit from maintaining a balance by doing only a small reasonable step at a time, instead of trying to build THE ULTIMATE SYSTEM from the start :)

    • @alexsmart2612
      @alexsmart2612 4 дня назад

      ​@@IlyaDenisov Once you have a million loc project with infrastructure and business logic concerns spread all over the place, it is an expensive hole to crawl yourself out of. While I completely agree with the general principle of "maintaining a balance", for me optimistic locking, keeping small transaction boundaries etc fall well within that reasonable balance. It is not all that hard to implement and maintain even for junior developers (after a brief training period). That the resulting code is typically much simpler and easier to reason about is an added bonus.

  • @SerheyST-qb2ei
    @SerheyST-qb2ei 5 дней назад

    Hi. I'm a dreamer. I need some money to travel the road of life. Please donate to me crypto BNB bep20: 0xAD0992311909019aC7C3A094AbAB3da99BEd70C5 I need you Help🙏 Thank you!

  • @khmarbaise
    @khmarbaise 5 дней назад

    Really good and excelent talk. In particular explaining in very simple and easy way how event sourcing is working etc.

  • @TechTalksWeekly
    @TechTalksWeekly 5 дней назад

    Chris is an excellent speaker and this talk has been featured in the last issue of Tech Talks Weekly newsletter 🎉 Congrats!

  • @neotechfriend
    @neotechfriend 6 дней назад

    ❤ superb!

  • @cobrab1978
    @cobrab1978 6 дней назад

    I like the demo, but i have some questions. Why in your domain not appear Enrolment? And why the class Enrolment has studentId and courseId, and not has a instance of Student and a instance of Course? Thanks!!

    • @ChrisSimonAu
      @ChrisSimonAu 4 дня назад

      I'm not sure about the first question - there is an Enrolment entity, but it is in the Enroling vertical slice/feature folder. On the second question, I didn't have time to talk about the tradeoffs of those two approaches, but it's a good question. To start with, I find starting with IDs simpler as you can build up some of the functionality in this incremental style, even before the other entity exists. Later, when it does exist you could refactor to use a reference object instead of an ID - if it makes sense. As to why it might or might not make sense - this is a big topic that relates to transactional consistency boundaries (aka aggregates), lazy vs eager loading and read vs write models. It's hard to summarise in a youtube comment but if you google "ddd reference object vs Id" you will find much discussion about it! In particular google "vaughn Vernon aggregate design rule 3" which should turn up some papers that take an in depth look at this pattern.

    • @KrycekA
      @KrycekA 4 дня назад

      If you apply DDD “by the book” then it is not allowed for one aggregate root to keep a strong reference to another aggregate root. However, it is allowed to store the unique identifier of that other aggregate root (weak reference). In the demo of Chris, Student, Course and Enrollment are all separate aggregate roots I believe. It is also said that in a single transaction, your are not allowed to update multiple aggregate roots. If one would store a strong reference to another aggregate root; it would be possible to update multiple aggregate roots which thus violates the principle. If 1 aggregate is interested in changes that occur in another aggregate; you should implement domain events. The other aggregate root should have a domain event listener that reacts on those events in its own transaction. I hope that makes sense :)

    • @mateuszmazurczak1268
      @mateuszmazurczak1268 День назад

      "Why Enrolment has studentId and courseId instead of an instance of those classes" Because if you implement with instances your changes you apply are not atomic anymore and concurrent updates will be hard. Imagine someone at the same time changes something about course (e.g. professor updating curriculum) and student at the same moment updates his personal info. When both of them try to save, it will fail! Even though their updates have nothing to do with each other. Keeping them separated and only related by id, allows for smaller changes to reason about. Which is another pro of this solution, because the example is simple right now, but all of the software will get more and more complex, have more business cases. Having them together will make it complex to reason about each of them and we have limited brain capacity

  • @BUY_YOUTUB_VIEWS_378
    @BUY_YOUTUB_VIEWS_378 6 дней назад

    Great content! Really enjoyed watching this.

  • @parabolicps4766
    @parabolicps4766 6 дней назад

    Thanks for reminding me just how much Java sucks. From the core design fault of NullPointerExceptions to IfPresent() != IsPresent() one can only marvel at how much it's simultaneously under and over engineered. *Slow clap*

  • @TheCodeConnoisseur
    @TheCodeConnoisseur 6 дней назад

    Great demo

  • @Get_YT_Views.330
    @Get_YT_Views.330 6 дней назад

    Oh god

  • @digma1769
    @digma1769 6 дней назад

    Thanks for the mention:) We appreciate it!

  • @jaime7295
    @jaime7295 7 дней назад

    This talk is great!!

  • @GintsPolis
    @GintsPolis 10 дней назад

    You forgot about one arrow, from view to actions. That's when finishing to render some view, another action should take a place. Having actions go trough one dispatcher is also big advantage.

  • @DidierLoiseau
    @DidierLoiseau 10 дней назад

    1:17:55 on my machine the first run takes 3.5s (excluding compilation, just the loop), but subsequent runs take less than 2s.

  • @maddelasaikarthik7563
    @maddelasaikarthik7563 11 дней назад

    really good presentation.

  • @marcm3623
    @marcm3623 11 дней назад

    19:58 die einzige Sache bei der es um bounded contexte geht. 21:25 DDD = model Hypothesis 40:30

  • @silberwolfSR71
    @silberwolfSR71 12 дней назад

    Surprising how little engagement these in-depth talks are getting. So much valuable info in here, thank you!

  • @iplantevin
    @iplantevin 12 дней назад

    It's funny that with all the catching up to Kotlin they've done and plan to do (e.g. "paving the On Ramp"), Brian never mentions it aloud 😅 Good to see that going back to Java after writing mostly Kotlin since 2018 wouldn't be that much of a pain. What I'd miss most right now are nullable types and the more compact and powerful stdlib, especially for collections. But also the copy for data classes, which has no alternative with Java records yet, but gets mentioned by Brian as a WIP. I've seen some negativity about the STR template syntax, but my first impression is that introducing a generic TemplateProcessor interface is actually pretty neat. Finally, it was a joy to listen to Brian again. I think the last time I had the pleasure was at Devoxx 2019...

  • @vahidsadeghi5491
    @vahidsadeghi5491 13 дней назад

    It's the clearest presentation about the GC types.

  • @TedNienstedt
    @TedNienstedt 13 дней назад

    Anything recent or new happening with RIG?

  • @OganesBozoyan
    @OganesBozoyan 13 дней назад

    33:59 bro literally did it

  • @viraj_shetty
    @viraj_shetty 13 дней назад

    This is a gold mine of information. Thanks !

  • @gokukakarot6323
    @gokukakarot6323 14 дней назад

    Binary search

  • @mykolamorozov2099
    @mykolamorozov2099 14 дней назад

    Great presentation!