<?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>DEV Community: Matti Vesa</title>
    <description>The latest articles on DEV Community by Matti Vesa (@mjvesa).</description>
    <link>https://dev.to/mjvesa</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%2F288901%2F9cae957d-655f-45df-875d-eac713341ac2.jpg</url>
      <title>DEV Community: Matti Vesa</title>
      <link>https://dev.to/mjvesa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mjvesa"/>
    <language>en</language>
    <item>
      <title>Twelve months of UI hacks</title>
      <dc:creator>Matti Vesa</dc:creator>
      <pubDate>Wed, 22 Jul 2020 15:33:00 +0000</pubDate>
      <link>https://dev.to/mjvesa/twelve-months-of-ui-hacks-3cc9</link>
      <guid>https://dev.to/mjvesa/twelve-months-of-ui-hacks-3cc9</guid>
      <description>&lt;p&gt;Being a part of the Tools team at Vaadin I often get interesting ideas that I want to try out outside the usual stream of product development. Here are some that I've done between July 2019 and July 2020.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sketch mode integration into Vaadin Designer
&lt;/h2&gt;

&lt;p&gt;Sketch Mode is a tool for free-form drawing of UIs. In this hack I integrated it into Vaadin Designer. The video shows how a layout can be sketched rather quickly.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xEtoJoCs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1167054717974921217/pu/img/aYOgx_Y2x1GhqIve.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Some time ago a quick integration of sketch mode into &lt;a href="https://twitter.com/hashtag/vaadin"&gt;#vaadin&lt;/a&gt; designer was done. At least one could create the basic element tree rather quickly. Would it be useful? 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      12:41 PM - 29 Aug 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1167054753160978432" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1167054753160978432" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1167054753160978432" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      0
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Designer Components
&lt;/h2&gt;

&lt;p&gt;Designer Components is an idea based on Sketch Mode where there are UI components and also "action" components that produce code. Each component has a custom editor for it, which allows great flexibility beyond the usual tree-and-attributes approach. The example shows how a trivial REST application can be created using Designer Components.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Designer Components is a minimal visual designer that is user extensible. In the video you a small app is created that loads HN article headlines trough REST. No programming required. Try it yourself &lt;a href="https://t.co/kd2ZNMY5SO"&gt;mjvesa.github.io/dc-editor&lt;/a&gt; Sources &lt;a href="https://t.co/VL2vQiPWan"&gt;github.com/mjvesa/dc&lt;/a&gt; &lt;a href="https://t.co/Hs6Ali4DGc"&gt;youtu.be/Az23rdNdJQc&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:45 AM - 30 Aug 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1167372745421860864" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1167372745421860864" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1167372745421860864" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      5
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Unide in Electron
&lt;/h2&gt;

&lt;p&gt;Sketch Mode was eventually integrated into Unide, a side project GUI builder application I've made. I also made it run using Electron, as is demonstrated in the following video.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EKS-m8N8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1173830497371414529/pu/img/4RAySjmAtSh6c_r6.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Next up for Unide: running locally using Electron. This will eventually enable one to use  Unide to create &lt;a href="https://twitter.com/hashtag/Java"&gt;#Java&lt;/a&gt; views for existing &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; projects. Check the video to see that the PoC phase is done and working. 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      05:26 AM - 17 Sep 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1173830517491425281" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1173830517491425281" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=1173830517491425281" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Flex box with Brute force
&lt;/h2&gt;

&lt;p&gt;While considering the various configurations of flex box layouts, it dawned on me that one could draw some boxes in some configuration and then use plain old brute force to see what flex box settings would produce the closest result. The algorithm is trivial and slow, but fast enough and the results are reasonable.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nsG2gur6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1184324400209940481/pu/img/rRp3WtsycN32IZKo.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Do you have trouble creating flexbox layouts? I did, but then I met Brute. Brute makes layouts for me, maybe Brute can make them for you too? Try at &lt;a href="https://t.co/YaozpTVGc5"&gt;mjvesa.github.io/brute/&lt;/a&gt; and see some source at &lt;a href="https://t.co/q0qPTtW7n6"&gt;github.com/mjvesa/brute&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/CSS"&gt;#CSS&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/JavaScript"&gt;#JavaScript&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Flexbox"&gt;#Flexbox&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:25 AM - 16 Oct 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1184324434406072320" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1184324434406072320" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      3
      &lt;a href="https://twitter.com/intent/like?tweet_id=1184324434406072320" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      19
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Brute and Sketch Mode
&lt;/h2&gt;

&lt;p&gt;By using Brute to perform the layout duties in Sketch Mode it became possible to produce decent flex box layouts just by drawing them. &lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b9LHJJX4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1192800034460446720/pu/img/zm9S2yMIIs45PaeZ.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Going forward towards the goal of drawing layouts and getting a fully working flexbox layout with &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; components. With the help of Brute, even more complex layouts can be created. Needs more precision and having a live preview of the drawn components would be a cool addition. 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      13:44 PM - 08 Nov 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1192800063355006976" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1192800063355006976" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=1192800063355006976" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      6
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Exporting Vaadin projects from Figma designs
&lt;/h2&gt;

&lt;p&gt;The free form drawing capabilities of Sketch Mode can be used to implement exporters for other free form things. With the&lt;br&gt;
addition of rectangles for layout and defining tags for each component, one could get working Vaadin applications out of Figma designs.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jv2m4JnL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1197800972451532801/pu/img/71VVPKslMp8VZYKI.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Turn you &lt;a href="https://twitter.com/hashtag/Figma"&gt;#Figma&lt;/a&gt; designs into &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; layouts automatically with the Designs to Layouts plugin. Only a few components are supported right now, but a Vaadin 14 project in plain &lt;a href="https://twitter.com/hashtag/Java"&gt;#Java&lt;/a&gt; can already be exported. Sources and info at &lt;a href="https://t.co/jjlgV0yzCF"&gt;github.com/mjvesa/dtl&lt;/a&gt; Pre-alpha quality warning ;) 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      08:56 AM - 22 Nov 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1197801041036746752" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1197801041036746752" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1197801041036746752" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      8
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Drawing UIs on napkins
&lt;/h2&gt;

&lt;p&gt;Another application of Sketch Mode is synthesis of layouts from hand drawn pictures of UIs. Together with rectangle detection and some additional heuristics, it becomes possible to take a picture of the drawing using a phone and create a preview of the UI on that same phone.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eS5ck-Fr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1207770214147866624/pu/img/84Z15yofxepxANdA.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      What does it take to create your first @Vaadin UI? How about a phone, a pen and a piece of paper? Here's Napkin, an experiment in creation of Vaadin UIs from sketches. Try it out yourself &lt;a href="https://t.co/cDRgbHhS70"&gt;mjvesa.github.io/napkin-app/&lt;/a&gt; and see the source as usual &lt;a href="https://t.co/3pnL3MQtks"&gt;github.com/mjvesa/napkin&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/WebComponents"&gt;#WebComponents&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      21:10 PM - 19 Dec 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1207770269806465031" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1207770269806465031" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      42
      &lt;a href="https://twitter.com/intent/like?tweet_id=1207770269806465031" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      101
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Unide in VSCode
&lt;/h2&gt;

&lt;p&gt;After making Unide run in Electron, it was not too complicated to do the same with VSCode.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q77uildR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1214215670495203328/pu/img/SIc8vDonOtyOEJeD.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Released Unide 0.3.1, a free visual designer for &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; and Vaadin Components,  with support for Vaadin TypeScript views, VSCode extension and other fixes and improvements. More about the release here &lt;a href="https://t.co/xGpnnPNMXE"&gt;dev.to/mjvesa/unide-0…&lt;/a&gt; and Code at &lt;a href="https://t.co/kndZN0v3pO"&gt;github.com/mjvesa/unide-s…&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/WebComponents"&gt;#WebComponents&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:02 PM - 06 Jan 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1214215719832948737" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1214215719832948737" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      5
      &lt;a href="https://twitter.com/intent/like?tweet_id=1214215719832948737" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      15
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Standalone Vaadin Designer 
&lt;/h2&gt;

&lt;p&gt;With the data model from Unide it became possible to make a version of Vaadin Designer that runs on the web independently. This resulted in an excellent vehicle for further experimentation.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I7gasf0f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1219572910765105152/pu/img/022lShCgrqdD_B21.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Having access to the &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; Designer source means I can do fun hacks like this one: Designer running on the web without any installation required. Only capable of editing a single design. No saving or loading, and no text nodes, but allows setting properties and attributes. 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      10:50 AM - 21 Jan 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1219572979882954753" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1219572979882954753" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      2
      &lt;a href="https://twitter.com/intent/like?tweet_id=1219572979882954753" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      8
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Simple element size editing
&lt;/h2&gt;

&lt;p&gt;A short hack where the image used to show the size, border, padding and marging of an element could be used to edit those values by dragging with the mouse.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OmHnEiCu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1227649504326934534/pu/img/6dO3QwUPV_n2u_Xw.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Wouldn't it make sense if the usual margin-border-padding-size box model thing could be used to modify those properties? Here's a quick evening hack prototyping just that. &lt;a href="https://twitter.com/hashtag/CSS"&gt;#CSS&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      17:43 PM - 12 Feb 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1227649535268225025" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1227649535268225025" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1227649535268225025" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      5
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Graphics programming and visual editing
&lt;/h2&gt;

&lt;p&gt;A bit more esoteric stuff: a Lisp-like language that is compiled into JavaScript. Using some ideas from Sketch Mode it is possible to write Lisp using B-expressions (B for Box) in a more visual manner. Also, just like the Designer Components above, each B-expression can contain more complicated editors such as the height map painter shown in the video below.&lt;/p&gt;

&lt;p&gt;Lastly, there's a generalization of visual design by connecting pixels in the generated image to code via a trace buffer that records the position of the component instance that produced each pixel. Const expressions can be used to define editable points in the code which is a generalization of the concept of element properties.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Lately I've been moving away from visual editors for GUIs and using the experience from developing such things for making more demoscene oriented stuff. The result is a general visual editor  thingy where the model is a Lisp-like esoteric language &lt;a href="https://t.co/BIHIv1RODw"&gt;youtube.com/watch?v=VgMtsU…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      21:32 PM - 23 Mar 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1242202561777668099" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1242202561777668099" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1242202561777668099" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      1
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Exporting Java from Vaadin Designer
&lt;/h2&gt;

&lt;p&gt;One of the first things to come out of the previous standalone Vaadin Designer was the ability to generate Java from Designs using code from Unide.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Here's a quick evening hack: take some &lt;a href="https://twitter.com/hashtag/HTML"&gt;#HTML&lt;/a&gt; and turn it  into &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Java"&gt;#Java&lt;/a&gt; code. Also shows a preview of what you've been typing. Maybe one could convert designs from Vaadin Designer to Java with this ;) Try it yourself &lt;a href="https://t.co/kFYs8RxjMy"&gt;mjvesa.github.io/design2java/&lt;/a&gt; &lt;a href="https://t.co/nxwIw0MWrR"&gt;youtube.com/watch?v=nS-_CU…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:47 PM - 16 Apr 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1250873440720113664" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1250873440720113664" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      3
      &lt;a href="https://twitter.com/intent/like?tweet_id=1250873440720113664" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      9
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  And back
&lt;/h2&gt;

&lt;p&gt;An advanced version of the above allows modifying the Java code and importing it back into the design in real time.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Just dropping this here: a strange version of Vaadin Designer that produces plain java as you design, and that java code can also be edited and the changes are reflected back to the design. &lt;a href="https://twitter.com/hashtag/Java"&gt;#Java&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; &lt;a href="https://t.co/sOfY3drTtC"&gt;youtube.com/watch?v=QVh7s0…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:12 AM - 20 Apr 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1252087639316008962" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1252087639316008962" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1252087639316008962" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      1
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  In place editing of a live Vaadin application
&lt;/h2&gt;

&lt;p&gt;The coolest hack to date with the standalone Vaadin Designer: a version of Vaadin Designer running in Electron that can be used to modify a live Vaadin application. Any component in view can be switched into edit mode&lt;br&gt;
and modified. Switching back into normal mode shows the modified design in the application as usual. This could eventually allow creating a navigable prototype of an application by running it, starting the designer application&lt;br&gt;
and then adding views to it as the application is navigated.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Here's an experiment done using Vaadin Designer: in place editing of a running &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; Application. See modifications work with real data after saving. The example uses Polymer and &lt;a href="https://twitter.com/hashtag/WebComponents"&gt;#WebComponents&lt;/a&gt;. &lt;a href="https://twitter.com/hashtag/LitElement"&gt;#LitElement&lt;/a&gt; should also be possible.  &lt;a href="https://t.co/KowYeACahb"&gt;youtu.be/uhNceNAjshA&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      07:25 AM - 06 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1257934382695940100" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1257934382695940100" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      4
      &lt;a href="https://twitter.com/intent/like?tweet_id=1257934382695940100" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      9
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Full support for visual design of LitElement components?
&lt;/h2&gt;

&lt;p&gt;While I previously made some statements about the difficulty of writing a visual design application for LitElement vs P3 and other template based systems, a method came to mind that makes writing such editors only slightly more complex.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I take that back. It is completely possible to edit LitElement templates in a visual designer with this one weird trick ;) &lt;a href="https://t.co/ELDfK2Vd4r"&gt;youtu.be/U_xoqRs1kds&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:43 AM - 22 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1263767394801143810" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1263767394801143810" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1263767394801143810" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  A GUI builder in dev tools
&lt;/h2&gt;

&lt;p&gt;One potential future place where a GUI builder could be found is the Chrome dev tools. I wrote an initial prototype of the concept, and it seems promising.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I'm working on embedding a GUI builder into Chrome dev tools. The grand idea is to eventually be able to visually edit a live &lt;a href="https://twitter.com/hashtag/Vaadin"&gt;#Vaadin&lt;/a&gt; application. &lt;a href="https://t.co/jmAMMkdjiw"&gt;youtube.com/watch?v=V6Hnq2…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:20 AM - 29 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1266222879378677760" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1266222879378677760" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1266222879378677760" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      4
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Upcoming things
&lt;/h2&gt;

&lt;p&gt;In the future I will be working more on Unide. Future features will include CRUD generation from Java beans.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Here's something that's coming into Unide soon: the ability to take a Java bean and generate a CRUD view from it. Currently the @Vaadin UI is generated, but I'm planning to write some trivial in-memory backend code generation as well. In plain &lt;a href="https://twitter.com/hashtag/Java"&gt;#Java&lt;/a&gt; ofc   &lt;a href="https://t.co/yvSQZSzJXc"&gt;youtube.com/watch?v=GOmpn7…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      11:02 AM - 08 Jul 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1280819645419790336" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1280819645419790336" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1280819645419790336" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      4
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;And Sketch Mode improvements, like a better preview while sketching&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--3cx_8tap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1276580085668155393/vxSvoR29_normal.jpg" alt="Matti Vesa profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Matti Vesa
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/mjvesa"&gt;@mjvesa&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Working on some improvements for Sketch Mode in Unide. In the future it will be possible to see a live preview of the @Vaadin UI as it is being sketched. &lt;a href="https://t.co/LyFZYQKnzF"&gt;youtube.com/watch?v=OkR4Lr…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:56 AM - 21 Jul 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1285513939162411008" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1285513939162411008" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1285513939162411008" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      2
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  And others
&lt;/h2&gt;

&lt;p&gt;These are only some of the things I've hacked together during the last year. Check my twitter at &lt;a href="https://twitter.com/mjvesa"&gt;@mjvesa&lt;/a&gt; and &lt;a href="https://www.youtube.com/channel/UCODe-CBYuMh2Pb-QaJibl2w"&gt;youtube&lt;/a&gt; for all the things not mentioned here with more to come!&lt;/p&gt;

</description>
      <category>java</category>
      <category>vaadin</category>
      <category>javascript</category>
      <category>design</category>
    </item>
    <item>
      <title>Unide and start.vaadin.com</title>
      <dc:creator>Matti Vesa</dc:creator>
      <pubDate>Sat, 04 Jul 2020 21:00:36 +0000</pubDate>
      <link>https://dev.to/mjvesa/unide-and-start-vaadin-com-4pie</link>
      <guid>https://dev.to/mjvesa/unide-and-start-vaadin-com-4pie</guid>
      <description>&lt;p&gt;The service at start.vaadin.com (SVC) is an excellent way to start working on a project. You can add different views, choose what type they are, modify the overall theme and finally download a zipped project you can start hacking away with.&lt;/p&gt;

&lt;p&gt;While there is a java+html choice for editing with Vaadin Designer, some developers would probably like to start adding new views written in traditional server side Java and also enjoy the simplicity that a visual design application brings.&lt;/p&gt;

&lt;p&gt;With Unide that is possible using version 0.5.0 onwards. It will not be possible to edit the views that are produced by the service, but new views can be added all the same. And they will be in good'ol plain Java&lt;/p&gt;

&lt;h2&gt;
  
  
  How to do it
&lt;/h2&gt;

&lt;p&gt;Projects from SVC use &lt;a href="https://vaadin.com/components/vaadin-app-layout"&gt;App Layout&lt;/a&gt; to provide the UI structure and navigation. We need to provide the class that is the main layout using App Layout. That can be done in settings in Unide. Click on the settings buttons and check the "Use App Layout" checkbox. Then type in the fully qualified name of the &lt;code&gt;MainView&lt;/code&gt; class in your exported project to the adjacent text field.  For example, with default settings that would be &lt;code&gt;com.example.application.views.main.MainView&lt;/code&gt;. At the same time you can set the package where Unide will write the exported views and related aux classes. &lt;code&gt;com.example.application.views.unide&lt;/code&gt; could be one choice, if we assume the default package structure. Here the above settings are applied in the settings page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pRhUtHFh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iv8k1yvafwvg1bditn2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pRhUtHFh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iv8k1yvafwvg1bditn2m.png" alt="Settings page with proper package and app layout class values"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally save your changes by clicking save. The next step is to add a new view to the project. Saving the view exports it and we can proceed adding it to the application. Find the &lt;code&gt;MainView.java&lt;/code&gt; file in your IDE of choice and in it navigate to the &lt;code&gt;getAvailableTabs&lt;/code&gt; method. Observe how tabs have been added, assuming any views were included when downloading a project from SVC. Add the view just exported in a similar manner. In the image below &lt;code&gt;TestDesign&lt;/code&gt; is added to the available views.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wHgHr7l7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cpv1qefngpq6vvokzmf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wHgHr7l7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cpv1qefngpq6vvokzmf1.png" alt="TestDesign added the list of tabs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Naturally the class needs to be imported into MainView to make it available. Once these two steps have been completed the project can be run. The added view should be available in the list of views.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some things are missing
&lt;/h2&gt;

&lt;p&gt;While adding views is possible, there are limitations. For example, currently the theme from the project is not applied in Unide. That might be the subject of a future article or something that needs to be fixed in Unide. I am also very interested in any other missing features or  limitations that come to mind. Creating an issue in the Unide repository &lt;a href="https://github.com/mjvesa/unide-src"&gt;here&lt;/a&gt; is a good way to get the issue fixed. &lt;/p&gt;

&lt;p&gt;Thanks for reading, see you in the next one!&lt;/p&gt;

</description>
      <category>java</category>
      <category>vaadin</category>
      <category>gui</category>
    </item>
    <item>
      <title>Unide 0.3.1 Released</title>
      <dc:creator>Matti Vesa</dc:creator>
      <pubDate>Mon, 06 Jan 2020 15:58:51 +0000</pubDate>
      <link>https://dev.to/mjvesa/unide-0-3-1-released-2gb1</link>
      <guid>https://dev.to/mjvesa/unide-0-3-1-released-2gb1</guid>
      <description>&lt;p&gt;Two of the most interesting features for 0.3.1 are exporter for the new Vaadin TypeScript target and a releasing as VSCode extension.&lt;/p&gt;

&lt;p&gt;0.3.0 was quickly followed by 0.3.1 due to a small error I didn't notice before releasing.&lt;/p&gt;

&lt;p&gt;Note that this is a pre-alpha release and is only for the brave and patient to try out.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get started
&lt;/h2&gt;

&lt;p&gt;Unide can be used online, or one can export a project and use Unide to edit it  locally. Navigate to &lt;a href="https://mjvesa.github.io/unide/"&gt;Unide&lt;/a&gt; and export a project from there. Vaadin Java is currently best supported and is the default target. Unzip the exported project somewhere. From here you have two choices: either install Unide in VSCode trough the marketplace, or install unide with &lt;code&gt;npm install -g unide&lt;/code&gt;. Unide can the be invoked in a terminal at the root of your exported project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vaadin TypeScript
&lt;/h2&gt;

&lt;p&gt;The new Vaadin TypeScript target is an upcoming feature in Vaadin that allows writing views purely at the frontend. 0.3.1 contains support for it in the form of an exporter. Better support for local editing will come later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;VSCode has progressed into a useful platform for writing Java applications. Unide can be installed into VSCode as an extension and views can be produced in pure Java on the server side. As with the Electron version, saving a view will export the view as Java. &lt;/p&gt;

&lt;p&gt;For each such Java file there is an auxilliary file that has access to the design and can be used to attach listeners and other logic to the design. The Aux file will not be overwritten when the design is saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other improvements and fixes
&lt;/h2&gt;

&lt;p&gt;Brute has been integrated into Sketch Mode. Brute is a tiny library that finds the corresponding flexbox CSS properties when given a configuration of absolutely positioned rectangles. That means a &lt;code&gt;div&lt;/code&gt; can be used where &lt;code&gt;vaadin-vertical-layout&lt;/code&gt; and &lt;code&gt;vaadin-horizontal-laout&lt;/code&gt; were previously necessary.&lt;/p&gt;

&lt;p&gt;DnD has had some issues with the drop marker being stuck when the DnD operation did not end in a drop. For example, if the drop happens outside the paper area that contains the edited view, the red marker is stuck and no DnD in the area it covers is possible. That has been fixed in this version.&lt;/p&gt;

&lt;p&gt;Nested components did not work properly. The insertion of the tree has  been fixed and a nested Shadow DOM is created for them so that styles should work properly as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's coming in 0.4.0
&lt;/h2&gt;

&lt;p&gt;The aim of 0.4.0 is to improve the usability of Unide for visual design during development. To facilitate that, I will start working on an example project for the Java target at first, continuing to cover other targets over time.&lt;/p&gt;

&lt;p&gt;Also, each minor version from now on will provide improvements for some particular target. For 0.4.0 there are multiple: Java, Vaadin TypeScript, LitElement and Vanilla JS. After that I will pick frameworks in descending order by popularity in the State of JS 2019 survey. That means 0.5.0 will most likely contain proper support for React: exporting React projects and working on existing projects locally as is possible with the Java target now.&lt;/p&gt;

</description>
      <category>java</category>
      <category>javascript</category>
      <category>design</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
