<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The ZK Blog</title>
	<atom:link href="https://blog.zkoss.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.zkoss.org</link>
	<description>The ZK Blog</description>
	<lastBuildDate>Wed, 29 May 2024 02:21:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.4.16</generator>
	<item>
		<title>ZK Community Speaks: 2024 Survey Results</title>
		<link>https://blog.zkoss.org/2024/05/29/zk-2024-community-survey/</link>
					<comments>https://blog.zkoss.org/2024/05/29/zk-2024-community-survey/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Wed, 29 May 2024 02:18:05 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Jakarta EE]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[survey]]></category>
		<category><![CDATA[ZK]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10557</guid>

					<description><![CDATA[Thank you for participating in the 2024 ZK Community Survey! Your insights are invaluable for understanding your needs and enhancing our products and services. Here are some interesting findings from the survey: IntelliJ has surpassed Eclipse as the preferred IDE among ZK users. While some have migrated to Jakarta EE, half of our users remain [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><br>Thank you for participating in the 2024 ZK Community Survey! Your insights are invaluable for understanding your needs and enhancing our products and services. Here are some interesting findings from the survey:</p>



<ol><li><strong>IntelliJ</strong> has surpassed Eclipse as the preferred IDE among ZK users.</li><li>While some have migrated to Jakarta EE, half of our users remain loyal to <strong>Java EE</strong>.</li><li><strong>Maven</strong> reigns as the top build tool, with Gradle not meeting anticipated popularity.</li><li>80% of users rely on <strong>JUnit</strong> for app testing.</li><li><strong>Baeldung</strong> emerges as the go-to learning hub for developers.</li><li><strong>Stack Overflow</strong> and the <strong>ZK Forum</strong> are key resources for problem-solving.</li><li><strong>AI</strong> integration remains low, with less than 10% of users adopting it.</li></ol>



<p></p>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/IDE-1024x644.png" alt="" class="wp-image-10558" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/IDE-1024x644.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/IDE-300x189.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/IDE-768x483.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/IDE.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4c8.png" alt="📈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> IntelliJ is the most used IDE among ZK users.</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/jakarta-1024x598.png" alt="" class="wp-image-10559" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/jakarta-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/jakarta-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/jakarta-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/jakarta.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> While some users moved most of their projects to Jakarta EE, more than half of the users are still with Java EE.</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/build-tool-1024x598.png" alt="" class="wp-image-10561" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/build-tool-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/build-tool-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/build-tool-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/build-tool.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Maven leads. Gradle was not as popular as expected.</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/testing-zats-1024x598.png" alt="" class="wp-image-10560" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/testing-zats-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/testing-zats-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/testing-zats-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/testing-zats.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> More than 80% of the respondents test their application with JUnit!</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/learning-1024x598.png" alt="" class="wp-image-10562" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/learning-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/learning-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/learning-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/learning.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Baeldung has become the most popular learning platform!</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/QA_platform-1024x598.png" alt="" class="wp-image-10568" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/QA_platform-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/QA_platform-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/QA_platform-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/QA_platform.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f50e.png" alt="🔎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Most users rely on Stackoverflow and ZK Forum to find solutions</figcaption></figure></div>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2024/05/AI-1024x598.png" alt="" class="wp-image-10569" srcset="https://blog.zkoss.org/wp-content/uploads/2024/05/AI-1024x598.png 1024w, https://blog.zkoss.org/wp-content/uploads/2024/05/AI-300x175.png 300w, https://blog.zkoss.org/wp-content/uploads/2024/05/AI-768x449.png 768w, https://blog.zkoss.org/wp-content/uploads/2024/05/AI.png 1342w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f916.png" alt="🤖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Less than 10% of users have incorporated AI into their projects</figcaption></figure></div>



<div style="height:55px" aria-hidden="true" class="wp-block-spacer"></div>



<p>We hope these insights provide valuable context for your work and access to useful resources.</p>



<p>If you have submitted a contact request when filling out the survey, we will reach out to you soon, thank you for your patience!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2024/05/29/zk-2024-community-survey/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Introducing Ottava from ZK</title>
		<link>https://blog.zkoss.org/2023/12/12/introducing-ottava-from-zk/</link>
					<comments>https://blog.zkoss.org/2023/12/12/introducing-ottava-from-zk/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Tue, 12 Dec 2023 03:51:10 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10543</guid>

					<description><![CDATA[We are thrilled to share an exciting development from our peer developers at Potix Corporation – the introduction of Ottava, our cutting-edge data management and analysis platform.&#160; Unlike most tools that require reverting to 2D/tabular data before conducting detailed analyses, Ottava empowers users to directly input, explore, and derive insights from multi-dimesional reports. This distinctive [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We are thrilled to share an exciting development from our peer developers at Potix Corporation – the introduction of <a href="https://ottava.io">Ottava</a>, our cutting-edge data management and analysis platform.&nbsp;</p>



<p>Unlike most tools that require reverting to 2D/tabular data before conducting detailed analyses, Ottava empowers users to directly input, explore, and derive insights from multi-dimesional reports. This distinctive capability streamlines the analytical process, saving valuable time and providing users with a seamless experience.</p>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2023/12/capterra-2.png" alt="" class="wp-image-10547" srcset="https://blog.zkoss.org/wp-content/uploads/2023/12/capterra-2.png 730w, https://blog.zkoss.org/wp-content/uploads/2023/12/capterra-2-300x226.png 300w" sizes="(max-width: 730px) 100vw, 730px" /></figure></div>



<p></p>



<p>Ottava seamlessly combines our expertise in Web development (ZK), Spreadsheet technology (Keikai), and SaaS solutions (Quire). This platform simplifies data management, chart creation, and analysis, bridging the gap between user requirements and complex data tools. We invite you to explore Ottava firsthand and share your invaluable feedback. </p>



<p>Get started at <a href="https://ottava.io?utm_source=zk&amp;utm_medium=blog&amp;utm_campaign=launch" target="_blank" rel="noreferrer noopener">ottava.io</a> &gt;&gt;</p>



<p>Learn more about <a href="https://blog.ottava.io/p/why-ottava.html?utm_source=zk&amp;utm_medium=blog&amp;utm_campaign=launch" target="_blank" rel="noreferrer noopener">Why we created Ottava</a>.</p>



<p>If you have questions or feedback or would like to schedule a personalized demo, feel free to reach us at feedback@ottava.io.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2023/12/12/introducing-ottava-from-zk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK Charts 11.2.0.0 coming soon!</title>
		<link>https://blog.zkoss.org/2023/11/09/zk-charts-11-2-0-0-coming-soon/</link>
					<comments>https://blog.zkoss.org/2023/11/09/zk-charts-11-2-0-0-coming-soon/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Thu, 09 Nov 2023 03:12:23 +0000</pubDate>
				<category><![CDATA[ZK Charts]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10536</guid>

					<description><![CDATA[ZK Charts provides hundreds of interactive charts and enables you to control your charts in Java with Server Side API. Now, ZK Charts 11 will be available soon, upgrading the underlying Highcharts library to the latest version 11.2.0. This will bring in new chart types and a refreshing look &#38; feel. Highlights Upgrade underlying Highcharts [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ZK Charts provides hundreds of interactive charts and enables you to control your charts in Java with Server Side API. </p>



<p>Now, ZK Charts 11 will be available soon, upgrading the underlying Highcharts library to the latest version 11.2.0. This will bring in new chart types and a refreshing look &amp; feel.</p>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2023/11/ZK_Charts11.png" alt="" class="wp-image-10538" srcset="https://blog.zkoss.org/wp-content/uploads/2023/11/ZK_Charts11.png 525w, https://blog.zkoss.org/wp-content/uploads/2023/11/ZK_Charts11-300x63.png 300w" sizes="(max-width: 525px) 100vw, 525px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Highlights</strong></p>



<ul><li>Upgrade underlying Highcharts from 10.3.3 to 11.2.0</li><li>New Pictorial Chart</li><li>New Audio Chart</li><li>New look &amp; feel</li></ul>



<p><strong>Other fixes and features</strong></p>



<ul><li>Over 70 bugs fixed</li><li>Dropped IE8 support</li><li>For more information, please look at highcharts&#8217; <a href="https://www.highcharts.com/blog/changelog/" target="_blank" rel="noreferrer noopener">change log</a>.</li></ul>



<p>While we are testing the new version, we would like to invite everyone to try out the ZK Charts 11.2.0.0 freshly-release, to make sure that it also works well in your project.</p>



<p>To try out ZK Charts 11, use the evaluation repository: https://mavensync.zkoss.org/eval/ and specify the zk charts version number as <span class="has-inline-color has-vivid-cyan-blue-color">11.2.0.0-FL-20231106-Eval </span>(or later). </p>



<p>Please let us know how it works for you. If you run into any issues, let us know early so we can get them addressed before the official release. Thanks and we look forward to hearing from you!</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2023/11/09/zk-charts-11-2-0-0-coming-soon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK 10 Preview: Introducing ZK Client MVVM Linter</title>
		<link>https://blog.zkoss.org/2023/08/01/zk-10-preview-introducing-zk-client-mvvm-linter/</link>
					<comments>https://blog.zkoss.org/2023/08/01/zk-10-preview-introducing-zk-client-mvvm-linter/#respond</comments>
		
		<dc:creator><![CDATA[Rebecca Lai]]></dc:creator>
		<pubDate>Tue, 01 Aug 2023 01:30:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ZK Core]]></category>
		<category><![CDATA[client-mvvm]]></category>
		<category><![CDATA[mvvm]]></category>
		<category><![CDATA[ZK]]></category>
		<category><![CDATA[zk10]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10438</guid>

					<description><![CDATA[Client MVVM is one of the key features in the upcoming ZK 10, which reduces memory footprint and improves response time by moving data binding from the server side to the client side. While the upgrade from Server MVVM to Client MVVM is usually a straightforward process that requires no modification to existing code, certain [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Client MVVM is one of the key features in the upcoming ZK 10, which reduces memory footprint and improves response time by moving data binding from the server side to the client side. While the upgrade from Server MVVM to Client MVVM is usually a straightforward process that requires no modification to existing code, certain Server MVVM usages require some alterations due to the nature of the client side. </p>



<p>To facilitate a smooth transition to Client MVVM, ZK Team has developed ZK Client MVVM Linter — a tool specifically designed for identifying potential compatibility issues in Server MVVM files before upgrading. In this blog post, we will guide you through the entire process of setting up and running the linter, covering everything from basic configuration to advanced customization.</p>



<h2><strong>Basic Configuration</strong></h2>



<p>To run the linter on your project, follow these steps:</p>



<ul><li>Clone the <a href="https://github.com/zkoss-demo/zk-client-mvvm-linter-starter"><code>zk-client-mvvm-linter-starter</code></a> repository from our <a href="https://github.com/zkoss-demo"><code>zkoss-demo</code></a> page.</li><li>Open the <code>app.properties</code> file in the root directory of the cloned repository and set the <code>zulDir</code> and <code>javaDir</code> properties to relative paths to your Zul and Java source directories.</li><li>Open your terminal and execute <code>./gradlew runLinter</code> in the root directory of the cloned repository. The linter will analyze your project and report potential compatibility issues.</li><li>Review the reported issues and make decisions best suited for your project, whether that means keeping your existing Server MVVM code or making modifications required for upgrading to Client MVVM.</li></ul>



<p>Sample result from running the linter on <code>F86-ZK-4028.zul</code> and <code>B86-ZK-4211.zul</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">INFO: --------------------------------------------------------------------------- 
INFO: Checking /zk/zktest/src/main/webapp/test2/F86-ZK-4028.zul 
INFO: /zk/zktest/src/main/webapp/test2/F86-ZK-4028.zul 
WARNING:  108: 25       Zul files supplied via path binding not checked 
INFO: --------------------------------------------------------------------------- 
INFO: Checking /zk/zktest/src/main/webapp/test2/B86-ZK-4211.zul 
INFO: /zk/zktest/src/main/webapp/test2/B86-ZK-4211.zul 
WARNING:   36: 10       ViewModel without fully-qualified class name not checked 
INFO: ---------------------------------------------------------------------------</pre>



<ul><li>The linter did not find any incompatibility. However, while the linter covers most scenarios, manual checks might still be necessary for certain cases. Please manually check those Zul or Java files against the lint rules listed in the <code><a href="https://github.com/zkoss-demo/zk-client-mvvm-linter-starter/blob/master/RULES.md">RULES.md</a></code> file.</li></ul>



<p>Sample result from running the linter on <code>F00633.zul</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">INFO: --------------------------------------------------------------------
INFO: Checking /zk/zktest/src/main/webapp/bind/issue/F00633.zul
INFO: /zk/zktest/src/main/webapp/bind/issue/F00633.zul
WARNING:   22: 22       onClick="..." should be @command
INFO: /zk/zktest/src/main/java/org/zkoss/zktest/bind/issue/F00633.java
WARNING:   69: 13       `@ContextParam(ContextType.BINDER)` not supported
WARNING:   90: 28       `@BindingParam Label` not supported
WARNING:   95: 24       `Object` type casting not supported
WARNING:  105: 26       `@BindingParam Label` not supported
INFO: --------------------------------------------------------------------</pre>



<ul><li>The linter found an incompatible usage of <code>onClick</code> on line 22 column 22 and four other potential issues in its ViewModel <code>F00633.java</code> file. You can fix these issues before upgrading to Client MVVM or skip upgrading the incompatible ViewModel.</li><li>For more information on how you can upgrade to Client MVVM, please reference <a href="https://www.zkoss.org/wiki/Small_Talks/2022/May/ZK10_Preview:_Using_the_new_and_light_Client_MVVM" target="_blank" rel="noreferrer noopener">this small talk</a>.</li></ul>



<div class="wp-block-group"><div class="wp-block-group__inner-container">
<div class="wp-block-group"><div class="wp-block-group__inner-container">
<h2>Advanced Customization</h2>
</div></div>
</div></div>



<p>Additional properties in the <code>app.properties</code> file:</p>



<ul><li><code>tabSize</code>: By default, the linter assumes a tab size of 4 spaces. If your project uses a different tab size, you can set the tab size to ensure that the reported column numbers match the actual visual positions.</li><li><code>jarFiles</code>: If your project relies on external Jar files, providing their absolute paths enables the linter to perform a thorough analysis.</li><li><code>disableRules</code>: In cases where certain rules are not applicable to your project, you can selectively disable a subset of the lint rules.</li></ul>



<p>Logging properties in the <code>logger.properties</code> file:</p>



<ul><li><code>handler</code>: By default, the linter uses <code>ConsoleHandler</code> to display output in the terminal. If you prefer to store output in a file, you can switch to <code>FileHandler</code>.</li><li><code>java.util.logging.XXX.level</code>: By default, the logging level is set to <code>INFO</code>, which only displays incompatible MVVM files. If you want to see all MVVM files checked by the linter, you can switch to <code>FINE</code>.</li></ul>



<p>To create custom lint rules, follow these steps:</p>



<ul><li>Create a new Java class that extends the <code>Rule</code> class and override the <code style="font-size: 16px">getDescription</code> method to provide a short description.</li><li>Override the <code>newZulFileVisitor</code> and/or <code>newJavaFileVisitor</code> method to return a new instance of your custom <code>ZulFileVisitor</code> or <code>JavaFileVisitor</code>. </li><li>Inside your custom file visitor, override the <code>visit</code> method for the specific node type you want to inspect and use the <code>report</code> method to publish warnings.</li><li>Add the package name or the fully-qualified class name to the <code>customRules</code> property in the <code>app.properties</code> file for the rule to be integrated into the linter.</li></ul>



<p>Here&#8217;s a sample custom rule class:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">package my.pkg;

public class MyRule extends Rule {
    @Override
    protected String getDescription() {
        return "My Custom Rule";
    }

    @Override
    public ZulFileVisitor newZulFileVisitor() {
        return new ZulFileVisitor() {
            @Override
            protected void visitElement(Element node) {
                if (/* insert your conditional logic here */) {
                    report(node, getDescription());
                }
            }
        };
    }

    @Override
    public JavaFileVisitor newJavaFileVisitor() {
        return new JavaFileVisitor() {
            @Override
            protected void visitVariable(VariableTree node) {
                if (/* insert your conditional logic here */) {
                    report(node, getDescription());
                }
            }
        };
    }
}</pre>



<p>Through identifying potential compatibility issues, ZK Client MVVM Linter enables developers to make upgrade decisions best suited for their projects, whether that means directly upgrading existing code to ZK 10 Server MVVM or making modifications required for upgrading to Client MVVM.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2023/08/01/zk-10-preview-introducing-zk-client-mvvm-linter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK Essential Workshop in Spanish &#8211; Apr. 3rd</title>
		<link>https://blog.zkoss.org/2023/03/06/zk-essential-workshop-in-spanish-apr-3rd/</link>
					<comments>https://blog.zkoss.org/2023/03/06/zk-essential-workshop-in-spanish-apr-3rd/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Mon, 06 Mar 2023 19:39:49 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10428</guid>

					<description><![CDATA[ZK&#8217;s partner Raiz Digital/Cumbresoft will soon hold a month-long ZK Essential Workshop in Spanish. Don&#8217;t miss the chance to learn ZK and interact with Spanish-speaking ZK developers around the world! 𝗧𝗔𝗟𝗟𝗘𝗥 &#124; 𝗭𝗞 𝗘𝗡 𝗖𝗔𝗦𝗧𝗘𝗟𝗟𝗔𝗡𝗢¡Sumate a nuestro taller sobre ZK, y adquirí los conocimientos esenciales para aprender a desarrollar con este framework!&#160; ✅&#160;Inicio: 03 de [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ZK&#8217;s partner Raiz Digital/Cumbresoft will soon hold a month-long ZK Essential Workshop in Spanish. Don&#8217;t miss the chance to learn ZK and interact with Spanish-speaking ZK developers around the world!</p>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_-1024x1024.jpg" alt="" class="wp-image-10427" srcset="https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_-1024x1024.jpg 1024w, https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_-300x300.jpg 300w, https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_-150x150.jpg 150w, https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_-768x768.jpg 768w, https://blog.zkoss.org/wp-content/uploads/2023/03/ZK_Flyer-OK_.jpg 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p><strong>𝗧𝗔𝗟𝗟𝗘𝗥 | 𝗭𝗞 𝗘𝗡 𝗖𝗔𝗦𝗧𝗘𝗟𝗟𝗔𝗡𝗢</strong><br>¡Sumate a nuestro taller sobre ZK, y adquirí los conocimientos esenciales para aprender a desarrollar con este framework!&nbsp;</p>



<p><br><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<strong>Inicio: 03 de abril 2023</strong></p>



<p><strong><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;Modalidad: virtual-sincrónico por Meet</strong></p>



<p><strong><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;Costo: 80 USD | Participantes argentinos: $15.200</strong></p>



<p>El material del taller estará habilitado en la plataforma Moodle y, además, tendremos encuentros virtuales semanales exclusivos para interactuar con nuestro facilitador experto en ZK.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://forms.gle/d9CUbfHSZ4daPSeB8" target="_blank" rel="noopener noreferrer"><img src="https://blog.zkoss.org/wp-content/uploads/2021/09/button-2.png" alt="" class="wp-image-10138"/></a></figure></div>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>This event is brought to you by ZK&#8217;s partner Raiz Digital Foundation. For more information, please contact Raiz Digital directly: </p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e9.png" alt="📩" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<strong><a href="mailto:comunidad@raizdigital.org" target="_blank" rel="noreferrer noopener">comunidad@raizdigital.org</a></strong></p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<a href="http://raizdigital.org/#!/-bienvenido/" target="_blank" rel="noreferrer noopener">http://raizdigital.org/#!/-bienvenido/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2023/03/06/zk-essential-workshop-in-spanish-apr-3rd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK 10 Preview: Customizing ZK Frontend made Easier and Safer with TypeScript</title>
		<link>https://blog.zkoss.org/2022/12/05/zk-10-preview-customizing-zk-frontend-made-easier-and-safer-with-typescript/</link>
					<comments>https://blog.zkoss.org/2022/12/05/zk-10-preview-customizing-zk-frontend-made-easier-and-safer-with-typescript/#respond</comments>
		
		<dc:creator><![CDATA[Gordon Hsu]]></dc:creator>
		<pubDate>Mon, 05 Dec 2022 15:09:09 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ZK Core]]></category>
		<category><![CDATA[ZK Custom Components]]></category>
		<category><![CDATA[#Client]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[ZK]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10363</guid>

					<description><![CDATA[One of the core reasons why users love to work with ZK is the ability to interact with the Web frontend with Java alone. No messy HMTL, CSS, nor JavaScript; just good-old Java. However, there are still occasions where you want to get your hands dirty with JavaScript, e.g., creating custom components. As a dynamically-typed [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>One of the core reasons why users love to work with ZK is the ability to interact with the Web frontend with Java alone. No messy HMTL, CSS, nor JavaScript; just good-old Java. However, there are still occasions where you want to get your hands dirty with JavaScript, e.g., creating custom components. As a dynamically-typed language with lots of quirks (1 == [&#8220;001&#8221;] is true?!), using JavaScript is like programming blind, and Java developers may often feel discouraged when customizing the frontend. </p>



<p>Well, not anymore. With the zk-types NPM package, you can now use TypeScript to customize the ZK 10 frontend with an experience similar to programming in Java.</p>



<h2>Benefits of TypeScript</h2>



<p>TypeScript is a statically-typed language that compiles to JavaScript. TypeScript syntax is based on JavaScript but comes closer to Java syntax. Being statically typed, TypeScript provides the following benefits that Java developers enjoy but were out of reach with pure JavaScript.</p>



<ol><li>Reliable auto-completion; one doesn&#8217;t have to wade through API references on the Web.</li><li>Easy code navigation by clicking on names instead of searching the whole codebase.</li><li>Eliminate typos (e.g., misspelling <code>isAlign</code> as <code>isalign</code>) and mismatching types  (passing a string when a number is expected).</li><li>Safe inter-op between various module systems (ESM, CommonJS, SystemJS AMD, and global UMD). One can even import a JSON file directly as a type-safe object.</li><li>Enable type-aware lint rules. This allows us to craft custom ESLint rules to enforce project wide conventions which can also be automatically fixed by the linter.</li><li>Automatic link validation and name/type matching in JSDoc, ensuring stronger synchronization between the documentation and the actual code.</li></ol>



<p>These are the vast improvements we experienced first-hand on a daily basis while working with TypeScript. All in all, TypeScript enables an enormous amount of automated validations and automatic corrections that make ZK 10 easy and safer to use.</p>



<h2>zk-types is Optional and Backward-compatible</h2>



<blockquote class="wp-block-quote" style="background:#f5f5fb"><p>ZK-types is a new way to customize the ZK 10 frontend that brings smart IDE feedbacks and a more Java-like programming experience.</p><cite>[Since ZK 10]</cite></blockquote>



<p>If you have been customizing the ZK frontend with JavaScript, those customizations will continue to work. The purpose of zk-types is merely to boost developer experience with TypeScript. Also, zk-types completely covers all existing ZK frontend API without breaking existing behavior.</p>



<h2>ZK10 + TypeScript with zk-types</h2>



<p>Having reaped the benefits of a statically-typed ZK framework, we would like to share the gospel with you so that you can enjoy the same benefits when customizing the frontend. See the demo at <a href="https://github.com/zkoss-demo/zk-types-demo" target="_blank" rel="noreferrer noopener">zk-types-demo</a>. The setup is minimal, but you can also just clone the demo:</p>



<ol><li>Open a new project.</li><li>Get the types with: <code>npm install zk-types</code></li><li>Install TypeScript with: <code>npm install typescript</code></li><li>Create the template TypeScript configuration: <code>npx tsc --init</code></li><li>Modify <code>tsconfig.json</code> to have <code>"types":["zk-types"]</code></li><li>Create a <code>.ts</code> file and start programming. Start typing <code>zk.</code>, and you should see the <a href="https://blog.zkoss.org/wp-content/uploads/2021/02/ts_autocomplete.mp4" target="_blank" rel="noreferrer noopener">IDE showing auto-complete hints</a>; IDE support is detailed in the <a href="#ide-support">box below</a>.</li><li>Compile the <code>.ts</code> file with <code>npx tsc</code> (do not specify the filename). You should see an emitted <code>.js</code> file. Copy the <code>.js</code> file to wherever appropriate.</li></ol>



<p id="ide-support">Note that the zk-types NPM package is very lean (under 1 MB); it contains only the type definitions (<code>.d.ts</code> files) for the ZK framework. This is another benefit that TypeScript brings: the possibility to code against type definitions then link with existing JavaScript in deployment, much like how C programmers code against a few header files then link with existing binaries on whatever machine they are targeting.</p>



<blockquote class="wp-block-quote is-style-default" style="background:#f5f5fb"><p><em>Visual Studio Code</em> and <em>IntelliJ IDEA Ultimate</em> are known to support TypeScript out-of-the-box. <em>IntelliJ IDEA Community</em> does not; please read the <a href="https://www.jetbrains.com/help/idea/typescript-support.html">this announcement</a>. You will have the best experience when using the supported IDEs.</p></blockquote>



<h2>Exemplary Features of zk-types</h2>



<p>From our experience with other JavaScript libraries that also migrated to TypeScript, we noticed how the quality of type annotation affects developer experience. Thus, when preparing ZK 10, we went to lengths to remodel the whole JavaScript codebase with TypeScript appropriately:</p>



<ol><li>Prefer ES6+ syntax, as transpilation, down-leveling, and polyfills will be automatically done.</li><li>Replace ad-hoc conventions with first-class language features. The most significant being the deprecation of the <code>zk.$extends</code> pattern in favor of ES6 classes. </li><li>Provide a painless deprecation story. Despite replacing <code>zk.$extends</code> with ES6 classes throughout the codebase, we made sure that <code>zk.$extends</code> (1) works as it previously did, (2) can successfully inherit from ES6 classes, (3) allows ES6 classes to successfully inherit from it, and (4) type-annotated in detail.</li><li>Aim for null-safety. We made infrequent and consistent the use of <code>null</code>, <code>undefined</code>, uninitialized variables, and optional parameters.</li><li>Use generics to model the DOM element type of <code>zk.Widget</code> and the value type of <code>zul.inp.InputWidget</code>.</li><li>Narrow down the specification of types. E.g., specify <code>HTMLDivElement</code> instead of the wider <code>HTMLElement</code>, and prefer concrete types to <code>any</code> or <code>unknown</code>.</li><li>Incorrect type annotation is the most damaging of all. Since it is easy to introduce typos and other defects during the migration from JavaScript to TypeScript, a large part of the migration is automated.</li></ol>



<p>Take, for instance, <code>zk.augment</code>, the type-safe successor of <code>zk.override</code>. The return value of <code>zk.augment</code> backs up the overridden properties of its first argument, and the return types are designed to automatically narrow down to only those overridden properties. In the illustration below, the overridden properties are the methods <code>_init</code> and <code>hasNext</code>. In fact, the method signatures are also auto-inferred as shown in the auto-complete popup: <code>hasNext(): boolean</code>. How convenient!</p>



<figure class="wp-block-image size-large is-resized"><img src="https://blog.zkoss.org/wp-content/uploads/2022/11/Screenshot-2022-11-25-at-2.59.10-PM-1024x243.png" alt="" class="wp-image-10374" width="512" height="122" srcset="https://blog.zkoss.org/wp-content/uploads/2022/11/Screenshot-2022-11-25-at-2.59.10-PM-1024x243.png 1024w, https://blog.zkoss.org/wp-content/uploads/2022/11/Screenshot-2022-11-25-at-2.59.10-PM-300x71.png 300w, https://blog.zkoss.org/wp-content/uploads/2022/11/Screenshot-2022-11-25-at-2.59.10-PM-768x182.png 768w, https://blog.zkoss.org/wp-content/uploads/2022/11/Screenshot-2022-11-25-at-2.59.10-PM.png 1190w" sizes="(max-width: 512px) 100vw, 512px" /><figcaption>Type-safe <code>zk.augment</code> with hints.</figcaption></figure>



<p>The overall zk-types experience is immediate, reliable, accurate, and delightful. We invite you to try out this new approach and let us know what you think!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2022/12/05/zk-10-preview-customizing-zk-frontend-made-easier-and-safer-with-typescript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://blog.zkoss.org/wp-content/uploads/2021/02/ts_autocomplete.mp4" length="2261693" type="video/mp4" />

			</item>
		<item>
		<title>All about ZK 10</title>
		<link>https://blog.zkoss.org/2022/10/31/all-about-zk-10/</link>
					<comments>https://blog.zkoss.org/2022/10/31/all-about-zk-10/#comments</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Mon, 31 Oct 2022 02:49:35 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10351</guid>

					<description><![CDATA[To celebrate the upcoming 10th release of the framework, ZK Team has put tremendous effort into it, hoping to bring you even faster and lighter experiences. Client MVVM and Stateless Components are notable new features that will significantly save your server-side memory and boost your application performance. In addition, ZK 10 empowers you to build [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>To celebrate the upcoming 10th release of the framework, ZK Team has put tremendous effort into it, hoping to bring you even faster and lighter experiences. Client MVVM and Stateless Components are notable new features that will significantly save your server-side memory and boost your application performance. In addition, ZK 10 empowers you to build truly scalable and cloud-ready ZK applications.</p>



<p>We would like to invite you to explore more about them and let us know what you think! You can find related resources here:</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<span class="has-inline-color has-very-dark-gray-color"><strong>Background of the new features</strong></span></p>



<ul><li>ZK 10 Behind the Scenes – <a href="https://blog.zkoss.org/2022/09/21/zk-10-behind-the-scenes-meet-the-developer-of-client-mvvm/" target="_blank" rel="noreferrer noopener">Meet the developer of Client MVVM</a></li><li>ZK 10 Behind the Scenes – <a href="https://blog.zkoss.org/2022/08/16/zk-10-behind-the-scenes-meet-the-developer-of-stateless-components/" target="_blank" rel="noreferrer noopener">Meet the developer of Stateless Components</a></li></ul>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<span class="has-inline-color has-very-dark-gray-color"><strong>Youtube video resource</strong></span></p>



<ul><li><a href="https://www.youtube.com/playlist?list=PLowliNY4EEJs4mLb4ohBXeeZdjIV-ShvV" target="_blank" rel="noreferrer noopener">ZK 10 Highlights</a></li></ul>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<span class="has-inline-color has-very-dark-gray-color"><strong>Client MVVM Articles and Examples</strong></span></p>



<ul><li>ZK10 Preview: <a href="https://www.zkoss.org/wiki/Small_Talks/2022/April/ZK10_Preview:_30x_Lighter_and_300x_Faster_with_Client_MVVM" target="_blank" rel="noreferrer noopener">30x Lighter and 300x Faster with Client MVVM</a></li><li>ZK10 Preview: <a href="https://www.zkoss.org/wiki/Small_Talks/2022/May/ZK10_Preview:_Using_the_new_and_light_Client_MVVM" target="_blank" rel="noreferrer noopener">Using the new and light Client MVVM</a></li><li>ZK10 Preview: <a href="https://www.zkoss.org/wiki/Small_Talks/2022/September/ZK10_Preview:_Knowing_what_to_expect_from_Client_MVVM" target="_blank" rel="noreferrer noopener">Knowing what to expect from Client MVVM</a></li><li>ZK 10 Preview: <a href="https://blog.zkoss.org/2023/08/01/zk-10-preview-introducing-zk-client-mvvm-linter/" target="_blank" rel="noreferrer noopener">Introducing ZK Client MVVM Linter</a></li></ul>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<span class="has-inline-color has-very-dark-gray-color"><strong>Stateless Components Articles and Examples</strong></span></p>



<ul><li>ZK10 Preview: <a href="https://www.zkoss.org/wiki/Small_Talks/2022/April/ZK10_Preview:_ZK_10_is_ready_for_building_Cloud-Native_Applications" target="_blank" rel="noreferrer noopener">ZK 10 is ready for building Cloud-Native Applications</a></li><li>ZK10 Preview: <a href="https://www.zkoss.org/wiki/Small_Talks/2022/August/ZK10_Preview:_Diving_into_Stateless_Components" target="_blank" rel="noreferrer noopener">Diving into Stateless Components</a></li></ul>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<span class="has-inline-color has-very-dark-gray-color"><strong>Other Highlighted ZK 10 Features</strong></span></p>



<ul><li>ZK 10 Preview: <a href="https://blog.zkoss.org/2022/12/05/zk-10-preview-customizing-zk-frontend-made-easier-and-safer-with-typescript/" target="_blank" rel="noreferrer noopener">Customizing ZK Frontend made Easier and Safer with TypeScript</a></li></ul>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>&nbsp;<span class="has-inline-color has-very-dark-gray-color">Feedback Event</span></strong></p>



<div class="wp-block-image"><figure class="alignleft size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2022/07/ZK10FeedbackEvent.png" alt="" class="wp-image-10309" srcset="https://blog.zkoss.org/wp-content/uploads/2022/07/ZK10FeedbackEvent.png 512w, https://blog.zkoss.org/wp-content/uploads/2022/07/ZK10FeedbackEvent-300x150.png 300w" sizes="(max-width: 512px) 100vw, 512px" /></figure></div>



<p></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>While the official release of ZK 10 is not available yet, following the examples in the articles, you can already try out these new features using our freshly releases.  </p>



<p>Let us know how you like the features and share with us any feedback you have.  Users providing the most valuable feedback and suggestions will be selected as winners of our feedback event. Each of them would receive a box of ZK-themed goods including baseball caps, pencils, T-shirts, vouchers, and more.</p>



<p>Feedback Forms:<br><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />ZK 10 Client MVVM: <a href="https://forms.office.com/r/v1rXpYwRgp" target="_blank" rel="noreferrer noopener">https://forms.office.com/r/v1rXpYwRgp</a><br><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />ZK 10 Stateless Components: <a href="https://forms.office.com/r/msPGzypbDk" target="_blank" rel="noreferrer noopener">https://forms.office.com/r/msPGzypbDk</a></p>



<p>We hope the latest features are beneficial, and we look forward to hearing from you!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2022/10/31/all-about-zk-10/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>ZK Charts 10 Coming soon</title>
		<link>https://blog.zkoss.org/2022/10/03/zk-charts-10-coming-soon/</link>
					<comments>https://blog.zkoss.org/2022/10/03/zk-charts-10-coming-soon/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Mon, 03 Oct 2022 02:55:08 +0000</pubDate>
				<category><![CDATA[ZK Charts]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10341</guid>

					<description><![CDATA[ZK Charts provides hundreds of interactive charts and enables you to control your charts in Java with Server Side API. Now, ZK Charts 10 will be available soon, upgrading the underlying Highcharts library to the latest version 10. This will bring new chart types, security fixes, and accessibility enhancements. Highlights Upgrade underlying Highcharts from 8.2 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>ZK Charts provides hundreds of interactive charts and enables you to control your charts in Java with Server Side API. </p>



<p>Now, ZK Charts 10 will be available soon, upgrading the underlying Highcharts library to the latest version 10. This will bring new chart types, security fixes, and accessibility enhancements.</p>



<div class="wp-block-image"><figure class="alignleft size-large is-resized"><img src="https://blog.zkoss.org/wp-content/uploads/2022/10/Charts_desktop.png" alt="" class="wp-image-10348" width="526" height="110" srcset="https://blog.zkoss.org/wp-content/uploads/2022/10/Charts_desktop.png 526w, https://blog.zkoss.org/wp-content/uploads/2022/10/Charts_desktop-300x63.png 300w" sizes="(max-width: 526px) 100vw, 526px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Highlights</strong></p>



<ul><li>Upgrade underlying Highcharts from 8.2 to 10.2.1</li><li>New Arc Diagram</li><li>New Dumbbell Chart</li><li>New Lollipop Chart</li><li>Accessibility APIs</li></ul>



<p><strong>Other fixes and features</strong></p>



<ul><li>ZKCHARTS-78 &#8211; Wrong encoding of Chinese characters in client-side PDF export</li><li>ZKCHARTS-110 &#8211; hbox + splitter + zkcharts, resizing fails</li><li>ZKCHARTS-125 &#8211; addSeriesAsDrilldown causes NPE if triggered before manual charts drill down</li><li>ZKCHARTS-126 &#8211; charts _drilldownLevels set but empty after invalidate on setType()</li><li>ZKCHARTS-130 &#8211; set an empty data causes a javascript error</li><li>ZKCHARTS-137 &#8211; Upgrade PlotOptions and Series APIs to align with HighCharts v10</li><li>ZKCHARTS-138 &#8211; breadcrumbs functionality for drill-down charts</li><li>ZKCHARTS-139 &#8211; xAxis, yAxis, and zAxis support the Accessibility option</li><li>For more information, please look at <a href="https://tracker.zkoss.org/browse/ZKCHARTS-139?jql=project%20%3D%20ZKCHARTS%20AND%20fixVersion%20%3D%2010.2.1.0%20OR%20fixVersion%20%3D%2010.0.0.FL" target="_blank" rel="noreferrer noopener">our tracker</a> and highcharts&#8217; <a href="https://www.highcharts.com/blog/changelog/" target="_blank" rel="noreferrer noopener">change log</a>.</li></ul>



<p>While we are testing the new version, we would like to invite everyone to try out the ZK Charts 10 freshly-release, to make sure that it also works well in your project.</p>



<p>To try out ZK Charts 10, use the evaluation repository: https://mavensync.zkoss.org/eval/ and specify the zk charts version number as <span class="has-inline-color has-vivid-cyan-blue-color">10.2.1.0-FL-20220930-Eval </span>(or later). </p>



<p>Please let us know how it works for you. If you run into any issues, let us know early so we can get them addressed before the official release. Thanks and we look forward to hearing from you!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2022/10/03/zk-charts-10-coming-soon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK 10 Behind the Scenes – Meet the developer of Client MVVM</title>
		<link>https://blog.zkoss.org/2022/09/21/zk-10-behind-the-scenes-meet-the-developer-of-client-mvvm/</link>
					<comments>https://blog.zkoss.org/2022/09/21/zk-10-behind-the-scenes-meet-the-developer-of-client-mvvm/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Wed, 21 Sep 2022 02:17:03 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10322</guid>

					<description><![CDATA[A few weeks ago, we interviewed the developer of Stateless Components. Today, we will chat with the developer working on another major ZK 10 advancement: Client MVVM. James has been working in the team since 2014. He typically works on developing core ZK and ZK add-ons. 📢What was the starting point in the development of [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A few weeks ago, we interviewed the <a href="https://blog.zkoss.org/2022/08/16/zk-10-behind-the-scenes-meet-the-developer-of-stateless-components/" target="_blank" rel="noreferrer noopener">developer of Stateless Components</a>. Today, we will chat with the developer working on another major ZK 10 advancement: Client MVVM.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><em>James has been working in the team since 2014. He typically works on developing core ZK and ZK add-ons.</em></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What was the starting point in the development of Client MVVM?</strong></p>



<p>James: MVVM is a design pattern separating the data and logic from the presentation, which helps to reduce the code complexity. Since it was first out in ZK 6, it has been a major feature beloved by our users.</p>



<p>However, as time passed, we noticed that some users with bigger projects suffered from heavy memory usage. We’ve made different efforts to enhance the server MVVM to address this concern.</p>



<figure class="wp-block-image size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2022/08/interview-MVVM.png" alt="" class="wp-image-10334" srcset="https://blog.zkoss.org/wp-content/uploads/2022/08/interview-MVVM.png 666w, https://blog.zkoss.org/wp-content/uploads/2022/08/interview-MVVM-300x128.png 300w" sizes="(max-width: 666px) 100vw, 666px" /></figure>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Did you have this idea right from the beginning? Or did you also evaluate other ideas?</strong></p>



<p>James: The server-side improvement we did was good, but we wanted something more significant, and that’s when we turned into client MVVM. It took us some time to find the appropriate JavaScript libraries: in the very beginning, we considered React and Redux. These two libraries can handle states, expressions, and variables. Later we found Mobx. After evaluating and comparing the options, we found Mobx the best candidate; it is simpler, lighter, and more powerful.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Can you tell us about the POC process?</strong></p>



<p>James: The core requirement is to replicate the server MVVM behavior to the client side while keeping the users&#8217; upgrade effort as low as possible.</p>



<p>We spent about two months ensuring that the client library could be used to implement the client-side version of ZK MVVM. We started with key items like load-save, expression evaluation, etc.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What are some of the difficulties that you came across in the development process?</strong></p>



<p>James: The life cycle of the server-side Components and the client-side Widgets are very different. This makes it quite challenging to move the MVVM logic from the server to the client. For example, ZK shadow elements is a template engine that helps developers compose the html layout with dynamic data. However, this mechanism was available only on the server-side.</p>



<p>To achieve the target – effortless upgrade, we had to redesign a client version of the shadow elements and ensure that it works the same as the server version. The redesign itself, as well as the verification process (unit tests, integration tests, etc), was intense.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What are the most common scenarios one would want to use this feature?</strong></p>



<p>James: It can be used against all ZK MVVM pages, as it helps to reduce the MVVM memory usage. However, it is most efficient if you use it on: pages with massive load bindings or save bindings and pages visited by many concurrent users.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Is it also for existing projects? What are the steps for upgrade?</strong></p>



<p>James: Yes, the steps to upgrade to Client MVVM are easy: include the required library, add the listeners, and apply it to the ViewModel. You can follow <a href="https://www.zkoss.org/wiki/Small_Talks/2022/May/ZK10_Preview:_Using_the_new_and_light_Client_MVVM#Setting_up_Client_MVVM" target="_blank" rel="noreferrer noopener">this small talk</a> for details.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Should we use it globally or can we use it partially? Can we mix it with existing projects?</strong></p>



<p>James: Yes, you can use it globally or partially, and yes you can mix it with existing projects. Again, please check our small talk.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" />What are some of the limitations?</strong></p>



<p>Under the MVVM pattern, one should not access the components from the server side directly. However, practically we are seeing users still accessing the components directly or mixing MVC with MVVM. Now, with the new client MVVM, the server side does not have the complete and most up-to-date information, so you can’t access and control those child components as a server-side component. Also, it won’t work when you are mixing MVC and MVVM.</p>



<p>Another thing I’d like to mention is that IE11 will not be supported as the underlying Mbox5 library is incompatible with IE11 (note: Microsoft ended the support for IE11 on June 15, 2022, anyway).</p>



<p>For other differences, please reference <a href="https://www.zkoss.org/wiki/Small_Talks/2022/May/ZK10_Preview:_Using_the_new_and_light_Client_MVVM#Restrictions_and_Differences" target="_blank" rel="noreferrer noopener">this small talk</a>.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What about MVC? Why are you only optimizing MVVM?</strong></p>



<p>James: ZK server MVVM saves a lot of tracking bindings on the server side for you, and that is why it is heavier. MVC is quite simple and doesn’t save the binding for you; therefore, there is no need to optimize ZK MVC.</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>How would you expect users to use this feature? What kind of feedback are you looking for?</strong></p>



<p>James: I hope that users find the client MVVM upgrade easy and see a real improvement in performance and memory use. If you see good improvements, please let us know. Please also let us know if there’s anything we didn’t cover.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" />Thank you for sharing today! Can you tell us what you think is important as a good developer?</strong></p>



<p>James: I think it is important to keep learning and improving technical skills. This can be done by reading tech articles, taking online courses, and doing side projects. Also, I believe it is crucial to be open-minded &#8211; always open to new ideas, suggestions, and feedback.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>We hope you find this interview interesting. If you have not checked out this new stateless feature, please try it and give us your feedback! Learn more about the&nbsp;<a href="https://blog.zkoss.org/2022/07/05/zk-10-preview-training-winner-announcement-and-feedback-event/" target="_blank" rel="noreferrer noopener">Feedback Event</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2022/09/21/zk-10-behind-the-scenes-meet-the-developer-of-client-mvvm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ZK 10 Behind the Scenes – Meet the developer of Stateless Components</title>
		<link>https://blog.zkoss.org/2022/08/16/zk-10-behind-the-scenes-meet-the-developer-of-stateless-components/</link>
					<comments>https://blog.zkoss.org/2022/08/16/zk-10-behind-the-scenes-meet-the-developer-of-stateless-components/#respond</comments>
		
		<dc:creator><![CDATA[jeanyen]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 02:53:27 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[stateless]]></category>
		<category><![CDATA[zk10]]></category>
		<guid isPermaLink="false">https://blog.zkoss.org/?p=10314</guid>

					<description><![CDATA[One of the significant advancements in ZK 10 is Stateless Components. Instead of learning how to use the feature, today, we will talk to the key person behind the scenes and look at how he came up with the ideas and what challenges he had during this journey.&#160; We are happy that we could interview [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>One of the significant advancements in ZK 10 is Stateless Components. Instead of learning how to use the feature, today, we will talk to the key person behind the scenes and look at how he came up with the ideas and what challenges he had during this journey.&nbsp;</p>



<p>We are happy that we could interview the core developer behind this new feature &#8211; Jumper Chen, Director of Products and Technology at the ZK Team.&nbsp;</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><em>Jumper has been working in the team for over 15 years, from JSP/JSF to Ajax to RIA to the hype of Javascript libraries and, to the cloud.</em></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Tell us more about the Stateless Components. What was the starting point in the development of Stateless Components?&nbsp;</strong></p>



<p>Jumper: “Ajax without Javascript,” or the ability to build web applications in pure Java on the server side, has always been the core value of ZK. On one side, this allows developers to focus on the logic without having to worry about server-client communication. However, on the other side, due to this server-centric nature, we did notice that in some complicated use cases, the server-side memory footprint becomes a pain for our users, and the footprint will only grow as they expand their applications.&nbsp;&nbsp;</p>



<p>Because of this, reducing the ZK server-side memory footprint while allowing users to continue to manipulate ZK components by using Java API at the server has become our top priority.&nbsp;</p>



<figure class="wp-block-image size-large"><img src="https://blog.zkoss.org/wp-content/uploads/2022/08/interview-stateless.png" alt="" class="wp-image-10336" srcset="https://blog.zkoss.org/wp-content/uploads/2022/08/interview-stateless.png 666w, https://blog.zkoss.org/wp-content/uploads/2022/08/interview-stateless-300x128.png 300w" sizes="(max-width: 666px) 100vw, 666px" /></figure>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Did you have this idea right from the beginning? Or did you also evaluate other ideas?&nbsp;</strong></p>



<p>Jumper: Reducing the footprint on the server side means keeping less information on the server side; therefore, it naturally arrived in doing stateless components.&nbsp;&nbsp;</p>



<p>A stateless component, as suggested by the name, means it doesn’t hold a state on the server side. But how is that different?&nbsp;&nbsp;Take the HTTP protocol as an example. The HTTP protocol is also implemented in a “stateless” manner. Each HTTP request is independent at the time when the server receives it. It does not depend on another request, and there&#8217;s no order. This &#8220;independence&#8221; ensures that each request can be handled by any server or service in any order, without needing additional information. This is also essential for making “stateless” possible. We believe this can also be done in terms of web applications with proper design.&nbsp;</p>



<p>Initially, I focused on finding a feasible way to manage ZK components using Java API to achieve statelessness. I discovered that leveraging immutable instances could be a good way to retain the ZK component instances immutably at the server.&nbsp;&nbsp;</p>



<p>Once the server side was ready, we needed a tool to update ZK components at the client, and this is where we came up with the new UiAgent and Updater API.&nbsp;</p>



<p>Having the stateless ready also brings a positive side-effect: enabling modern use-cases and supporting current infrastructure needs such as micro-services and cloud-native support.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>How long did you spend doing the POC?&nbsp;</strong></p>



<p>Jumper: Doing POC didn’t take me a lot of time. However, over the past 10+ years, we’ve added many rich components to our library, so getting the complete Java API set ready is very time-consuming.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What are some of your difficulties in the development process?&nbsp;</strong></p>



<p>Jumper: Reviewing each component’s spec takes a lot of effort. We need to make sure that they function as designed and work consistently. Often, we need to alter them several times in either Java API or JavaScript. Besides, we need to make sure that we are not breaking the backward compatibility.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What are the most common scenarios one would want to use the stateless components?</strong>&nbsp;</p>



<p>Jumper: Using stateless components will be most efficient when you have many boilerplate contents or static contents that don’t need to be updated often.&nbsp;</p>



<p><strong><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" />Why did you go with the Immutable Builder API pattern?</strong>&nbsp;</p>



<p>Jumper: We noticed that the Java new Time API uses the immutable builder API pattern, and we found it a good match with what we needed.&nbsp;&nbsp;</p>



<p>For example,&nbsp;&nbsp;</p>



<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>LocalTime.of(6, 30).withMinute(30)…</code>&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>How to get started using the stateless components?</strong>&nbsp;</p>



<p>Jumper: You will be composing your UI using the stateless components (I-components) and associated APIs in Java. Then, you can use ActionHandler for event handling. For detailed steps, please refer to <a href="https://www.zkoss.org/wiki/Small_Talks/2022/April/ZK10_Preview:_ZK_10_is_ready_for_building_Cloud-Native_Applications#Composing_the_UI_with_Stateless_Components" target="_blank" rel="noreferrer noopener">this small talk.</a>&nbsp;&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Can this be applied to an existing project? Or mix it with an existing project?</strong>&nbsp;&nbsp;</p>



<p>Jumper: Yes, it can be done as an independent page of a project, or an independent section of a page. We will be releasing articles to talk about how this can be done.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Do you recommend users use stateless components?</strong>&nbsp;</p>



<p>Jumper: Yes, definitely, if you wish to save server-side memory. By design, we assume most of the legacy ZK pages (except for MVVM) can utilize the stateless component API.&nbsp;&nbsp;</p>



<p>One important thing to note is that using stateless components doesn’t necessarily mean you are having a stateless application. Your application may still need to hold the states, such as user name and login status.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>What are some of the concerns?</strong>&nbsp;</p>



<p>Jumper: Since it comes with a new set of Java API, it works differently from the current way. You may need to spend some time familiarizing yourself with the new API to control ZK components.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Considering the current client-side hype, do you also plan to provide a pure-client solution?</strong>&nbsp;</p>



<p>Jumper: We started from server-centric, and if you look at our community, I believe there is still a group of users that recognizes the value of server-side solutions where you don’t have to take care of the client side and any communication in between. We hope we can still preserve this value for our customers.&nbsp;&nbsp;</p>



<p>On the other hand, we are also working on migrating the ZK component’s Java logic into Javascript. Before ZK 10, many of the components could not be used in a pure client way, but they will function smoothly in ZK 10. We are not there yet, but ideally, we are hoping to make it flexible enough so that developers can use ZK components in whichever way they are more comfortable with: either Java API or pure Javascript API.&nbsp;</p>



<p><img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f4e2.png" alt="📢" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Thank you for giving us the insight! Before we end this interview, can you share your motivation with us? You have worked for over 15 years in Potix. What keeps you going?&nbsp;</strong>&nbsp;</p>



<p>Jumper: I believe working smart is much more important than working hard. I like to challenge myself and see if I can solve a problem in the most efficient way with limited time and resources. This drives me to learn proactively and brings me confidence and motivation.&nbsp;</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>We hope you find this interview interesting. If you have not checked out this new stateless feature, please try it out and give us your feedback! Learn more about the <a href="https://blog.zkoss.org/2022/07/05/zk-10-preview-training-winner-announcement-and-feedback-event/" target="_blank" rel="noreferrer noopener">Feedback Event</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.zkoss.org/2022/08/16/zk-10-behind-the-scenes-meet-the-developer-of-stateless-components/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
