<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: David Marko</title>
    <description>The latest articles on Forem by David Marko (@dmarko484).</description>
    <link>https://forem.com/dmarko484</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F164116%2F4f954795-f7a5-47a5-a23e-af2493890db2.png</url>
      <title>Forem: David Marko</title>
      <link>https://forem.com/dmarko484</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dmarko484"/>
    <language>en</language>
    <item>
      <title>5 areas where Vaadin shines as LiveView implementation for Java</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Fri, 17 Feb 2023 07:30:00 +0000</pubDate>
      <link>https://forem.com/dmarko484/5-areas-where-vaadin-shines-as-liveview-implementation-for-java-io</link>
      <guid>https://forem.com/dmarko484/5-areas-where-vaadin-shines-as-liveview-implementation-for-java-io</guid>
      <description>&lt;p&gt;LiveView is a programming approach that allows developers to build interactive, real-time user interfaces for web applications. It was introduced as a part of the Phoenix web development framework for the Elixir programming language. There are LiveView implementations available for many popular languages, Java included. And we are talking about Vaadin here which exists for much longer and is much more mature than Phoenix LiveView.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ej9bgjw65gkkbf6r808.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ej9bgjw65gkkbf6r808.png" alt="Vaadin" width="122" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where Vaadin shines in areas LiveView programming is very famous?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.) Writing less code&lt;/strong&gt; — and I really mean much less than you would expect. No zillions of endpoints, no DTOs, mappers, JavaScript code. Your feelings will be like that you are developing a desktop application, though UI for the browser will be there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.) Both ways communication&lt;/strong&gt; — is it frontend triggering an action or is the backend receiving a message from pub/sub system? Vaadin will update the browser page to reflect the latest situation. You are not doing this — Vaadin does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.) Single language approach&lt;/strong&gt; — Java for backend and frontend development. And it's a huge thing. This means you don't need angular/react/vue developers, you have a single repository for the entire application, that simplifies overall deployment and long time maintenance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.) Automatic UI updates managed by Vaadin&lt;/strong&gt; — changes being done in backend code that relates to UI are automatically transformed into updated HTML and sent to frontend. Very efficient ‘diffed changes’ are communicated to frontend, push communication is also directly supported. And don't forget, it's Vaadin doing this for you as a silent servant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.) HTML transformed to Java objects&lt;/strong&gt; — you can use HTML templates but Java objects are better. Using Vaadin you use HTML in form of Java objects. You have Div() object available, and you can insert TextField() into it. Want to hide TextField in the browser? Just call textField.setVisible(false) … and Vaadin will remove textField from the browser page. Just simple as that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfl7tsc197hmm82cuzvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfl7tsc197hmm82cuzvz.png" alt="Example of Vaadin code: TextField and Button definitions" width="533" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Are you still with me? Nice. If you are interested in details and can get a whole idea of how you can use Vaadin in your new or existing projects, you are welcome to take part in this Udemy Course: “&lt;a href="https://www.udemy.com/course/fullstack-vaadin-14-23-practical-solutions/?referralCode=86634EA8983DEA9AB198" rel="noopener noreferrer"&gt;FullStack Vaadin (14–23+) — Practical Solutions&lt;/a&gt;”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzqjjw5fq7axtgr1hfcq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzqjjw5fq7axtgr1hfcq.webp" alt="Udemy course" width="229" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>vaadin</category>
      <category>spring</category>
    </item>
    <item>
      <title>Not a Vaadin developer, yet? Try to guess what this code is doing …</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Thu, 16 Feb 2023 07:30:00 +0000</pubDate>
      <link>https://forem.com/dmarko484/not-a-vaadin-developer-yet-try-to-guess-what-this-code-is-doing--59lp</link>
      <guid>https://forem.com/dmarko484/not-a-vaadin-developer-yet-try-to-guess-what-this-code-is-doing--59lp</guid>
      <description>&lt;p&gt;Are you a long-time Java developer using Spring-related tech stack? &lt;a href="https://vaadin.com/" rel="noopener noreferrer"&gt;Vaadin&lt;/a&gt; can bring a &lt;a href="https://medium.com/@dmarko484/5-areas-where-vaadin-shines-as-liveview-implementation-for-java-47e430740803" rel="noopener noreferrer"&gt;fresh brief of the air&lt;/a&gt; into your daily development routines.&lt;/p&gt;

&lt;p&gt;If you are not a Vaadin developer yet, take this as a quick exercise to understand, how Vaadin code is organized in a very efficient way.&lt;/p&gt;

&lt;p&gt;1) Our simple web browser UI contains label, text field, and button for submitting data to the backend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjk6v0l60hfvl7rq2pwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjk6v0l60hfvl7rq2pwy.png" alt="Image1" width="312" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) And here we go with implementation in pure Java code. Our Vaadin page is integrated into the SpringBoot project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkewxqjxj3mz3726rhk3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkewxqjxj3mz3726rhk3i.png" alt="Image2" width="565" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the code above says:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 1) We have a simple Java class that extends Vaadin&lt;/strong&gt; Div() object. It becomes Div (HTML) on the screen then.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 2) By using ‘Route’ annotation&lt;/strong&gt;, we make this page accessible from the browser by specifying this routing URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 3) We are in the SpringBoot project&lt;/strong&gt;, and we can inject other stuff here using Spring DI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 4) We create TextField&lt;/strong&gt;, and set a name, autofocus, and width. All this in plain java. Vaadin makes an HTML representation based on that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 5) Button is defined here with many specific properties&lt;/strong&gt;. Again, Vaadin will make an HTML representation for our page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 6) Some action is needed for our button&lt;/strong&gt;. So we defined a click listener. When the button is clicked in the browser, Vaadin makes sure, that this bubble-up to the backend and the correct listener is triggered for us. We are not doing that, Vaadin does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 7) Click listener pulls the value from TextField&lt;/strong&gt;. How does the value get from the browser to Java TextField object? Vaadin has done that for us when the button was clicked. Frontend and backend are in sync.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 8) When information is saved into a database&lt;/strong&gt;, we display a nice confirmation popup. Vaadin communicates this back to the browser and makes a small notification popup appear on the screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 9) We defined all around our TextField and Button&lt;/strong&gt;, let's add both to the Div() we started with.&lt;/p&gt;

&lt;p&gt;And that's all. Really, just one Java class. No HTML, no JavaScript, no endpoints, no custom Ajax calls, no DTOs. Just plain Java and the magic of Vaadin.&lt;/p&gt;

&lt;p&gt;Are you using &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt; ? You can add Vaadin as a dependency here directly. It's fully supported by SpringBoot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nhj9mvbjzk5k5vudk7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nhj9mvbjzk5k5vudk7h.png" alt="SpringStarter" width="624" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Are you still with me? Nice. If you are interested in details and can get a whole idea of how you can use Vaadin in your new or existing projects, you are welcome to take part in this Udemy Course: “&lt;a href="https://www.udemy.com/course/fullstack-vaadin-14-23-practical-solutions/?referralCode=86634EA8983DEA9AB198" rel="noopener noreferrer"&gt;FullStack Vaadin (14–23+) — Practical Solutions&lt;/a&gt;”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzqjjw5fq7axtgr1hfcq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzqjjw5fq7axtgr1hfcq.webp" alt="Udemy course" width="229" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>vaadin</category>
      <category>spring</category>
    </item>
    <item>
      <title>Not a Go LiveView developer yet? Try to guess what this code is doing, though.</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Wed, 15 Feb 2023 07:30:00 +0000</pubDate>
      <link>https://forem.com/dmarko484/not-a-go-liveview-developer-yet-try-to-guess-what-this-code-is-doing-though-5cd</link>
      <guid>https://forem.com/dmarko484/not-a-go-liveview-developer-yet-try-to-guess-what-this-code-is-doing-though-5cd</guid>
      <description>&lt;p&gt;My common practice for evaluating new technology, framework, or programming approach is based on the first feeling I have from the code presented. What is the cognitive effort to understand “the idea”? Things have to “look nice and be polished” in some way to convince me. I can still remember that overall ‘wow effect’ when seeing my first &lt;a href="https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html" rel="noopener noreferrer"&gt;Phoenix LiveView&lt;/a&gt; presentation a few years ago. Such a small amount of code and a great level of expressiveness so even not being a daily &lt;a href="https://elixir-lang.org/" rel="noopener noreferrer"&gt;Elixir&lt;/a&gt; developer make me an idea, of how this is supposed to work and what the code is doing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;LiveView implementation&lt;/a&gt; for Go raised the same type of feelings in me when I went through this for the first time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just make a quick review of the code below without seeing any other details:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ovwfi9c8zo1ph1y9pm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ovwfi9c8zo1ph1y9pm.webp" alt="Example" width="646" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is like we write stuff in Go LiveView implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 1)&lt;/strong&gt; In HTML we use tag attributes to specify LiveView-related actions. LiveView makes those things actually ‘live and working’, no other JS code is needed. We have defined LiveView click event here. In other words, we just said: “send ‘temp-up’ event back to backed, when this button is clicked in the browser”. LiveView detects this attribute in HTML and provides the appropriate actions that will make a backend call through the websocket. LiveView establishes a websocket connection to our backend when a web page is loaded in a browser for the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 2)&lt;/strong&gt; We reference variables from our backend model using Go Template syntax. LiveView keeps those values updated whenever the backend representation is changed. LiveView uses websocket push technology under the scene here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ad 3)&lt;/strong&gt; We tight ‘temp-up’ event front end is emitting to our backend handler. LiveView calls our handler whenever a ‘temp-up’ event is emitted. We can just rely on that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To learn more, you can take a look at my previous articles on LiveView here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dmarko484/mastering-liveview-development-in-golang-169f"&gt;Mastering LiveView development in GoLang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dmarko484/3-issues-liveview-development-in-go-resolve-efficiently-for-small-teams-2bn"&gt;3 issues LiveView development in Go resolve efficiently for small teams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are you still with me? Nice. If you are interested in details and want to get a whole idea of how you can use the LiveView programming approach in Go for your new or existing projects, you are welcome to take part in this new Udemy Course “&lt;a href="https://www.udemy.com/course/mastering-liveview-development-in-go-golang/?referralCode=17A93DEEFD7A2D0930CC" rel="noopener noreferrer"&gt;Mastering Live(View) development in Go&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa9tux43cqx11zrrx2z2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foa9tux43cqx11zrrx2z2.webp" alt="Udemy course" width="302" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>fiber</category>
      <category>gin</category>
    </item>
    <item>
      <title>7 years with Vaadin in production. Do we still enjoy it?</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Mon, 13 Feb 2023 07:30:00 +0000</pubDate>
      <link>https://forem.com/dmarko484/7-years-with-vaadin-in-production-do-we-still-enjoy-it-37ic</link>
      <guid>https://forem.com/dmarko484/7-years-with-vaadin-in-production-do-we-still-enjoy-it-37ic</guid>
      <description>&lt;p&gt;It’s been 7 years since we deployed our first &lt;a href="https://vaadin.com/"&gt;Vaadin&lt;/a&gt; app for production. The whole process has been more than interesting. We developed the application according to an analysis (several modules for the agenda in the field of local government) based on a verbal assignment. The customer started testing on our server and after 2 months found only 3 bugs and requested 2 modifications beyond the original brief. Once implemented, we installed at the customer’s site. The application started for the first time and is still running :-).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SW stack we have used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SpringBoot 1.5.x&lt;/li&gt;
&lt;li&gt;Vaadin 8.x&lt;/li&gt;
&lt;li&gt;MongoDB 3.x&lt;/li&gt;
&lt;li&gt;ElasticSearch 1.x&lt;/li&gt;
&lt;li&gt;Java 8 on Apache Tomcat 8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even after 7 years, the application is still running in the same configuration, we only updated the main versions of the individual software packages (there was no budget for doing more). After a successful deployment, the customer started using the application and apart from one small issue, we have not heard from them for more than a year. In fact, we thought the application was not being used much. We were even more surprised when we found out that the application was actively being used and the customer had not heard back as he had no problem with the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TG5M06Bp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/720/1%2A-jqk76lR_Rh9VQ8utPGCBw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TG5M06Bp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/720/1%2A-jqk76lR_Rh9VQ8utPGCBw.webp" alt="Love" width="720" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons we learned (from this and another Vaadin projects):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;quality of the initial development version was excellent.&lt;/strong&gt; Individual parts/modules were working as expected and no runtime memory leaks or whatever. We were actually very surprised at how stable &lt;a href="https://vaadin.com/"&gt;Vaadin&lt;/a&gt; is. In Vaadin everything is a Java object, so it's easy to avoid any typos and other inconsistencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;we haven't used any SW testing tool.&lt;/strong&gt; The entire application has been and still is, tested manually only. Having Java static typing, and no weak bindings like REST endpoints, surprisingly we have had very minimal issues. Most of them were caught by developers during initial development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;the application was created in the style of a “&lt;a href="https://medium.com/@dan_manges/the-modular-monolith-rails-architecture-fb1023826fc4"&gt;modular monolith&lt;/a&gt;”.&lt;/strong&gt; The entire application consists of 6 modules, we split those inside the SpringBoot application using Java packages in the same structure inside. We just followed some conventions we defined. (btw. have you heard about a recent Spring Modulith ?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;before being involved in Vaadin&lt;/strong&gt;, we used SpringBoot MVC with Thymeleaf templating. It was nice but not flexible for large forms with complex logic, with different buttons, fields visible only under some conditions, etc. We also used Angular, and many REST endpoints but it slowly became very difficult to maintain and synchronize the front-end development with the backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;we still do updates every year.&lt;/strong&gt; We are adding new modules or enhancing existing ones. If you don't see a code for around one year, it's generally not easy to get into it. But it's not the case with the &lt;a href="https://vaadin.com/"&gt;Vaadin&lt;/a&gt;. It's very easy to locate the form and button and it’s an onClick listener. Static typing of Java helps here a lot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Do we still enjoy it?&lt;/strong&gt;&lt;br&gt;
We are running many &lt;a href="https://vaadin.com/"&gt;Vaadin&lt;/a&gt; apps in production since that first one. If there are not any specific requirements we use a “modular monolith” concept, which fits our stack best. We pack applications as WAR and deploy them under &lt;a href="https://tomcat.apache.org/"&gt;Apache Tomcat&lt;/a&gt;. And yes, we enjoy the development process. It’s very straightforward and Vaadin and SpringBoot fit together well.&lt;/p&gt;

&lt;p&gt;If you are successful enough, you will slowly switch the app into long time maintenance mode. From time to time a customer comes back and requests some changes or additions. Keeping the entire stack small helps here a lot. It's easy to find the place that needs to be updated and see all in-place relationships/dependencies, &lt;a href="https://spring.io/projects/spring-data-mongodb"&gt;SpringData&lt;/a&gt; provides data to our Vaddin components directly, and SpringSecurity covers all logins/permissions requirements. Everything is under your control.&lt;/p&gt;

&lt;p&gt;Are you still with me? Nice. If you are interested in details and can get a whole idea of how you can use Vaadin in your new or existing projects, you are welcome to take part in this Udemy Course: “&lt;a href="https://www.udemy.com/course/fullstack-vaadin-14-23-practical-solutions/?referralCode=86634EA8983DEA9AB198"&gt;FullStack Vaadin (14–23+) — Practical Solutions&lt;/a&gt;”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0xwLvMLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/proxy/1%2AxOYuYidbmzpTTkk3j3nTlw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0xwLvMLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/proxy/1%2AxOYuYidbmzpTTkk3j3nTlw.webp" alt="Udemy course" width="229" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>vaadin</category>
      <category>spring</category>
    </item>
    <item>
      <title>3 issues LiveView development in Go resolve efficiently for small teams</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Thu, 02 Feb 2023 14:56:13 +0000</pubDate>
      <link>https://forem.com/dmarko484/3-issues-liveview-development-in-go-resolve-efficiently-for-small-teams-2bn</link>
      <guid>https://forem.com/dmarko484/3-issues-liveview-development-in-go-resolve-efficiently-for-small-teams-2bn</guid>
      <description>&lt;p&gt;If you are a freelancer or working in a small development team, you are probably aware of many related benefits. &lt;a href="https://betterprogramming.pub/is-a-one-person-development-team-optimal-f8aca9872ccc" rel="noopener noreferrer"&gt;Many good articles&lt;/a&gt; reference different research outcomes on that topic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We can mention just a few useful things that help small teams with sustainable software development.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an easy-to-understand implementation supporting a long-time software maintenance&lt;/li&gt;
&lt;li&gt;complex features implemented with less code&lt;/li&gt;
&lt;li&gt;using one development language (Go in this case) as much as possible&lt;/li&gt;
&lt;li&gt;using a limited amount of familiar technologies because whatever you use in your project, you will have to maintain for years&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazytvavdrtf17ssvj2h2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazytvavdrtf17ssvj2h2.webp" alt="Small teams" width="634" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here it is, where LiveView programming concepts help us in a great way. &lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;LiveView&lt;/a&gt; uses websockets to create a persistent connection between the client and the server, which enables the server to push updates to the client in real-time. This allows developers to build interactive user interfaces that can update dynamically in response to user actions or changes in the application state, without the need for traditional page reloads or AJAX requests. LiveView programming style is based on this excellent Live project that is an implementation of the LiveView approach in Go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://medium.com/@dmarko484/mastering-liveview-development-in-golang-5fdae1ebba2c" rel="noopener noreferrer"&gt;LiveView programming style&lt;/a&gt; can bring a significant boost in at least 3 key areas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smaller codebase (less code)&lt;/strong&gt; — the entire LiveView abstraction and internal implementation require less code for implementing a complex frontend to backend communication. No REST endpoints are needed, almost no JavaScript is needed, and no DTOs and converters are needed as all is being done in a backend. Browser-to-backend communication goes through the websocket and is fully managed by the LiveView library. We just rely on facts, that things just work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Go language only&lt;/strong&gt; — as much as possible — most of the tasks providing communication between frontend and backend are managed by &lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;Live&lt;/a&gt; internally. We use Go for updating UI stuff, the codebase is in one place and there is no need for endpoints, DTOs, ajax calls, etc. We don't need Angular/React or Vue developers in a team.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqva2pjp7mo8gmkbvryvn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqva2pjp7mo8gmkbvryvn.webp" alt="Live" width="107" height="51"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy to understand code&lt;/strong&gt; — declarative approach — LiveView programming and implementation approach are sort of declarative. We define LiveView browser actions(events) as HTML tag attributes and LiveView provides instrumentation for making it live.&lt;br&gt;
On the backend side, we are implementing event handlers in a declarative way also, and Live is responsible for internal routing so the appropriate event handler is called when the user triggers a button on the screen. (to be honest, you don't need to know anything about websockets to use LiveView programming)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5jw2oe60rsver5fwsnx.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5jw2oe60rsver5fwsnx.webp" alt="Template" width="716" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbpmb2s1o4qgi7hq5gi9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbpmb2s1o4qgi7hq5gi9.webp" alt="Code" width="368" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are a long-time developer, part of your job is to maintain existing applications running successfully for years. Understanding how the flow is going, and being able to fix something or add a new feature quickly is a key thing. LiveView programming approach is a real game changer here for the last couple of years and is available in Go now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Several useful links for supporting/explaining a LiveView idea:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@dmarko484/mastering-liveview-development-in-golang-5fdae1ebba2c" rel="noopener noreferrer"&gt;https://medium.com/@dmarko484/mastering-liveview-development-in-golang-5fdae1ebba2c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://elixirschool.com/blog/phoenix-live-view/" rel="noopener noreferrer"&gt;https://elixirschool.com/blog/phoenix-live-view/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fly.io/blog/liveview-its-alive/" rel="noopener noreferrer"&gt;https://fly.io/blog/liveview-its-alive/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;https://github.com/jfyne/live&lt;/a&gt; (Go implementation of LiveApproach)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are you still with me? Nice. If you are interested in details and can get a full idea how you can use Live View programming approach in Go, you are welcome to take a part in this new Udemy Course "&lt;a href="https://www.udemy.com/course/mastering-liveview-development-in-go-golang/?referralCode=17A93DEEFD7A2D0930CC" rel="noopener noreferrer"&gt;Mastering Live(View) development in Go&lt;/a&gt;" .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9u2jwpk3c1qq8ugxd0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9u2jwpk3c1qq8ugxd0r.png" alt="Course image" width="302" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>Mastering LiveView development in GoLang</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Thu, 19 Jan 2023 13:35:55 +0000</pubDate>
      <link>https://forem.com/dmarko484/mastering-liveview-development-in-golang-169f</link>
      <guid>https://forem.com/dmarko484/mastering-liveview-development-in-golang-169f</guid>
      <description>&lt;p&gt;LiveView is a programming approach that allows developers to build interactive, real-time user interfaces for web applications. It was introduced as a part of the Phoenix web development framework for the Elixir programming language. There are LiveView implementations available for many popular languages and web frameworks, &lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;Go included&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;LiveView uses websockets to create a persistent connection between the client and the server, which enables the server to push updates to the client in real-time. This allows developers to build interactive user interfaces that can update dynamically in response to user actions or changes in the application state, without the need for traditional page reloads or AJAX requests.&lt;/p&gt;

&lt;p&gt;In GoLang world, LiveView applications are built using a combination of Go code on the server and HTML and CSS on the client. The server-side Go code is responsible for rendering the HTML template, handling user input, and updating the client with new data as needed. The client-side code handles tasks such as rendering the user interface and handling user interactions. (this part is fully managed by LiveView implementation)&lt;/p&gt;

&lt;p&gt;Overall, the LiveView programming approach is designed to make it easier for developers to build real-time, interactive web applications, while still allowing them to leverage the benefits of a server-side architecture.&lt;/p&gt;

&lt;p&gt;Let’s take a look on how simple ‘Live Counter’ Go example can look like. For LiveView Go implementation we are using &lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;Live&lt;/a&gt; project hosted on Github. Screenshot below contains full Live(View) application integrated with &lt;a href="https://gofiber.io/" rel="noopener noreferrer"&gt;Fiber Framework&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4zg2ibophsg5hpk736.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4zg2ibophsg5hpk736.png" alt="Live Application" width="800" height="949"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key implementation parts include:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dependency definition&lt;/li&gt;
&lt;li&gt;Model definition&lt;/li&gt;
&lt;li&gt;Application 'Mount' entry point implementation&lt;/li&gt;
&lt;li&gt;Counter click event implementation&lt;/li&gt;
&lt;li&gt;Fiber application setup + Live part included&lt;/li&gt;
&lt;li&gt;We can still use an endpoints implemented in Fiber way.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;And our template snippet looks like this:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplirhslpttds128dj5ib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplirhslpttds128dj5ib.png" alt="Template" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Button with Live click listener emitting 'value-change' events&lt;/li&gt;
&lt;li&gt;Keyboard connected event trigger&lt;/li&gt;
&lt;li&gt;And we display Counter value using standard Go HTML template syntax&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go &lt;a href="https://github.com/jfyne/live" rel="noopener noreferrer"&gt;Live&lt;/a&gt; project provides real-time user experiences with server-rendered HTML completely in Go. Inspired by and borrowing from Phoenix LiveViews, Live is intended as a replacement for React, Vue, Angular etc. You can write an interactive web apps just using Go and its templates. The structures provided in this package are compatible with net/http, so will play nicely with middleware and other frameworks. But integrations with other frameworks like &lt;a href="https://gofiber.io/" rel="noopener noreferrer"&gt;Fiber&lt;/a&gt; exist as well.&lt;/p&gt;

&lt;p&gt;If you are interested in details and can get a full idea how you can use Live View programming approach in Go, you are welcome to take a part in this new Udemy Course "&lt;a href="https://www.udemy.com/course/mastering-liveview-development-in-go-golang/?referralCode=17A93DEEFD7A2D0930CC" rel="noopener noreferrer"&gt;Mastering Live(View) development in Go&lt;/a&gt;" .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9u2jwpk3c1qq8ugxd0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9u2jwpk3c1qq8ugxd0r.png" alt="Course image" width="302" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>fiber</category>
      <category>gin</category>
    </item>
    <item>
      <title>Vaadin 23: Integration with SpringBoot can boost your development speed</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Sun, 15 Jan 2023 07:10:18 +0000</pubDate>
      <link>https://forem.com/dmarko484/vaadin-23-integration-with-springboot-can-boost-your-development-speed-41lf</link>
      <guid>https://forem.com/dmarko484/vaadin-23-integration-with-springboot-can-boost-your-development-speed-41lf</guid>
      <description>&lt;p&gt;Vaadin is a Java framework for building web applications. It allows developers to build web applications using Java code instead of JavaScript, HTML, and CSS. Vaadin provides a set of pre-built UI components and tools for creating responsive and interactive user interfaces. It also includes a server-side architecture for handling browser-server communication and an API for building client-side logic. Vaadin is open-source and can be used with any Java application server or servlet container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You might be interested in Vaadin, if you are existing SpringBoot developer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vaadin and Spring Boot are both Java frameworks, but they are used for different purposes.&lt;/p&gt;

&lt;p&gt;Vaadin is a framework for building web applications, specifically for creating user interfaces. It provides a set of pre-built UI components and tools for creating responsive and interactive user interfaces. It also includes a server-side architecture for handling browser-server communication and an API for building client-side logic.&lt;/p&gt;

&lt;p&gt;Spring Boot, on the other hand, is a framework for building web applications based on the Spring framework. It provides a set of tools for setting up and configuring a Spring application, including an embedded web server, database connection, and security. Spring Boot also makes it easy to build and run stand-alone, production-grade Spring-based applications.&lt;/p&gt;

&lt;p&gt;In summary, Vaadin is a Java web framework that focuses on building UI and client-side logic, while Spring Boot is a Java framework that focuses on building server-side applications using the Spring framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna9tecxjrcco8oiwx789.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fna9tecxjrcco8oiwx789.jpg" alt="Vaadin 23: Integration with SpringBoot can boost your development speed" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You could use Vaadin to build the front-end and use Spring Boot for the back-end of your web application. They are not mutually exclusive, Vaadin application can run on Spring Boot and Spring Boot can be used to expose vaadin as a web application.&lt;/p&gt;

&lt;p&gt;Sure! Here is an example of a simple Vaadin application that displays a button and a label. When the button is clicked, the label text is updated to say “Button was clicked!”.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.PWA;

@Route
@PWA(name = "My Vaadin Application", shortName = "Vaadin App")
public class MainView extends VerticalLayout {
    public MainView() {
        Label label = new Label("Button has not been clicked yet.");
        Button button = new Button("Click me", e -&amp;gt; label.setText("Button was clicked!"));        add(button, label);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example uses a VerticalLayout to arrange the button and label vertically on the page. The &lt;a class="mentioned-user" href="https://dev.to/route"&gt;@route&lt;/a&gt; annotation tells Vaadin to use this class as the root view of the application. The &lt;a class="mentioned-user" href="https://dev.to/pwa"&gt;@pwa&lt;/a&gt; annotation tells Vaadin to create a Progressive Web App.&lt;/p&gt;

&lt;p&gt;The button is created with a click listener, which updates the text of the label when the button is clicked.&lt;/p&gt;

&lt;p&gt;You can run this application with a servlet container such as Apache Tomcat or Jetty, or with a framework like Spring Boot.&lt;/p&gt;

&lt;p&gt;Please note that this is a very basic example and in real world applications, you should use some kind of dependency injection and a separation of concerns in the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interested in more details?&lt;/strong&gt;&lt;br&gt;
You are welcome to take part in Udemy Course …&lt;br&gt;
&lt;a href="https://www.udemy.com/course/fullstack-vaadin-14-23-practical-solutions/?referralCode=86634EA8983DEA9AB198" rel="noopener noreferrer"&gt;FullStack Vaadin (14–23+) — Practical Solutions — Vaadin 14–23+ — working with MongoDB, PDF, MS Excel, Vaadin Push, GridFS&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>vaadin</category>
      <category>spring</category>
    </item>
    <item>
      <title>Building PWA application using Vaadin framework - our stack and useful links</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Wed, 08 May 2019 05:09:15 +0000</pubDate>
      <link>https://forem.com/dmarko484/building-pwa-application-using-vaadin-framework-our-stack-and-useful-links-1nkl</link>
      <guid>https://forem.com/dmarko484/building-pwa-application-using-vaadin-framework-our-stack-and-useful-links-1nkl</guid>
      <description>&lt;p&gt;My plan is to build PWA application using &lt;a href="https://vaadin.com/pwa"&gt;Vaadin&lt;/a&gt; framework, but I'm supposed to build it on other's shoulders. So what my (full)stack is supposed to look like?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vaadin.com"&gt;Vaadin&lt;/a&gt; - engine for our app&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://spring.io/projects/spring-boot"&gt;Spring Boot&lt;/a&gt; - glue for everything&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jodd.org/"&gt;Jodd&lt;/a&gt; - I'm using this project long time as an excellent utilities stack&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://projectlombok.org/"&gt;Lombok&lt;/a&gt; - to write a less code&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gradle.org/"&gt;I'm a Gradle person&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/idea/"&gt;IntelliJ IDEA is my workplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gitlab.com/"&gt;GitLab&lt;/a&gt; - repository for my code is &lt;a href="https://gitlab.com/dmarko484/pwa-application-with-vaadin"&gt;located here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vaadin.com/pwa"&gt;PWA info on Vaadin web site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vaadin.com/docs/v13/flow/pwa/tutorial-pwa-introduction.html"&gt;PWA tutorial on Vaadin web site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://start.spring.io/"&gt;Spring Boot project starter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jodd.org/http/"&gt;HTTP client from Jodd library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vaadin Add-ons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vaadin.com/directory/component/app-layout-add-on"&gt;App Layout Add-on&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This page will be updated as proceeding with implementation.&lt;/p&gt;

</description>
      <category>vaadin</category>
      <category>pwa</category>
      <category>spring</category>
      <category>java</category>
    </item>
    <item>
      <title>Building PWA application using Vaadin framework</title>
      <dc:creator>David Marko</dc:creator>
      <pubDate>Wed, 08 May 2019 04:52:45 +0000</pubDate>
      <link>https://forem.com/dmarko484/building-pwa-application-using-vaadin-framework-15ib</link>
      <guid>https://forem.com/dmarko484/building-pwa-application-using-vaadin-framework-15ib</guid>
      <description>&lt;p&gt;This is an initial post of upcoming tutorial series that should serve as my personal reflection on building PWA application using &lt;a href="https://vaadin.com/"&gt;Vaadin&lt;/a&gt; framework. I'm using Vaadin for 5 years now since its version 7. My current systems are built using Vaadin 8 as migration to current version(Vaadin 13 is available now) is not quite simple for a complex code base. I have a several CRM and DMS like systems built and running in production using Vaadin 8 with quite success. Its very stable environment, contains very intuitive API and one can create very complex web applications with almost no JavaScript being used. Resulting application codebase is very comprehensive and lives in Java only. Best for fullstack developer. &lt;/p&gt;

&lt;p&gt;My development environment is based mainly on &lt;a href="https://spring.io/projects/spring-boot"&gt;Spring Boot&lt;/a&gt; and its excelent Vaddin integration. This allows me to use quite large tool infrastructure Spring Boot is surrounded with. &lt;/p&gt;

&lt;p&gt;My primary idea is to create PWA application using latest Vaadin 13 version that can be used as a counterpart for other existing CRM / DMS systems I run. This will cover several topics I have to deal with in some way. And this series is a way how to document this process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps supposed for building the application&lt;/strong&gt; (subject to change)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dmarko484/building-pwa-application-using-vaadin-framework-our-stack-and-useful-links-1nkl"&gt;preparing the stack - what we are going to use actually?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;create app skeleton&lt;/li&gt;
&lt;li&gt;create basic application UI structure&lt;/li&gt;
&lt;li&gt;going live for the first time - life behind SSL&lt;/li&gt;
&lt;li&gt;display data using app-layout addon&lt;/li&gt;
&lt;li&gt;create dummy backend simulating external system&lt;/li&gt;
&lt;li&gt;adding authentication&lt;/li&gt;
&lt;li&gt;going offline&lt;/li&gt;
&lt;li&gt;... next to come&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A GitLab repository with codebase used in this series is &lt;a href="https://gitlab.com/dmarko484/pwa-application-with-vaadin"&gt;located here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vaadin</category>
      <category>pwa</category>
      <category>spring</category>
      <category>java</category>
    </item>
  </channel>
</rss>
