<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1662570443648714289</atom:id><lastBuildDate>Thu, 24 Oct 2024 07:39:43 +0000</lastBuildDate><category>Software Development</category><category>Flutter</category><category>Fluwix</category><category>API</category><category>Blockchain</category><category>Customer Development</category><category>Entrepreneurship</category><category>Ethereum</category><category>Machine Learning</category><category>DApps</category><category>GraphQL</category><category>OData</category><category>Simplifying</category><category>Chatbot</category><category>Docker</category><category>Keras</category><category>Scikit-learn</category><category>Spacy</category><category>Spring Boot</category><category>Substrate</category><category>Teiid</category><category>Tensorflow</category><title>Thoughts of Customer Development, Entrepreneurship, Project Management and Software Development</title><description>by Lim Chee Kin</description><link>http://limcheekin.blogspot.com/</link><managingEditor>noreply@blogger.com (Lim Chee Kin)</managingEditor><generator>Blogger</generator><openSearch:totalResults>86</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-4350048608715259026</guid><pubDate>Thu, 14 Sep 2023 03:58:00 +0000</pubDate><atom:updated>2023-09-14T11:58:16.755+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Fluwix</category><title>Flutter File Upload</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Are you in search of the perfect file upload widget to meet your specific requirements? Look no further! Introducing the File Upload module, a solution born out of the need for a versatile and tailored file uploading tool.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;A picture is worth a thousand words:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG1VMEcwWOjU5SUO2H5NpYEZZ_kf-Qdkb_wwW2sBE_nGZTklZhZpGliNpLXHWAaEA_5fI4hmFIWyZ0_chdLtrd8ZEmcJkeXehS4i427o679-aI6fwgRr85_DkCT97sc43bjCoDsoBsLvRQ5gHkhe-bXWAsfLIwE5pb_Fyje3OSYXtXtvS_MHYug3FRSaHl/s2340/screenshots.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2340&quot; data-original-width=&quot;2160&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG1VMEcwWOjU5SUO2H5NpYEZZ_kf-Qdkb_wwW2sBE_nGZTklZhZpGliNpLXHWAaEA_5fI4hmFIWyZ0_chdLtrd8ZEmcJkeXehS4i427o679-aI6fwgRr85_DkCT97sc43bjCoDsoBsLvRQ5gHkhe-bXWAsfLIwE5pb_Fyje3OSYXtXtvS_MHYug3FRSaHl/w369-h400/screenshots.jpg&quot; width=&quot;369&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;The File Upload module offers support for various file upload statuses, ensuring a seamless experience:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;pending:&lt;/b&gt; Files are in a queue, waiting for upload.&lt;/li&gt;&lt;li&gt;&lt;b&gt;uploading:&lt;/b&gt; Files are currently in the process of being uploaded, with an option to cancel using the (x) button in the top right corner.&lt;/li&gt;&lt;li&gt;&lt;b&gt;processing:&lt;/b&gt; Uploaded files are actively being processed on the server.&lt;/li&gt;&lt;li&gt;&lt;b&gt;completed:&lt;/b&gt; Files have been uploaded and processed successfully.&lt;/li&gt;&lt;li&gt;&lt;b&gt;failed: &lt;/b&gt;Unfortunately, some file uploads may not succeed.&lt;/li&gt;&lt;li&gt;&lt;b&gt;cancelled: &lt;/b&gt;File uploading have been cancelled by the user.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/file_upload&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Many open-source file upload solutions provide only frontend components, leaving a gap in the backend integration. We&#39;ve bridged that gap with a robust backend API developed using Python FastAPI, hosted on AWS Lambda.&lt;/p&gt;&lt;p&gt;Explore the backend source code at &lt;a href=&quot;https://github.com/limcheekin/serverless-file-upload&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;serverless-file-upload repository&lt;/a&gt; to seamlessly integrate the File Upload module into your projects.&lt;/p&gt;&lt;p&gt;We welcome your insights and contributions to enhance the backend API implementation for file uploads. If you have alternative approaches or know of other backend API implementations that excel in this context, your input would be greatly appreciated. Your valuable suggestions can help us continually improve and refine our implementation.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new?labels=showcase&quot; target=&quot;_blank&quot;&gt;add your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Kindly &lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;share your Flutter problem to us&lt;/a&gt;, we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;file_upload&amp;nbsp;&lt;/b&gt;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hear from you soon! :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2023/09/flutter-file-upload.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG1VMEcwWOjU5SUO2H5NpYEZZ_kf-Qdkb_wwW2sBE_nGZTklZhZpGliNpLXHWAaEA_5fI4hmFIWyZ0_chdLtrd8ZEmcJkeXehS4i427o679-aI6fwgRr85_DkCT97sc43bjCoDsoBsLvRQ5gHkhe-bXWAsfLIwE5pb_Fyje3OSYXtXtvS_MHYug3FRSaHl/s72-w369-h400-c/screenshots.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-5509696189300881925</guid><pubDate>Thu, 20 Apr 2023 04:17:00 +0000</pubDate><atom:updated>2023-04-20T12:17:59.835+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Chatbot</category><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Fluwix</category><title>Flutter Chatbot UI</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;The Chatbot UI showcase reuses the code from &lt;a href=&quot;https://github.com/hadikachmar3/ChatGPT_flutter_course&quot; target=&quot;_blank&quot;&gt;hadikachmar3/ChatGPT_flutter_course&lt;/a&gt; and interacts with an Echo chatbot instead of the OpenAI API. When you send a message to the chatbot, it will simply echo it back to you.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The idea is to have a generic chatbot UI that can be used for any chatbot or chat-based application.&lt;/p&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/chatbot_ui&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new?labels=showcase&quot; target=&quot;_blank&quot;&gt;add your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Kindly &lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;share your Flutter problem to us&lt;/a&gt;, we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;chatbot_ui&amp;nbsp;&lt;/b&gt;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hear from you soon! :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2023/04/flutter-chatbot-ui.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-8837574222081868919</guid><pubDate>Fri, 03 Sep 2021 07:10:00 +0000</pubDate><atom:updated>2021-09-16T15:16:59.073+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blockchain</category><category domain="http://www.blogger.com/atom/ns#">DApps</category><category domain="http://www.blogger.com/atom/ns#">Ethereum</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Beyond Solidity, The Language</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6luybeigwLLi9EJYvSZs1vhrlSJ63rYHBphQxgDSNgnjZrVp2_Iey5lW0oZUbmHzMSckY68bcd4_1C4fShibFPoelw_5szKs6zVbIYxjudBwZRq4NScoyRU6g7l6PvO2lIU8QbYjr02LF/s788/beyond-solidity.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;467&quot; data-original-width=&quot;788&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6luybeigwLLi9EJYvSZs1vhrlSJ63rYHBphQxgDSNgnjZrVp2_Iey5lW0oZUbmHzMSckY68bcd4_1C4fShibFPoelw_5szKs6zVbIYxjudBwZRq4NScoyRU6g7l6PvO2lIU8QbYjr02LF/w400-h238/beyond-solidity.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I think I was familiar enough with the syntax of the Solidity language to write any logic of smart contracts running on the Ethereum platform, what&#39;s next?&lt;p&gt;&lt;/p&gt;&lt;p&gt;I would like to persuade a career in the DApps Development, I think one need to posses the following skills in order to play the role as professional Blockchain Application Developer:&lt;/p&gt;&lt;p&gt;&lt;b&gt;Unit Testing&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Regardless of whether we are practicing &lt;a href=&quot;https://medium.com/oli-systems/test-driven-solidity-with-truffle-e4beaa2bd194&quot; target=&quot;_blank&quot;&gt;Test-Driven Development (TDD)&lt;/a&gt;, we should write tests for the smart contracts to ensure correctness.&amp;nbsp;&lt;a href=&quot;https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-javascript&quot; target=&quot;_blank&quot;&gt;Writing Tests in JavaScript&lt;/a&gt; from Truffle documentation is a good reference for that matter. The &lt;a href=&quot;https://docs.openzeppelin.com/test-helpers/&quot; target=&quot;_blank&quot;&gt;@openzeppelin/test-helpers&lt;/a&gt;&amp;nbsp;is a great library to simplify your testing code and you can refer to&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/watch?v=3M26YuJTRU8&quot; target=&quot;_blank&quot;&gt;Testing Time Dependent Solidity Smart Contract Functions using OpenZeppelin Test Helpers&lt;/a&gt; for sample code. The&amp;nbsp;&lt;a href=&quot;https://github.com/sc-forks/solidity-coverage&quot; target=&quot;_blank&quot;&gt;solidity-coverage&lt;/a&gt;&amp;nbsp;is a good tool on test coverage report.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Security&lt;/b&gt;&lt;/p&gt;&lt;p&gt;As smart contracts running on public networks,involved monetary transactions and the source code is most likely open source, it is prone to security attacks. Hence, security aspect is the most important aspect of smart contracts after correctness. I think the best source on learn to write secured codes is start from &lt;a href=&quot;https://ethereum.org/en/developers/docs/security/&quot; target=&quot;_blank&quot;&gt;security section&lt;/a&gt; of the Ethereum documentation. Learn by playing &lt;a href=&quot;https://ethernaut.openzeppelin.com/&quot; target=&quot;_blank&quot;&gt;the Ethernaut&lt;/a&gt; game and reuse well-tested&amp;nbsp;&lt;a href=&quot;https://docs.openzeppelin.com/contracts/4.x/&quot; target=&quot;_blank&quot;&gt;@openzeppelin/contracts&lt;/a&gt;&amp;nbsp;library and learn from &lt;a href=&quot;https://dasp.co/&quot; target=&quot;_blank&quot;&gt;well-documented million dollar mistakes&lt;/a&gt;. Lastly, I think it is best to incorporate code analysis tool such as &lt;a href=&quot;https://smartbugs.github.io/&quot; target=&quot;_blank&quot;&gt;SmartBugs&lt;/a&gt; into automated build pipeline. Thanks to&amp;nbsp;Ender Phan, a security engineer published &lt;a href=&quot;https://enderphan.medium.com/smart-contract-automated-testing-guidelines-591cffe0096&quot; target=&quot;_blank&quot;&gt;an article regarding automated pentest&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Gas (Performance) Optimization&lt;/b&gt;&lt;/p&gt;&lt;p&gt;As execution of smart contracts in Ethereum Virtual Machine (EVM) causing money (known as gas), it is best to write optimize code for the core features or commonly use functionalities of the DApps. I just find out that we can optimize the codes beyond Solidity by using &lt;a href=&quot;https://docs.soliditylang.org/en/latest/assembly.html&quot; target=&quot;_blank&quot;&gt;Inline Assembly&lt;/a&gt;. Also, I heard of eWASM, the Ethereum client with Web Assembly runtime, which ultimately will replace EVM. After some research, I think it is still in infancy stage and currently not much progress. But that doesn&#39;t stop us from getting ready and trying it out with &lt;a href=&quot;https://solang.readthedocs.io/en/latest/&quot; target=&quot;_blank&quot;&gt;Compile Solidity to Web Assembly with SoLang&lt;/a&gt;&amp;nbsp;or &lt;a href=&quot;https://www.innoq.com/en/blog/wasm-oasis/&quot; target=&quot;_blank&quot;&gt;Deploying a WebAssembly smart contract on Oasis Ethereum&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Updated on Sep 16: &lt;/b&gt;The Unit Testing, Security and Gas Optimization brought together with a build automation pipeline, please see the&amp;nbsp;&lt;a href=&quot;https://limcheekin.medium.com/solidity-and-truffle-continuous-integration-setup-with-github-actions-221149eabcca&quot; target=&quot;_blank&quot;&gt;Solidity and Truffle Continuous Integration Setup with GitHub Actions&lt;/a&gt;&amp;nbsp;to find out more.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Integration&lt;/b&gt;&lt;/p&gt;&lt;p&gt;No application is an island including DApps, it need to integrate with external entities to function well, for example:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://www.ethereum-alarm-clock.com/&quot; target=&quot;_blank&quot;&gt;Scheduler: Ethereum Alarm Clock&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ipfs.io/&quot; target=&quot;_blank&quot;&gt;Interplanetary File System (IPFS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://thegraph.com/&quot; target=&quot;_blank&quot;&gt;The Graph API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://chain.link/&quot; target=&quot;_blank&quot;&gt;Chainlink&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Thanks for reading. Do you have anything to add?&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/09/beyond-solidity-language.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6luybeigwLLi9EJYvSZs1vhrlSJ63rYHBphQxgDSNgnjZrVp2_Iey5lW0oZUbmHzMSckY68bcd4_1C4fShibFPoelw_5szKs6zVbIYxjudBwZRq4NScoyRU6g7l6PvO2lIU8QbYjr02LF/s72-w400-h238-c/beyond-solidity.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-7017370097189345419</guid><pubDate>Fri, 27 Aug 2021 07:50:00 +0000</pubDate><atom:updated>2021-09-03T11:49:09.246+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blockchain</category><category domain="http://www.blogger.com/atom/ns#">DApps</category><category domain="http://www.blogger.com/atom/ns#">Ethereum</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Kickstart Your dApps Development with the Ethereum dApps Next.js Boiletplate</title><description>&lt;p&gt;Follow up the &lt;a href=&quot;http://limcheekin.blogspot.com/2021/07/closing-gap.html&quot; target=&quot;_blank&quot;&gt;previous blog post&lt;/a&gt;, I plan to build Fluwix as DApps using Flutter. After search through the Internet, the harsh reality kick in: Most DApps in the market, sample codes and DApps-related libraries and frameworks written in JavaScript and as ReactJS components.&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is not impossible to port those libraries, frameworks and components to Dart and Flutter, but it is really a big undertaking. So, I picked up ReactJS and found &lt;a href=&quot;https://nextjs.org/&quot; target=&quot;_blank&quot;&gt;NextJS&lt;/a&gt;, the React Framework for Production. I also realized that the codes in the &lt;a href=&quot;https://www.amazon.com/Learn-Ethereum-decentralized-applications-contracts/dp/1789954118/&quot; target=&quot;_blank&quot;&gt;Learn Ethereum&lt;/a&gt;&amp;nbsp;book is outdated, hence I took the Udemy&#39;s&amp;nbsp;&lt;a href=&quot;https://www.udemy.com/course/master-ethereum-and-solidity-programming-with-real-world-apps/&quot; target=&quot;_blank&quot;&gt; Master Ethereum &amp;amp; Solidity Programming From Scratch&lt;/a&gt;&amp;nbsp;to have better understanding of the latest version of Solidity.&lt;/p&gt;&lt;p&gt;To keep the long story short, the outcome is&amp;nbsp;the Ethereum dApps Next.js Boiletplate.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFh4czMIVLKXDDRQbsEftgSFP2stCgDhp7xVOGahkYvQ8WBKJpm3e9vk4G5-IrcRa9_ecR7Ohz05z3Gil4w53zgr6KiTj32Rql1rBAA3ifrHL5hRDrAuZHxAK-UIvO_PeANJPm0llS9eMA/s896/main.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;560&quot; data-original-width=&quot;896&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFh4czMIVLKXDDRQbsEftgSFP2stCgDhp7xVOGahkYvQ8WBKJpm3e9vk4G5-IrcRa9_ecR7Ohz05z3Gil4w53zgr6KiTj32Rql1rBAA3ifrHL5hRDrAuZHxAK-UIvO_PeANJPm0llS9eMA/w400-h250/main.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The creation of the Ethereum dApps Next.js Boiletplate is inspired by a truffle box known as &lt;a href=&quot;https://www.trufflesuite.com/boxes/truffle-next&quot; target=&quot;_blank&quot;&gt;truffle-next&lt;/a&gt; with the following improvements:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;TypeScript support&lt;/li&gt;&lt;li&gt;WalletConnect integration&lt;/li&gt;&lt;li&gt;Better UI with Chakra UI&lt;/li&gt;&lt;li&gt;JQuery HTML example (without React)&lt;/li&gt;&lt;li&gt;Github workflow to run &lt;span style=&quot;font-family: courier;&quot;&gt;truffle test&lt;/span&gt; on every git push&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;It is tested with &lt;a href=&quot;https://metamask.io/&quot; target=&quot;_blank&quot;&gt;MetaMask&lt;/a&gt; Chrome extension and Android. I think it is good idea to test out &lt;a href=&quot;https://eth-dapps-nextjs-boiletplate.vercel.app/&quot; target=&quot;_blank&quot;&gt;the dApps&lt;/a&gt; yourself before you continue reading further.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The dApps is interacting with a &lt;a href=&quot;https://github.com/ethereum/ethereum-org/blob/master/views/content/greeter.md&quot; target=&quot;_blank&quot;&gt;Greeter smart contract&lt;/a&gt; that running on Rinkeby testnet, hence you need some ETH in your wallet. If you don&#39;t have any, you can request some ETH from &lt;a href=&quot;https://faucet.rinkeby.io/&quot; target=&quot;_blank&quot;&gt;Rinkeby Faucet&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You might wonder why I still go ahead to build this boiletplate as there&#39;s great abstractions such as &lt;a href=&quot;https://github.com/EthWorks/useDApp&quot; target=&quot;_blank&quot;&gt;useDApp&lt;/a&gt;, &lt;a href=&quot;https://github.com/NoahZinsmeister/web3-react&quot; target=&quot;_blank&quot;&gt;web3-react&lt;/a&gt;, &lt;a href=&quot;https://github.com/Web3Modal/web3modal&quot; target=&quot;_blank&quot;&gt;web3modal&lt;/a&gt;, etc. These libraries are great, but they are fall short on the following aspects:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Customization. To fully customize a functionality, we need to stick to low enough abstractions such as @metamask/detect-provider, web3 and @walletconnect/web3-provider.&lt;/li&gt;&lt;li&gt;To avoid abstraction over abstraction. For example, it would be hard to fix a bug on&amp;nbsp;useDApp and web3 which has inter-dependency. I think it is far better to build the abstraction specific to DApps ourself from the base libraries.&lt;/li&gt;&lt;li&gt;To upgrade the base libraries to the latest version without depends on the abstraction. For example, web3modal still using @walletconnect/web3-provider 1.3.x when the latest version is 1.6.x.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;If you are interested to look into the code and run it in your local machine, please check out the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/eth-dapps-nextjs-boiletplate&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/eth-dapps-nextjs-boiletplate&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope to hear from you soon! :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/08/kickstart-your-dapps-development-with.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFh4czMIVLKXDDRQbsEftgSFP2stCgDhp7xVOGahkYvQ8WBKJpm3e9vk4G5-IrcRa9_ecR7Ohz05z3Gil4w53zgr6KiTj32Rql1rBAA3ifrHL5hRDrAuZHxAK-UIvO_PeANJPm0llS9eMA/s72-w400-h250-c/main.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-794408855578998424</guid><pubDate>Thu, 15 Jul 2021 04:07:00 +0000</pubDate><atom:updated>2021-08-27T14:36:48.377+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blockchain</category><category domain="http://www.blogger.com/atom/ns#">Ethereum</category><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Substrate</category><title>Closing The Gap</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3Aum6R4Zsv7j4Qg55U077JdnzpbI0tvm6LkFM3mgsJTGRgxPOvJpGCg9Wer0VqhwwsPPu08OvGBqQFgBoEJZ9qUcIvzoKTx2tnMjI9yFLKhMzValw_BVSyoK_sZmHAdsXQ-NIg7qiLOv/s755/Closing+The+Gap.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;235&quot; data-original-width=&quot;755&quot; height=&quot;125&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3Aum6R4Zsv7j4Qg55U077JdnzpbI0tvm6LkFM3mgsJTGRgxPOvJpGCg9Wer0VqhwwsPPu08OvGBqQFgBoEJZ9qUcIvzoKTx2tnMjI9yFLKhMzValw_BVSyoK_sZmHAdsXQ-NIg7qiLOv/w400-h125/Closing+The+Gap.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;This is my personal story in the journey from Java back-end development to Flutter and Ethereum Decentralized Applications (DApps)&amp;nbsp;development. I wrote this post to capture my thoughts and experiences so far for ease of reference in the future.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you come across my previous blog post of titled &quot;&lt;a href=&quot;https://limcheekin.blogspot.com/2020/11/resurgence.html&quot; target=&quot;_blank&quot;&gt;The end is just a new beginning&lt;/a&gt;&quot;, you will notice that in 2013 to 2014, I am on full-stack development, and start from 2015 I am solely focus on back-end development. I intend to closing the knowledge gap of front-end development since last year and I chose Flutter.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before I start my journey for Flutter development, I would like to sum up my experiences in back-end APIs development besides the common Restful APIs, hence I published a blog post titled &quot;&lt;a href=&quot;https://limcheekin.blogspot.com/2020/12/standard-query-language-for-your-web.html&quot; target=&quot;_blank&quot;&gt;Standard query language for your Web API, why GraphQL and OData?&lt;/a&gt;&quot;. The blog post described the reasoning of using GraphQL API and OData API with code examples.&lt;div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Flutter&lt;/h2&gt;&lt;div&gt;In the early 2021, I created a Flutter App known as &lt;a href=&quot;https://limcheekin.blogspot.com/2021/01/your-first-flutter-app-flutter-widgets.html&quot; target=&quot;_blank&quot;&gt;Flutter Widgets Explorer&lt;/a&gt; to learn about Flutter widgets, so that I don&#39;t need to create a new Flutter project each time I want to learn about an interesting Flutter package I come across in pub.dev such as the&amp;nbsp;&lt;a href=&quot;https://pub.dev/packages/charts_flutter&quot; target=&quot;_blank&quot;&gt;Flutter Charting library&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As per any software project, the project is growing. It first being published to &lt;a href=&quot;https://limcheekin.blogspot.com/2021/03/flutter-widgets-explorer-go-live.html&quot; target=&quot;_blank&quot;&gt;Google Play Store as mobile apps&lt;/a&gt;. then running as &lt;a href=&quot;https://limcheekin.blogspot.com/2021/04/flutter-widgets-explorer-go-web-at-fluwix.com.html&quot; target=&quot;_blank&quot;&gt;web apps in Fluwix.com&lt;/a&gt;&amp;nbsp;and lastly &lt;a href=&quot;https://limcheekin.blogspot.com/2021/05/flutter-widgets-explorer-now-fluwix.html&quot; target=&quot;_blank&quot;&gt;Flutter Widgets Explorer mobile apps re-branded as Fluwix&lt;/a&gt;. Now the Fluwix is a Flutter showcases platform on the mobile apps and web. I also promote Fluwix via &lt;a href=&quot;https://limcheekin.blogspot.com/2021/05/the-fluwix-go-social.html&quot; target=&quot;_blank&quot;&gt;social media channels&lt;/a&gt;, so far the traffic is low.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I published the following prominent blog posts relevant to Flutter besides those showcases related:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://limcheekin.blogspot.com/2021/03/flutter-multi-modules-support.html&quot; target=&quot;_blank&quot;&gt;Flutter Multi-modules Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://limcheekin.blogspot.com/2021/03/flutter-navigation-fluttermodular-or.html&quot; target=&quot;_blank&quot;&gt;Flutter Navigation: flutter_modular or stacked?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://limcheekin.blogspot.com/2021/06/free-code-audit-for-flutter-project.html&quot; target=&quot;_blank&quot;&gt;Free Code Audit For Flutter Project&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://limcheekin.blogspot.com/2021/06/flutter-app-architecture-flutterbloc-or.html&quot; target=&quot;_blank&quot;&gt;Flutter App Architecture: flutter_bloc or flutter_clean_architecture?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The Fluwix platform is solely front-end application at the moment, I did think about adding back-end features few months ago, you can find out more from &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/23&quot; target=&quot;_blank&quot;&gt;this github issue&lt;/a&gt;. Should I use the traditional back-end stack I know well such as Micronaut or Spring Boot or brand new Web3 Decentralized Applications (DApps) stack such as Ethereum blockchain?&lt;/div&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Blockchain Technology&lt;/h2&gt;&lt;div&gt;After closing the gap, I&#39;m back to back-end technology again namely Blockchain. First, I took the Udemy&#39;s &lt;a href=&quot;https://www.udemy.com/course/build-your-blockchain-az/&quot; target=&quot;_blank&quot;&gt;Blockchain A-Z™: Learn How To Build Your First Blockchain&lt;/a&gt; course. Thanks to the clear explanation from the instructor, I have good grasp of intuitions on Blockchain, Cryptocurrency and Smart Contract.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After completed the course, I start exploring the Blockchain space by look beyond the obvious choice for DApps development: Ethereum. Substrate, a Rust-based framework to build your own blockchain by Polkadot catched my interest. In a short time, I find out that to get into Substrate, the&amp;nbsp;prerequisites are knowledge of Rust programming language and Web Assembly. I took the Udemy&#39;s&amp;nbsp;&lt;a href=&quot;https://www.udemy.com/course/rust-lang/&quot; target=&quot;_blank&quot;&gt;The Rust Programming Language&lt;/a&gt; course and completed the tutorial in &lt;a href=&quot;https://rustwasm.github.io/docs/book/introduction.html&quot; target=&quot;_blank&quot;&gt;Rust and WebAssembly&lt;/a&gt; book, then the &lt;a href=&quot;https://www.youtube.com/watch?v=qaykNPHJcyw&amp;amp;list=PLp0_ueXY_enXeTURZk2frt7muxf2Hz6sN&quot; target=&quot;_blank&quot;&gt;Build a Bitcoin-like Blockchain with Substrate - Beginner Friendly&lt;/a&gt; YouTube video series. After completed the video 3 of 5 of the YouTube series, I realized that I jumped the gun, I&#39;m a bit too far from DApps development. The Substrate framework is great for building your own blockhain a layer below the DApps instead of DApps itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a big trip to Rust and Substrate, I turn my attention to the obvious choice: Ethereum, I pick up the &lt;a href=&quot;https://www.amazon.com/Learn-Ethereum-decentralized-applications-contracts/dp/1789954118/&quot; target=&quot;_blank&quot;&gt;Learn Ethereum&lt;/a&gt; book and code along with it. Currently I am at 50% of the book, so far so good. You might interested to follow some of my github repositories:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/eth-erc721-marketplace&quot; target=&quot;_blank&quot;&gt;eth-erc721-marketplace: Ethereum Digital Art Marketplace (ERC-721)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/fluwix-token&quot; target=&quot;_blank&quot;&gt;fluwix-token: Fluwix Token (ERC-20)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/eth-todo&quot; target=&quot;_blank&quot;&gt;eth-todo: Ethereum Todo Smart Contract&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/substrate-utxo-workshop&quot; target=&quot;_blank&quot;&gt;substrate-utxo-workshop: Build a Bitcoin-like Blockchain with Substrate&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/wasm-game-of-life&quot; target=&quot;_blank&quot;&gt;wasm-game-of-life: Conway&#39;s Game of Life with Rust and Web Assembly&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/limcheekin/eth-dapps-nextjs-boiletplate&quot; target=&quot;_blank&quot;&gt;eth-dapps-nextjs-boiletplate: Ethereum dApps Next.js Boiletplate&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;div&gt;At this juncture, I can decide to build Fluwix as DApps over the Ethereum blockchain network. You can expect me to write more about this topic in the future. Lastly, a lesson learned &quot;Sometimes it is far easier to stay with the obvious choice&quot; even the exposure to Rust and Web Assembly is not totally wasted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Thanks for reading. I hope you get something out of my experiences. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/07/closing-gap.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3Aum6R4Zsv7j4Qg55U077JdnzpbI0tvm6LkFM3mgsJTGRgxPOvJpGCg9Wer0VqhwwsPPu08OvGBqQFgBoEJZ9qUcIvzoKTx2tnMjI9yFLKhMzValw_BVSyoK_sZmHAdsXQ-NIg7qiLOv/s72-w400-h125-c/Closing+The+Gap.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-5728553505306144840</guid><pubDate>Tue, 22 Jun 2021 04:49:00 +0000</pubDate><atom:updated>2021-06-22T12:52:14.902+08:00</atom:updated><title>Flutter App Architecture: flutter_bloc or flutter_clean_architecture?</title><description>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SZeMCxN1GiCZsuqTy001kyKm4JVi_WkbszdDi1hlChUTlUN-yvoXhqRFSkZJtOjN0XbhmUfXjPpo0gpiLPbfajcWGwSt22ZK2D3EV-AAfoikz7SA42_sg5PFfc1GAWEKhMjV8FkABwMO/s777/app_architecture.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;392&quot; data-original-width=&quot;777&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SZeMCxN1GiCZsuqTy001kyKm4JVi_WkbszdDi1hlChUTlUN-yvoXhqRFSkZJtOjN0XbhmUfXjPpo0gpiLPbfajcWGwSt22ZK2D3EV-AAfoikz7SA42_sg5PFfc1GAWEKhMjV8FkABwMO/w400-h201/app_architecture.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;The title of the blog post suppose to be &quot;Flutter App Architecture: flutter_bloc or flutter_clean_architecture or stacked?&quot; as I planned to look into comparison of Flutter App Architecture for &lt;a href=&quot;https://pub.dev/packages/flutter_bloc&quot; target=&quot;_blank&quot;&gt;flutter_bloc&lt;/a&gt;, &lt;a href=&quot;https://pub.dev/packages/flutter_clean_architecture&quot; target=&quot;_blank&quot;&gt;flutter_clean_architecture&lt;/a&gt; and &lt;a href=&quot;https://pub.dev/packages/stacked&quot; target=&quot;_blank&quot;&gt;stacked&lt;/a&gt; package using the Number Trivia app. Unluckily I bumped into Blockchain Technology recently which need my 100% focus, hence I don&#39;t have time for the stacked package. (If you&#39;re stacked supporter, it will be great if you can showcase stacked architecture using the same Number Trivia app). The good thing is the lengthy post become less lengthy.&lt;/p&gt;&lt;p&gt;You can see the Number Trivia showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;center style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/number_trivia&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px; cursor: move;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px; cursor: move;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px; cursor: move;&quot; /&gt;&lt;/a&gt;&lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px; cursor: move;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/center&gt;&lt;p&gt;Ala! Too bad the Number Trivia showcase only work in mobile apps and web host other than HTTPS such as localhost. As Fluwix.com is hosted in secured site, it is facing the following error when send a get request to the numbersapi.com which is insecured:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPWiyYvnBfQ5Hds4jNtWqP0Sx8ZzDp4F-pbrpc_iju_Tf0OQxJ96Pikb0gfxE4UZcChvbSjw_Db9tTECM_MmzmKxmcwf1d12qRftm9gaOvM7F2kemlj4EWGre9vcZeRfv3muau0Jzt9dPY/s689/error.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;45&quot; data-original-width=&quot;689&quot; height=&quot;26&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPWiyYvnBfQ5Hds4jNtWqP0Sx8ZzDp4F-pbrpc_iju_Tf0OQxJ96Pikb0gfxE4UZcChvbSjw_Db9tTECM_MmzmKxmcwf1d12qRftm9gaOvM7F2kemlj4EWGre9vcZeRfv3muau0Jzt9dPY/w400-h26/error.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Kindly let&#39;s me know if you found a solution for the error above.&lt;/p&gt;&lt;p&gt;You can find out details of the Number Trivia app and Clean Architecture from the excellent&amp;nbsp;&lt;a href=&quot;https://resocoder.com/2019/08/27/flutter-tdd-clean-architecture-course-1-explanation-project-structure/&quot; target=&quot;_blank&quot;&gt;Flutter TDD Clean Architecture Course&lt;/a&gt;, I will not repeat here. Let&#39;s look into the architecture and some code metrics without further ado.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;flutter_bloc&lt;/h2&gt;&lt;p&gt;Github repo:&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/tree/number_trivia_flutter_bloc/number_trivia&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix/tree/number_trivia_flutter_bloc/number_trivia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Total LOC for functional codes is 617 and test codes is 603. You can find out details of code metrics from the README of the link above.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Enhancements made from the original codes:&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Dependencies updated to the latest version and null safety support.&lt;/li&gt;&lt;li&gt;Replaced data_connection_checker package to connectivity_plus as it doesn&#39;t support null safety.&lt;/li&gt;&lt;li&gt;Added freezed package to generate toString/toJson/fromJson, hence model class is not needed.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;flutter_clean_architecture&lt;/h2&gt;&lt;div&gt;&lt;p&gt;Github repo:&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/tree/number_trivia_flutter_clean_architecture/number_trivia&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix/tree/number_trivia_flutter_clean_architecture/number_trivia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Total LOC for functional codes is 641 and test codes is 444. You can find out details of code metrics from the README of the link above. The test codes of flutter_clean_architecture has lesser LOC is due to there&#39;s no test cases for controller or presenter class where flutter_bloc has bloc tests. I raised a question &lt;a href=&quot;https://github.com/ShadyBoukhary/flutter_clean_architecture/issues/74&quot; target=&quot;_blank&quot;&gt;How do I write test for the controller or presenter class?&lt;/a&gt; to the official github repo. In my opinion, we still can write Widget tests to cover the testing of this functionality.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;The&amp;nbsp;flutter_clean_architecture package using view, controller and presenter classes compare to flutter_bloc package using event, bloc and state classes.&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusion&lt;/h2&gt;&lt;div&gt;&lt;div&gt;So, which one is good for your team? Some developers will say &quot;Learn X, and forget the rest.&quot; I tend to disagreed as every team&#39;s experience, expertise and background is different, I think it is better for your team to look into options available and pick the one that fit well with your team. Lastly, I will go for flutter_clean_architecture package as it&#39;s codes look more natural to me. By the way, you can further enhance the codes by using &lt;a href=&quot;https://pub.dev/packages/injectable&quot; target=&quot;_blank&quot;&gt;injectable&lt;/a&gt; package if you don&#39;t want to write the code in dependencies.dart file manually.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope this help and I&#39;d love to hear from you! :)&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/06/flutter-app-architecture-flutterbloc-or.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SZeMCxN1GiCZsuqTy001kyKm4JVi_WkbszdDi1hlChUTlUN-yvoXhqRFSkZJtOjN0XbhmUfXjPpo0gpiLPbfajcWGwSt22ZK2D3EV-AAfoikz7SA42_sg5PFfc1GAWEKhMjV8FkABwMO/s72-w400-h201-c/app_architecture.png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-2867418782823388430</guid><pubDate>Sat, 05 Jun 2021 09:07:00 +0000</pubDate><atom:updated>2021-06-05T17:13:19.653+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Free Code Audit For Flutter Project</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ3QmyJw3qFS60wELiuJSHlxQxsMv22QohKwegAlYpxDyE0fop-4JcA4eXm_p33aVStgceSMBUuzNTg_n8n6jLe015jzEcrqBf9zqmGgieSj6QUm6FSWq55jf0SHYPKMpG2hdc1rLPZ6LA/s747/free-code-audit-flutter.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;251&quot; data-original-width=&quot;747&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ3QmyJw3qFS60wELiuJSHlxQxsMv22QohKwegAlYpxDyE0fop-4JcA4eXm_p33aVStgceSMBUuzNTg_n8n6jLe015jzEcrqBf9zqmGgieSj6QUm6FSWq55jf0SHYPKMpG2hdc1rLPZ6LA/w400-h135/free-code-audit-flutter.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;When you see the title you must think that this is a click bait, otherwise it is too good to be true, right? Is there any catch? It is &lt;b&gt;Better Code Initiative &lt;/b&gt;run by me to raise the awareness on code quality matters among stakeholders of computerized systems/apps and IT projects, not just developers.&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is inspired by a conversation between a Flutter developer and I on the subject of code quality as in my opinion &quot;Most businesses don&#39;t care about code quality until their application or system crashed in the production environment&quot;. I hope you prove me wrong if you are a business stakeholder who is reading the article. By the way, if you care about code quality, your engineering team members will put priority on the quality of codes they wrote, which in turn will improve the overall health and robustness of your application or system.&lt;/p&gt;&lt;p&gt;You can adopt the best practices of writing code used internally at Google for free with 3 steps:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Add the&amp;nbsp;&lt;a href=&quot;https://pub.dev/packages/pedantic&quot; target=&quot;_blank&quot;&gt;pedantic&lt;/a&gt;&amp;nbsp;package to the &lt;span style=&quot;font-family: courier;&quot;&gt;dev_dependencies&lt;/span&gt;&amp;nbsp;of the pubspec.yaml file of your Flutter project before you write the first line of code, for example&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;pedantic: ^1.11.0&amp;nbsp;&lt;/span&gt;at the time of writing.&lt;/li&gt;&lt;li&gt;&amp;nbsp;Add a analysis_options.yaml file to the root directory of your Flutter project with the following line: &lt;span style=&quot;font-family: courier;&quot;&gt;include: package:pedantic/analysis_options.yaml&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Your IDE such as Visual Studio Code will report the code issues automatically or you can see the list of code issues by execute the &lt;span style=&quot;font-family: courier;&quot;&gt;flutter analyze&lt;/span&gt; in the command line.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;If you still not sure how to do it, you can check out the offer&amp;nbsp;&lt;a href=&quot;https://www.fiverr.com/limcheekin/audit-the-code-quality-of-your-flutter-project-for-free&quot; target=&quot;_blank&quot;&gt;I will audit the code quality of your flutter projects for free at Fiverr&lt;/a&gt;. I will generate a report for your Flutter project including:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Summary of number of code analysis/linting issues and null safety issues&lt;/li&gt;&lt;li&gt;List of code analysis/linting issues and null safety issues&lt;/li&gt;&lt;li&gt;Cost of fixing the issues reported&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You can see the sample report below:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3J7cbMLgHfuwXZYWQbOwbTjtFgn20NedczASNDrL5Xo08W2xHL1Gkp8E4zFIu2tkmC-vKV1B_Y8iJ5WDJ1xj7u_TPxB0rw8mL_TzFTsFDIrqELLWq0AEc905gQrlqQsY-Afg80mcR7CBQ/s727/Flutter+Code+Audit+Report+Template.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;471&quot; data-original-width=&quot;727&quot; height=&quot;259&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3J7cbMLgHfuwXZYWQbOwbTjtFgn20NedczASNDrL5Xo08W2xHL1Gkp8E4zFIu2tkmC-vKV1B_Y8iJ5WDJ1xj7u_TPxB0rw8mL_TzFTsFDIrqELLWq0AEc905gQrlqQsY-Afg80mcR7CBQ/w400-h259/Flutter+Code+Audit+Report+Template.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;If you need helping hands to fix the coding issues and improving the code quality of your Flutter project, please feel free to contact me.&lt;/p&gt;&lt;p&gt;Hear from you soon! :)&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/06/free-code-audit-for-flutter-project.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ3QmyJw3qFS60wELiuJSHlxQxsMv22QohKwegAlYpxDyE0fop-4JcA4eXm_p33aVStgceSMBUuzNTg_n8n6jLe015jzEcrqBf9zqmGgieSj6QUm6FSWq55jf0SHYPKMpG2hdc1rLPZ6LA/s72-w400-h135-c/free-code-audit-flutter.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-5648017503060433461</guid><pubDate>Sat, 29 May 2021 07:15:00 +0000</pubDate><atom:updated>2021-05-29T15:26:20.495+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Fluwix</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>FlutterQuill: A rich text editor for Flutter</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgew30uzeZPyPkvvst5EE3Qntf42BT3VtBZvpB6O5zC2saWPp72AwBclgXZ5NiNPpSQf5m3fyT5IunEbbm6gZNwWUSGTLoc298OBtueiWMIXY-Pua3RXVZmpOu4YbmhWIVh1GhCJr1h89ps/s777/rich_text_editor.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;391&quot; data-original-width=&quot;777&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgew30uzeZPyPkvvst5EE3Qntf42BT3VtBZvpB6O5zC2saWPp72AwBclgXZ5NiNPpSQf5m3fyT5IunEbbm6gZNwWUSGTLoc298OBtueiWMIXY-Pua3RXVZmpOu4YbmhWIVh1GhCJr1h89ps/w400-h201/rich_text_editor.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The Rich Text Editor showcase the example of the &lt;a href=&quot;https://pub.dev/packages/flutter_quill&quot; target=&quot;_blank&quot;&gt;flutter_quill&lt;/a&gt;&amp;nbsp;package created by Xin Yao from &lt;a href=&quot;https://bulletjournal.us/home/index.html&quot; target=&quot;_blank&quot;&gt;BulletJournal.us&lt;/a&gt;. In my opinion, the package is the best Rich Text Editor for Flutter, please let me know if you found a better one.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/rich_text_editor&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new?labels=showcase&quot; target=&quot;_blank&quot;&gt;add your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Kindly &lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;share your Flutter problem to us&lt;/a&gt;, we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;rich_text_editor&amp;nbsp;&lt;/b&gt;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hear from you soon! :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/05/flutterquill-rich-text-editor-for.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgew30uzeZPyPkvvst5EE3Qntf42BT3VtBZvpB6O5zC2saWPp72AwBclgXZ5NiNPpSQf5m3fyT5IunEbbm6gZNwWUSGTLoc298OBtueiWMIXY-Pua3RXVZmpOu4YbmhWIVh1GhCJr1h89ps/s72-w400-h201-c/rich_text_editor.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-5025058286388946654</guid><pubDate>Tue, 25 May 2021 08:50:00 +0000</pubDate><atom:updated>2021-05-25T18:51:30.896+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Fluwix</category><title>The Fluwix Go Social!</title><description>I&#39;m glad to inform you that I created a Facebook Page for Fluwix at &lt;a href=&quot;https://www.facebook.com/fluwixfb&quot; target=&quot;_blank&quot;&gt;https://www.facebook.com/fluwixfb&lt;/a&gt;. Feel free to like, share and follow the page.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifSOCnBUGke5w3BPhTVtKpXThXMzu_mrS3-AzPNYxQgZOKUaNfO4dHcRdzUuWEzPvD5_lp9wfre6T1Rrw8IWBks6i-3ln2SsL_sII5ibeQmjxgm8sCKeSUJTWtua-Q4AYPuXL904aQB5rl/s1600/fb_page.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifSOCnBUGke5w3BPhTVtKpXThXMzu_mrS3-AzPNYxQgZOKUaNfO4dHcRdzUuWEzPvD5_lp9wfre6T1Rrw8IWBks6i-3ln2SsL_sII5ibeQmjxgm8sCKeSUJTWtua-Q4AYPuXL904aQB5rl/w400-h225/fb_page.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, a Telegram Group created at &lt;a href=&quot;https://t.me/fluwix_chat&quot; target=&quot;_blank&quot;&gt;https://t.me/fluwix_chat&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;script async=&quot;&quot; data-comments-limit=&quot;5&quot; data-dark=&quot;1&quot; data-telegram-discussion=&quot;fluwix/6&quot; src=&quot;https://telegram.org/js/telegram-widget.js?15&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;Let&#39;s connect and chat!&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/05/the-fluwix-go-social.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifSOCnBUGke5w3BPhTVtKpXThXMzu_mrS3-AzPNYxQgZOKUaNfO4dHcRdzUuWEzPvD5_lp9wfre6T1Rrw8IWBks6i-3ln2SsL_sII5ibeQmjxgm8sCKeSUJTWtua-Q4AYPuXL904aQB5rl/s72-w400-h225-c/fb_page.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-3565362453201969664</guid><pubDate>Fri, 21 May 2021 09:20:00 +0000</pubDate><atom:updated>2021-05-21T17:23:42.501+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Expandable Floating Search Bar</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzuWVEnhBYvi-KZCMtYqdr7nKg30H1UE_2cvUuY5viVjlGHuiCSBodMceA3G2KAjystq5C2B89XkxZUw2J553l7k6A5oGc_UWNo1bDHV2mY3MLhZq2RQ5pbtbdfkEF0CVLIO5ByZIxZ_nf/s776/search_bar.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;390&quot; data-original-width=&quot;776&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzuWVEnhBYvi-KZCMtYqdr7nKg30H1UE_2cvUuY5viVjlGHuiCSBodMceA3G2KAjystq5C2B89XkxZUw2J553l7k6A5oGc_UWNo1bDHV2mY3MLhZq2RQ5pbtbdfkEF0CVLIO5ByZIxZ_nf/w400-h201/search_bar.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;The Search Bar showcase the example of the &lt;a href=&quot;https://pub.dev/packages/material_floating_search_bar&quot; target=&quot;_blank&quot;&gt;material_floating_search_bar&lt;/a&gt;&amp;nbsp;package using the code shared by &lt;a href=&quot;https://resocoder.com/2021/01/23/search-bar-in-flutter-logic-material-ui/&quot; target=&quot;_blank&quot;&gt;ResoCoder&lt;/a&gt;. The package simplify the creation of expandable floating search bar similar to the one Google used in their own apps.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/search_bar&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new?labels=showcase&quot; target=&quot;_blank&quot;&gt;add your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Kindly &lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;share your Flutter problem to us&lt;/a&gt;, we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;search_bar&amp;nbsp;&lt;/b&gt;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope to hear from you. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/05/expandable-floating-search-bar.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzuWVEnhBYvi-KZCMtYqdr7nKg30H1UE_2cvUuY5viVjlGHuiCSBodMceA3G2KAjystq5C2B89XkxZUw2J553l7k6A5oGc_UWNo1bDHV2mY3MLhZq2RQ5pbtbdfkEF0CVLIO5ByZIxZ_nf/s72-w400-h201-c/search_bar.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-7062663396868596381</guid><pubDate>Fri, 14 May 2021 08:20:00 +0000</pubDate><atom:updated>2021-05-14T16:24:33.060+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Create Native Settings for Flutter App in minutes</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8976-sahnoGSg_GtohrFxa6bHrwq9c6kk_Pa_caj9PtvdnaJ6PzVDB4VQkoLyeioMUF8c4HcWOkxQkLrDOzKQ5V7AWKdORqJwg74YWsX-anpmd3LSg-lGG8fsfZgkeGOmXRCta1vmhlKv/s778/settings_ui.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;392&quot; data-original-width=&quot;778&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8976-sahnoGSg_GtohrFxa6bHrwq9c6kk_Pa_caj9PtvdnaJ6PzVDB4VQkoLyeioMUF8c4HcWOkxQkLrDOzKQ5V7AWKdORqJwg74YWsX-anpmd3LSg-lGG8fsfZgkeGOmXRCta1vmhlKv/w400-h201/settings_ui.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The Settings UI showcase the example of the &lt;a href=&quot;https://pub.dev/packages/settings_ui&quot; target=&quot;_blank&quot;&gt;settings_ui&lt;/a&gt;&amp;nbsp;package created by &lt;a href=&quot;https://www.yako.io/&quot; target=&quot;_blank&quot;&gt;Yako.io&lt;/a&gt;. The package simplify the creation of Settings screen.&lt;/div&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/settings_ui_showcase&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;add your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;settings_ui_showcase&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope to hear from you. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/05/create-native-settings-for-flutter-app.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8976-sahnoGSg_GtohrFxa6bHrwq9c6kk_Pa_caj9PtvdnaJ6PzVDB4VQkoLyeioMUF8c4HcWOkxQkLrDOzKQ5V7AWKdORqJwg74YWsX-anpmd3LSg-lGG8fsfZgkeGOmXRCta1vmhlKv/s72-w400-h201-c/settings_ui.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-7807609277966245749</guid><pubDate>Sat, 08 May 2021 07:01:00 +0000</pubDate><atom:updated>2021-05-08T15:01:02.974+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Fluwix: The Neumorphism Design</title><description>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhI6XM7MbburtKCL4iPAiDbIgKbGleL2ZeVrZ6n1sMAA349wHrVq7tq_niQHYhEch9NtUQYxQsNbysiSVuj9xgNtwpdeVW9ljwbzkBtX3Z7TSIYRTbxIxqziWqviSZIkanvqlOTxxktvOW/s776/Neumorphism.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;387&quot; data-original-width=&quot;776&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhI6XM7MbburtKCL4iPAiDbIgKbGleL2ZeVrZ6n1sMAA349wHrVq7tq_niQHYhEch9NtUQYxQsNbysiSVuj9xgNtwpdeVW9ljwbzkBtX3Z7TSIYRTbxIxqziWqviSZIkanvqlOTxxktvOW/w400-h200/Neumorphism.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span&gt;The Neumorphism Design showcase the example of the&amp;nbsp;&lt;a href=&quot;https://pub.dev/packages/flutter_neumorphic&quot; target=&quot;_blank&quot;&gt;flutter_neumorphic&lt;/a&gt;&amp;nbsp;package created by &lt;a href=&quot;http://www.idean.com&quot; target=&quot;_blank&quot;&gt;Idean.com&lt;/a&gt;. There are 6 categories of showcase such as Neumorphic Playground, Text Playground, Samples, Widgets, Tips and Accessibility.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;You can see the following showcase live powered by&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/neumorphism_design&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the n&lt;b&gt;eumorphism_design&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;&lt;b&gt;Lastly, Flutter Widgets Explorer now&amp;nbsp;re-branded to Fluwix, so that the&amp;nbsp;&lt;/b&gt;&lt;b&gt;mobile apps and web is&lt;/b&gt;&lt;b&gt;&amp;nbsp;under one brand.&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Hope to hear from you. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/05/fluwix-neumorphism-design.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhI6XM7MbburtKCL4iPAiDbIgKbGleL2ZeVrZ6n1sMAA349wHrVq7tq_niQHYhEch9NtUQYxQsNbysiSVuj9xgNtwpdeVW9ljwbzkBtX3Z7TSIYRTbxIxqziWqviSZIkanvqlOTxxktvOW/s72-w400-h200-c/Neumorphism.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-5291727014866374365</guid><pubDate>Thu, 06 May 2021 09:41:00 +0000</pubDate><atom:updated>2021-05-06T17:44:21.794+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Widgets Explorer now Fluwix</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89qiZWC3onyPUeUw7psE_X7lPtTwcsR7liSQpPWsqI9o9uo_8JKqbG9W-1h06DxXAUONP21_A7cPzNsWx4R5RDBPXxvNx1NJ3lJjr3axZfN1Yz91LphzNuxdSm3WKdrjkGtEqBGV2vCh7/s854/flutter-widget-explorer-rebranded.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;129&quot; data-original-width=&quot;854&quot; height=&quot;60&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89qiZWC3onyPUeUw7psE_X7lPtTwcsR7liSQpPWsqI9o9uo_8JKqbG9W-1h06DxXAUONP21_A7cPzNsWx4R5RDBPXxvNx1NJ3lJjr3axZfN1Yz91LphzNuxdSm3WKdrjkGtEqBGV2vCh7/w400-h60/flutter-widget-explorer-rebranded.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I&#39;m glad to inform you that Flutter Widgets Explorer is rebranded to Fluwix. Start from now the mobile apps and the web app under one brand name.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8nJScslpd9MGY3dbG6tw3cv5fAQczz_6iWLdZfX16_h1cFjPQnGdTQd9wFn1CtxSE9NgUZYUiGkUbhbBiABEVwsQJv19YJytMdMWDYUNGM92_nGqWLZYdewXbD1gU65g0TxN9gbXGbI4Y/s1280/fluwix-google-play-store.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8nJScslpd9MGY3dbG6tw3cv5fAQczz_6iWLdZfX16_h1cFjPQnGdTQd9wFn1CtxSE9NgUZYUiGkUbhbBiABEVwsQJv19YJytMdMWDYUNGM92_nGqWLZYdewXbD1gU65g0TxN9gbXGbI4Y/w225-h400/fluwix-google-play-store.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;I think the experience of manage the re-branding process is worth sharing here besides the announcement. First of all, if you change the&amp;nbsp;&lt;i&gt;applicationId &lt;/i&gt;of the android app, you&#39;re actually publish a new app instead of update the existing one in the Google Play Store. Hence, you need a proper way to phase out the existing app and inform user the new app. I&#39;m adopted the following process:&lt;div&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;1. Making all the necessary changes for app re-branding and publish the new app to Google Play Store.&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;2. Once the new app is ready to be installed by users, update the existing app to inform users to install the new app. I&#39;m using alert dialog, please refer to the following screen:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1uM0oNKtZYQS0ZSXgdHiTBbdoTz9emD8B6c2TyKJ_K5PQ5WWuCY0e7hrbX1I0tApQ3DlbiokB_OGOR8yeHjegYgoxSz9VaFtCeyg2RogMG5efjkrETHZZK9ZGX2PBdKrzrHDsRG1Tv4J/s1280/Flutter+Widgets+Explorer+rebranded.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1uM0oNKtZYQS0ZSXgdHiTBbdoTz9emD8B6c2TyKJ_K5PQ5WWuCY0e7hrbX1I0tApQ3DlbiokB_OGOR8yeHjegYgoxSz9VaFtCeyg2RogMG5efjkrETHZZK9ZGX2PBdKrzrHDsRG1Tv4J/w225-h400/Flutter+Widgets+Explorer+rebranded.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;3. After user click the &quot;Install Now&quot; button, it will bring the user to the Google Play Store screen to install the app.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;&lt;p&gt;Please let&#39;s me know if you have better way to manage the re-branding process.&lt;/p&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the&amp;nbsp;&lt;b&gt;retiring&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope to hear from you!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/05/flutter-widgets-explorer-now-fluwix.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89qiZWC3onyPUeUw7psE_X7lPtTwcsR7liSQpPWsqI9o9uo_8JKqbG9W-1h06DxXAUONP21_A7cPzNsWx4R5RDBPXxvNx1NJ3lJjr3axZfN1Yz91LphzNuxdSm3WKdrjkGtEqBGV2vCh7/s72-w400-h60-c/flutter-widget-explorer-rebranded.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-2089742255765601104</guid><pubDate>Fri, 30 Apr 2021 08:25:00 +0000</pubDate><atom:updated>2021-05-06T16:08:20.728+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Fluwix: The Glassmorphism Design</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpsoYvoLaRzCfeyPbhil3yGq8ofRocv-PBvjcwI_pixoLCZwmlEbwZ1QDDctY3ecPcipT0yRy-2XQJ-pkqa7nLyH4FBILYrcdpstCXvzABxxK_LF0l6VH9mo9ZIYJ6vKzk3n7zmHa7yy1/s779/glassmorphism.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;391&quot; data-original-width=&quot;779&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpsoYvoLaRzCfeyPbhil3yGq8ofRocv-PBvjcwI_pixoLCZwmlEbwZ1QDDctY3ecPcipT0yRy-2XQJ-pkqa7nLyH4FBILYrcdpstCXvzABxxK_LF0l6VH9mo9ZIYJ6vKzk3n7zmHa7yy1/w400-h201/glassmorphism.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The Glassmorphism Design showcase an example of the &lt;a href=&quot;https://www.blogger.com/u/2/#&quot;&gt;glassmorphism&lt;/a&gt; package created by&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/RitickSaha&quot; target=&quot;_blank&quot;&gt;Ritick Saha&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;The package simplified the creation of Glassmorphic container. I not sure why the package&#39;s owner make the &lt;i&gt;width&lt;/i&gt; and &lt;i&gt;height&lt;/i&gt; properties of the&amp;nbsp;&lt;i&gt;GlassmorphicContainer&lt;/i&gt; class required. It is harder to make a widget responsive if you need to specify the height and width of the widget.&lt;/p&gt;&lt;p&gt;You can see the following showcase live powered by &lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/glassmorphism_design&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A platform to learn and showcase your Flutter Widgets on the mobile and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Flutter Widgets Explorer&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;glassmorphism_design&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;&lt;b&gt;Lastly, Flutter Widgets Explorer is &lt;i&gt;still&lt;/i&gt; in the progress of re-branding to Fluwix, so that the&amp;nbsp;&lt;/b&gt;&lt;b&gt;mobile apps and web is&lt;/b&gt;&lt;b&gt;&amp;nbsp;under one brand name.&lt;/b&gt;&lt;/p&gt;&lt;div&gt;I&#39;d love to hear from you. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/04/fluwix-glassmorphism-design.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpsoYvoLaRzCfeyPbhil3yGq8ofRocv-PBvjcwI_pixoLCZwmlEbwZ1QDDctY3ecPcipT0yRy-2XQJ-pkqa7nLyH4FBILYrcdpstCXvzABxxK_LF0l6VH9mo9ZIYJ6vKzk3n7zmHa7yy1/s72-w400-h201-c/glassmorphism.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-1138586063983506166</guid><pubDate>Sat, 24 Apr 2021 03:45:00 +0000</pubDate><atom:updated>2021-05-06T16:08:55.986+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Fluwix: The Percent Indicator</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikbPUKerIlSwMzDFthQMuguZ_6IPp3KHxkfu6Ub87I0f6FkWg3aB4Cr36dkm-sc7GN-RXNI_lSl1uitLU4LbItCdeLeXkVRWW-PiWpyVDniqvne6x4N_JT9_8wNfV9LU-D5-Je0avPmymq/s776/percent_indicator.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;390&quot; data-original-width=&quot;776&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikbPUKerIlSwMzDFthQMuguZ_6IPp3KHxkfu6Ub87I0f6FkWg3aB4Cr36dkm-sc7GN-RXNI_lSl1uitLU4LbItCdeLeXkVRWW-PiWpyVDniqvne6x4N_JT9_8wNfV9LU-D5-Je0avPmymq/w400-h201/percent_indicator.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The Percent Indicator display animated progress widgets based on percentage, can be Circular or Linear, you can also customize it to your needs.. It was created by &lt;a href=&quot;https://diegoveloper.com/&quot; target=&quot;_blank&quot;&gt;Diego Velásquez&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can see the following showcase live powered by &lt;a href=&quot;https://www.fluwix.com/&quot; target=&quot;_blank&quot;&gt;Fluwix.com&lt;/a&gt;:-&lt;/p&gt;
&lt;script&gt;
    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#example
    function toggleFullscreen() {
        let elem = document.querySelector(&quot;#fluwix&quot;);

        if (!document.fullscreenElement) {
            elem.requestFullscreen().catch(err =&gt; {
                alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
            });
        } else {
            document.exitFullscreen();
        }
    }
&lt;/script&gt;
&lt;center&gt;
&lt;iframe allowfullscreen=&quot;true&quot; height=&quot;576&quot; id=&quot;fluwix&quot; src=&quot;https://www.fluwix.com/percent_indicator_showcase&quot; style=&quot;border: 0;&quot; title=&quot;Fluwix: A Flutter showcase platform on the mobile apps and web&quot; width=&quot;324&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;background-color: black; display: flex; justify-content: space-evenly; width: 324px;&quot;&gt;
    &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Google Play Store&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/google_play_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://www.fluwix.com&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Flutter Widgets Explorer&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/fluwix-com-24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Fluwix Source Repository&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/github_black_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
    &lt;a onclick=&quot;toggleFullscreen()&quot;&gt;&lt;img alt=&quot;Click for full screen&quot; border=&quot;0&quot; src=&quot;https://fluwix.com/images/embed/full_screen_24.png&quot; style=&quot;border: 0px;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the&amp;nbsp;&lt;b&gt;percent_indicator_showcase&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;&lt;b&gt;Lastly, Flutter Widgets Explorer is in the progress of re-branding to Fluwix, so that the&amp;nbsp;&lt;/b&gt;&lt;b&gt;mobile apps and web is&lt;/b&gt;&lt;b&gt;&amp;nbsp;under one brand name.&lt;/b&gt;&lt;/p&gt;&lt;div&gt;I&#39;d love to hear from you. :)&lt;/div&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/04/fluwix-percent-indicator.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikbPUKerIlSwMzDFthQMuguZ_6IPp3KHxkfu6Ub87I0f6FkWg3aB4Cr36dkm-sc7GN-RXNI_lSl1uitLU4LbItCdeLeXkVRWW-PiWpyVDniqvne6x4N_JT9_8wNfV9LU-D5-Je0avPmymq/s72-w400-h201-c/percent_indicator.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-8988340972801270954</guid><pubDate>Fri, 16 Apr 2021 06:52:00 +0000</pubDate><atom:updated>2021-05-06T16:07:39.428+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Widgets Explorer Go Web @ fluwix.com</title><description>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimzzI-25XLbVZ8CvBuNGlaAP0FI9aCJ9xBwUl7juOuJbxodC-PGVNzuzlvJFoey4la6F6LviWuPXbu5CrhnHTdLrN57JhYvyMDXqUl3RmyKQFccE0DpGwYwRoI5SbopiXe_SfSgUq9rrEj/s782/fluwix_header.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;394&quot; data-original-width=&quot;782&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimzzI-25XLbVZ8CvBuNGlaAP0FI9aCJ9xBwUl7juOuJbxodC-PGVNzuzlvJFoey4la6F6LviWuPXbu5CrhnHTdLrN57JhYvyMDXqUl3RmyKQFccE0DpGwYwRoI5SbopiXe_SfSgUq9rrEj/w400-h201/fluwix_header.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The Web version of the Flutter Widgets Explorer finally released to production at &lt;a href=&quot;http://fluwix.com&quot; target=&quot;_blank&quot;&gt;fluwix.com&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;You see a word &quot;finally&quot; in the sentence above as the efforts required to web-enabled a Flutter mobile apps is greatly underestimated by me. I initially thought that I just need to make the layout of the app responsive, then it should run on the web automatically. The current stage of Flutter web support prove me wrong.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I wouldn&#39;t like to bore you with the details for now and let&#39;s me show you the outcome. On the left of the following image is how the Flutter Widgets Explorer looks on the first launch when it is run on your mobile browser and on the right is on your desktop browser:&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuP2R5vMKF6oVfWHk7E2TqalUbZERBg3Pwz2pcMZO0BTNhue3gehklAQMilBa_MQTZruHFIqY_dz4U790hDUcoCKnvdpuRIGPH4FCZtc2FyJRzavH2g6RRV6m3mIxbqK2bYiMmprF42fQb/s2100/fluwix_home.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;873&quot; data-original-width=&quot;2100&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuP2R5vMKF6oVfWHk7E2TqalUbZERBg3Pwz2pcMZO0BTNhue3gehklAQMilBa_MQTZruHFIqY_dz4U790hDUcoCKnvdpuRIGPH4FCZtc2FyJRzavH2g6RRV6m3mIxbqK2bYiMmprF42fQb/w400-h166/fluwix_home.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Then, let&#39;s select the newly added showcase &quot;Material Design Showcase&quot;, on the left of the following image is how the Material Design Showcase looks when it is run on your mobile browser and on the right is on your desktop browser:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM9-Q9nf4EU6MQBEm2GSVVmht-zL7lej4-4wyFt56hyphenhyphenBkIkkDDSUaH-8LTyFzmOzvV0xh-w1ayGB6WG5LvziGcgKWeiNVSxOBEBidUbRpsgu42j_dzXl2FsQfERUVJWFqPQfXOjoDKDvpd/s2100/material_design_showcase.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;873&quot; data-original-width=&quot;2100&quot; height=&quot;166&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM9-Q9nf4EU6MQBEm2GSVVmht-zL7lej4-4wyFt56hyphenhyphenBkIkkDDSUaH-8LTyFzmOzvV0xh-w1ayGB6WG5LvziGcgKWeiNVSxOBEBidUbRpsgu42j_dzXl2FsQfERUVJWFqPQfXOjoDKDvpd/w400-h166/material_design_showcase.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Alternatively, you can access the Material Design Showcase with direct link&amp;nbsp;&lt;a href=&quot;https://www.fluwix.com/material_design_showcase&quot; target=&quot;_blank&quot;&gt;https://www.fluwix.com/material_design_showcase&lt;/a&gt;, please see the following image:&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1QlfvmpXMd5C_UqQOV9Hv_HDjWTCnYfHPZEnfWrU-IyohScjGgGULEaXDyzB7xF11DYS5T6UwvIr_bZ3dJHsftwos0kQsnw23XimJDY7QKMKMsdc3hgHwYqe4a4V8qGzEheQbXDPj1c3N/s1600/Screenshot+from+2021-04-16+14-39-51.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;873&quot; data-original-width=&quot;1600&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1QlfvmpXMd5C_UqQOV9Hv_HDjWTCnYfHPZEnfWrU-IyohScjGgGULEaXDyzB7xF11DYS5T6UwvIr_bZ3dJHsftwos0kQsnw23XimJDY7QKMKMsdc3hgHwYqe4a4V8qGzEheQbXDPj1c3N/w400-h219/Screenshot+from+2021-04-16+14-39-51.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please &lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Are you facing any problem with your Flutter development? Please answer the &lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/p&gt;&lt;p&gt;Lastly, If you are interested to look into details of how I web-enabled the mobile apps and how the Material Design Showcase module is created, please check out the&amp;nbsp;&lt;b&gt;responsive&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b&gt;material_design_showcase&lt;/b&gt;&amp;nbsp;branch&amp;nbsp;of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;Hope to hear from you soon! :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/04/flutter-widgets-explorer-go-web-at-fluwix.com.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimzzI-25XLbVZ8CvBuNGlaAP0FI9aCJ9xBwUl7juOuJbxodC-PGVNzuzlvJFoey4la6F6LviWuPXbu5CrhnHTdLrN57JhYvyMDXqUl3RmyKQFccE0DpGwYwRoI5SbopiXe_SfSgUq9rrEj/s72-w400-h201-c/fluwix_header.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-6196469694546100022</guid><pubDate>Fri, 09 Apr 2021 09:11:00 +0000</pubDate><atom:updated>2021-04-09T17:26:51.745+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Machine Learning</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Pay $0.01 for Cloud Hosted MLflow</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhBIUZCk_It_3IPxu2NLd5-xiCP9YQMq_B6S_EHvXDIK690SnkQiziaQ5feu6_bep-38ZX3cO0ElJDSUiwl9Ww7T5kzIJaDkfxqS8yCvxMpumW2h_OUc5pyo5ETRsUsH2y_erNo_U6oadC/s501/aws_mlflow.png&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;145&quot; data-original-width=&quot;501&quot; height=&quot;116&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhBIUZCk_It_3IPxu2NLd5-xiCP9YQMq_B6S_EHvXDIK690SnkQiziaQ5feu6_bep-38ZX3cO0ElJDSUiwl9Ww7T5kzIJaDkfxqS8yCvxMpumW2h_OUc5pyo5ETRsUsH2y_erNo_U6oadC/w400-h116/aws_mlflow.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;Let&#39;s say you&#39;re a&amp;nbsp;ML practitioner working in start up, small company or any company that had limited budget and you would like to explore the use of MLflow to manage your team&#39;s machine learning life cycle, but you don&#39;t want to take the hassle of setup your own instance of MLflow. Then, the good new is &quot;You can have your own MLflow tracking server and MLflow UI running on the cloud for $0.01 only&quot;, that&#39;s sound unbelievable, right?&lt;p&gt;I found the following great deal from &lt;a href=&quot;https://aws.amazon.com/marketplace/pp/InfinStor-InfinStor-Starter-MLflow/B08FB3FYB8&quot; target=&quot;_blank&quot;&gt;AWS Marketplace&lt;/a&gt;:&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsNevRZnPxVRjollM3J8WTN81qebcH-BgSjridBgk5Ps3n5aEC3fn5re0NneyahO2UjorqAWIQnwi_1uPxSiiX8isnBuVDLyNOVlw4qCcj6NYD3Zk3u22nz-iORL3K-BUPwpP-L2MXVQiH/s589/infinstor_deal.png&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;416&quot; data-original-width=&quot;589&quot; height=&quot;283&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsNevRZnPxVRjollM3J8WTN81qebcH-BgSjridBgk5Ps3n5aEC3fn5re0NneyahO2UjorqAWIQnwi_1uPxSiiX8isnBuVDLyNOVlw4qCcj6NYD3Zk3u22nz-iORL3K-BUPwpP-L2MXVQiH/w400-h283/infinstor_deal.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;When I come across the offer above from InfinStor, I think it is too good to be true, there&#39;s must be a catch. I decided to take up the offer and try it out. First of all, I don&#39;t have any affiliation or association with InfinStor, I wrote this post is simply for sharing purpose.&lt;/p&gt;&lt;p&gt;Once you sign up and login to the InfinStor console, you will see the following screen which clearly tell you what is the possible &quot;hidden&quot; cost involved.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8kjcjCG0YZ3PVBDy3ktK4Hi1xMaIBeG-mrFrx-OzpNqeVz8xU11oUijt8Vvm6JZNaDoI3-EZ3WX2Up-v9NyDvajV0d1BVl2Q5rp4fqtH8aDKiN1qX5hZN5vBn57GShHBy9jB_eRN2QvCR/s1569/infinstor-console.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;770&quot; data-original-width=&quot;1569&quot; height=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8kjcjCG0YZ3PVBDy3ktK4Hi1xMaIBeG-mrFrx-OzpNqeVz8xU11oUijt8Vvm6JZNaDoI3-EZ3WX2Up-v9NyDvajV0d1BVl2Q5rp4fqtH8aDKiN1qX5hZN5vBn57GShHBy9jB_eRN2QvCR/w400-h196/infinstor-console.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;In short, if you&#39;re NOT running the jupyter notebook and MLflow project using EC2 instance, the cost should be minimal. To setup the MLflow tracking server, please check the documentation under &quot;Initial Configuration By Admin&quot; section.&lt;div&gt;&lt;p&gt;I tested the MLflow tracking server and MLflow UI by running a MLflow project locally. You can checkout the changes I made for &lt;a href=&quot;https://github.com/limcheekin/mlflow-examples/commit/2188c9a30e511b2ee904c425a835becef90659d0&quot; target=&quot;_blank&quot;&gt;helloworld example&lt;/a&gt;&amp;nbsp;and go through the &lt;a href=&quot;https://docs.infinstor.com/files/mlflow-projects-usage/&quot; target=&quot;_blank&quot;&gt;Using InfinStor Mlflow Projects&lt;/a&gt;&amp;nbsp;to find out how to do that.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Hope this help. Happy weekend! :)&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/04/pay-001-for-cloud-hosted-mlflow.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhBIUZCk_It_3IPxu2NLd5-xiCP9YQMq_B6S_EHvXDIK690SnkQiziaQ5feu6_bep-38ZX3cO0ElJDSUiwl9Ww7T5kzIJaDkfxqS8yCvxMpumW2h_OUc5pyo5ETRsUsH2y_erNo_U6oadC/s72-w400-h116-c/aws_mlflow.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-4837740747925236176</guid><pubDate>Tue, 06 Apr 2021 08:31:00 +0000</pubDate><atom:updated>2021-04-06T16:37:04.204+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Machine Learning</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Four Key Stages of The Machine Learning Process</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFPvsqsejCvgfoRICtTU8LFGW3sW1lO14SGjM6aRwe-Ev44JX98MHiycuykr7kIW4TreWRGnGjMIa29mI9dJBljy608tw9H4ArA9uNA1UjLMOZd3TE2PuS_gVS60Nra09iqGuXdFNxa1Wp/s966/ML+Process.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;563&quot; data-original-width=&quot;966&quot; height=&quot;234&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFPvsqsejCvgfoRICtTU8LFGW3sW1lO14SGjM6aRwe-Ev44JX98MHiycuykr7kIW4TreWRGnGjMIa29mI9dJBljy608tw9H4ArA9uNA1UjLMOZd3TE2PuS_gVS60Nra09iqGuXdFNxa1Wp/w400-h234/ML+Process.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;These four stages is defined by&amp;nbsp;Emmanuel Ameisen in his recent book&amp;nbsp;&lt;a href=&quot;https://www.amazon.com/Building-Machine-Learning-Powered-Applications/dp/149204511X&quot; target=&quot;_blank&quot;&gt;Building Machine Learning Powered Applications&lt;/a&gt;. As I think it is an important piece, I created a process diagram above and note down few important points for each stage. You can considered this is a study note.&lt;h2 style=&quot;text-align: left;&quot;&gt;1. Identifying the Right ML Approach&lt;/h2&gt;&lt;div&gt;The best approach for a given problem (product goal) will depends on success criteria, data availability, task complexity and model choice.&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;2. Building an Initial Prototype&lt;/h2&gt;&lt;div&gt;Start by building an end-to-end prototype before working on a model which aim to tackle the product goal with no ML involved and will allow you to determine how to best apply ML.&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;3. Iterating on Models&lt;/h2&gt;&lt;div&gt;If you need ML, start gathering dataset, train a model and evaluate it shortcomings. The goal of this stage is to repeatedly alternate between error analysis and implementation.&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;4. Deployment &amp;amp; Monitoring&lt;/h2&gt;&lt;div&gt;Once a model shows good performance, you should pick an adequate deployment option. Once deployed, models often fail in unexpected ways. The last two chapters of the book will cover methods to mitigate and monitor model errors.&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Side Note&lt;/h2&gt;&lt;div&gt;I added an arrow labelled &quot;New product goal, Revised product goal&quot; to the process diagram. Based on my experience, software products evolve, it will not end there after the ML solution went live. Hence, it is likely that the existing product goal will be revised or new product goal being inspired or discovered. Then, the cycle start from stage 1. Don&#39;t you think so?&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/04/four-key-stages-of-machine-learning.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFPvsqsejCvgfoRICtTU8LFGW3sW1lO14SGjM6aRwe-Ev44JX98MHiycuykr7kIW4TreWRGnGjMIa29mI9dJBljy608tw9H4ArA9uNA1UjLMOZd3TE2PuS_gVS60Nra09iqGuXdFNxa1Wp/s72-w400-h234-c/ML+Process.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-6288191688318642021</guid><pubDate>Fri, 02 Apr 2021 01:00:00 +0000</pubDate><atom:updated>2021-05-06T16:14:59.184+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Showcase Your Widget with Flutter Widgets Explorer</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS1JGdfwZcejHan6J60rgY5bZTN2tnFSDdmJqWCLlpg9MXdoxoN05f2LVyVR-7Gd2zqLeu2XXZct5chKgBMcMXCluiqVIzEKZkk6MdB7bIlJzi_G9RHIImO5VPgW69u6YLj_HRBPpzRJst/s777/showcase_view.png&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;394&quot; data-original-width=&quot;777&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS1JGdfwZcejHan6J60rgY5bZTN2tnFSDdmJqWCLlpg9MXdoxoN05f2LVyVR-7Gd2zqLeu2XXZct5chKgBMcMXCluiqVIzEKZkk6MdB7bIlJzi_G9RHIImO5VPgW69u6YLj_HRBPpzRJst/w400-h203/showcase_view.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;p&gt;Start from now, you can use Flutter Widgets Explorer as a platform to showcase your widget with README, codes and licensing information. The Flutter Widgets Explorer supports Android devices at the moment and will support Web in a week or two (&lt;b&gt;Updated on 16 April 2021: &lt;/b&gt;The web version of the Flutter Widgets Explorer just went live @ &lt;a href=&quot;http://fluwix.com&quot; target=&quot;_blank&quot;&gt;fluwix.com&lt;/a&gt;).&amp;nbsp;&lt;/p&gt;&lt;div&gt;That&#39;s made possible by the Showcase View widget, let&#39;s me show you how it looks:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbPZfybYt_d_tkL65xWGOp1wcxe9uUVD4Fv83Tzv8s07go2Onb-KaxgHYftQABkbK2C5dRteRhISnjDJxAzHHzNiWGzb8rpkDfzzFEDYX03o9Sw108wAyyMR3yrRQdec391hfdqfoHHXT9/s576/screenshots.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;324&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbPZfybYt_d_tkL65xWGOp1wcxe9uUVD4Fv83Tzv8s07go2Onb-KaxgHYftQABkbK2C5dRteRhISnjDJxAzHHzNiWGzb8rpkDfzzFEDYX03o9Sw108wAyyMR3yrRQdec391hfdqfoHHXT9/w360-h640/screenshots.gif&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;If the default Read Me, Code and License tabs are not enough for you, the Showcase View widget support additional tabs too, please see the following image:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyfD-xGazMX6II23XxhfeVAkHO4gxGemvkIA70gQklpRm1aSZFetvqGxjLQG3TmqlZwcJfe1w5QMdZ_oi-FRIgpzqS0gNgRr7wxFNwYRKxSbQOWxurelhXfNGgu9IRId3kfyan5HjVGWyr/s576/thumbnail_additional_tabs.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;324&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyfD-xGazMX6II23XxhfeVAkHO4gxGemvkIA70gQklpRm1aSZFetvqGxjLQG3TmqlZwcJfe1w5QMdZ_oi-FRIgpzqS0gNgRr7wxFNwYRKxSbQOWxurelhXfNGgu9IRId3kfyan5HjVGWyr/w360-h640/thumbnail_additional_tabs.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Does it sound and look interesting? You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think the best way to find out how &lt;a href=&quot;http://limcheekin.blogspot.com/2021/03/flutter-multi-modules-support.html&quot; target=&quot;_blank&quot;&gt;Flutter Multi-modules&lt;/a&gt; works is create the module and try it out yourself. If you don&#39;t have any idea, I&#39;m looking for contributors to help on migrate the existing showcases to Flutter modules. So far 5 completed, 9 more to go. If you are interested to help, feel free to look into the &lt;a href=&quot;https://github.com/limcheekin/flutter-widgets-explorer/blob/main/module_migration.txt&quot; target=&quot;_blank&quot;&gt;module migration guide&lt;/a&gt;. If you&#39;re still not turn down by the long list of steps and willing to give me a hand, great! :), kindly open an issue in the &lt;a href=&quot;https://github.com/limcheekin/flutter-widgets-explorer/issues&quot; target=&quot;_blank&quot;&gt;Github issues&lt;/a&gt; and tell me which showcase you are interested to migrate (&lt;b&gt;Updated on 16 April 2021: &lt;/b&gt;I completed all migration works myself, thanks to &lt;a href=&quot;https://github.com/limcheekin/flutter-widgets-explorer/tree/main/module_starter&quot; target=&quot;_blank&quot;&gt;module_starter&lt;/a&gt; automated most of the manual works).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly, If you are interested to reuse the source code of the screen, please check out the &lt;b&gt;showcase_view&lt;/b&gt; branch of the git repository hosted at &lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As usual, I&#39;d love to hear from you. :)&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/04/showcase-your-widget-with-flutter.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS1JGdfwZcejHan6J60rgY5bZTN2tnFSDdmJqWCLlpg9MXdoxoN05f2LVyVR-7Gd2zqLeu2XXZct5chKgBMcMXCluiqVIzEKZkk6MdB7bIlJzi_G9RHIImO5VPgW69u6YLj_HRBPpzRJst/s72-w400-h203-c/showcase_view.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Kuala Lumpur, Federal Territory of Kuala Lumpur, Malaysia</georss:featurename><georss:point>3.139003 101.686855</georss:point><georss:box>-25.171230836178847 66.530605 31.449236836178844 136.84310499999998</georss:box></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-1677248579635967548</guid><pubDate>Wed, 31 Mar 2021 06:36:00 +0000</pubDate><atom:updated>2021-03-31T14:38:55.353+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Navigation: flutter_modular or stacked?</title><description>&lt;p&gt;The current way of Flutter Widgets Explorer using &lt;a href=&quot;https://github.com/limcheekin/flutter-widgets-explorer/blob/8c9dd8df0eefacebd1fe0ba1dc49a086402de7d4/lib/main.dart#L93&quot; target=&quot;_blank&quot;&gt;switch statement&lt;/a&gt; to construct the main listing screen and navigation no longer sustainable as I foreseen the number of showcases will be double or triple in the coming months.&lt;/p&gt;&lt;p&gt;Hence, I decided to look into new solution. First, I come across an article shared about &lt;a href=&quot;https://medium.com/flutter/learning-flutters-new-navigation-and-routing-system-7c9068155ade&quot; target=&quot;_blank&quot;&gt;Flutter Navigation 2.0&lt;/a&gt;. In my opinion, it is too complex, we need better abstraction to make it usable to developers. I search again and finally nailed down to two alternatives: &lt;a href=&quot;https://pub.dev/packages/flutter_modular&quot; target=&quot;_blank&quot;&gt;flutter_modular&lt;/a&gt; and &lt;a href=&quot;https://www.filledstacks.com/post/new-setup-for-flutter-stacked-state-management/&quot; target=&quot;_blank&quot;&gt;stacked&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Let&#39;s look at simple code metrics (line of codes) for both packages:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3JybtKEYbieV2fDieWsYMNAlmEzT4v8JDUgH3uVt7r6mrDjSKQyO4QKCtJfeeq_-n9gt2UesH2clnGuWcwm7eKYKmOR3ZdDGyeQcBil3RsCMoDQyv-sA89mjN9f7sNLyqhpljWiJDI97w/s570/flutter_modular.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;299&quot; data-original-width=&quot;570&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3JybtKEYbieV2fDieWsYMNAlmEzT4v8JDUgH3uVt7r6mrDjSKQyO4QKCtJfeeq_-n9gt2UesH2clnGuWcwm7eKYKmOR3ZdDGyeQcBil3RsCMoDQyv-sA89mjN9f7sNLyqhpljWiJDI97w/w400-h210/flutter_modular.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpSJDiyKZ_lJHmVfs_CM1H2YyZLKl3_zbjPKHuxj7kIv1_5M06iAh7nQUmmPTvkF80C24pTknQrb3wfQPcPavzRobccEyIkoqKTD3N0WNpBDLc1NSyTg3LPqWGgXTuLr9NghVaaUgQS3E0/s601/stacked.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;403&quot; data-original-width=&quot;601&quot; height=&quot;269&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpSJDiyKZ_lJHmVfs_CM1H2YyZLKl3_zbjPKHuxj7kIv1_5M06iAh7nQUmmPTvkF80C24pTknQrb3wfQPcPavzRobccEyIkoqKTD3N0WNpBDLc1NSyTg3LPqWGgXTuLr9NghVaaUgQS3E0/w400-h269/stacked.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It is obvious that &lt;i&gt;flutter_modular&lt;/i&gt; is the winner here. It has less boilerplate code and code generation is not required. For &lt;i&gt;stacked&lt;/i&gt;, it still has more line of codes compared to &lt;i&gt;flutter_modular&lt;/i&gt; after excluding the generated &lt;i&gt;app.router.dart&lt;/i&gt; and &lt;i&gt;app.locator.dart&lt;/i&gt;. Also, &lt;i&gt;flutter_modular&lt;/i&gt; using Navigation 2.0 and &lt;i&gt;stacked&lt;/i&gt; still using Navigation 1.0 if I&#39;m not wrong (Correct me if I&#39;m wrong).&lt;/p&gt;&lt;p&gt;Lastly, there&#39;s one pending issue for Flutter Widgets Explorer to adopt flutter_modular as it&#39;s navigation library, the default back button is missing, I opened &lt;a href=&quot;https://github.com/Flutterando/modular/issues/352&quot; target=&quot;_blank&quot;&gt;an issue&lt;/a&gt; that still pending for response at the time of writing.&lt;/p&gt;&lt;p&gt;If you interested to dig into the code, feel free to look into the github repo for &lt;a href=&quot;https://github.com/limcheekin/flutter-modules/tree/flutter_modular/lib&quot; target=&quot;_blank&quot;&gt;flutter_modular&lt;/a&gt; and &lt;a href=&quot;https://github.com/limcheekin/flutter-modules/tree/stacked/lib&quot; target=&quot;_blank&quot;&gt;stacked&lt;/a&gt;&amp;nbsp;implementation.&lt;/p&gt;&lt;p&gt;Happy coding! :)&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/03/flutter-navigation-fluttermodular-or.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3JybtKEYbieV2fDieWsYMNAlmEzT4v8JDUgH3uVt7r6mrDjSKQyO4QKCtJfeeq_-n9gt2UesH2clnGuWcwm7eKYKmOR3ZdDGyeQcBil3RsCMoDQyv-sA89mjN9f7sNLyqhpljWiJDI97w/s72-w400-h210-c/flutter_modular.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-2004802598323898008</guid><pubDate>Tue, 23 Mar 2021 09:19:00 +0000</pubDate><atom:updated>2021-03-24T13:58:06.583+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Keras</category><category domain="http://www.blogger.com/atom/ns#">Machine Learning</category><category domain="http://www.blogger.com/atom/ns#">Scikit-learn</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Spacy</category><category domain="http://www.blogger.com/atom/ns#">Tensorflow</category><title>Deploy Serverless Machine Learning Models to AWS Lambda</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXeGT4TpA3oySLCcaG8Bl2m-PWTh9kXLtp7LhMiIHWbhGPtJcJfIn_QQ17fnWFWbTemRN3tdwe-2Ql4gNHgyGFJ5cxkSUZ9LY48GtP1Ct8ROuiB1Y6EaI-phM8rZ7Bp_iKndL5eBoFJ1kz/s1058/serverless-ml.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;595&quot; data-original-width=&quot;1058&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXeGT4TpA3oySLCcaG8Bl2m-PWTh9kXLtp7LhMiIHWbhGPtJcJfIn_QQ17fnWFWbTemRN3tdwe-2Ql4gNHgyGFJ5cxkSUZ9LY48GtP1Ct8ROuiB1Y6EaI-phM8rZ7Bp_iKndL5eBoFJ1kz/w400-h225/serverless-ml.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;I just completed &lt;a href=&quot;https://www.udemy.com/course/deploy-serverless-machine-learning-models-to-aws-lambda/&quot; target=&quot;_blank&quot;&gt;the Udemy course&lt;/a&gt; with the same title of the blog post.&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;The course cover three machine learning examples using different library:&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;scikit-learn:&lt;/b&gt; Using regression model from scikit-learn trained on California housing dataset for house price prediction.&lt;/li&gt;&lt;li&gt;&lt;b&gt;spacy:&lt;/b&gt; Using a small English model from spaCy NLP framework for named entity recognition.&lt;/li&gt;&lt;li&gt;&lt;b&gt;keras: &lt;/b&gt;Using ResNet50 computer vision deep learning model from Keras framework to create for image recognition.&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;Let&#39;s me tell you the following value-added changes of &lt;a href=&quot;https://github.com/limcheekin/serverless-ml&quot; target=&quot;_blank&quot;&gt;my code&lt;/a&gt; from the original source code from the course:&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The examples are using Python 3.8 instead of Python 3.6 in the course and latest version of libraries except the scikit-learn example using earlier version of scikit-learn to align with &lt;a href=&quot;https://www.blogger.com/u/2/#&quot;&gt;m2cgen&lt;/a&gt; which has the possibility to convert scikit-learn model to native code and C code running in the microcontroller with &lt;a href=&quot;https://www.blogger.com/u/2/#&quot;&gt;emlearn&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;To deploy all examples. you only need git, no other installations are required. All examples are setup with continuous deployment pipeline using Github Actions. The following diagram shows how it works from the high-level:&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyR78QFgPpj0KMbRrZpc8OI2QwHOrn8a0tSpmBCHAo4Gro_WnuB90uhjE_rpAMAzcLfcN97gfiPQG1tzPbAjwb68etOdUmyU6vziihfnfRLRWTJXfjYXi233suwj8mP8FqE-0DI66fDVpj/s1056/serverless-workflow.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;65&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyR78QFgPpj0KMbRrZpc8OI2QwHOrn8a0tSpmBCHAo4Gro_WnuB90uhjE_rpAMAzcLfcN97gfiPQG1tzPbAjwb68etOdUmyU6vziihfnfRLRWTJXfjYXi233suwj8mP8FqE-0DI66fDVpj/w400-h65/serverless-workflow.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Developer update changes to repository by sending a &lt;i&gt;git push&lt;/i&gt; command.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The &lt;i&gt;git push&lt;/i&gt; command will trigger the Github Actions workflow which run the serverless deploy command based on configurations in serverless.yml file.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The CloudFormation stack consists of API Gateway, AWS Lambda, S3, ECR, etc. will be created on AWS.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;After you forked my repository, you just need to add &lt;i&gt;AWS_KEY&lt;/i&gt; and &lt;i&gt;AWS_SECRET&lt;/i&gt; to Repository secrets of Settings/Secrets of your github repo like the following image: &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrulMdn70lNcG9dtOmDtJKLUxcI7tRi_ozxGlk_UCMYiICTOYshf4uq_z6ERq2XWvJ2RrJklEuZei2VIwRrJXEF_F-X1jduZ8SJCSC8Iv1wYMeIjI485UeiwMyCsjUIHitA696WOPL8xIP/s909/repo_secrets.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;179&quot; data-original-width=&quot;909&quot; height=&quot;79&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrulMdn70lNcG9dtOmDtJKLUxcI7tRi_ozxGlk_UCMYiICTOYshf4uq_z6ERq2XWvJ2RrJklEuZei2VIwRrJXEF_F-X1jduZ8SJCSC8Iv1wYMeIjI485UeiwMyCsjUIHitA696WOPL8xIP/w400-h79/repo_secrets.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Then, you can deploy all examples to AWS lambda with a git push command.&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;/blockquote&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;All examples are setup with &quot;warm start&quot; and request throttling limit to 1 to protect your account&amp;nbsp;and your wallet (You don&#39;t want to have surprises in your monthly credit card bill for demo projects, right?)&lt;/li&gt;&lt;li&gt;All examples have a last step &quot;Test Lambda functions&quot; to verify the public API is working post-deployment.&lt;/li&gt;&lt;li&gt;Spacy and keras example are deploy using Docker container image to AWS Lambda. Thanks to Jan Bauer published the blog post &lt;a href=&quot;https://www.blogger.com/u/2/#&quot;&gt;Using container images to run TensorFlow models in AWS Lambda&lt;/a&gt;, timing is just right on helping me to get the keras example working.&lt;/li&gt;&lt;li&gt;For keras example, image uploaded directly to Lambda endpoint and store as temp file instead of upload to S3 bucket.&lt;/li&gt;&lt;li&gt;Code of each example is located in its own branch.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;/blockquote&gt;&lt;p&gt;Please take note of the storage cost of S3 and Elastic Container Registry (ECR), make sure you clean up unnecessary files and Docker image files there.&lt;/p&gt;&lt;p&gt;Lastly, if you look for someone on deploying your machine learning model to AWS lambda, I think I can help here. :)&lt;/p&gt;&lt;p&gt;Oh yeah, here is the github repo URL&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/serverless-ml&quot;&gt;https://github.com/limcheekin/serverless-ml&lt;/a&gt;&amp;nbsp;if you missed it.&lt;/p&gt;&lt;p&gt;I think the scope is broad enough for now, let&#39;s go deep.&lt;/p&gt;&lt;p&gt;Stay tuned to the next!&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/03/deploy-serverless-machine-learning.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXeGT4TpA3oySLCcaG8Bl2m-PWTh9kXLtp7LhMiIHWbhGPtJcJfIn_QQ17fnWFWbTemRN3tdwe-2Ql4gNHgyGFJ5cxkSUZ9LY48GtP1Ct8ROuiB1Y6EaI-phM8rZ7Bp_iKndL5eBoFJ1kz/s72-w400-h225-c/serverless-ml.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-8553398309072009080</guid><pubDate>Mon, 22 Mar 2021 09:34:00 +0000</pubDate><atom:updated>2021-03-22T17:34:08.517+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Multi-modules Support</title><description>&lt;p&gt;I wrote this article to inform Flutter developers for a lesser known feature of Flutter: Multi-modules support in a Flutter project. Thanks for inspiration from an article &lt;a href=&quot;https://medium.com/ideas-by-idean/a-flutter-bloc-clean-architecture-journey-to-release-the-1st-idean-flutter-app-db218021a804&quot; target=&quot;_blank&quot;&gt;A Flutter BLoC + Clean Architecture journey to release the #1st Idean Flutter app&lt;/a&gt; published on Medium.com. It mentioned about “Dart modules”, I not sure whether we are referring to the same thing here.&lt;/p&gt;&lt;p&gt;After gone through the article above, I perform a google search for Flutter module and I found many articles and videos on how to create modular Flutter project, or how to structure Flutter code in modular way, and a library known as flutter_modular. But I’m looking for “real” modules that supported by Flutter and IDEs to define a physical boundary among modules, not a logical one defined by developers. It is an “aha!” moment, out of no way I am thinking of typing &lt;i&gt;flutter create –help&lt;/i&gt; command in my terminal window. From the list of options, I found the following option like what I am looking for.&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaBtv1n9WdYc34EAVmTtwPd5EL_uUO6g7kzjh7rvEJDgmOcqZLvF983av7KKZi5qTdO964vsvX-Yy1sBT6opuXec4jMAcO-ec1UetH30S5YZVSN4dqeGFem-Z4HkW5Qj-BPfgtEm0TTta/s1165/flutter-module-support.png&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;1165&quot; height=&quot;82&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaBtv1n9WdYc34EAVmTtwPd5EL_uUO6g7kzjh7rvEJDgmOcqZLvF983av7KKZi5qTdO964vsvX-Yy1sBT6opuXec4jMAcO-ec1UetH30S5YZVSN4dqeGFem-Z4HkW5Qj-BPfgtEm0TTta/w640-h82/flutter-module-support.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Then, I proceed to flutter.dev website to find out more information about the &lt;i&gt;-t&lt;/i&gt; option, not much information found besides a description similar to the above. Hence, I decided to create a Flutter project to test it out. In the flutter project directory, I’m creating two modules such as &lt;i&gt;nested_list&lt;/i&gt; and &lt;i&gt;tab_buttons&lt;/i&gt; using the following command:&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;flutter create -t module &amp;lt;module_name&amp;gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;The following is directory structure of the Flutter project, you can see that the &lt;i&gt;nested_list&lt;/i&gt; and &lt;i&gt;tab_buttons&lt;/i&gt; module is outside the lib directory (All Flutter code need to be located in the lib directory normally).&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXk_jF1AkejoI5GOOsQsrNMf4wywsvh1Smsb1U069ypHjC6_HXAeYaXKU9UcGX4cMe9Hq0x3Sdji73sryIXARsRmWCnH3GCgCRi0Xnh4J_k-h3q3SsSpHjwSGMjZnHZeXQ5TAN-kf2N8li/s478/directory-structure.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;478&quot; data-original-width=&quot;192&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXk_jF1AkejoI5GOOsQsrNMf4wywsvh1Smsb1U069ypHjC6_HXAeYaXKU9UcGX4cMe9Hq0x3Sdji73sryIXARsRmWCnH3GCgCRi0Xnh4J_k-h3q3SsSpHjwSGMjZnHZeXQ5TAN-kf2N8li/w161-h400/directory-structure.png&quot; width=&quot;161&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The following is the advantages of the “real” Flutter module besides modular structure:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;It has it’s own pubspec.yaml file, you can manage assets, dependencies and other stuff on module-basis.&lt;/li&gt;&lt;li&gt;It can have it main.dart, you can run the code of a module independent from project and other modules.&lt;/li&gt;&lt;li&gt;It can have it own test directory, you can write tests to test code of the module.&lt;/li&gt;&lt;li&gt;A Flutter project can have mix of non-null safety and null safety packages which segregated by modules.&lt;/li&gt;&lt;li&gt;You can start null safety migration module by module without blocking the release cycle. Flutter Widgets Explorer will adopt this approach.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Once the module is ready, you can link the module to the project by specify the following dependencies&amp;nbsp; configuration in the pubspec.yaml file:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4ifGW30o8aStqOJY_fIQZ4C1MaulqR_J2VK-GauXisSSxNGiWH5HL_rmpTrIGqdN1G2FPkwRJtlop4PnRWRu0mbEKVGI4Dp5LA63NNymNJGCQtd9wCkGPwD-zjNEKC5xNMf-LCo12i0Mc/s335/dependencies.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;211&quot; data-original-width=&quot;335&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4ifGW30o8aStqOJY_fIQZ4C1MaulqR_J2VK-GauXisSSxNGiWH5HL_rmpTrIGqdN1G2FPkwRJtlop4PnRWRu0mbEKVGI4Dp5LA63NNymNJGCQtd9wCkGPwD-zjNEKC5xNMf-LCo12i0Mc/s320/dependencies.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The Flutter project is working in my mobile phone and Google Chrome with the following command:&lt;/p&gt;&lt;p&gt;&lt;i&gt;flutter run -d chrome&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Please check out the following github repo and test it out yourself:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/limcheekin/flutter-modules&quot;&gt;https://github.com/limcheekin/flutter-modules&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks for reading, I hope the write ups is helpful to you, hear from you soon! :)&lt;/p&gt;</description><link>http://limcheekin.blogspot.com/2021/03/flutter-multi-modules-support.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaBtv1n9WdYc34EAVmTtwPd5EL_uUO6g7kzjh7rvEJDgmOcqZLvF983av7KKZi5qTdO964vsvX-Yy1sBT6opuXec4jMAcO-ec1UetH30S5YZVSN4dqeGFem-Z4HkW5Qj-BPfgtEm0TTta/s72-w640-h82-c/flutter-module-support.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-6922290748972144489</guid><pubDate>Fri, 19 Mar 2021 07:41:00 +0000</pubDate><atom:updated>2021-05-06T16:17:00.230+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Widgets Explorer: The Source Code View</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-_m-cDncoBeOh1jyr-YglcXkNyzda1wK58nuq5aeEoq00LwHXqWtsNM_h8R90sqbc3BLviy45ueDuVkgXs5Aa8aCSQH_9RLuoAdCKO6G0QvzM8qjM0Fycw3bY8QiyPG2mjPhz891PMdxY/s778/source_code_view.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;393&quot; data-original-width=&quot;778&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-_m-cDncoBeOh1jyr-YglcXkNyzda1wK58nuq5aeEoq00LwHXqWtsNM_h8R90sqbc3BLviy45ueDuVkgXs5Aa8aCSQH_9RLuoAdCKO6G0QvzM8qjM0Fycw3bY8QiyPG2mjPhz891PMdxY/w400-h203/source_code_view.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The Source Code View is a reusable widget to share code from your public Github repository. It created based on knowledge gained from previous showcases such as Syntax View, Animate Icons, URL Launcher, Markdown View, and Shimmer Effect.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The Source Code View widget will be integrated into Flutter Widgets Explorer to share the code of showcases, so that you can copy and paste the code with a click of button, sound great? :)&amp;nbsp;&lt;/p&gt;&lt;p&gt;I created a&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/flutter-widgets-explorer/blob/main/lib/source_code_view/multiple_requests_http_client.dart&quot; target=&quot;_blank&quot;&gt;MultipleRequestsHttpClient class&lt;/a&gt; to reuse the HTTP client in multiple widgets as &lt;a href=&quot;https://api.dart.dev/stable/2.10.5/dart-async/Future/wait.html&quot; target=&quot;_blank&quot;&gt;Future.wait&lt;/a&gt; doesn&#39;t cut it. Please let&#39;s me know if you think there&#39;s better way to do the same thing.&lt;/p&gt;&lt;p&gt;Thanks to the &lt;a href=&quot;https://pub.dev/packages/pubspec_parse&quot; target=&quot;_blank&quot;&gt;pubspec_parse&lt;/a&gt; package allowed the &lt;i&gt;PubspecDependenciesView&lt;/i&gt; widget to retrieve dependencies data of the &lt;i&gt;pubspec.yaml&lt;/i&gt; file.&lt;/p&gt;&lt;p&gt;A picture is worth a thousand words:-&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJCy9_rhw97edMTY3s3kRihGudG4LJuBq3QKEcpYPmMQsL0OCgw3DFj45uWdgm-DHxSSJocafm7x-m1GeA9ydXqFE6LMQ1fl9BgSJ6DJgj7Gf-qBrH5op_ZfflnkjNPb5XQ2aWBn3cPkZS/s1920/screenshots.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJCy9_rhw97edMTY3s3kRihGudG4LJuBq3QKEcpYPmMQsL0OCgw3DFj45uWdgm-DHxSSJocafm7x-m1GeA9ydXqFE6LMQ1fl9BgSJ6DJgj7Gf-qBrH5op_ZfflnkjNPb5XQ2aWBn3cPkZS/w360-h640/screenshots.gif&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the&amp;nbsp;&lt;b&gt;source_code_view&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;I&#39;d love to hear from you. :)&lt;/p&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/03/flutter-widgets-explorer-source-code.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-_m-cDncoBeOh1jyr-YglcXkNyzda1wK58nuq5aeEoq00LwHXqWtsNM_h8R90sqbc3BLviy45ueDuVkgXs5Aa8aCSQH_9RLuoAdCKO6G0QvzM8qjM0Fycw3bY8QiyPG2mjPhz891PMdxY/s72-w400-h203-c/source_code_view.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-7692168099299698511</guid><pubDate>Tue, 16 Mar 2021 06:39:00 +0000</pubDate><atom:updated>2021-05-06T16:18:15.455+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Widgets Explorer: The About Dialog</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0l86sDcj1pVLwlL97TRIZSlU33eBtoY9Ug6y4FxTR2bMZ411TqpJBUpuCGuEfbziIH6sxwecdYFtR6h5t8zh1wE_S7gh12MxjB-K7fxXw8PsI-52FXoMkq8uJrfVW9xKYODPBrwzR63Z/s779/about.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;396&quot; data-original-width=&quot;779&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0l86sDcj1pVLwlL97TRIZSlU33eBtoY9Ug6y4FxTR2bMZ411TqpJBUpuCGuEfbziIH6sxwecdYFtR6h5t8zh1wE_S7gh12MxjB-K7fxXw8PsI-52FXoMkq8uJrfVW9xKYODPBrwzR63Z/w400-h204/about.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The about dialog described what the application did and its licensing information. It is integrated into Flutter Widgets Explorer.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;A picture is worth a thousand words:-&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-TGjdMzgRObI5gqv4Q4lUf3RK96gngbc0fSKGfCmV5At5_x0d_5mzPV7ZG9Yfr16l0-E7SNwdISTssStdAqEC8tRSiSzRdjuXIQCHgy10bKDv4g5Kl_tDvKkUDsqRfempbY9Zq9vnsekY/s1920/screenshots.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-TGjdMzgRObI5gqv4Q4lUf3RK96gngbc0fSKGfCmV5At5_x0d_5mzPV7ZG9Yfr16l0-E7SNwdISTssStdAqEC8tRSiSzRdjuXIQCHgy10bKDv4g5Kl_tDvKkUDsqRfempbY9Zq9vnsekY/w360-h640/screenshots.gif&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the&amp;nbsp;&lt;b&gt;about_dialog&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot; target=&quot;_blank&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;I&#39;d love to hear from you. :)&lt;/p&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/03/flutter-widgets-explorer-about-dialog.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0l86sDcj1pVLwlL97TRIZSlU33eBtoY9Ug6y4FxTR2bMZ411TqpJBUpuCGuEfbziIH6sxwecdYFtR6h5t8zh1wE_S7gh12MxjB-K7fxXw8PsI-52FXoMkq8uJrfVW9xKYODPBrwzR63Z/s72-w400-h204-c/about.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1662570443648714289.post-8890985180001491869</guid><pubDate>Fri, 12 Mar 2021 08:43:00 +0000</pubDate><atom:updated>2021-05-06T16:21:34.340+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Flutter</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Flutter Widgets Explorer: The Shimmer Effect</title><description>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBXzDbkgk7PpCUWO6-tfcexmaNRTv9sGte8dn5WtRUnfQG86M0Wm3lcMS1s8VETmlkBBy_q_96XNQ0jeahIF6mTUOCWFHABeYWdRMiecxNWXERszXBhVCX8zbDAH30MChIHMcjaqtlPhZ/s778/shimmer.png&quot; style=&quot;clear: left; display: inline; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;394&quot; data-original-width=&quot;778&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBXzDbkgk7PpCUWO6-tfcexmaNRTv9sGte8dn5WtRUnfQG86M0Wm3lcMS1s8VETmlkBBy_q_96XNQ0jeahIF6mTUOCWFHABeYWdRMiecxNWXERszXBhVCX8zbDAH30MChIHMcjaqtlPhZ/w400-h203/shimmer.png&quot; width=&quot;100%&quot; /&gt;&lt;/a&gt;The Shimmer Effect is a special effect to indicate loading status. It is an alternative to progress bar to show loading progress.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A picture is worth a thousand words:-&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlQs3M7IcSl9nhUhPfpq8jcS7_mIGd2_99xNEnZ90LNxaX8QItsX09losvnsLEfKIsy3UMn-SxQxOjV56ifmW5KN9dPtPsl_vNGbEboi_GBy_hYhwrgC8SWu7kRLywFw6xjBH4s6ms3W7m/s1920/screenshots.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlQs3M7IcSl9nhUhPfpq8jcS7_mIGd2_99xNEnZ90LNxaX8QItsX09losvnsLEfKIsy3UMn-SxQxOjV56ifmW5KN9dPtPsl_vNGbEboi_GBy_hYhwrgC8SWu7kRLywFw6xjBH4s6ms3W7m/w360-h640/screenshots.gif&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;p&gt;Thanks for your patient and reading till here. You are invited to fork the fluwix github repo, add your code and send me pull request. The key takeaways are you can showcase your code live in an Android app, Fluwix.com and embedded HTML (as iframe) in your blog post. We will take care the hassles of managing the deployment, production and marketing for you. If you&#39;re interested, please&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;submit your idea of showcase&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Are you facing any problem with your Flutter development? Please answer the&amp;nbsp;&lt;a href=&quot;https://forms.gle/wu752YMuspG5bTEF7&quot; target=&quot;_blank&quot;&gt;3 questions Flutter Development Survey&lt;/a&gt;&amp;nbsp;as we might have the solution to your problem.&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;p&gt;By the way, you can install the Fluwix (formerly Flutter Widgets Explorer) app to your android phone by clicking on the following image link:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fluwix&amp;amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&quot;&gt;&lt;img alt=&quot;Get it on Google Play&quot; src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; width=&quot;50%&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Kindly&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix/issues/new&quot; target=&quot;_blank&quot;&gt;raise an issue&lt;/a&gt;&amp;nbsp;if you have any problem running the Fluwix on your mobile or web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested to reuse the source code of the screen, please check out the&amp;nbsp;&lt;b&gt;shimmer_effect&lt;/b&gt;&amp;nbsp;branch of the git repository hosted at&amp;nbsp;&lt;a href=&quot;https://github.com/limcheekin/fluwix&quot;&gt;https://github.com/limcheekin/fluwix&lt;/a&gt;. Feel free to fork the repository and send me pull request.&lt;/div&gt;&lt;p&gt;I&#39;d love to hear from you. :)&lt;/p&gt;&lt;/div&gt;</description><link>http://limcheekin.blogspot.com/2021/03/flutter-widgets-explorer-shimmer-effect.html</link><author>noreply@blogger.com (Lim Chee Kin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBXzDbkgk7PpCUWO6-tfcexmaNRTv9sGte8dn5WtRUnfQG86M0Wm3lcMS1s8VETmlkBBy_q_96XNQ0jeahIF6mTUOCWFHABeYWdRMiecxNWXERszXBhVCX8zbDAH30MChIHMcjaqtlPhZ/s72-w400-h203-c/shimmer.png" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>