<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Alan Hung</title>
    <link>https://alanhung.dev/</link>
      <atom:link href="https://alanhung.dev/index.xml" rel="self" type="application/rss+xml" />
    <description>Alan Hung</description>
    <generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Mon, 24 Oct 2022 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://alanhung.dev/media/icon_hu337733d8e3179de0d1b2aeaca0f6c335_54345_512x512_fill_lanczos_center_3.png</url>
      <title>Alan Hung</title>
      <link>https://alanhung.dev/</link>
    </image>
    
    <item>
      <title>Example Talk</title>
      <link>https://alanhung.dev/talk/example-talk/</link>
      <pubDate>Sat, 01 Jun 2030 13:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/talk/example-talk/</guid>
      <description>&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    Click on the &lt;strong&gt;Slides&lt;/strong&gt; button above to view the built-in slides feature.
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Slides can be added in a few ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create&lt;/strong&gt; slides using Wowchemy&amp;rsquo;s &lt;a href=&#34;https://wowchemy.com/docs/managing-content/#create-slides&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Slides&lt;/em&gt;&lt;/a&gt; feature and link using &lt;code&gt;slides&lt;/code&gt; parameter in the front matter of the talk file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upload&lt;/strong&gt; an existing slide deck to &lt;code&gt;static/&lt;/code&gt; and link using &lt;code&gt;url_slides&lt;/code&gt; parameter in the front matter of the talk file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Embed&lt;/strong&gt; your slides (e.g. Google Slides) or presentation video on this page using &lt;a href=&#34;https://wowchemy.com/docs/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;shortcodes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further event details, including &lt;a href=&#34;https://wowchemy.com/docs/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;page elements&lt;/a&gt; such as image galleries, can be added to the body of this page.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Umc Internal Award</title>
      <link>https://alanhung.dev/project/umc-internal-award/</link>
      <pubDate>Mon, 21 Aug 2023 21:37:54 +0800</pubDate>
      <guid>https://alanhung.dev/project/umc-internal-award/</guid>
      <description>&lt;hr&gt;
&lt;script&gt;removeTitle()&lt;/script&gt;
&lt;img src=&#34;./figure/figure_01.webp&#34; width=&#34;1373&#34; height=&#34;1829&#34; alt=&#34;figure_01&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
&lt;hr&gt;
</description>
    </item>
    
    <item>
      <title>Fabric Feature Extraction</title>
      <link>https://alanhung.dev/project/fabric-feature-extraction/</link>
      <pubDate>Thu, 15 Jun 2023 08:27:20 +0800</pubDate>
      <guid>https://alanhung.dev/project/fabric-feature-extraction/</guid>
      <description>&lt;h2 id=&#34;phase-i-proof-of-concept&#34;&gt;Phase I: Proof of Concept&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Key&lt;/strong&gt;:
Build the infrastructure and verify its profitability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actions &amp;amp; Results:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Market Studies&lt;/strong&gt;&lt;br&gt;
&lt;span style=&#34;color:#FFAA39&#34;&gt;Creating daily video tutorials is the most effective way to reach customers. We use competitive pricing and sell similar products as a means to enter the market.&lt;/span&gt;&lt;br&gt;
&lt;u&gt;More details&lt;/u&gt;:&lt;br&gt;
＊&lt;a href=&#34;&#34;&gt;&lt;em&gt;Application of Website Crawlers for Competitor Analysis&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fabric/Product information&lt;/strong&gt;&lt;br&gt;
&lt;span style=&#34;color:#FFAA39&#34;&gt;As part of the preliminary setup of an in-house library, I implemented algorithms to automatically extract fabric features. This achieved processing speeds 12 to 63 times faster than human processing, with 98% accuracy.&lt;/span&gt;&lt;br&gt;
&lt;u&gt;More details&lt;/u&gt;:&lt;br&gt;
＊&lt;a href=&#34;&#34;&gt;&lt;em&gt;Color Theme Extraction Based on the Bucket Sort Algorithm&lt;/em&gt;&lt;/a&gt;&lt;br&gt;
＊&lt;a href=&#34;&#34;&gt;&lt;em&gt;Repeated Pattern Detection of Printed Fabric&lt;/em&gt;&lt;/a&gt;&lt;br&gt;
＊&lt;a href=&#34;&#34;&gt;&lt;em&gt;Investigation of Algorithms for Retrieving Similar Images&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Market Studies&lt;/td&gt;
&lt;td&gt;Creating daily video tutorials is the most effective way to reach customers. We use competitive pricing and sell similar products as a means to enter the market. &lt;br&gt;&lt;u&gt;More detail&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;&#34;&gt;&lt;em&gt;Application of Website Crawlers for Competitor Analysis&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fabric/Product information&lt;/td&gt;
&lt;td&gt;As part of the preliminary setup of an in-house library, I implemented algorithms to automatically extract fabric features. This achieved processing speeds 12 to 63 times faster than human processing, with 98% accuracy. More details: Color Theme Extraction Based on the Bucket Sort Algorithm Repeated Pattern Detection of Printed Fabric Investigation of Algorithms for Retrieving Similar Images&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;test&#34;&gt;Test&lt;/h1&gt;
&lt;img src=&#34;./Home.png&#34; width=&#34;1080px&#34; height=&#34;763px&#34; style=&#34;opacity: 1; margin-left:0; margin-right:0; position:relative; left:0;&#34;&gt;
&lt;p&gt;N: len(data): 4158
B: number of buckets: 36
T: number of predefined theme: 56
I: number of intervals in predefined theme: 3&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-theme-brute-force&#34;&gt;&lt;/div&gt;
            &lt;button id=&#34;search-theme-brute-force-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
            &lt;button id=&#34;search-theme-brute-force-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
        &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-theme-bucket&#34;&gt;&lt;/div&gt;
            &lt;button id=&#34;search-theme-bucket-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
            &lt;button id=&#34;search-theme-bucket-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
        &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-theme-runtime-0-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-theme-runtime-0-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-theme-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-theme-runtime-1-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-theme-runtime-1-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-theme-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-theme-runtime-2-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-theme-runtime-2-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-theme-runtime-2-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;figcaption&gt;
              *unit: [fabric/sec], plot in log scale
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-pattern&#34; style=&#34;background-image: url(&#39;./figure/figure_01.webp&#39;); background-size: 100%; background-repeat: no-repeat; overflow: hidden;&#34;&gt;
                &lt;img id=&#34;search-pattern-brute-force-fig&#34; src=&#34;./figure/figure_02.webp&#34; width=&#34;1080px&#34; height=&#34;763px&#34; style=&#34;opacity: 0.5; margin-left:0; margin-right:0; position:relative; left:0;&#34;&gt;
            &lt;/div&gt;
            &lt;div id=&#34;search-pattern-brute-force&#34;&gt;&lt;/div&gt;
            &lt;button id=&#34;search-pattern-brute-force-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
            &lt;button id=&#34;search-pattern-brute-force-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
        &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-pattern-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-pattern-runtime-0-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-pattern-runtime-0-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-pattern-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;search-pattern-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-pattern-runtime-1-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-pattern-runtime-1-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-pattern-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;search-pattern-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-pattern-runtime-2-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-pattern-runtime-2-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-pattern-runtime-2-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;figcaption&gt;
              *unit: [fabric/sec], plot in log scale
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
    &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
        &lt;div class=&#34;w-size19&#34;&gt;
  
            &lt;div id=&#34;runtime-comparison-bar&#34;&gt;&lt;/div&gt;
        
&lt;/div&gt;


        &lt;div class=&#34;w-size20&#34;&gt;
  
            &lt;div id=&#34;runtime-comparison-table_&#34;&gt;&lt;/div&gt;
        
&lt;/div&gt;

    &lt;/div&gt;
    
&lt;/div&gt;

    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;total-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;total-runtime-0-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;total-runtime-0-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;total-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;total-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;total-runtime-1-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;total-runtime-1-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;total-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;figcaption&gt;
              *unit: [fabric/sec], plot in log scale
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size19 respon5&#34;&gt;
  
            &lt;div id=&#34;runtime-comparison-pie-chart&#34;&gt;&lt;/div&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size20 respon5&#34;&gt;
  
            &lt;div id=&#34;runtime-comparison-table&#34;&gt;&lt;/div&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;Note: Human (baseline) is the average time of 100 consecutive process.&lt;/p&gt;
&lt;p&gt;Original Image: 3500 x 4900
Resize Image: 100 x 140
B: number of buckets: 36
T: number of predefined theme
I: number of intervals in predefined theme
T * I = 22680 (4 theme)
search color theme: 0.157sec
search pattern size: 0.075sec
Import + resize: 0.38sec + 0.2sec
Total: 0.812 sec
Human: 3 * 60 sec&lt;/p&gt;
&lt;div id=&#34;post-comparison-plot&#34;&gt;&lt;/div&gt;
&lt;div id=&#34;fabric-sales-plot&#34;&gt;&lt;/div&gt;
&lt;div id=&#34;all-sales-plot&#34;&gt;&lt;/div&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;searchThemeBruteForce({frameIndex: 0})&lt;/script&gt;
&lt;script&gt;searchThemeBucket({frameIndex: 0})&lt;/script&gt;
&lt;script&gt;searchThemeRunTime()&lt;/script&gt;
&lt;script&gt;searchPatternBruteForce()&lt;/script&gt;
&lt;script&gt;searchPatternRunTime()&lt;/script&gt;
&lt;script&gt;runTimeComparisonBar()&lt;/script&gt;
&lt;script&gt;runTimeComparisonTable()&lt;/script&gt;
&lt;script&gt;totalRunTime()&lt;/script&gt;
&lt;script&gt;runTimeComparisonRing()&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [], closeInner: true, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>My Article Name</title>
      <link>https://alanhung.dev/post/my-article-name/</link>
      <pubDate>Sun, 16 Apr 2023 18:12:03 +0800</pubDate>
      <guid>https://alanhung.dev/post/my-article-name/</guid>
      <description>&lt;p&gt;Wowchemy is designed to give technical content creators a seamless experience. You can focus on the content and Wowchemy handles the rest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlight your code snippets, take notes on math classes, and draw diagrams from textual representation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Wowchemy.&lt;/p&gt;
&lt;div class=&#34;chart-wrapper&#34;&gt;
    &lt;div class=&#34;paper-bg&#34;&gt;
      &lt;div class=&#34;container&#34;&gt;
        &lt;div class=&#34;test&#34;&gt;
          &lt;div class=&#34;square&#34;&gt;
            
            
            
            
            &lt;div id=&#34;chart-217935486&#34; class=&#34;chart&#34;&gt;&lt;/div&gt;
            &lt;script&gt;
              (function() {
                let a = setInterval( function() {
                  if ( typeof window.Plotly === &#39;undefined&#39; ) {
                    return;
                  }
                  clearInterval( a );
            
                  Plotly.d3.json(&#34;./plot.json&#34;, function(chart) {
                    Plotly.plot(&#39;chart-217935486&#39;, chart.data, chart.layout, {responsive: true});
                  });
                }, 500 );
              })();
            &lt;/script&gt;

          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Wowchemy is designed to give technical content creators a seamless experience. You can focus on the content and Wowchemy handles the rest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlight your code snippets, take notes on math classes, and draw diagrams from textual representation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On this page, you&amp;rsquo;ll find s&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Welcome to Wowchemy, the website builder for Hugo</title>
      <link>https://alanhung.dev/post/getting-started/</link>
      <pubDate>Sun, 13 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/post/getting-started/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;libr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The Wowchemy website builder for Hugo, along with its starter templates, is designed for professional creators, educators, and teams/organizations - although it can be used to create any kind of site&lt;/li&gt;
&lt;li&gt;The template can be modified and customised to suit your needs. It&amp;rsquo;s a good platform for anyone looking to take control of their data and online identity whilst having the convenience to start off with a &lt;strong&gt;no-code solution (write in Markdown and customize with YAML parameters)&lt;/strong&gt; and having &lt;strong&gt;flexibility to later add even deeper personalization with HTML and CSS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You can work with all your favourite tools and apps with hundreds of plugins and integrations to speed up your workflows, interact with your readers, and much more&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://wowchemy.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;















&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://raw.githubusercontent.com/wowchemy/wowchemy-hugo-modules/main/starters/academic/preview.png&#34; alt=&#34;The template is mobile first with a responsive design to ensure that your site looks stunning on every device.&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;get-started&#34;&gt;Get Started&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;👉 &lt;a href=&#34;https://wowchemy.com/templates/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Create a new site&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📚 &lt;a href=&#34;https://wowchemy.com/docs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Personalize your site&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;💬 &lt;a href=&#34;https://discord.gg/z8wNYzb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Chat with the &lt;strong&gt;Wowchemy community&lt;/strong&gt;&lt;/a&gt; or &lt;a href=&#34;https://discourse.gohugo.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Hugo community&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🐦 Twitter: &lt;a href=&#34;https://twitter.com/wowchemy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;@wowchemy&lt;/a&gt; &lt;a href=&#34;https://twitter.com/GeorgeCushen&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;@GeorgeCushen&lt;/a&gt; &lt;a href=&#34;https://twitter.com/search?q=%23MadeWithWowchemy&amp;amp;src=typed_query&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#MadeWithWowchemy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;💡 &lt;a href=&#34;https://github.com/wowchemy/wowchemy-hugo-themes/issues&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Request a &lt;strong&gt;feature&lt;/strong&gt; or report a &lt;strong&gt;bug&lt;/strong&gt; for &lt;em&gt;Wowchemy&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⬆️ &lt;strong&gt;Updating Wowchemy?&lt;/strong&gt; View the &lt;a href=&#34;https://wowchemy.com/docs/hugo-tutorials/update/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Update Tutorial&lt;/a&gt; and &lt;a href=&#34;https://wowchemy.com/updates/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;crowd-funded-open-source-software&#34;&gt;Crowd-funded open-source software&lt;/h2&gt;
&lt;p&gt;To help us develop this template and software sustainably under the MIT license, we ask all individuals and businesses that use it to help support its ongoing maintenance and development via sponsorship.&lt;/p&gt;
&lt;h3 id=&#34;-click-here-to-become-a-sponsor-and-help-support-wowchemys-future-httpswowchemycomsponsor&#34;&gt;&lt;a href=&#34;https://wowchemy.com/sponsor/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;❤️ Click here to become a sponsor and help support Wowchemy&amp;rsquo;s future ❤️&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As a token of appreciation for sponsoring, you can &lt;strong&gt;unlock &lt;a href=&#34;https://wowchemy.com/sponsor/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;these&lt;/a&gt; awesome rewards and extra features 🦄✨&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;ecosystem&#34;&gt;Ecosystem&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/wowchemy/hugo-academic-cli&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hugo Academic CLI&lt;/a&gt;:&lt;/strong&gt; Automatically import publications from BibTeX&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;inspiration&#34;&gt;Inspiration&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://academic-demo.netlify.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Check out the latest &lt;strong&gt;demo&lt;/strong&gt;&lt;/a&gt; of what you&amp;rsquo;ll get in less than 10 minutes, or &lt;a href=&#34;https://wowchemy.com/user-stories/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;view the &lt;strong&gt;showcase&lt;/strong&gt;&lt;/a&gt; of personal, project, and business sites.&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Page builder&lt;/strong&gt; - Create &lt;em&gt;anything&lt;/em&gt; with &lt;a href=&#34;https://wowchemy.com/docs/page-builder/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;widgets&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&#34;https://wowchemy.com/docs/content/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;elements&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit any type of content&lt;/strong&gt; - Blog posts, publications, talks, slides, projects, and more!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create content&lt;/strong&gt; in &lt;a href=&#34;https://wowchemy.com/docs/content/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Markdown&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&#34;https://wowchemy.com/docs/import/jupyter/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;Jupyter&lt;/strong&gt;&lt;/a&gt;, or &lt;a href=&#34;https://wowchemy.com/docs/install-locally/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;RStudio&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin System&lt;/strong&gt; - Fully customizable &lt;a href=&#34;https://wowchemy.com/docs/customization/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;color&lt;/strong&gt; and &lt;strong&gt;font themes&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Display Code and Math&lt;/strong&gt; - Code highlighting and &lt;a href=&#34;https://en.wikibooks.org/wiki/LaTeX/Mathematics&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LaTeX math&lt;/a&gt; supported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrations&lt;/strong&gt; - &lt;a href=&#34;https://analytics.google.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Google Analytics&lt;/a&gt;, &lt;a href=&#34;https://disqus.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Disqus commenting&lt;/a&gt;, Maps, Contact Forms, and more!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beautiful Site&lt;/strong&gt; - Simple and refreshing one page design&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industry-Leading SEO&lt;/strong&gt; - Help get your website found on search engines and social media&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Media Galleries&lt;/strong&gt; - Display your images and videos with captions in a customizable gallery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile Friendly&lt;/strong&gt; - Look amazing on every screen with a mobile friendly version of your site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-language&lt;/strong&gt; - 34+ language packs including English, 中文, and Português&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-user&lt;/strong&gt; - Each author gets their own profile page&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy Pack&lt;/strong&gt; - Assists with GDPR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stand Out&lt;/strong&gt; - Bring your site to life with animation, parallax backgrounds, and scroll effects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-Click Deployment&lt;/strong&gt; - No servers. No databases. Only files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;themes&#34;&gt;Themes&lt;/h2&gt;
&lt;p&gt;Wowchemy and its templates come with &lt;strong&gt;automatic day (light) and night (dark) mode&lt;/strong&gt; built-in. Alternatively, visitors can choose their preferred mode - click the moon icon in the top right of the &lt;a href=&#34;https://academic-demo.netlify.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Demo&lt;/a&gt; to see it in action! Day/night mode can also be disabled by the site admin in &lt;code&gt;params.toml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wowchemy.com/docs/customization&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Choose a stunning &lt;strong&gt;theme&lt;/strong&gt; and &lt;strong&gt;font&lt;/strong&gt;&lt;/a&gt; for your site. Themes are fully customizable.&lt;/p&gt;
&lt;h2 id=&#34;license&#34;&gt;License&lt;/h2&gt;
&lt;p&gt;Copyright 2016-present &lt;a href=&#34;https://georgecushen.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;George Cushen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Released under the &lt;a href=&#34;https://github.com/wowchemy/wowchemy-hugo-themes/blob/master/LICENSE.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MIT&lt;/a&gt; license.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Writing technical content in Markdown</title>
      <link>https://alanhung.dev/post/writing-technical-content/</link>
      <pubDate>Fri, 12 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/post/writing-technical-content/</guid>
      <description>&lt;p&gt;Wowchemy is designed to give technical content creators a seamless experience. You can focus on the content and Wowchemy handles the rest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlight your code snippets, take notes on math classes, and draw diagrams from textual representation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Wowchemy.&lt;/p&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;
&lt;h3 id=&#34;code&#34;&gt;Code&lt;/h3&gt;
&lt;p&gt;Wowchemy supports a Markdown extension for highlighting code syntax. You can customize the styles under the &lt;code&gt;syntax_highlighter&lt;/code&gt; option in your &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```python
import pandas as pd
data = pd.read_csv(&amp;quot;data.csv&amp;quot;)
data.head()
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;mindmaps&#34;&gt;Mindmaps&lt;/h3&gt;
&lt;p&gt;Wowchemy supports a Markdown extension for mindmaps.&lt;/p&gt;
&lt;p&gt;Simply insert a Markdown &lt;code&gt;markmap&lt;/code&gt; code block and optionally set the height of the mindmap as shown in the example below.&lt;/p&gt;
&lt;p&gt;A simple mindmap defined as a Markdown list:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;
&lt;code&gt;
```markmap {height=&#34;200px&#34;}
- Hugo Modules
  - wowchemy
  - wowchemy-plugins-netlify
  - wowchemy-plugins-netlify-cms
  - wowchemy-plugins-reveal
```
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;markmap&#34; style=&#34;height: 200px;&#34;&gt;

&lt;pre&gt;- Hugo Modules
  - wowchemy
  - wowchemy-plugins-netlify
  - wowchemy-plugins-netlify-cms
  - wowchemy-plugins-reveal&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;A more advanced mindmap with formatting, code blocks, and math:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;
&lt;code&gt;
```markmap
- Mindmaps
  - Links
    - [Wowchemy Docs](https://wowchemy.com/docs/)
    - [Discord Community](https://discord.gg/z8wNYzb)
    - [GitHub](https://github.com/wowchemy/wowchemy-hugo-themes)
  - Features
    - Markdown formatting
    - **inline** ~~text~~ *styles*
    - multiline
      text
    - `inline code`
    -
      ```js
      console.log(&#39;hello&#39;);
      console.log(&#39;code block&#39;);
      ```
    - Math: $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$
```
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;markmap&#34; style=&#34;height: 500px;&#34;&gt;

&lt;pre&gt;- Mindmaps
  - Links
    - [Wowchemy Docs](https://wowchemy.com/docs/)
    - [Discord Community](https://discord.gg/z8wNYzb)
    - [GitHub](https://github.com/wowchemy/wowchemy-hugo-themes)
  - Features
    - Markdown formatting
    - **inline** ~~text~~ *styles*
    - multiline
      text
    - `inline code`
    -
      ```js
      console.log(&#39;hello&#39;);
      console.log(&#39;code block&#39;);
      ```
    - Math: $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&#34;charts&#34;&gt;Charts&lt;/h3&gt;
&lt;p&gt;Wowchemy supports the popular &lt;a href=&#34;https://plot.ly/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plotly&lt;/a&gt; format for interactive charts.&lt;/p&gt;
&lt;p&gt;Save your Plotly JSON in your page folder, for example &lt;code&gt;line-chart.json&lt;/code&gt;, and then add the &lt;code&gt;{{&amp;lt; chart data=&amp;quot;line-chart&amp;quot; &amp;gt;}}&lt;/code&gt; shortcode where you would like the chart to appear.&lt;/p&gt;
&lt;p&gt;Demo:&lt;/p&gt;




&lt;div id=&#34;chart-987265134&#34; class=&#34;chart&#34;&gt;&lt;/div&gt;
&lt;script&gt;
  (function() {
    let a = setInterval( function() {
      if ( typeof window.Plotly === &#39;undefined&#39; ) {
        return;
      }
      clearInterval( a );

      Plotly.d3.json(&#34;./line-chart.json&#34;, function(chart) {
        Plotly.plot(&#39;chart-987265134&#39;, chart.data, chart.layout, {responsive: true});
      });
    }, 500 );
  })();
&lt;/script&gt;

&lt;p&gt;You might also find the &lt;a href=&#34;http://plotly-json-editor.getforge.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plotly JSON Editor&lt;/a&gt; useful.&lt;/p&gt;
&lt;h3 id=&#34;math&#34;&gt;Math&lt;/h3&gt;
&lt;p&gt;Wowchemy supports a Markdown extension for $\LaTeX$ math. You can enable this feature by toggling the &lt;code&gt;math&lt;/code&gt; option in your &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;To render &lt;em&gt;inline&lt;/em&gt; or &lt;em&gt;block&lt;/em&gt; math, wrap your LaTeX math with &lt;code&gt;{{&amp;lt; math &amp;gt;}}$...${{&amp;lt; /math &amp;gt;}}&lt;/code&gt; or &lt;code&gt;{{&amp;lt; math &amp;gt;}}$$...$${{&amp;lt; /math &amp;gt;}}&lt;/code&gt;, respectively. (We wrap the LaTeX math in the Wowchemy &lt;em&gt;math&lt;/em&gt; shortcode to prevent Hugo rendering our math as Markdown. The &lt;em&gt;math&lt;/em&gt; shortcode is new in v5.5-dev.)&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;math block&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;{{&lt;/span&gt;&amp;lt; math &amp;gt;&lt;span class=&#34;nb&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;$$&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\gamma&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;_{n} &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\frac&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{ &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\left&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; | &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\left&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; x_{n} &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; x_{n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;} &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\right&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;^T &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\left&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\nabla&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; F &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; x_{n}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\nabla&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; F &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; x_{n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\right&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\right&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; |}{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\left&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\|\nabla&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{x}_{n}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\nabla&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\mathbf&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{x}_{n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\right&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\|&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;^&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;{{&lt;/span&gt;&amp;lt; /math &amp;gt;&lt;span class=&#34;nb&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;



$$\gamma_{n} = \frac{ \left | \left (\mathbf x_{n} - \mathbf x_{n-1} \right )^T \left [\nabla F (\mathbf x_{n}) - \nabla F (\mathbf x_{n-1}) \right ] \right |}{\left \|\nabla F(\mathbf{x}_{n}) - \nabla F(\mathbf{x}_{n-1}) \right \|^2}$$

&lt;p&gt;Example &lt;strong&gt;inline math&lt;/strong&gt; &lt;code&gt;{{&amp;lt; math &amp;gt;}}$\nabla F(\mathbf{x}_{n})${{&amp;lt; /math &amp;gt;}}&lt;/code&gt; renders as 

$\nabla F(\mathbf{x}_{n})$.&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;multi-line math&lt;/strong&gt; using the math linebreak (&lt;code&gt;\\&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;{{&lt;/span&gt;&amp;lt; math &amp;gt;&lt;span class=&#34;nb&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;$$&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;k;p_{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}^{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\begin&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{cases}p_{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}^{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;} &amp;amp; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\text&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{if }k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\\&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;p_{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;}^{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;} &amp;amp; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\text&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{if }k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;\end&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;{cases}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;{{&lt;/span&gt;&amp;lt; /math &amp;gt;&lt;span class=&#34;nb&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;




$$
f(k;p_{0}^{*}) = \begin{cases}p_{0}^{*} &amp; \text{if }k=1, \\
1-p_{0}^{*} &amp; \text{if }k=0.\end{cases}
$$


&lt;h3 id=&#34;diagrams&#34;&gt;Diagrams&lt;/h3&gt;
&lt;p&gt;Wowchemy supports a Markdown extension for diagrams. You can enable this feature by toggling the &lt;code&gt;diagram&lt;/code&gt; option in your &lt;code&gt;config/_default/params.toml&lt;/code&gt; file or by adding &lt;code&gt;diagram: true&lt;/code&gt; to your page front matter.&lt;/p&gt;
&lt;p&gt;An example &lt;strong&gt;flowchart&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
graph TD
A[Hard] --&amp;gt;|Text| B(Round)
B --&amp;gt; C{Decision}
C --&amp;gt;|One| D[Result 1]
C --&amp;gt;|Two| E[Result 2]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;graph TD
A[Hard] --&gt;|Text| B(Round)
B --&gt; C{Decision}
C --&gt;|One| D[Result 1]
C --&gt;|Two| E[Result 2]
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;sequence diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
sequenceDiagram
Alice-&amp;gt;&amp;gt;John: Hello John, how are you?
loop Healthcheck
    John-&amp;gt;&amp;gt;John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John--&amp;gt;&amp;gt;Alice: Great!
John-&amp;gt;&amp;gt;Bob: How about you?
Bob--&amp;gt;&amp;gt;John: Jolly good!
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;sequenceDiagram
Alice-&gt;&gt;John: Hello John, how are you?
loop Healthcheck
    John-&gt;&gt;John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John--&gt;&gt;Alice: Great!
John-&gt;&gt;Bob: How about you?
Bob--&gt;&gt;John: Jolly good!
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;Gantt diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
gantt
section Section
Completed :done,    des1, 2014-01-06,2014-01-08
Active        :active,  des2, 2014-01-07, 3d
Parallel 1   :         des3, after des1, 1d
Parallel 2   :         des4, after des1, 1d
Parallel 3   :         des5, after des3, 1d
Parallel 4   :         des6, after des4, 1d
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;gantt
section Section
Completed :done,    des1, 2014-01-06,2014-01-08
Active        :active,  des2, 2014-01-07, 3d
Parallel 1   :         des3, after des1, 1d
Parallel 2   :         des4, after des1, 1d
Parallel 3   :         des5, after des3, 1d
Parallel 4   :         des6, after des4, 1d
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;class diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
classDiagram
Class01 &amp;lt;|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --&amp;gt; C2 : Where am i?
Class09 --* C3
Class09 --|&amp;gt; Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 &amp;lt;--&amp;gt; C2: Cool label
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;classDiagram
Class01 &lt;|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --&gt; C2 : Where am i?
Class09 --* C3
Class09 --|&gt; Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 &lt;--&gt; C2: Cool label
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;state diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
stateDiagram
[*] --&amp;gt; Still
Still --&amp;gt; [*]
Still --&amp;gt; Moving
Moving --&amp;gt; Still
Moving --&amp;gt; Crash
Crash --&amp;gt; [*]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;stateDiagram
[*] --&gt; Still
Still --&gt; [*]
Still --&gt; Moving
Moving --&gt; Still
Moving --&gt; Crash
Crash --&gt; [*]
&lt;/div&gt;
&lt;h3 id=&#34;todo-lists&#34;&gt;Todo lists&lt;/h3&gt;
&lt;p&gt;You can even write your todo lists in Markdown too:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [x]&lt;/span&gt; Write math example
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;- [x]&lt;/span&gt; Write diagram example
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; Do something else
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Write math example
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Write diagram example&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Do something else&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tables&#34;&gt;Tables&lt;/h3&gt;
&lt;p&gt;Save your spreadsheet as a CSV file in your page&amp;rsquo;s folder and then render it by adding the &lt;em&gt;Table&lt;/em&gt; shortcode to your page:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&amp;lt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;results.csv&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Table 1: My results&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;h3 id=&#34;callouts&#34;&gt;Callouts&lt;/h3&gt;
&lt;p&gt;Academic supports a &lt;a href=&#34;https://wowchemy.com/docs/content/writing-markdown-latex/#callouts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;shortcode for callouts&lt;/a&gt;, also referred to as &lt;em&gt;asides&lt;/em&gt;, &lt;em&gt;hints&lt;/em&gt;, or &lt;em&gt;alerts&lt;/em&gt;. By wrapping a paragraph in &lt;code&gt;{{% callout note %}} ... {{% /callout %}}&lt;/code&gt;, it will render as an aside.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% callout note %}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A Markdown aside is useful for displaying notices, hints, or definitions to your readers.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% /callout %}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    A Markdown aside is useful for displaying notices, hints, or definitions to your readers.
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;spoilers&#34;&gt;Spoilers&lt;/h3&gt;
&lt;p&gt;Add a spoiler to a page to reveal text, such as an answer to a question, after a button is clicked.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;spoiler&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Click to view the spoiler&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You found me!
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spoiler&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;details class=&#34;spoiler &#34;  id=&#34;spoiler-5&#34;&gt;
  &lt;summary&gt;Click to view the spoiler&lt;/summary&gt;
  &lt;p&gt;You found me!&lt;/p&gt;
&lt;/details&gt;
&lt;h3 id=&#34;icons&#34;&gt;Icons&lt;/h3&gt;
&lt;p&gt;Academic enables you to use a wide range of &lt;a href=&#34;https://wowchemy.com/docs/getting-started/page-builder/#icons&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;icons from &lt;em&gt;Font Awesome&lt;/em&gt; and &lt;em&gt;Academicons&lt;/em&gt;&lt;/a&gt; in addition to &lt;a href=&#34;https://wowchemy.com/docs/content/writing-markdown-latex/#emojis&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;emojis&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are some examples using the &lt;code&gt;icon&lt;/code&gt; shortcode to render icons:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;terminal&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fas&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}} Terminal  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fab&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}} Python  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;r-project&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fab&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}} R
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;p&gt;
  &lt;i class=&#34;fas fa-terminal  pr-1 fa-fw&#34;&gt;&lt;/i&gt; Terminal&lt;br&gt;

  &lt;i class=&#34;fab fa-python  pr-1 fa-fw&#34;&gt;&lt;/i&gt; Python&lt;br&gt;

  &lt;i class=&#34;fab fa-r-project  pr-1 fa-fw&#34;&gt;&lt;/i&gt; R&lt;/p&gt;
&lt;h3 id=&#34;did-you-find-this-page-helpful-consider-sharing-it-&#34;&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h3&gt;
</description>
    </item>
    
    <item>
      <title>Transitions toward B2C E-commerce: Part II</title>
      <link>https://alanhung.dev/project/business-model-transitions-ii/</link>
      <pubDate>Sat, 08 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/business-model-transitions-ii/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;script&gt;changeTitle(&#34;Transitions towards B2C E-commerce: Part II - Competitor Analysis and Strategy Formation&#34;)&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-competitor-analysis&#34;&gt;2. Competitor Analysis&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#21-profile-and-benchmark&#34;&gt;2.1. Profile and Benchmark&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#observation&#34;&gt;Observation&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#action&#34;&gt;Action&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#22-post-on-facebook&#34;&gt;2.2. Post on Facebook&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#observation-1&#34;&gt;Observation&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#action-1&#34;&gt;Action&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#23-video-on-youtube&#34;&gt;2.3. Video on YouTube&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#observation-2&#34;&gt;Observation&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#action-2&#34;&gt;Action&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#24-product-pricing-and-sales&#34;&gt;2.4. Product, Pricing, and Sales&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-strategy&#34;&gt;3. Strategy&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-swot-analysis&#34;&gt;3.1. SWOT Analysis&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-milestones&#34;&gt;3.2. Milestones&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-conclusion&#34;&gt;4. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-appendix-website-crawlers&#34;&gt;5. Appendix: Website Crawlers&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#51-program&#34;&gt;5.1. Program&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#52-performance&#34;&gt;5.2. Performance&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;hr&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;This document presents a competitor analysis and a strategy and timeline for transitioning our business into B2C e-commerce.&lt;/p&gt;
&lt;p&gt;To begin, we create a competitor profile that identifies social media and e-commerce as promising entry points. After investigating our competitors&amp;rsquo; social media strategies, we have discovered that posting tutorial videos about bag making on Facebook is the most effective way to reach potential customers.&lt;/p&gt;
&lt;p&gt;Next, we conduct a SWOT analysis to determine how we can utilize our strengths in fabric design and workflow automation to overcome weaknesses and threats from external competitors. We also note that our long-term goal is to create unique products as a differentiating factor.&lt;/p&gt;
&lt;p&gt;Finally, we set up a logical and chronological timeline based on the aforementioned analysis, prioritizing the necessary actions.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Competitor analysis (CA) is a cornerstone of market studies, providing meaningful insights and guiding actions. Firms that have a system to monitor their competitors also tend to show better profitability




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#subramanian-1998&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Ram&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Subramanian&lt;/span&gt;&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Samir T&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;IsHak&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;1998&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Subramanian&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Ram&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;IsHak&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Samir T&#34; /&gt;
    S.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;1998&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Competitor analysis practices of US companies: An empirical investigation&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;MIR: Management International Review&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;7–23&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
. This is particularly important for us, as our objective is to venture into a new business, as mentioned in the &lt;a href=&#34;https://alanhung.dev/project/business-model-transitions-i/&#34;&gt;business transition plan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A competitor analysis for a business may involve the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify the business&amp;rsquo;s competitors and analyze their products, pricing, and sales.&lt;/li&gt;
&lt;li&gt;Identify the competitors&amp;rsquo; marketing strategies.&lt;/li&gt;
&lt;li&gt;Use the findings to create benchmarks.&lt;/li&gt;
&lt;li&gt;Estimate market share and potential growth.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to the internet era, businesses can provide information about their products on the web or promote them via social media. This makes competitive analysis much easier since most of the necessary information can be found online. However, tasks such as retrieving information for all products from an online shop can be repetitive and time-consuming. To handle such tasks efficiently, we build a website crawler as described in the &lt;a href=&#34;https://alanhung.dev/project/business-model-transitions-ii/#5-appendix-website-crawlers&#34;&gt;appendix&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;2-competitor-analysis&#34;&gt;2. Competitor Analysis&lt;/h1&gt;
&lt;h2 id=&#34;21-profile-and-benchmark&#34;&gt;2.1. Profile and Benchmark&lt;/h2&gt;
&lt;p&gt;To gain an understanding of the market, we can begin by creating a profile of our competitors. Based on the results from the search engine and estimations, we have created a table as shown in Table. 1.(Due to confidentiality, some content in the table has been replaced by green and gray symbols.)&lt;/p&gt;
&lt;h3 id=&#34;observation&#34;&gt;Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;All of our competitors have both direct selling and e-commerce stores.&lt;/li&gt;
&lt;li&gt;Competitors in Taiwan mainly focus on product design and retail operations.&lt;/li&gt;
&lt;li&gt;The companies, except for competitor D, have a weak social media presence, indicating that they have not utilized social media as a marketing tool for promotion.&lt;/li&gt;
&lt;li&gt;Competitor A has the highest annual turnover and a diverse range of businesses.&lt;/li&gt;
&lt;li&gt;Competitor D has the highest popularity on social media.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;action&#34;&gt;Action&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;To enter the B2C business, the first step should be to promote our product on social media and e-commerce platforms. These areas have a low barrier of entry, and our competitors have not yet focused on them.&lt;/li&gt;
&lt;li&gt;We need to analyze the social media strategies of competitor D.&lt;/li&gt;
&lt;li&gt;For our long-term goals, we should leverage our advantage in fabric design and combine it with our knowledge of customer preferences gathered during E-commerce store operations. This will allow us to incorporate this information into our product design and create unique products.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Table&amp;nbsp;&#34;
            data-post=&#34;:&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered-table&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Profile of our top four competitors in the market. (Due to confidentiality, some content in the table has been replaced by green and gray symbols.)
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/competitor_profile.webp&#34; width=&#34;4449&#34; height=&#34;5523&#34; alt=&#34;competitor_profile&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;22-post-on-facebook&#34;&gt;2.2. Post on Facebook&lt;/h2&gt;
&lt;p&gt;To study competitor D more thoroughly, we can use a website crawler to retrieve all of their posts on Facebook.&lt;/p&gt;
&lt;h3 id=&#34;observation-1&#34;&gt;Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The competitor D began promoting on Facebook in 2014, with an average of 40 posts per month. The average number of reactions per post gradually increased to 1000, as shown in Fig. 1(a).&lt;/li&gt;
&lt;li&gt;According to Fig. 1(b), ninety-eight percent of the content is made up of text and image posts. However, they use YouTube links instead of in-line videos within their posts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;action-1&#34;&gt;Action&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;To compete with our competitors, we should consider generating at least one post per day to match their performance of 40 posts per month.&lt;/li&gt;
&lt;li&gt;We can utilize video posts, which can &lt;a href=&#34;https://www.linkedin.com/pulse/social-video-generates-1200-more-shares-than-text-image-moroles/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;generate 1200% more shares&lt;/a&gt; than text and image content combined. This has the potential to reach more people than our competitors&amp;rsquo; posts.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Information regarding the Facebook posts of competitor D from Table 1, including: (a) The number of posts per month and the average number of reactions per post; (b) The proportion of image, text, and video posts.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
    

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;div class=&#34;t-right&#34;&gt;
        &lt;span style=&#34;color:#03DAC6&#34;&gt;━━ Number of Posts &lt;/span&gt;&lt;br&gt;&lt;span style=&#34;color:#BB86FC&#34;&gt;━━ Number of Reactions&lt;/span&gt;
        &lt;/div&gt;
        &lt;div id=&#34;competitor-facebook-plot&#34;&gt;&lt;/div&gt;
    &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                &lt;div class=&#34;w-size19 respon5&#34;&gt;
  
                    &lt;div id=&#34;post-type-comparison-pie-chart&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

                &lt;div class=&#34;w-size20 respon5&#34;&gt;
  
                    &lt;div id=&#34;post-type-comparison-table&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

            &lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;23-video-on-youtube&#34;&gt;2.3. Video on YouTube&lt;/h2&gt;
&lt;p&gt;As competitor D redirected their audience to YouTube in their Facebook post, we can analyze the content on their channel. Just as a Facebook post can be extracted, a website crawler is also useful for retrieving video information on YouTube.&lt;/p&gt;
&lt;h3 id=&#34;observation-2&#34;&gt;Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The competitor&amp;rsquo;s channel has three main categories: sewing techniques, product promotion, and bag tutorials (see Fig. 2(a)(b)). Bag tutorials have the highest number of videos and contribute to around 62% of the total views.&lt;/li&gt;
&lt;li&gt;The video length is around 20 minutes, as shown in Fig. 2(c).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;action-2&#34;&gt;Action&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;We might consider using a bag tutorial as a promotional tool due to its high popularity.&lt;/li&gt;
&lt;li&gt;We may consider reducing the video length to 20 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Content on the YouTube channel of competitor D from Table 1, including (a) the proportion of videos in each category, (b) the proportion of view counts for each category, and (c) distribution of video length.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                &lt;div class=&#34;w-size19 respon5&#34;&gt;
  
                    &lt;div id=&#34;video-type-comparison-pie-chart&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

                &lt;div class=&#34;w-size20 respon5&#34;&gt;
  
                    &lt;div id=&#34;video-type-comparison-table&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

            &lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                &lt;div class=&#34;w-size19 respon5&#34;&gt;
  
                    &lt;div id=&#34;view-number-comparison-pie-chart&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

                &lt;div class=&#34;w-size20 respon5&#34;&gt;
  
                    &lt;div id=&#34;view-number-comparison-table&#34;&gt;&lt;/div&gt;
                
&lt;/div&gt;

            &lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;video-length-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;24-product-pricing-and-sales&#34;&gt;2.4. Product, Pricing, and Sales&lt;/h2&gt;
&lt;p&gt;Since this information is not publicly available, it is inappropriate to disclose details on how to retrieve it or any results obtained. However, we can share our general approach. We gather information on product and pricing from our competitors&amp;rsquo; sales pages. We compare daily or monthly sales results to obtain sales data, which we then use to estimate market share and potential growth.&lt;/p&gt;
&lt;h1 id=&#34;3-strategy&#34;&gt;3. Strategy&lt;/h1&gt;
&lt;p&gt;Based on the findings from competitive analysis, we can plan our strategy by conducting a SWOT analysis first and then prioritizing actions accordingly.&lt;/p&gt;
&lt;h2 id=&#34;31-swot-analysis&#34;&gt;3.1. SWOT Analysis&lt;/h2&gt;
&lt;img src=&#34;./figure/SWOT.webp&#34; width=&#34;2522&#34; height=&#34;1494&#34; alt=&#34;SWOT&#34; style=&#34;margin:0;&#34;&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strength&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;We have plenty of experience in fabric design, which is beneficial for designing unique products in the long run. This is because we have fewer restrictions on fabric selection and usage.&lt;/li&gt;
&lt;li&gt;We are capable of automating our workflow with algorithms and machine learning (ML) techniques. This can lead to lower operating costs and a reduced workforce, making us more resilient when confronting difficult situations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weakness&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Currently, we lack experience in the consumer market. This can be overcome by utilizing data analytics, such as analyzing purchase history and social media activity.&lt;/li&gt;
&lt;li&gt;Designing a great product requires hard work and dedication. Collaborating with other designers and gaining experience along the way can help us get started on the right path.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opportunities&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;u&gt;Short term&lt;/u&gt;&lt;/em&gt;: Our competitors have not yet focused on social media for product promotion, but this is only a short-term advantage. Eventually, they will also join the competition.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;u&gt;Long term&lt;/u&gt;&lt;/em&gt;: Utilize our experience in fabric design and the customer preference information gathered from the e-commerce store to create a unique product that stands out from the competition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Threats&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;u&gt;Short term&lt;/u&gt;&lt;/em&gt;: Selling a similar product on an e-commerce store may result in price competition. Larger corporations may use this as a weapon to eliminate other competitors because they have more resources to withstand short-term losses. With our strength in workflow automation and lower operational costs, we are better equipped to survive in this competition.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;u&gt;Long term&lt;/u&gt;&lt;/em&gt;: Due to the lack of copyright protection in fabric and product design, competitors may replicate our designs. To address this issue, we can leverage our strength in workflow automation to accelerate design and release new products more frequently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;32-milestones&#34;&gt;3.2. Milestones&lt;/h2&gt;
&lt;p&gt;Based on the results of the SWOT analysis, we can create a timeline for the necessary actions.&lt;/p&gt;
&lt;img src=&#34;./figure/Timeline.webp&#34; width=&#34;3112&#34; height=&#34;3374&#34; alt=&#34;Timeline&#34; style=&#34;margin:0;&#34;&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I. Break into Market&lt;/strong&gt;:&lt;br&gt;
We will leverage social media opportunities and set up an e-commerce store. We will use competitive pricing to break into the market with the purpose of collecting enough feedback and sales data to understand the market.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;II. Task Automation&lt;/strong&gt;:&lt;br&gt;
We have divided the efficiency improvement program into three steps. The first step is to automate daily routine work using algorithms. Specifically, we will focus on fabric feature extraction and retrieving similar fabrics, which are the preliminary steps for building an in-house library. This is also the most time-consuming task in daily work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;III. Data Analytic&lt;/strong&gt;:&lt;br&gt;
Once we have collected enough data from the e-commerce store, we will use machine learning techniques such as cluster analysis and regression to understand our customers&amp;rsquo; preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IV. In-house library&lt;/strong&gt;:&lt;br&gt;
By combining the results from task automation and data analytics, we will build a library that serves as a data storage system. This will enable team members to access and retrieve required data more efficiently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V. Workflow Optimization&lt;/strong&gt;:&lt;br&gt;
We will integrate our in-house library with our original workflow and empasize on collaboration to further improving the efficiency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VI. Advertisement&lt;/strong&gt;:&lt;br&gt;
Targeting potential customers with advertisements effectively requires customer profiles. Therefore, we have placed this action in the later phase of the timeline. Sufficient data from the e-commerce store is needed to create a customer profile. In addition, we should establish our internal advertising flow to avoid unclear and opaque processes offered by advertisers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VII. Creative work&lt;/strong&gt;:&lt;br&gt;
After gaining enough experience through collaboration with other designers, we should focus on co-designing products and fabrics to create a differentiated product that will set us apart from our competitors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;4-conclusion&#34;&gt;4. Conclusion&lt;/h1&gt;
&lt;p&gt;This document outlines a strategy for transitioning our business model into B2C e-commerce.&lt;/p&gt;
&lt;p&gt;First, we conduct a competitor analysis by creating a competitor profile. This reveals that social media and e-commerce are good entry points to the market. We then analyze our competitors&amp;rsquo; social media promotion strategies and find that creating video tutorials about making bags is the best way to reach potential customers. Due to confidentiality, we can only briefly describe how we estimate our competitors&amp;rsquo; sales.&lt;/p&gt;
&lt;p&gt;Next, we perform a SWOT analysis. Our strengths lie in our experience in fabric design and our ability to automate workflows. This not only enables us to overcome short-term threats from price competition but also creates long-term opportunities to differentiate our products. To overcome our weakness in being unfamiliar with the consumer market, we plan to utilize short-term opportunities on social media. Regarding our weakness in product design, collaborating with other designers initially is a good way to gain experience.&lt;/p&gt;
&lt;p&gt;Based on the aforementioned analysis, we have established a timeline. To break into the market, we will set up an e-commerce store and utilize competitive pricing and social media promotion. We will also use machine learning techniques to understand customer preferences.&lt;/p&gt;
&lt;p&gt;For our efficiency improvement program, we&amp;rsquo;ve divided it into three parts. First, we&amp;rsquo;ll implement algorithms that focus on fabric feature extraction and retrieving similar fabrics. Next, we&amp;rsquo;ll build an in-house library to store data about fabrics, products, and sales, with a user interface that allows team members to access and retrieve required data more efficiently. Third, we&amp;rsquo;ll integrate our workflow with the in-house library, emphasizing collaboration.&lt;/p&gt;
&lt;p&gt;Finally, we will increase our market share through advertising, which will be based on the customer profiles we build and our internal advertising flow.&lt;/p&gt;
&lt;p&gt;Our long-term goal is to focus on fabric and product design to create unique products as a differentiating factor from our competitors.&lt;/p&gt;
&lt;h1 id=&#34;5-appendix-website-crawlers&#34;&gt;5. Appendix: Website Crawlers&lt;/h1&gt;
&lt;h2 id=&#34;51-program&#34;&gt;5.1. Program&lt;/h2&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Four major steps of the website crawler: target, login, search, and extract.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/program.webp&#34; width=&#34;3000&#34; height=&#34;3500&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;A website crawler can be implemented using Selenium in Python, which involves four major steps:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Target&lt;/strong&gt;: Users can provide a list of URLs as targets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Login&lt;/strong&gt;: Users may be required to log in with credentials. For example, a user needs to enter their email and password to log in to Facebook and view its content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Retrieve&lt;/strong&gt;: Users can retrieve HTML elements by selector. The following code provides an example that uses Firefox as a browser and retrieves all elements with the tag name &amp;ldquo;article&amp;rdquo; in a given URL.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Open browser&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;selenium&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;webdriver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Firefox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Visit url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Retrieve all element with tag name &amp;#34;article&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;articles&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tag name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;article&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Extract&lt;/strong&gt;: Users can extract information from HTML elements. For example, for each article retrieved from the previous step, it is possible to extract the post&amp;rsquo;s ID from its attribute and take a screenshot of each element.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;article&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;articles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data_ft&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;article&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_attribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data-ft&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;post_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_ft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;article&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;screenshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.png&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For detailed implementation, please refer to the &lt;a href=&#34;https://github.com/Alan-Hung/facebook-crawler-with-selenium&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;52-performance&#34;&gt;5.2. Performance&lt;/h2&gt;
&lt;p&gt;The website crawler can be used on any website composed of HTML elements. To demonstrate its performance, we use Facebook as an example and measure the number of posts retrieved over time, as shown in Fig. 4. Unlike the Meta Graph API, which has a &lt;a href=&#34;https://developers.facebook.com/docs/graph-api/reference/v17.0/page/feed&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;limit of 600 posts per year&lt;/a&gt;, the crawler can retrieve more posts and organize them chronologically.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Number of posts retrieved from Facebook pages.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div class=&#34;t-right&#34;&gt;
        &lt;span style=&#34;color:#03DAC6&#34;&gt;━━ Website crawler &lt;/span&gt;&lt;br&gt;&lt;span style=&#34;color:#FF6692&#34;&gt;━━ Meta Graph API limit&lt;/span&gt;
        &lt;/div&gt;
        &lt;div id=&#34;performance-plot&#34;&gt;&lt;/div&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;











&lt;section class=&#34;hugo-cite-bibliography&#34;&gt;
  &lt;dl&gt;
    

      &lt;div id=&#34;subramanian-1998&#34;&gt;
        &lt;dt&gt;
          Subramanian&amp;#32;&amp;amp;&amp;#32;IsHak

          
          (1998)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Subramanian&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Ram&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;IsHak&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Samir T&#34; /&gt;
    S.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;1998&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Competitor analysis practices of US companies: An empirical investigation&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;MIR: Management International Review&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;7–23&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;
  &lt;/dl&gt;
&lt;/section&gt;



&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [], tablesIndex: [], closeInner: false, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>An example preprint / working paper</title>
      <link>https://alanhung.dev/publication/preprint/</link>
      <pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/publication/preprint/</guid>
      <description>&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    Create your slides in Markdown - click the &lt;em&gt;Slides&lt;/em&gt; button to check out the example.
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Supplementary notes can be added here, including &lt;a href=&#34;https://wowchemy.com/docs/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;code, math, and images&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Display Jupyter Notebooks with Academic</title>
      <link>https://alanhung.dev/post/jupyter/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/post/jupyter/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython.core.display&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://www.python.org/static/community_logos/python-logo-master-v3-TM-flattened.png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;./index_1_0.png&#34; alt=&#34;png&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Welcome to Academic!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;Welcome to Academic!
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;install-python-and-jupyterlab&#34;&gt;Install Python and JupyterLab&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.anaconda.com/distribution/#download-section&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Install Anaconda&lt;/a&gt; which includes Python 3 and JupyterLab.&lt;/p&gt;
&lt;p&gt;Alternatively, install JupyterLab with &lt;code&gt;pip3 install jupyterlab&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;create-or-upload-a-jupyter-notebook&#34;&gt;Create or upload a Jupyter notebook&lt;/h2&gt;
&lt;p&gt;Run the following commands in your Terminal, substituting &lt;code&gt;&amp;lt;MY-WEBSITE-FOLDER&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;SHORT-POST-TITLE&amp;gt;&lt;/code&gt; with the file path to your Academic website folder and a short title for your blog post (use hyphens instead of spaces), respectively:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p &amp;lt;MY-WEBSITE-FOLDER&amp;gt;/content/post/&amp;lt;SHORT-POST-TITLE&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &amp;lt;MY-WEBSITE-FOLDER&amp;gt;/content/post/&amp;lt;SHORT-POST-TITLE&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter lab index.ipynb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;jupyter&lt;/code&gt; command above will launch the JupyterLab editor, allowing us to add Academic metadata and write the content.&lt;/p&gt;
&lt;h2 id=&#34;edit-your-post-metadata&#34;&gt;Edit your post metadata&lt;/h2&gt;
&lt;p&gt;The first cell of your Jupter notebook will contain your post metadata (&lt;a href=&#34;https://sourcethemes.com/academic/docs/front-matter/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;front matter&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In Jupter, choose &lt;em&gt;Markdown&lt;/em&gt; as the type of the first cell and wrap your Academic metadata in three dashes, indicating that it is YAML front matter:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;title: My post&amp;#39;s title
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: 2019-09-01
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Put any other Academic metadata here...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit the metadata of your post, using the &lt;a href=&#34;https://sourcethemes.com/academic/docs/managing-content&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;documentation&lt;/a&gt; as a guide to the available options.&lt;/p&gt;
&lt;p&gt;To set a &lt;a href=&#34;https://sourcethemes.com/academic/docs/managing-content/#featured-image&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;featured image&lt;/a&gt;, place an image named &lt;code&gt;featured&lt;/code&gt; into your post&amp;rsquo;s folder.&lt;/p&gt;
&lt;p&gt;For other tips, such as using math, see the guide on &lt;a href=&#34;https://wowchemy.com/docs/content/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;writing content with Academic&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;convert-notebook-to-markdown&#34;&gt;Convert notebook to Markdown&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert index.ipynb --to markdown --NbConvertApp.output_files_dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;
&lt;p&gt;This post was created with Jupyter. The orginal files can be found at &lt;a href=&#34;https://github.com/gcushen/hugo-academic/tree/master/exampleSite/content/post/jupyter&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/gcushen/hugo-academic/tree/master/exampleSite/content/post/jupyter&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Improving fabric sales through cluster analysis</title>
      <link>https://alanhung.dev/project/improve-fabric-sales/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/improve-fabric-sales/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-objectives&#34;&gt;2. Objectives&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-dataset&#34;&gt;3. Dataset&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-exploratory-data-analysis&#34;&gt;4. Exploratory data analysis&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#41-distribution&#34;&gt;4.1. Distribution&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#42-correlation&#34;&gt;4.2. Correlation&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-models&#34;&gt;5. Models&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#51-dimensionality-reduction&#34;&gt;5.1. Dimensionality reduction&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#52-cluster-analysis&#34;&gt;5.2. Cluster analysis&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#521-k-means&#34;&gt;5.2.1. K-means&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#522-sales-and-stock&#34;&gt;5.2.2. Sales and Stock&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#53-regression&#34;&gt;5.3 Regression&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#6-strategy-to-improve-sales&#34;&gt;6. Strategy to Improve Sales&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#7-conclusion&#34;&gt;7. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;We performed cluster analysis and regression on our fabric sales data. Due to the subjective nature of fabric, the features we extracted were not enough to make precise predictions. However, leveraging the results from cluster analysis has improved our sales in two ways:&lt;/p&gt;
&lt;p&gt;First, by providing labels for each cluster, we have given buyers a more organized way to make purchases, resulting in a 50% reduction in processing time for each purchase.&lt;/p&gt;
&lt;p&gt;Second, by identifying the clusters that may lead to high inventory levels, we can allocate our budget more effectively, resulting in up to a 4x improvement in sales.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Understanding customers&amp;rsquo; needs is one of the key strategies to increase sales. For fabric retailers, this can be particularly challenging due to the subjective nature of fabric as a visual artwork. Each customer may have different preferences, which can result in high inventory levels if purchased fabric does not meet their needs. Additionally, fabric selection has traditionally been carried out by experienced buyers, which can be prone to human error and exacerbate the issue.&lt;/p&gt;
&lt;p&gt;To address these issues, we analyze the features extracted from our algorithms&lt;a href=&#34;https://alanhung.dev/project/color-theme-extraction/&#34;&gt;$^1$&lt;/a&gt; &lt;a href=&#34;https://alanhung.dev/project/repeated-pattern-detection/&#34;&gt;$^2$&lt;/a&gt; to gain insights into the fabric. This will help us better understand customer preferences and, consequently, improve sales.&lt;/p&gt;
&lt;h1 id=&#34;2-objectives&#34;&gt;2. Objectives&lt;/h1&gt;
&lt;p&gt;The objective of this project is to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Categorize the fabric by features.&lt;/li&gt;
&lt;li&gt;Identify the category with the most sales and the category with the highest inventory level.&lt;/li&gt;
&lt;li&gt;Predict sales.&lt;/li&gt;
&lt;li&gt;Develop a strategy to improve sales.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;3-dataset&#34;&gt;3. Dataset&lt;/h1&gt;
&lt;p&gt;Data was collected from the previous quarter&amp;rsquo;s sales results, including a total of 3000 fabrics. Table 1 lists detailed descriptions of the extracted features and target.&lt;/p&gt;



&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Table&amp;nbsp;&#34;
            data-post=&#34;:&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered-table&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Description of fabric&amp;rsquo;s features and target.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  






  
  
  


  




&lt;div class=&#34;data-table&#34; role=&#34;region&#34; tabindex=&#34;0&#34; &gt;
  &lt;table class=&#34;table &#34; id=&#34;597328164&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HUE&lt;/td&gt;
&lt;td&gt;degree&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 359]&lt;/td&gt;
&lt;td&gt;Hue of the dominant color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PERCENT&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 100]&lt;/td&gt;
&lt;td&gt;Percentage of dominant color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RANGE&lt;/td&gt;
&lt;td&gt;degree&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 359]&lt;/td&gt;
&lt;td&gt;Range of colors.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;THEME&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Categorical&lt;/td&gt;
&lt;td&gt;Monochrome, analogous, complementary, triadic, none&lt;/td&gt;
&lt;td&gt;Color themes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIZE&lt;/td&gt;
&lt;td&gt;$cm^2$&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 1247.35]&lt;/td&gt;
&lt;td&gt;Pattern size.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONTRAST&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 127.5]&lt;/td&gt;
&lt;td&gt;Standard deviation in grayscale.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SALES&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Numerical&lt;/td&gt;
&lt;td&gt;[0, 100]&lt;/td&gt;
&lt;td&gt;Percentage of sales.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;/div&gt;
   
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;Fig. 1 shows an example of a fabric property and its corresponding features. As the purchased quantity of each fabric varies, we use the percentage of sales for each fabric, which is calculated by dividing the total sales at the end of the month by the total purchases at the beginning of the month.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; SIZE is the unit size of a repeated pattern. &lt;strong&gt;(b)&lt;/strong&gt; THEME and RANGE are color themes and ranges used in fabric. These are extracted from a color wheel. &lt;strong&gt;(c)&lt;/strong&gt; The CONTRAST is measured as the standard deviation in the grayscale histogram. &lt;strong&gt;(d)&lt;/strong&gt; HUE and PERCENT refer to the hue and percentage of the dominant color.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/figure_01.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;histogram-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;polar-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(d)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;svg width=&#34;100%&#34; height=&#34;195&#34; id=&#34;color-percentage-plot&#34;&gt;&lt;/svg&gt;
            &lt;div class=&#34;flex-sb-m flex-w p-t-15&#34;&gt;
                &lt;div class=&#34;w-size18&#34;&gt;
                    &lt;div class=&#34;m-text28 colorwhite p-b-3&#34;&gt;
                        &lt;span id=&#34;color-percentage-plot-color&#34;&gt;&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class=&#34;m-text28 colorwhite p-b-3&#34;&gt;
                    &lt;span id=&#34;color-percentage-plot-percentage&#34;&gt;&lt;/span&gt;
                &lt;/div&gt;
            &lt;/div&gt; 
            &lt;svg width=&#34;100%&#34; height=&#34;30&#34;&gt;
                &lt;rect width=&#34;100%&#34; height=&#34;100%&#34; id=&#34;color-percentage-current-color&#34; fill=&#34;white&#34;&gt;&lt;/rect&gt;
            &lt;/svg&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;4-exploratory-data-analysis&#34;&gt;4. Exploratory data analysis&lt;/h1&gt;
&lt;h2 id=&#34;41-distribution&#34;&gt;4.1. Distribution&lt;/h2&gt;
&lt;p&gt;We can perform a descriptive analysis by examining the distribution of each feature and its correlation with sales, as shown in the Fig. 2.&lt;/p&gt;
&lt;p&gt;The percentage of blue and red is high in the main color (HUE). However, HUE is uncorrelated to SALES in Fig. 3, indicating that our customers have no significant preference for the main color of the fabric. Therefore, we will drop this feature in future analyses.&lt;/p&gt;
&lt;p&gt;The RANGE and SIZE of the fabric are relatively small. This is reasonable, as it is difficult to design fabric with a wide color range, large pattern size. Regarding THEME, it is evident that the percentage decreases as the theme becomes more intricate. This makes sense since, similar to RANGE, designing becomes more challenging when there are more limitations on color usage to match the theme.&lt;/p&gt;
&lt;p&gt;In terms of SALES performance, the mean is 40% and the distribution is mainly below this mark.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Distribution of features.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;HUE&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;data-info-hue-percentage&#34;&gt;&lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;PERCENT&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-percent-violin&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-percent-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;RANGE&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-range-violin&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-range-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;SIZE&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-size-violin&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-size-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;CONTRAST&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-contrast-violin&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-contrast-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;SALES&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-15 p-r-15&#34;&gt;
                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-sales-violin&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size13&#34;&gt;
  
                        &lt;div id=&#34;data-info-sales-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;THEME&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                    &lt;div class=&#34;w-size19 respon5&#34;&gt;
  
                        &lt;div id=&#34;theme-info-pie-chart&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                    &lt;div class=&#34;w-size20 respon5&#34;&gt;
  
                        &lt;div id=&#34;theme-info-table&#34;&gt;&lt;/div&gt;
                    
&lt;/div&gt;

                &lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;42-correlation&#34;&gt;4.2. Correlation&lt;/h2&gt;
&lt;p&gt;Fig. 3 shows the correlation between SALES and features. Despite the low correlation, all below 0.5, we can still gain some insight into customer preferences.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Correlation coefficient between sales and features.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div id=&#34;correlation-plot-1&#34;&gt;&lt;/div&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;All features, except for PERCENT, monochrome and non-specific color themes, are positively correlated with sales. This result is quite intuitive. Fig. 4 provides an example: Fabric A has a wider range of colors and a larger pattern size, as well as higher contrast. Additionally, it uses a triadic theme to balance red, blue, and green, resulting in higher visual appeal than Fabric B. Therefore, it is reasonable to assume that Fabric A has higher sales than Fabric B.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            To illustrate the correlation between sales and features, consider the example of two fabrics, A and B. Fabric A has a wider color range, larger pattern size, and higher contrast, resulting in higher visual appeal than B. Therefore, A is likely to have higher sales than B.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/figure_02.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;fabric-comparison&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;5-models&#34;&gt;5. Models&lt;/h1&gt;
&lt;p&gt;Before conducting quantitative analysis, it&amp;rsquo;s important to split the data into training and test datasets. This is necessary for verification in the final step of the analysis. Additionally, data standardization is required to ensure that all features have a comparable range.&lt;/p&gt;
&lt;h2 id=&#34;51-dimensionality-reduction&#34;&gt;5.1. Dimensionality reduction&lt;/h2&gt;
&lt;p&gt;As there are both numerical and categorical features, the covariance matrix should be treated differently. For numerical features, we can follow the original definition. However, for categorical features, the covariance matrix is constructed by preserving the $\chi^2$ distance between features. Next, we can perform singular value decomposition on the covariance matrix to find the principal components. In summary, PCA (principal component analysis) and CA (correspondence analysis) are utilized to decrease feature dimensionality.&lt;/p&gt;
&lt;p&gt;The results are shown in the Fig. 5 &lt;strong&gt;(a)&lt;/strong&gt;. We can use three principal components and still preserve 70% of the total variance. The loading of components are also shown in Fig. 5 &lt;strong&gt;(b)&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; Variance explained after dimensionality reduction. &lt;strong&gt;(b)&lt;/strong&gt; Loading of the first five principal components.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;famd-variance-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;famd-component-table&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;52-cluster-analysis&#34;&gt;5.2. Cluster analysis&lt;/h2&gt;
&lt;h3 id=&#34;521-k-means&#34;&gt;5.2.1. K-means&lt;/h3&gt;
&lt;p&gt;After identifying the turning point in the elbow plot, as shown in Fig. 6 &lt;strong&gt;(a)&lt;/strong&gt;, we have decided to use 3 clusters for further analysis. For each cluster, we calculate the average of its features as shown in the Fig. 6 &lt;strong&gt;(b)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The first cluster, named &amp;ldquo;Colorful&amp;rdquo;, has higher values in RANGE, CONTRAST, and multiple color themes. The second cluster, named &amp;ldquo;Large pattern&amp;rdquo;, has the highest value in SIZE. In contrast to the first two clusters, the third cluster has only a large positive value in main color percentage (PERCENT) and monochrome color theme, so it is named &amp;ldquo;Plain&amp;rdquo; and should be considered less visually appealing than the first two clusters. Fig. 6 &lt;strong&gt;(c)&lt;/strong&gt; provides examples of fabric for each cluster.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; Elbow plot of K-means analysis. &lt;strong&gt;(b)&lt;/strong&gt; Naming each cluster based on the average value of its features. &lt;strong&gt;(c)&lt;/strong&gt; Visualize the clusters using the first three principal components and provide an example fabric for each cluster.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;kmeans-elbow-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;kmeans-group-table&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;kmeans-group-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Colorful&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img id=&#34;colorful&#34; src=&#34;./figure/figure_03.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Large pattern&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img id=&#34;large-pattern&#34; src=&#34;./figure/figure_04.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Plain&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img id=&#34;plain&#34; src=&#34;./figure/figure_05.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;522-sales-and-stock&#34;&gt;5.2.2. Sales and Stock&lt;/h3&gt;
&lt;p&gt;Fig. 7 &lt;strong&gt;(a)&lt;/strong&gt; displays the histogram and cumulative curve for the percentage of sales. It is clear that the distribution of &amp;ldquo;Plain&amp;rdquo; fabric is highly concentrated near zero. The accompanying Fig. 7 &lt;strong&gt;(b)&lt;/strong&gt; illustrates the portion of sales and stock. Although &amp;ldquo;Plain&amp;rdquo; fabric constitutes 60% of total stock, it only contributes to 31.9% of sales. In other words, the high inventory level is caused by the excess of &amp;ldquo;Plain&amp;rdquo; fabric. Therefore, we can improve our inventory control by reducing the total portion of “Plain” fabric in every purchase. Test data supports this conclusion (not shown).&lt;/p&gt;
&lt;p&gt;While &amp;ldquo;Colorful&amp;rdquo; fabric has better sales, it also has a higher stock level. Additionally, the histogram and cumulative curve are similar for both &amp;ldquo;Colorful&amp;rdquo; and &amp;ldquo;Large pattern&amp;rdquo; fabrics. Therefore, based on the current information we have, we cannot determine which fabric performs better.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; The histogram and cumulative curve, as well as &lt;strong&gt;(b)&lt;/strong&gt; the sale and stock of each cluster, indicate that the Plain fabric is the root cause of high stock level.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;kmeans-sales-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;kmeans-sales-stock-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;53-regression&#34;&gt;5.3 Regression&lt;/h2&gt;
&lt;p&gt;Another goal is to make predictions on sales. To do this, we can first examine the correlation between sales and components from dimension reduction. There is only one component that reaches -0.5, as shown in Fig. 8 &lt;strong&gt;(a)&lt;/strong&gt;, which can be used as a regressor. Secondly, we need to decide on the type of regression to use. As the response variable falls within the continuous range of [0, 1], it is recommended to use beta regression instead of linear or logistic regression 




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#ferrari-2004&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Silvia&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Ferrari&lt;/span&gt;&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Francisco&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Cribari-Neto&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Ferrari&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Silvia&#34; /&gt;
    S.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Cribari-Neto&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Francisco&#34; /&gt;
    F.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Beta regression for modelling rates and proportions&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Journal of applied statistics&lt;/span&gt;,&amp;#32;31(7)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;799–815&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;The results are shown in Fig. 8 &lt;strong&gt;(b)&lt;/strong&gt;. It is apparent that the accuracy, with only a 0.246 R-squared value, is low due to the low correlation between the component and SALES. In other words, the current features are still insufficient to make precise predictions.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; Correlation between sales and principal components. &lt;strong&gt;(b)&lt;/strong&gt; Result from beta regression with a 0.246 R-squared value.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;regression-correlation-plot-1&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;regression-accuracy-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;6-strategy-to-improve-sales&#34;&gt;6. Strategy to Improve Sales&lt;/h1&gt;
&lt;p&gt;While precise predictions may not be possible, we can still improve fabric sales by leveraging the results of cluster analysis. These improvements can be observed in two ways:&lt;/p&gt;
&lt;p&gt;Firstly, by implementing tags such as &amp;ldquo;Colorful,&amp;rdquo; &amp;ldquo;Large Pattern,&amp;rdquo; and &amp;ldquo;Plain&amp;rdquo; in our &lt;a href=&#34;https://demo.alanhung.dev/order-summary-demo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;in-house library and dashboard&lt;/a&gt;, as shown in Fig. 9, buyers can have a clearer summary of each category. This enables them to make decisions more confidently and efficiently.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Example of an in-house library and dashboard that is integrated with tags from cluster analysis.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/dashboard.webp&#34; width=&#34;1080&#34; height=&#34;1042&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;Previously, we only made purchases in Q1 and Q3, while fabric sales were limited to Q2 and Q4, as indicated by the 2017 results in Fig. 10. However, after the implementation, we were able to make purchases and sales in all four quarters. In other words, &lt;span style=&#34;color:#FEAE00&#34;&gt;the processing time for each purchase has been reduced from six months to three months.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Secondly, we can allocate our budget more effectively by being more cautious with our purchases of &amp;ldquo;Plain&amp;rdquo; fabric and investing in other fabrics instead. &lt;span style=&#34;color:#FEAE00&#34;&gt;By comparing fabric sales in 2017/Q4 and 2018/Q1, we have observed an improvement of 2.73.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Fabric sales per quarter have been tracked since 2017. Since 2018, the purchase process has incorporated the results of cluster analysis, which has led to higher sales. Different colors indicate the before and after implementation.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div id=&#34;fabric-sales-plot&#34;&gt;&lt;/div&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;7-conclusion&#34;&gt;7. Conclusion&lt;/h1&gt;
&lt;p&gt;By using K-means, we divided the fabric from the previous quarter&amp;rsquo;s sales into three categories. We discovered that high inventory levels were due to fabrics with a monochrome color theme, high percentage of the main color, low contrast, and small pattern size. We collectively refer to this type of fabric as &amp;ldquo;Plain&amp;rdquo; fabric. While we have not been able to predict sales, categorizing fabric into these categories has proven to be one of the main factors in improving our sales.&lt;/p&gt;
&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;











&lt;section class=&#34;hugo-cite-bibliography&#34;&gt;
  &lt;dl&gt;
    

      &lt;div id=&#34;ferrari-2004&#34;&gt;
        &lt;dt&gt;
          Ferrari&amp;#32;&amp;amp;&amp;#32;Cribari-Neto

          
          (2004)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Ferrari&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Silvia&#34; /&gt;
    S.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Cribari-Neto&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Francisco&#34; /&gt;
    F.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Beta regression for modelling rates and proportions&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Journal of applied statistics&lt;/span&gt;,&amp;#32;31(7)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;799–815&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;
  &lt;/dl&gt;
&lt;/section&gt;



&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [1,2,3,4,5,6,7,8,9,10], tablesIndex: [1], closeInner: true, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Slides</title>
      <link>https://alanhung.dev/slides/example/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/slides/example/</guid>
      <description>&lt;h1 id=&#34;create-slides-in-markdown-with-wowchemy&#34;&gt;Create slides in Markdown with Wowchemy&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://wowchemy.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Wowchemy&lt;/a&gt; | &lt;a href=&#34;https://wowchemy.com/docs/content/slides/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Documentation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;table-of-content&#34; style=&#34;margin:0; padding:0;&#34;&gt;&lt;/h2&gt;
&lt;div class=&#34;toc-container&#34;&gt;
    &lt;img src=&#34;figure/toc.png&#34; alt=&#34;table-of-content&#34;&gt;
    &lt;div class=&#34;ab-c-m&#34; style=&#34;width:75%;&#34;&gt; 
        &lt;div class=&#34;toc-row&#34;&gt;
            &lt;div class=&#34;column-0&#34;&gt;1&lt;/div&gt;
            &lt;div class=&#34;column-1&#34; style=&#34;background-color: #03DAC6&#34;&gt;&lt;/div&gt;
            &lt;div class=&#34;column-2&#34;&gt;
                &lt;a href=&#34;#controls&#34; class=&#34;color0-hov&#34; &gt;
                Company Overview
                &lt;/a&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&#34;toc-container&#34;&gt;
     &lt;img src=&#34;figure/toc.png&#34; alt=&#34;table-of-content&#34;&gt;
     &lt;div class=&#34;ab-c-m&#34; style=&#34;width:75%;&#34;&gt; 
         &lt;div class=&#34;toc-row&#34;&gt;
             &lt;div class=&#34;column-0&#34;&gt;1&lt;/div&gt;
             &lt;div class=&#34;column-1&#34; style=&#34;background-color: #03DAC6&#34;&gt;&lt;/div&gt;
             &lt;div class=&#34;column-2&#34;&gt;
                 &lt;a href=&#34;#controls&#34; class=&#34;color0-hov&#34;&gt;Company Overview&lt;/a&gt;
             &lt;/div&gt;
         &lt;/div&gt;
         &lt;div class=&#34;toc-row&#34;&gt;
             &lt;div class=&#34;column-0&#34;&gt;2&lt;/div&gt;
             &lt;div class=&#34;column-1&#34; style=&#34;background-color: #03DAC6&#34;&gt;&lt;/div&gt;
             &lt;div class=&#34;column-2&#34;&gt;
                 Problems
             &lt;/div&gt;
         &lt;/div&gt;
         &lt;div class=&#34;toc-row&#34;&gt;
             &lt;div class=&#34;column-0&#34;&gt;3&lt;/div&gt;
             &lt;div class=&#34;column-1&#34; style=&#34;background-color: #03DAC6&#34;&gt;&lt;/div&gt;
             &lt;div class=&#34;column-2&#34;&gt;
                 Solutions
             &lt;/div&gt;
         &lt;/div&gt;
         &lt;div class=&#34;toc-row&#34;&gt;
             &lt;div class=&#34;column-0&#34;&gt;4&lt;/div&gt;
             &lt;div class=&#34;column-1&#34; style=&#34;background-color: #03DAC6&#34;&gt;&lt;/div&gt;
             &lt;div class=&#34;column-2&#34;&gt;
                 Challenges in Transition
             &lt;/div&gt;
         &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Efficiently write slides in Markdown&lt;/li&gt;
&lt;li&gt;3-in-1: Create, Present, and Publish your slides&lt;/li&gt;
&lt;li&gt;Supports speaker notes&lt;/li&gt;
&lt;li&gt;Mobile friendly slides&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class=&#34;flex-c-m&#34; style=&#34;position: relative;&#34;&gt;
    &lt;img src=&#34;figure/toc.png&#34; alt=&#34;01&#34;&gt;
    &lt;div class=&#34;toc-row&#34;&gt;
        &lt;div class=&#34;column-0&#34;&gt;1&lt;/div&gt;
        &lt;div class=&#34;column-1&#34;&gt;&lt;/div&gt;
        &lt;div class=&#34;column-2&#34;&gt;test&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;img src=&#34;figure/02.png&#34; alt=&#34;02&#34;&gt;
&lt;hr&gt;
&lt;h2 id=&#34;controls&#34;&gt;Controls&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Next: &lt;code&gt;Right Arrow&lt;/code&gt; or &lt;code&gt;Space&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Previous: &lt;code&gt;Left Arrow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start: &lt;code&gt;Home&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Finish: &lt;code&gt;End&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Overview: &lt;code&gt;Esc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Speaker notes: &lt;code&gt;S&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fullscreen: &lt;code&gt;F&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zoom: &lt;code&gt;Alt + Click&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://revealjs.com/pdf-export/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PDF Export&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;code-highlighting&#34;&gt;Code Highlighting&lt;/h2&gt;
&lt;p&gt;Inline code: &lt;code&gt;variable&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Code block:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;porridge&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;blueberry&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;porridge&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;blueberry&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Eating...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;math&#34;&gt;Math&lt;/h2&gt;
&lt;p&gt;In-line math: $x + y = z$&lt;/p&gt;
&lt;p&gt;Block math:&lt;/p&gt;
&lt;p&gt;$$
f\left( x \right) = ;\frac{{2\left( {x + 4} \right)\left( {x - 4} \right)}}{{\left( {x + 4} \right)\left( {x + 1} \right)}}
$$&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;fragments&#34;&gt;Fragments&lt;/h2&gt;
&lt;p&gt;Make content appear incrementally&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% fragment %}} One {{% /fragment %}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% fragment %}} **Two** {{% /fragment %}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% fragment %}} Three {{% /fragment %}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Press &lt;code&gt;Space&lt;/code&gt; to play!&lt;/p&gt;
&lt;span class=&#34;fragment &#34; &gt;
  One
&lt;/span&gt;
&lt;span class=&#34;fragment &#34; &gt;
  &lt;strong&gt;Two&lt;/strong&gt;
&lt;/span&gt;
&lt;span class=&#34;fragment &#34; &gt;
  Three
&lt;/span&gt;
&lt;hr&gt;
&lt;p&gt;A fragment can accept two optional parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;class&lt;/code&gt;: use a custom style (requires definition in custom CSS)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;weight&lt;/code&gt;: sets the order in which a fragment appears&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;speaker-notes&#34;&gt;Speaker Notes&lt;/h2&gt;
&lt;p&gt;Add speaker notes to your presentation&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{% speaker_note %}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Only the speaker can read these notes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Press &lt;span class=&#34;sb&#34;&gt;`S`&lt;/span&gt; key to view
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {{% /speaker_note %}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Press the &lt;code&gt;S&lt;/code&gt; key to view the speaker notes!&lt;/p&gt;
&lt;aside class=&#34;notes&#34;&gt;
  &lt;ul&gt;
&lt;li&gt;Only the speaker can read these notes&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;S&lt;/code&gt; key to view&lt;/li&gt;
&lt;/ul&gt;

&lt;/aside&gt;
&lt;hr&gt;
&lt;h2 id=&#34;themes&#34;&gt;Themes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;black: Black background, white text, blue links (default)&lt;/li&gt;
&lt;li&gt;white: White background, black text, blue links&lt;/li&gt;
&lt;li&gt;league: Gray background, white text, blue links&lt;/li&gt;
&lt;li&gt;beige: Beige background, dark text, brown links&lt;/li&gt;
&lt;li&gt;sky: Blue background, thin dark text, blue links&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;night: Black background, thick white text, orange links&lt;/li&gt;
&lt;li&gt;serif: Cappuccino background, gray text, brown links&lt;/li&gt;
&lt;li&gt;simple: White background, black text, blue links&lt;/li&gt;
&lt;li&gt;solarized: Cream-colored background, dark green text, blue links&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;section data-noprocess data-shortcode-slide
  
      
      data-background-image=&#34;/media/boards.jpg&#34;
  &gt;

&lt;h2 id=&#34;custom-slide&#34;&gt;Custom Slide&lt;/h2&gt;
&lt;p&gt;Customize the slide style and background&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;slide&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;background-image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/media/boards.jpg&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;slide&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#0000FF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;slide&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;my-style&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;custom-css-example&#34;&gt;Custom CSS Example&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s make headers navy colored.&lt;/p&gt;
&lt;p&gt;Create &lt;code&gt;assets/css/reveal_custom.css&lt;/code&gt; with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;reveal&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;reveal&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;reveal&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;navy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h1 id=&#34;questions&#34;&gt;Questions?&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://discord.gg/z8wNYzb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ask&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wowchemy.com/docs/content/slides/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Documentation&lt;/a&gt;&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;./control.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    Reveal.initialize({
      width: 960,
      height: 700,
      margin: 0.04,
      minScale: 0.2,
      maxScale: 2.0
    });
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Slides</title>
      <link>https://alanhung.dev/slides/test/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/slides/test/</guid>
      <description>&lt;h1 id=&#34;create-slides-in-markdown-with-wowchemy&#34;&gt;Create slides in Markdown with Wowchemy&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://wowchemy.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Wowchemy&lt;/a&gt; | &lt;a href=&#34;https://wowchemy.com/docs/content/slides/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Documentation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Efficiently write slides in Markdown&lt;/li&gt;
&lt;li&gt;3-in-1: Create, Present, and Publish your slides&lt;/li&gt;
&lt;li&gt;Supports speaker notes&lt;/li&gt;
&lt;li&gt;Mobile friendly slides&lt;/li&gt;
&lt;/ul&gt;
&lt;script&gt;&lt;/script&gt;
&lt;hr&gt;
&lt;h2 id=&#34;controls&#34;&gt;Controls&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Next: &lt;code&gt;Right Arrow&lt;/code&gt; or &lt;code&gt;Space&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Previous: &lt;code&gt;Left Arrow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start: &lt;code&gt;Home&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Finish: &lt;code&gt;End&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Overview: &lt;code&gt;Esc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Speaker notes: &lt;code&gt;S&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fullscreen: &lt;code&gt;F&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zoom: &lt;code&gt;Alt + Click&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://revealjs.com/pdf-export/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PDF Export&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
</description>
    </item>
    
    <item>
      <title>Investigation of Algorithms for Retrieving Similar Images</title>
      <link>https://alanhung.dev/project/search-similar-fabric/</link>
      <pubDate>Tue, 10 Jul 2018 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/search-similar-fabric/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-search-algorithm&#34;&gt;2. Search algorithm&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#21-per-pixel-measures-l_2-distance&#34;&gt;2.1. Per-pixel measures ($L_2$ distance)&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#22-k-nearest-neighbors-knn&#34;&gt;2.2. K-Nearest Neighbors (KNN)&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#23-perceptual-similarity-lpips&#34;&gt;2.3. Perceptual similarity (LPIPS)&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-experiments&#34;&gt;3. Experiments&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-dataset&#34;&gt;3.1. Dataset&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-result&#34;&gt;3.2. Result&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-application&#34;&gt;4. Application&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-conclusion&#34;&gt;5. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;Automating the task of searching for similar images of fabric is crucial to improve efficiency in the fabric-related industry. Three algorithms were investigated in this project: per-pixel measures ($L_2$), K-Nearest Neighbors (KNN), and perceptual similarity (LPIPS). While LPIPS provides a better way to retrieve similar fabric as perceived by humans, its computational expense becomes a main obstacle when the number of images increases.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Searching for similar images of fabric is a common task in the fabric-related industry. For instance, buyers may want to purchase fabrics similar to previous best-selling ones, while designers may want to experiment with different yet similar fabrics during the product design process.&lt;/p&gt;
&lt;p&gt;Although humans can recognize similar images effortlessly, traditionally, this task has relied on human search through all available fabrics to find a similar one, which is time-consuming and exhausting. Automating this procedure is crucial to improve efficiency.&lt;/p&gt;
&lt;h1 id=&#34;2-search-algorithm&#34;&gt;2. Search algorithm&lt;/h1&gt;
&lt;p&gt;Since we are searching through all images, we will use the notation $N$ to represent the total number of images in the following discussion.&lt;/p&gt;
&lt;h2 id=&#34;21-per-pixel-measures-l_2-distance&#34;&gt;2.1. Per-pixel measures ($L_2$ distance)&lt;/h2&gt;
&lt;p&gt;One of the classic methods for comparing images is to calculate the difference of every pixel using the $L_2$ distance. The time complexity is $O(N^2 * C * W * H)$, where $C$ represents the number of channels in the image, and $W$ and $H$ represent the width and height of the image, respectively. The space complexity is $O(N^2)$ because we need to store all the distances between the images.&lt;/p&gt;
&lt;h2 id=&#34;22-k-nearest-neighbors-knn&#34;&gt;2.2. K-Nearest Neighbors (KNN)&lt;/h2&gt;
&lt;p&gt;Rather than comparing the images directly, we can extract features from the image, such as the main color, &lt;a href=&#34;https://alanhung.dev/project/color-theme-extraction/&#34;&gt;color schemes&lt;/a&gt;, &lt;a href=&#34;https://alanhung.dev/project/repeated-pattern-detection/&#34;&gt;pattern size&lt;/a&gt;, and so on. Similarity can be defined as the $L_2$ distance between features. However, as the number of features increases, all samples may appear dissimilar, which is often referred to as the &amp;ldquo;curse of dimensionality&amp;rdquo;. To overcome this problem, we can &lt;a href=&#34;https://alanhung.dev/project/improve-fabric-sales/#51-dimensionality-reduction&#34;&gt;reduce the dimensionality using PCA&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The time complexity is $O(N^2 * K)$, where $K$ represents the number of principal components from PCA. The space complexity remains $O(N^2)$ since we store all distances.&lt;/p&gt;
&lt;h2 id=&#34;23-perceptual-similarity-lpips&#34;&gt;2.3. Perceptual similarity (LPIPS)&lt;/h2&gt;
&lt;p&gt;This method, which was published by Zhang




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#zhang-2018&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Richard&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Zhang&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Phillip&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Isola&lt;/span&gt;&lt;/span&gt;
                  &lt;em&gt;&amp;amp; al.&lt;/em&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2018&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Zhang&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Richard&#34; /&gt;
    R.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Isola&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Phillip&#34; /&gt;
    P.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Efros&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Alexei A&#34; /&gt;
    A.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Shechtman&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Eli&#34; /&gt;
    E.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Wang&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Oliver&#34; /&gt;
    O.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2018&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;The unreasonable effectiveness of deep features as a perceptual metric&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Proceedings of the IEEE conference on computer vision and pattern recognition&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;586–595&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
 as shown in the Fig. 1, extracts feature maps from activation layers and calculates the weighted distance $d_0$ between those feature maps. To apply this method, we can push images $x$ and $x_0$ through a pre-trained network (such as AlexNet




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#krizhevsky-2014&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Alex&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Krizhevsky&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2014&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Krizhevsky&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Alex&#34; /&gt;
    A.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2014&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;One weird trick for parallelizing convolutional neural networks&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;arXiv preprint arXiv:1404.5997&lt;/span&gt;&lt;/i&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
), denoted as $F$.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Feature maps are extracted by passing images $x$ and $x_0$ through a pre-trained network $F$. The distance is computed by subtracting the feature maps and then calculating the spatial average of the $L_2$ norm.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/LPIPS.webp&#34; width=&#34;1080&#34; height=&#34;345&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;Fig. 2 provides an example with AlexNet. When the input images exhibit visual differences, as in Fig. 2 &lt;strong&gt;(a)&lt;/strong&gt;, the spatial average result differs significantly from that of the similar input images in Figure Fig. 2 &lt;strong&gt;(b)&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The following shows the spatial average results from ReLU activation layers in AlexNet, based on visually &lt;strong&gt;(a)&lt;/strong&gt; dissimilar  and &lt;strong&gt;(b)&lt;/strong&gt; similar  input images.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/LPIPS_not_similar.webp&#34; width=&#34;1506&#34; height=&#34;832&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/LPIPS_similar.webp&#34; width=&#34;1506&#34; height=&#34;832&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;While this method is proven to be effective in finding similar images, it is computationally expensive. Depending on the architecture of the pre-trained network, which may involve multiple convolutional and pooling layers, the runtime may be significantly increased. In addition, we will need additional memory to store all feature maps from activation layers.&lt;/p&gt;
&lt;h1 id=&#34;3-experiments&#34;&gt;3. Experiments&lt;/h1&gt;
&lt;h2 id=&#34;31-dataset&#34;&gt;3.1. Dataset&lt;/h2&gt;
&lt;p&gt;We collected 113 digital images of fabric with dimensions of 30 cm x 42 cm (3500 x 4200 pixels), as shown in Fig. 3.
To test the algorithm&amp;rsquo;s ability to retrieve similar images, we randomly select images from the dataset, add spatial pixel shifts, and then put them back into the dataset. We then test whether the algorithm can retrieve them.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The dataset is used in experiments
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/image_dataset.webp&#34; width=&#34;1560&#34; height=&#34;1080&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id=&#34;32-result&#34;&gt;3.2. Result&lt;/h2&gt;
&lt;p&gt;As shown in the Fig. 4, the use of per-pixel measures ($L_2$) may fail to retrieve images with spatial pixel shift. This is because even a small shift can result in a large difference. In contrast, KNN and LPIPS rely solely on extracted features and can therefore successfully find those images.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Per-pixel measures ($L_2$) fail to retrieve images with spatial pixel shift, because even small shifts can generate large differences.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/comparison_211101_181X4Y.webp&#34; width=&#34;1092&#34; height=&#34;388&#34;&gt;
        &lt;p&gt;&lt;/p&gt;
        &lt;img src=&#34;./figure/comparison_210801_143X2Y.webp&#34; width=&#34;1092&#34; height=&#34;388&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;However, due to the lack of spatial information in features, KNN might still fail to find images that are similar from a human perspective. As shown in the Fig. 5, the KNN algorithm retrieves images that are similar to the input image only in terms of colors. However, the context and structure of these images are entirely different.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Although the color of the retrieved image from KNN may be similar to the input, the structure and context can be different. Therefore, KNN may fail to find similar images due to the lack of spatial information in the features.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/comparison_210801_055X2Y.webp&#34; width=&#34;1092&#34; height=&#34;388&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;As previously discussed, in terms of runtime (as shown in the Fig. 6), LPIPS is the most computationally expensive of the three algorithms, taking up to 8.3 seconds per image on our dataset.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Speed (images per second) is displayed on a logarithmic scale to compare different algorithms, with human processing used as the baseline.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;p&gt;&lt;/p&gt;
        &lt;div id=&#34;search-images-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-images-runtime-0-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-images-runtime-0-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-images-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&#34;search-images-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-images-runtime-1-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-images-runtime-1-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-images-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&#34;search-images-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-images-runtime-2-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-images-runtime-2-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-images-runtime-2-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&#34;search-images-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-images-runtime-3-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-images-runtime-3-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-images-runtime-3-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;4-application&#34;&gt;4. Application&lt;/h1&gt;
&lt;p&gt;To improve the efficiency of fabric searching, LPIPS with AlexNet has been implemented into the &lt;a href=&#34;https://demo.alanhung.dev/product/210801_005X2Y/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;in-house library&lt;/a&gt;, as shown in the Fig. 7. When a new image is imported, the algorithm retrieves similar fabrics and stores them in a database.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            We have used LPIPS with AlexNet in our in-house library to retrieve similar fabric.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/library.webp&#34; width=&#34;1080&#34; height=&#34;1002&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;5-conclusion&#34;&gt;5. Conclusion&lt;/h1&gt;
&lt;p&gt;Three algorithms were investigated in this project. The per-pixel measure ($L_2$) did not meet our requirements due to its sensitivity to pixel shift. Similarly, KNN is not applicable since the features lack spatial information. LPIPS provides a better way to retrieve similar fabric as perceived by humans, but its computational expense becomes a main obstacle when the number of images increases.&lt;/p&gt;
&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;











&lt;section class=&#34;hugo-cite-bibliography&#34;&gt;
  &lt;dl&gt;
    

      &lt;div id=&#34;zhang-2018&#34;&gt;
        &lt;dt&gt;
          Zhang,&amp;#32;
          Isola,&amp;#32;
          Efros,&amp;#32;
          Shechtman&amp;#32;&amp;amp;&amp;#32;Wang

          
          (2018)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Zhang&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Richard&#34; /&gt;
    R.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Isola&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Phillip&#34; /&gt;
    P.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Efros&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Alexei A&#34; /&gt;
    A.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Shechtman&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Eli&#34; /&gt;
    E.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Wang&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Oliver&#34; /&gt;
    O.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2018&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;The unreasonable effectiveness of deep features as a perceptual metric&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Proceedings of the IEEE conference on computer vision and pattern recognition&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;586–595&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;krizhevsky-2014&#34;&gt;
        &lt;dt&gt;
          Krizhevsky

          
          (2014)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Krizhevsky&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Alex&#34; /&gt;
    A.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2014&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;One weird trick for parallelizing convolutional neural networks&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;arXiv preprint arXiv:1404.5997&lt;/span&gt;&lt;/i&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;
  &lt;/dl&gt;
&lt;/section&gt;



&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [1, 2, 3, 4, 5, 6, 7], closeInner: true, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Repeated Pattern Detection of Printed Fabric</title>
      <link>https://alanhung.dev/project/repeated-pattern-detection/</link>
      <pubDate>Thu, 01 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/repeated-pattern-detection/</guid>
      <description>&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-main-challenge&#34;&gt;2. Main challenge&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-program&#34;&gt;3. Program&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-approach-with-fourier-analysis&#34;&gt;3.1. Approach with Fourier analysis&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-approach-with-l_2-loss&#34;&gt;3.2. Approach with $L_2$ loss&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-experiment&#34;&gt;4. Experiment&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#41-dataset&#34;&gt;4.1. Dataset&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#42-result&#34;&gt;4.2. Result&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-conclusion&#34;&gt;5. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;We study the problem of detecting repeated patterns. Our goal is to extract a single unit of repeated patterns from an input image. This problem can be simplified for printed fabric because of its strictly regular and fronto-parallel nature. Under these properties, we investigate two algorithms. The first one uses Fourier analysis, but it is not suitable for our purpose because it requires additional assumptions about the period of the image. The second algorithm involves shifting the image and calculating the distance using the 

$L_2$ loss function. This method can efficiently solve the problem compared to human processing on our dataset.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Repeated patterns are prevalent, particularly in human-made objects, as illustrated in the Fig. 1 (a). They offer insights into the object, such as allowing us to estimate the number of floors and the structure of a building




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#lettry-2017&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Louis&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Lettry&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Michal&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Perdoch&lt;/span&gt;&lt;/span&gt;
                  &lt;em&gt;&amp;amp; al.&lt;/em&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2017&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Lettry&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Louis&#34; /&gt;
    L.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Perdoch&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Michal&#34; /&gt;
    M.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Vanhoey&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Kenneth&#34; /&gt;
    K.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Van Gool&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Luc&#34; /&gt;
    L.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2017&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Repeated pattern detection using CNN activations&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;2017 IEEE Winter Conference on Applications of Computer Vision (WACV)&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;47–55&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
 or count the number of objects in an image




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#park-2009&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Minwoo&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Park&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Kyle&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Brocklehurst&lt;/span&gt;&lt;/span&gt;
                  &lt;em&gt;&amp;amp; al.&lt;/em&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2009&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Park&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Minwoo&#34; /&gt;
    M.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Brocklehurst&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Kyle&#34; /&gt;
    K.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Collins&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Robert T&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2009&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Deformed lattice detection in real-world images using mean-shift belief propagation&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;IEEE Transactions on Pattern Analysis and Machine Intelligence&lt;/span&gt;,&amp;#32;31(10)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;1804–1816&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
.&lt;/p&gt;
&lt;p&gt;This is especially important for printed fabric in the textile industry, as it consists of repeated patterns in both the vertical and horizontal directions. Extraction a single pattern is useful in two ways. First, &lt;span style=&#34;color:#FEAE00&#34;&gt;It provides buyers with the minimum quantity necessary to purchase without having an incomplete pattern.&lt;/span&gt; For example, one could consider purchasing two units in the vertical direction to have two birds in opposite direction in a single pattern, as shown in the Fig. 1 (b). Second, &lt;span style=&#34;color:#FEAE00&#34;&gt;organizing a library by patterns can help designers find patterns more efficiently, ultimately speeding up the design process.&lt;/span&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Detecting repeated patterns provides insights into objects. &lt;strong&gt;(a)&lt;/strong&gt; Information about the structure and number. &lt;strong&gt;(b)&lt;/strong&gt; Minimum quantity necessary to purchase without having an incomplete pattern.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/structure_number.webp&#34; width=&#34;1080&#34; height=&#34;392&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/dual_birds_fabric_pattern.webp&#34; width=&#34;1080&#34; height=&#34;770&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;2-main-challenge&#34;&gt;2. Main challenge&lt;/h1&gt;
&lt;p&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;Automating repetition detection remains a challenging task since the definition is unclear.&lt;/span&gt; For example, a checkerboard consisting of black and white has perfect repetition. However, it is often accompanied by irregularities, as shown in the Fig. 1 (a), the windows of the building are similar to each other, rather than being exactly the same in each pattern.&lt;/p&gt;
&lt;p&gt;Several algorithms have been developed to address this deviation




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#liu-2004&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Robert T&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Collins&lt;/span&gt;&lt;/span&gt;
                  &lt;em&gt;&amp;amp; al.&lt;/em&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Collins&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Robert T&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Tsin&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanghai&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;A computational model for periodic pattern perception based on frieze and wallpaper groups&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;IEEE transactions on pattern analysis and machine intelligence&lt;/span&gt;,&amp;#32;26(3)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;354–371&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;;&amp;#32;&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#liu-2013&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Jingchen&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2013&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Jingchen&#34; /&gt;
    J.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2013&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Grasp recurring patterns from a single view&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Proceedings of the IEEE conference on computer vision and pattern recognition&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;2003–2010&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
, while others make assumptions with a nearly regular pattern




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#lettry-2017&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Louis&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Lettry&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Michal&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Perdoch&lt;/span&gt;&lt;/span&gt;
                  &lt;em&gt;&amp;amp; al.&lt;/em&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2017&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Lettry&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Louis&#34; /&gt;
    L.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Perdoch&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Michal&#34; /&gt;
    M.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Vanhoey&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Kenneth&#34; /&gt;
    K.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Van Gool&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Luc&#34; /&gt;
    L.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2017&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Repeated pattern detection using CNN activations&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;2017 IEEE Winter Conference on Applications of Computer Vision (WACV)&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;47–55&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
. In other words,&lt;span style=&#34;color:#FEAE00&#34;&gt; assumptions are crucial for implementing an algorithm.&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&#34;3-program&#34;&gt;3. Program&lt;/h1&gt;
&lt;p&gt;Although it is a complex problem, fortunately, for our purposes, it is limited to printed fabric, which is both &lt;span style=&#34;color:#FEAE00&#34;&gt;strictly regular and fronto-parallel&lt;/span&gt; due to its manufacturing process. As a result, our problem is as simple as detecting the perfect repetition of a checkerboard. The problem&amp;rsquo;s constraint depends on the resolution of the image, which in our case is 3500 x 4200 pixels.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constraints:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;len(pixels) = 3500 x 4200&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the following analysis, we will use the notation 

$N$ to represent the total number of pixels in an image.&lt;/p&gt;
&lt;h2 id=&#34;31-approach-with-fourier-analysis&#34;&gt;3.1. Approach with Fourier analysis&lt;/h2&gt;
&lt;p&gt;The intuitive method for identifying the period would be to use Fourier analysis, which is made efficient by using FFT. This results in a time complexity of 

$O(NlogN)$. However, since the basic idea behind Fourier analysis is an approximation by sums of simpler trigonometric functions, identifying the peak in spectrum can be challenging.&lt;/p&gt;
&lt;p&gt;For instance, let&amp;rsquo;s say we perform Fourier analysis in the horizontal direction of a checkerboard. As shown in the Fig. 2 (a), the frequency of the maximum power corresponds to the pattern consisting of a pair of black and white squares. If we reduce the contrast, as also depicted in the Fig. 2 (b), humans can still effortlessly identify the pattern. However, the position of the maximum power in the spectrum shifts to a lower frequency. In other words, to find the same pattern as that perceived by humans, we need to specify the search range in the spectrum. Nevertheless, since there is no certain range of periodicity for images, this approach is not practical.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Performing FFT on a checkerboard image with different contrasts reveals that in low contrast images, the pattern corresponding to the frequency of maximum power in the spectrum differs from what humans process. (Resolution of image is 250 x 2500 pixels)
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/checkerboard-black-marked.png&#34; width=&#34;2500&#34; height=&#34;250&#34;&gt;
            &lt;div class=&#34;p-t-10&#34; id=&#34;checkerboard-black-spectrum&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/checkerboard-gray-marked.png&#34; width=&#34;2500&#34; height=&#34;250&#34;&gt;
            &lt;div class=&#34;p-t-10&#34; id=&#34;checkerboard-gray-spectrum&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;32-approach-with-l_2-loss&#34;&gt;3.2. Approach with $L_2$ loss&lt;/h2&gt;
&lt;p&gt;This approach mimics human processing by sliding images to find their periodicity. In other words, it compares the pixels of images one by one, and uses the $L_2$ loss function as a metric for the distance between images. Here is how the algorithm works, as shown in the Fig. 3:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a copy of the original image.&lt;/li&gt;
&lt;li&gt;Fixed one image as a reference and slide another.
&lt;ul&gt;
&lt;li&gt;Calculate the loss in each RGB channel.&lt;/li&gt;
&lt;li&gt;Calculate the average loss for overlapped regions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Calculate the midpoint of the average loss function.&lt;/li&gt;
&lt;li&gt;Measure the distance between two midpoints while ascending or descending.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The size of the pattern can be extracted by performing the algorithm in both horizontal and vertical directions. The algorithm&amp;rsquo;s time complexity is $O(N^2)$ since we need to iterate through all pixels in each iteration. The space complexity is $O(N)$ because we create a copy of the original image.&lt;/p&gt;
&lt;p&gt;Although the algorithm is $N^2$, all elements share the same computation at every step. Therefore, we can take advantage of vectorization by using Numpy. Additionally, it is necessary to resize the image for the algorithm, which involves a trade-off between runtime and accuracy.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Animation of the algorithm with $L_2$ loss.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div id=&#34;search-pattern&#34; style=&#34;background-image: url(&#39;./figure/figure_01.webp&#39;); background-size: 100%; background-repeat: no-repeat; overflow: hidden;&#34;&gt;
            &lt;img id=&#34;search-pattern-brute-force-fig&#34; src=&#34;./figure/figure_02.webp&#34; width=&#34;1080px&#34; height=&#34;763px&#34; style=&#34;opacity: 0.5; margin-left:0; margin-right:0; position:relative; left:0;&#34;&gt;
        &lt;/div&gt;
        &lt;div id=&#34;search-pattern-brute-force&#34;&gt;&lt;/div&gt;
        &lt;button id=&#34;search-pattern-brute-force-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
        &lt;button id=&#34;search-pattern-brute-force-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;4-experiment&#34;&gt;4. Experiment&lt;/h1&gt;
&lt;h2 id=&#34;41-dataset&#34;&gt;4.1. Dataset&lt;/h2&gt;
&lt;p&gt;To test the speed and accuracy of our algorithm, we collected 113 digital images of fabric with dimensions of 30 cm x 42 cm (3500 x 4200 pixels), as shown in Fig. 4 (a). The pattern size was extracted manually using the same method as the algorithm, which involved shifting and comparing the image. The distributions of pattern size are shown in Fig . 4 (b)(c).&lt;/p&gt;
&lt;p&gt;To evaluate speed, we had humans judge the pattern size of each image and measured the time taken for each judgment. For accuracy evaluation, we used the human judgment results as the ground truth.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; The dataset is used in experiments. Distribution of pattern size in the &lt;strong&gt;(b)&lt;/strong&gt; horizontal and &lt;strong&gt;(c)&lt;/strong&gt; vertical direction.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;img src=&#34;./figure/image_dataset.webp&#34; width=&#34;1560&#34; height=&#34;1080&#34;&gt;
            &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;pattern-size-x&#34;&gt;&lt;/div&gt;
            &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;pattern-size-y&#34;&gt;&lt;/div&gt;
            &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;42-result&#34;&gt;4.2. Result&lt;/h2&gt;
&lt;p&gt;Fig. 5 provides examples of repeated patterns extracted from fabric. Fig. 6 (a) shows the results of runtime and accuracy, with both increasing as the resolution increases. At a resolution of 300 x 420 pixels, accuracy reaches 100% and runtime is 2.49 seconds. While the runtime is significantly longer than at 100 x 140 pixels, the algorithm still outperforms human processing, which takes 30 seconds per image. Therefore, the algorithm is 12 times faster than human processing, as shown in Fig. 6 (b).&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Example of repeated patterns extracted in fabric.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;img src=&#34;./figure/pattern_demo.webp&#34; width=&#34;1080&#34; height=&#34;778&#34;&gt;

            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;strong&gt;(a)&lt;/strong&gt; Both the accuracy and runtime increase as the resolution increases. &lt;strong&gt;(b)&lt;/strong&gt; At 300 x 420 pixels, the algorithm achieves 100% accuracy and is 12 times faster than human processing. (plot is shown in log scale)
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;accuracy-runtime-plot&#34;&gt;&lt;/div&gt;
        &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b)&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-pattern-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-pattern-runtime-0-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-pattern-runtime-0-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-pattern-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div id=&#34;search-pattern-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
                &lt;div class=&#34;benchmark-col-0&#34;&gt;
                    &lt;div id=&#34;search-pattern-runtime-1-bar-chart&#34;&gt;
                    &lt;/div&gt;
                    &lt;p id=&#34;search-pattern-runtime-1-name&#34;&gt;name&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&#34;benchmark-col-1&#34;&gt;
                    &lt;p id=&#34;search-pattern-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;figcaption&gt;
              
            &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;5-conclusion&#34;&gt;5. Conclusion&lt;/h1&gt;
&lt;p&gt;We present two approaches for detecting repetition in images. The first approach is based on Fourier analysis, but it is not suitable for our application because it requires additional assumptions about the range of the periods of images. The second approach emulates human processing by shifting and comparing images using the $L_2$ loss function. Despite its time complexity being $O(N^2)$, it outperforms human processing on our dataset.&lt;/p&gt;
&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;











&lt;section class=&#34;hugo-cite-bibliography&#34;&gt;
  &lt;dl&gt;
    

      &lt;div id=&#34;lettry-2017&#34;&gt;
        &lt;dt&gt;
          Lettry,&amp;#32;
          Perdoch,&amp;#32;
          Vanhoey&amp;#32;&amp;amp;&amp;#32;Van Gool

          
          (2017)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Lettry&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Louis&#34; /&gt;
    L.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Perdoch&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Michal&#34; /&gt;
    M.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Vanhoey&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Kenneth&#34; /&gt;
    K.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Van Gool&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Luc&#34; /&gt;
    L.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2017&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Repeated pattern detection using CNN activations&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;2017 IEEE Winter Conference on Applications of Computer Vision (WACV)&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;47–55&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;park-2009&#34;&gt;
        &lt;dt&gt;
          Park,&amp;#32;
          Brocklehurst,&amp;#32;
          Collins&amp;#32;&amp;amp;&amp;#32;Liu

          
          (2009)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Park&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Minwoo&#34; /&gt;
    M.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Brocklehurst&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Kyle&#34; /&gt;
    K.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Collins&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Robert T&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2009&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Deformed lattice detection in real-world images using mean-shift belief propagation&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;IEEE Transactions on Pattern Analysis and Machine Intelligence&lt;/span&gt;,&amp;#32;31(10)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;1804–1816&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;liu-2013&#34;&gt;
        &lt;dt&gt;
          Liu&amp;#32;&amp;amp;&amp;#32;Liu

          
          (2013)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Jingchen&#34; /&gt;
    J.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2013&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Grasp recurring patterns from a single view&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Proceedings of the IEEE conference on computer vision and pattern recognition&lt;/span&gt;&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;2003–2010&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;liu-2004&#34;&gt;
        &lt;dt&gt;
          Liu,&amp;#32;
          Collins&amp;#32;&amp;amp;&amp;#32;Tsin

          
          (2004)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Liu&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanxi&#34; /&gt;
    Y.&lt;/span&gt;,&amp;#32;
  &lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Collins&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Robert T&#34; /&gt;
    R.&lt;/span&gt;&amp;#32;&amp;amp;&amp;#32;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Tsin&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Yanghai&#34; /&gt;
    Y.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2004&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;A computational model for periodic pattern perception based on frieze and wallpaper groups&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;IEEE transactions on pattern analysis and machine intelligence&lt;/span&gt;,&amp;#32;26(3)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;354–371&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;
  &lt;/dl&gt;
&lt;/section&gt;



&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [1, 2, 3, 4, 5, 6], closeInner: true, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Design and Implementation of an in-House Fabric Library</title>
      <link>https://alanhung.dev/project/fabric-library/</link>
      <pubDate>Sun, 10 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/fabric-library/</guid>
      <description>&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-objectives&#34;&gt;2. Objectives&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-requirement&#34;&gt;3. Requirement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-workflow&#34;&gt;4. Workflow&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-result&#34;&gt;5. Result&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#51-main-page&#34;&gt;5.1. Main Page&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#52-fabric-detail-pages&#34;&gt;5.2. Fabric Detail Pages&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#53-order-summary-page&#34;&gt;5.3 Order Summary Page&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#54-impact&#34;&gt;5.4 Impact&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#541-efficiency&#34;&gt;5.4.1. Efficiency&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#542-sales&#34;&gt;5.4.2. Sales&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#6-conclusion&#34;&gt;6. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#7-appendix-implementation-details&#34;&gt;7. Appendix: Implementation Details&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#71-framework&#34;&gt;7.1. Framework&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#72-image-preprocessing-and-feature-extraction&#34;&gt;7.2. Image Preprocessing and Feature Extraction&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#73-machine-learning-and-model-evaluation&#34;&gt;7.3. Machine learning and Model Evaluation&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#74-database&#34;&gt;7.4. Database&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#741-schema&#34;&gt;7.4.1. Schema&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#742-batch-update&#34;&gt;7.4.2. Batch update&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#75-web-service&#34;&gt;7.5. Web Service&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#76-web-server&#34;&gt;7.6. Web Server&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#77-client-user-interface&#34;&gt;7.7. Client (User Interface)&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#771-main-page&#34;&gt;7.7.1. Main Page&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#772-fabric-detail-pages-and-order-summary&#34;&gt;7.7.2. Fabric Detail Pages and Order Summary&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#78-cloud-provider&#34;&gt;7.8. Cloud provider&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;This document highlights the need for a fabric library to improve efficiency in fabric-related businesses. To specify the library&amp;rsquo;s requirements, we consider three aspects: System, User, and Administrator. Based on these requirements, we define a workflow for the fabric library that includes feature extraction, machine learning, and web services. The library is implemented using the Django framework and deployed on the Google Cloud Platform. Finally, we evaluate the impact of this library, resulting in up to a 4x improvement in fabric sales and a 50% reduction in the purchase process time.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;As a fabric-related business, much of our daily work involves sifting through piles of fabric and communicating with team members using fabric images. This process is time-consuming, exhausting, and inefficient. For example, a designer may spend an hour in the warehouse just to find a particular color and pattern of fabric. Additionally, images may be attached to emails, social media, or even printed out during discussions among team members, making it difficult to systematically compare or review results. To address these issues, we need to create an application that can assist team members in finishing their work more efficiently.&lt;/p&gt;
&lt;h1 id=&#34;2-objectives&#34;&gt;2. Objectives&lt;/h1&gt;
&lt;p&gt;To be more specific, there are two parts in our original workflow that can be improved, as shown in Fig. 1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;Reducing the time spent on searching for fabric.&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;Before&lt;/span&gt;: Workers need to search through all the fabric in the warehouse to find the desired one.&lt;/li&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;After&lt;/span&gt;: Workers can input desired features of the fabric into the application, which will retrieve all fabrics that match the input criteria.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;Streamlining the time spent on reviewing fabrics and making purchases more efficiently.&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;Before&lt;/span&gt;: Workers and stakeholders are reviewing fabric using different tools, which can make it difficult for stakeholders to get a clear picture of all fabrics and can delay the decision-making process for purchases.&lt;/li&gt;
&lt;li&gt;&lt;span style=&#34;color:#FEAE00&#34;&gt;After&lt;/span&gt;: Workers and stakeholders can have discussions based on the same information provided by the application. Additionally, the application&amp;rsquo;s data visualization and machine learning-based predictions can provide valuable insights into the fabric.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The figure illustrates two scenarios: the original workflow before using the application, and the workflow after use of the application.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/objectives_black.webp&#34; width=&#34;3235&#34; height=&#34;2402&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;3-requirement&#34;&gt;3. Requirement&lt;/h1&gt;
&lt;p&gt;To achieve our goals, we can break down the requirements of our application into three aspects: &amp;ldquo;&lt;strong&gt;System&lt;/strong&gt;&amp;rdquo;, &amp;ldquo;&lt;strong&gt;User&lt;/strong&gt;&amp;rdquo;, and &amp;ldquo;&lt;strong&gt;Administrator&lt;/strong&gt;&amp;rdquo;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Store and display information about fabrics&lt;/li&gt;
&lt;li&gt;Extract features from fabrics&lt;/li&gt;
&lt;li&gt;Use machine learning (ML) models to make sales predictions&lt;/li&gt;
&lt;li&gt;Provide a dashboard summarizing each order&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Search and filter fabrics&lt;/li&gt;
&lt;li&gt;Retrieve similar fabrics&lt;/li&gt;
&lt;li&gt;Add fabrics to orders&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Administrator:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Evaluate results from ML models&lt;/li&gt;
&lt;li&gt;Batch update the database&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Regarding the requirements of the &lt;strong&gt;System&lt;/strong&gt;, it should be able to store fabric information and display it to users. Additionally, it needs to extract features from the fabric so that users can search, filter, and retrieve similar fabric based on those features. Furthermore, the extracted features can be used in ML models to predict sales and can also be used in a dashboard to help stakeholders or buyers have a clearer view of the order list, enabling them to make decisions more efficiently.&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;User&lt;/strong&gt;, in addition to searching for fabric, they should be able to add fabrics to their wishlist, cart, or order. As for the &lt;strong&gt;Administrator&lt;/strong&gt;, metrics should be defined so that they can evaluate the ML models that make predictions on sales. Since the supplier will frequently provide new fabrics, batch updates are preferable instead of updating them one by one.&lt;/p&gt;
&lt;h1 id=&#34;4-workflow&#34;&gt;4. Workflow&lt;/h1&gt;
&lt;p&gt;The workflow can be designed logically by considering all the requirements, as shown in Fig. 2.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Workflow of our application
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/workflow_black.webp&#34; width=&#34;3230&#34; height=&#34;2398&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bucket:&lt;/strong&gt;  To allow fabric suppliers to upload images of fabrics and serve them to our web service, we need to create a &lt;a href=&#34;https://cloud.google.com/storage/docs/buckets&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cloud storage bucket&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Image Preprocessing&lt;/strong&gt;: Images added to the bucket need to be resized to reduce runtime in feature extraction. Additionally, converting the color space from RGB to HSV is necessary for color theme extraction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Features Extraction:&lt;/strong&gt; During this stage, features such as the main color, pattern size, and color theme are extracted. Furthermore, we need to obtain sales data for each fabric to use as a target for machine learning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Machine Learning&lt;/strong&gt;: At this stage, we perform both supervised and unsupervised learning, as described in the &lt;a href=&#34;#73-machine-learning-and-model-evaluation&#34;&gt;Implementation Details section&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Model Evaluation:&lt;/strong&gt; When using machine learning techniques, corresponding metrics are used to evaluate the models. For example, in linear regression, the $R^2$ metric is used for accuracy assessment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt; The extracted features and predictions from ML models will be updated in the database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Service:&lt;/strong&gt; We use Python for the backend and HTML, JavaScript, and CSS for the frontend to create a web service.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Server:&lt;/strong&gt; Since we are using Python on the backend, we can transfer HTTP requests and responses using WSGI. This can be accomplished by using Apache and its modules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client:&lt;/strong&gt; Our system only requires three functions for users: searching and filtering fabrics, retrieving similar fabrics, and adding fabrics to an order.&lt;/p&gt;
&lt;h1 id=&#34;5-result&#34;&gt;5. Result&lt;/h1&gt;
&lt;p&gt;Our web service consists of a &lt;a href=&#34;https://demo.alanhung.dev&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;main page&lt;/a&gt;, &lt;a href=&#34;https://demo.alanhung.dev/product/210801_051X4Y/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fabric detail pages&lt;/a&gt;, and an &lt;a href=&#34;https://demo.alanhung.dev/order-summary-demo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;order summary page&lt;/a&gt;, all shown in the Fig. 3.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Pages in our application.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Main Page&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;a href=&#34;https://demo.alanhung.dev&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;./figure/main_page.webp&#34; width=&#34;1080&#34; height=&#34;1379&#34;&gt;&lt;/a&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Fabric Detail Pages&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;a href=&#34;https://demo.alanhung.dev/product/210502_050X2Y/&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;./figure/fabric_detail.webp&#34; width=&#34;1080&#34; height=&#34;1507&#34;&gt;&lt;/a&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Order Summary Page&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;a href=&#34;https://demo.alanhung.dev/order-summary-demo/&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;./figure/order_summary.webp&#34; width=&#34;1080&#34; height=&#34;1890&#34;&gt;&lt;/a&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;51-main-page&#34;&gt;5.1. Main Page&lt;/h2&gt;
&lt;p&gt;On the left side of the webpage, there are multiple sliders that can be used to filter the range of each feature, including color, pattern size, contrast, and so on. The web page will then display fabrics that match the selected criteria. As for the color theme, since it is a categorical feature, it is designed as a checkbox. Additionally, users can input a fabric ID to retrieve specific fabrics.&lt;/p&gt;
&lt;h2 id=&#34;52-fabric-detail-pages&#34;&gt;5.2. Fabric Detail Pages&lt;/h2&gt;
&lt;p&gt;The polar plot displays the color theme and range. Additionally, histograms of each channel are shown, and the percentage of each color is displayed. Quantitative features such as pattern size and contrast are also included. Finally, the top 12 options for similar fabrics are listed at the bottom of the page.&lt;/p&gt;
&lt;h2 id=&#34;53-order-summary-page&#34;&gt;5.3 Order Summary Page&lt;/h2&gt;
&lt;p&gt;This page serves as an interactive dashboard that not only summarizes the order for the user, but also allows the user to adjust the quantity of fabric to see its impact on the order.&lt;/p&gt;
&lt;p&gt;At the top of the page, there are two pie charts displaying the labels predicted by K-means. These charts remind the user about the proportion of each label. A higher proportion of a specific label, especially &amp;ldquo;Plain&amp;rdquo;, may be risky for sales, as discussed in the &lt;a href=&#34;https://alanhung.dev/project/improve-fabric-sales/&#34;&gt;previous project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The price and quantity of the order are displayed in the center of the page. Users can adjust the quantity using buttons provided.&lt;/p&gt;
&lt;p&gt;Finally, the features of the fabrics are summarized using a violin plot and a pie chart located at the bottom of the page, which provide insight into the distribution of the features.&lt;/p&gt;
&lt;h2 id=&#34;54-impact&#34;&gt;5.4 Impact&lt;/h2&gt;
&lt;h3 id=&#34;541-efficiency&#34;&gt;5.4.1. Efficiency&lt;/h3&gt;
&lt;p&gt;During the feature extraction stage, we implement algorithms that &lt;span style=&#34;color:#FEAE00&#34;&gt;achieve 12x and 63x improvements in speed compared to human processing&lt;/span&gt; for extracting pattern size and color themes, respectively&lt;a href=&#34;https://alanhung.dev/project/repeated-pattern-detection/#42-result&#34;&gt;$^1$&lt;/a&gt; &lt;a href=&#34;https://alanhung.dev/project/color-theme-extraction/#42-result&#34;&gt;$^2$&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When it comes to finding similar fabrics, defining the metric can be difficult due to the subjective nature of fabric images. However, the implemented algorithm has been proven to retrieve fabrics that are similar to those perceived by humans&lt;a href=&#34;https://alanhung.dev/project/search-similar-fabric/#32-result&#34;&gt;$^3$&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;542-sales&#34;&gt;5.4.2. Sales&lt;/h3&gt;
&lt;p&gt;Thanks to our in-house library and the hard work of our team members, sales have increased significantly since 2018, as shown in Fig. 4. We have observed &lt;span style=&#34;color:#FEAE00&#34;&gt;up to a 2.73 improvement&lt;/span&gt; compared to 2017. Additionally, we have &lt;span style=&#34;color:#FEAE00&#34;&gt;reduced the process time for each purchase by 50%&lt;/span&gt;, as discussed in a &lt;a href=&#34;https://alanhung.dev/project/improve-fabric-sales/#6-strategy-to-improve-sales&#34;&gt;previous project&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Fabric sales per quarter have been tracked since 2017. Since 2018, the purchase process has incorporated the in-house library, which has led to higher sales. Different colors indicate the before and after implementation.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div id=&#34;fabric-sales-plot&#34;&gt;&lt;/div&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;6-conclusion&#34;&gt;6. Conclusion&lt;/h1&gt;
&lt;p&gt;We take a systematic approach to building an in-house library for fabric. This approach includes analyzing requirements, selecting a framework, implementation, and deployment. The library has proven to be useful in significantly increasing sales and reducing the time required for the purchase and design process.&lt;/p&gt;
&lt;div class=&#34;p-b-20&#34;&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;div class=&#34;p-b-20&#34;&gt;&lt;/div&gt;
&lt;h1 id=&#34;7-appendix-implementation-details&#34;&gt;7. Appendix: Implementation Details&lt;/h1&gt;
&lt;h2 id=&#34;71-framework&#34;&gt;7.1. Framework&lt;/h2&gt;
&lt;p&gt;As Python is our main programming language, we have opted to use the &lt;a href=&#34;https://www.djangoproject.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Django framework&lt;/a&gt; to construct our web service. This framework offers all the essential components and features, including frontend development with JavaScript, HTML, and CSS, and backend interaction through an object-relational mapper (ORM).&lt;/p&gt;
&lt;h2 id=&#34;72-image-preprocessing-and-feature-extraction&#34;&gt;7.2. Image Preprocessing and Feature Extraction&lt;/h2&gt;
&lt;p&gt;We use &lt;a href=&#34;https://opencv.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenCV&lt;/a&gt; with Python for image manipulation tasks, such as importing, exporting, resizing, and color space conversion. We also implement our own algorithm to extract features, including &lt;a href=&#34;https://alanhung.dev/project/color-theme-extraction/#3-program&#34;&gt;color themes&lt;/a&gt; and &lt;a href=&#34;https://alanhung.dev/project/repeated-pattern-detection/#32-approach-with-l_2-loss&#34;&gt;pattern sizes&lt;/a&gt;. Similar fabrics are also considered as a feature and are extracted based on &lt;a href=&#34;https://alanhung.dev/project/search-similar-fabric/#23-perceptual-similarity-lpips&#34;&gt;perceptual similarity&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;73-machine-learning-and-model-evaluation&#34;&gt;7.3. Machine learning and Model Evaluation&lt;/h2&gt;
&lt;p&gt;We perform dimensionality reduction, K-means clustering, and beta regression on the extracted features. The procedure and results are discussed in the &lt;a href=&#34;https://alanhung.dev/project/improve-fabric-sales/&#34;&gt;previous project&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;74-database&#34;&gt;7.4. Database&lt;/h2&gt;
&lt;h3 id=&#34;741-schema&#34;&gt;7.4.1. Schema&lt;/h3&gt;
&lt;p&gt;Fig. 5 provides a simplified schema as an example. We have created a &amp;ldquo;Fabric&amp;rdquo; table to store the features of fabrics. For each item in an order, we create an &amp;ldquo;OrderItem&amp;rdquo; table and use &amp;ldquo;order_id&amp;rdquo; and &amp;ldquo;fabric_id&amp;rdquo; as foreign keys. Lastly, for each order, an &amp;ldquo;Order&amp;rdquo; table is created, with &amp;ldquo;user_id&amp;rdquo; used as the foreign key.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The simplified schema of our database.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/schema_black.webp&#34; width=&#34;1961&#34; height=&#34;1424&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;742-batch-update&#34;&gt;7.4.2. Batch update&lt;/h3&gt;
&lt;p&gt;To perform batch updates in a database using Django, we create a custom django-admin command. The following is an example of importing CSV data and writing it into the “Fabric” table in a database.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BaseCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;load fabric data&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# Custom function for loading data in CSV format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./example.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;# Write data to each column&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;row_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;row_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;fabric_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;row_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;main_color&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;# Save data to Fabric table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fabric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;row_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;75-web-service&#34;&gt;7.5. Web Service&lt;/h2&gt;
&lt;p&gt;We use Django&amp;rsquo;s class-based views to build our web pages. Setting up the connection with the database and template only requires few lines of code. Additionally, built-in pagination can be used to achieve multi-page content.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ShopView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ListView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fabric&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Table name in database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;paginate_by&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 6 items for each page&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;template_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;shop/shop.html&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Meeting user requirements for filtering or searching fabric involves setting up a frontend user interface to receive user requests and a backend to query the database.&lt;/p&gt;
&lt;p&gt;To achieve this on the frontend, a classic range slider and a checkbox can be used. On the backend, we need to use the &amp;ldquo;setup&amp;rdquo; method to receive these requests from the frontend, parse them, and make a query to the database using &amp;ldquo;get_queryset&amp;rdquo;. The following code provides an example of how to filter content in shop.html based on a user&amp;rsquo;s request for a specific hue range.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ShopView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ListView&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fabric&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Table name in database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;paginate_by&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 6 items for each page&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;template_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;shop/shop.html&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;filters&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Initialize attributes shared by all view methods.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_queryset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Make queries to the database.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;new_queryset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fabric&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;new_queryset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;parse_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Receive request and update to filter for queryset&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;low&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hue_low&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hue_high&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hue__range&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;low&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Another requirement is to keep track of the order list across different pages. This can be achieved by using cookie in frontend. The following example demonstrates how to update a cart&amp;rsquo;s content in a cookie using JavaScript.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;updateCart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cookie&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cart=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;updateQuantity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fabricName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;quantity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fabricName&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fabricName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;parseInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fabricName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;parseInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;quantity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fabricName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;parseInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;quantity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;updateCart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;76-web-server&#34;&gt;7.6. Web Server&lt;/h2&gt;
&lt;p&gt;As our web service is built with Python, we can use WSGI to forward requests from the web server. Apache with mod_wsgi provides a simple way to set up a directory for Python scripts, and virtual environments in the configuration file. The following code provides an example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Macro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DjangoWSGI&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;document&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;WSGIDaemonProcess&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;demo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$script/venv&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$script&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;WSGIProcessGroup&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;demo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;WSGIScriptAlias&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$script/site_settings/wsgi.py&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Directory&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$script/site_settings&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Files&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wsgi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Require&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;granted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Macro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;77-client-user-interface&#34;&gt;7.7. Client (User Interface)&lt;/h2&gt;
&lt;p&gt;We have created three pages for our user interface based on our requirements: the &lt;strong&gt;main page&lt;/strong&gt;, &lt;strong&gt;fabric detail pages&lt;/strong&gt;, and &lt;strong&gt;order summary page&lt;/strong&gt;, as shown in Fig. 6.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Draft layout of the user interface.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Main Page&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/main_page_ui.webp&#34; width=&#34;1080&#34; height=&#34;534&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Fabric Detail Pages&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/fabric_detail_ui.webp&#34; width=&#34;1080&#34; height=&#34;795&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Order Summary Page&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/order_summary_ui.webp&#34; width=&#34;1080&#34; height=&#34;907&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;771-main-page&#34;&gt;7.7.1. Main Page&lt;/h3&gt;
&lt;p&gt;We use range sliders to allow users to specify the range of each feature. A search box is used to retrieve fabric based on the fabric&amp;rsquo;s ID.&lt;/p&gt;
&lt;p&gt;To create range sliders, begin by adding three progress bars that will serve as its appearance.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;wrap-filter-bar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue-filter-bar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue-progress&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue-progress-mask-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue-progress-mask-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, add two inputs to specify the upper and lower bounds of the feature.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue-input&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;field&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue_min&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue_min&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue_max&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hue_max&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add an event listener to each input to update the progress bars based on the user&amp;rsquo;s input.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;slider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Retrieve html elements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`.&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-input input`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;progress&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`.leftbar #&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-filter-bar .&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-progress`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;progressMaskLeft&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`.leftbar #&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-filter-bar .&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-progress-mask-left`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;progressMaskRight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`.leftbar #&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-filter-bar .&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-progress-mask-right`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Add event listener
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;forEach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// Retrieve value from input
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;minVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;parseInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;maxVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;parseInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// Update progress bar
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;maxVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;minVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;-min`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;maxVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;rangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;minVal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;updateProgressAndDisplay&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(...);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, create a button to submit the input values to the backend.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Filter&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A search box can be created simply by using HTML.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search-product&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search-box&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search-product&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search-product&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search-product&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Search Products...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;772-fabric-detail-pages-and-order-summary&#34;&gt;7.7.2. Fabric Detail Pages and Order Summary&lt;/h3&gt;
&lt;p&gt;The primary goal is to visualize the features for each fabric and summarize the order with plots. To achieve this, we rely on &lt;a href=&#34;https://plotly.com/javascript/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Plotly&lt;/a&gt;, JavaScript, and CSS, as they provide interactive and responsive plots for users. For example, a scatter plot can be created by providing the id of the HTML element and the x and y data, respectively.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;scatterPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plotID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;scatter&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;line&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Plotly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;newPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plotID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;78-cloud-provider&#34;&gt;7.8. Cloud provider&lt;/h2&gt;
&lt;p&gt;We chose Google Cloud Platform (GCP) as our cloud provider because it has the lowest latency of 18 ms in Taiwan compared to AWS and Azure. Although GCP provides many convenient options for deploying a web service, such as &lt;a href=&#34;https://cloud.google.com/appengine&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;App Engine&lt;/a&gt; or &lt;a href=&#34;https://cloud.google.com/run&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cloud Run&lt;/a&gt;, we have chosen to use &lt;a href=&#34;https://cloud.google.com/products/compute&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Compute Engine&lt;/a&gt;. The reason for this is that it allows for more precise control and direct management of virtual machines (VMs). For instance, we can select CPU and RAM according to our budget, and choose a region with the lowest latency.&lt;/p&gt;



&lt;h1 id=&#34;&#34;
    class=&#34;js-toggle-dropdown-content cs-pointer color0-hov trans-0-4&#34;
&gt;
    
&lt;/h1&gt;
&lt;div class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
    
    
    
&lt;/div&gt;

    


&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Color Theme Extraction Based on the Bucket Sort Algorithm</title>
      <link>https://alanhung.dev/project/color-theme-extraction/</link>
      <pubDate>Wed, 05 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/color-theme-extraction/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-main-challenge&#34;&gt;2. Main challenge&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-program&#34;&gt;3. Program&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-color-conversion&#34;&gt;3.1. Color Conversion&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-quantitative-definition-of-a-theme&#34;&gt;3.2. Quantitative definition of a theme&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#33-search-algorithm&#34;&gt;3.3. Search algorithm&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#331-naive-approach&#34;&gt;3.3.1. Naive approach&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#332-optimized-approach-using-bucket-sort&#34;&gt;3.3.2. Optimized approach using Bucket sort&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-experiment&#34;&gt;4. Experiment&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#41-dataset&#34;&gt;4.1. Dataset&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#42-result&#34;&gt;4.2. Result&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#5-conclusion&#34;&gt;5. Conclusion&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#reference&#34;&gt;Reference&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;We present an algorithm for extracting color themes from digital images, which is crucial for automating the design process. The algorithm uses the HSV color space and a bucket sort with binary search to achieve up to 98% accuracy on a dataset of 113 images with a runtime of 157 milliseconds per image, representing a 63x gain in runtime compared to human processing.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Color is a primary factor in product design and significantly impacts various areas, including sales, marketing, and customer emotions




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#sigh-2006&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Satyendra&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Sigh&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2006&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Sigh&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Satyendra&#34; /&gt;
    S.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2006&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Impact of color on marketing&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Management decision&lt;/span&gt;,&amp;#32;44(6)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;783–789&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
. While it may seem like a color palette is subjective and only related to personal preference, designers actually rely heavily on color theory to make their decisions.&lt;/p&gt;
&lt;p&gt;Modern color theory is largely based on Isaac Newton&amp;rsquo;s color wheel




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#newton-1730&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Isaac&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Newton&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;1730&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope 
      itemtype=&#34;https://schema.org/Book&#34;
      data-type=&#34;book&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Newton&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Isaac&#34; /&gt;
    I.&lt;/span&gt;&amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;1730&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;
    &lt;i&gt;Opticks: Or, A Treatise of the Reflections, Refractions, Inflections and Colours of Light&lt;/i&gt;&lt;/span&gt;.
  &amp;#32;
  &lt;span itemprop=&#34;publisher&#34;
             itemtype=&#34;http://schema.org/Organization&#34;
             itemscope=&#34;&#34;&gt;
    &lt;span itemprop=&#34;name&#34;&gt;William Innys at the West-End of St.Paul&amp;#39;s&lt;/span&gt;&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
, which illustrates the relationship between colors. Unlike RGB, the color wheel is in the HSV color space, which is essentially a cylindrical coordinate system where hue, saturation, and value are related to degree, radius, and height, respectively. The cross-section of the cylinder represents the color wheel.&lt;/p&gt;
&lt;p&gt;Color themes are combinations of colors on the color wheel. For example, as shown in Fig. 1, an analogous color theme can be created by selecting adjacent colors, while a complementary color theme consists of two colors that are directly across from each other.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Relative position of colors for different themes.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Analogous&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;analogous&#34;&gt;&lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Complementary&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;complementary&#34;&gt;&lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;Triadic&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
                &lt;div id=&#34;triadic&#34;&gt;&lt;/div&gt;
            &lt;/figure&gt;
&lt;/div&gt;

        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;2-main-challenge&#34;&gt;2. Main challenge&lt;/h1&gt;
&lt;p&gt;When designing a product composed of different fabrics, the designer relies on color themes of each fabric, as shown in Fig. 2, which are manually extracted by other workers. This process is time-consuming and costly. &lt;span style=&#34;color:#FEAE00&#34;&gt;To expedite the design process, it is crucial to find a way to extract color themes automatically.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Although the theory behind color themes is mature and there are commercial tools available, such as &lt;a href=&#34;https://color.adobe.com/create/color-wheel&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Adobe Color Wheel&lt;/a&gt; and &lt;a href=&#34;https://www.pantone.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pantone Connect&lt;/a&gt;, that can generate color themes or extract colors from imported images, &lt;span style=&#34;color:#FEAE00&#34;&gt;these tools are still unable to identify color themes directly from images and do not provide an API. As a result, automating the design process with these tools is impossible.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            When designing a product, the designer should consider the color theme of the fabric. In this example, the complementary colors are dark green and pink. Therefore, the strap, zipper, and other fabric of the product should also match this color theme.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;img src=&#34;./figure/design_process.webp&#34; width=&#34;1080&#34; height=&#34;479&#34;&gt;

            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;3-program&#34;&gt;3. Program&lt;/h1&gt;
&lt;p&gt;To implement our own algorithm, the first step is to analyze the problem. This can be broken down into three parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Converting the RGB channels of the digital image into HSV format.&lt;/li&gt;
&lt;li&gt;Defining color themes quantitatively.&lt;/li&gt;
&lt;li&gt;Implementing a search algorithm to check if colors match the defined themes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;31-color-conversion&#34;&gt;3.1. Color Conversion&lt;/h2&gt;
&lt;p&gt;While it is possible to implement the conversion algorithm based on recent work




&lt;span class=&#34;hugo-cite-intext&#34;
        itemprop=&#34;citation&#34;&gt;(&lt;span class=&#34;hugo-cite-group&#34;&gt;

          &lt;a href=&#34;#chernov-2015&#34;&gt;&lt;span class=&#34;visually-hidden&#34;&gt;Citation: &lt;/span&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;meta itemprop=&#34;givenName&#34; content=&#34;Vladimir&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Chernov&lt;/span&gt;&lt;/span&gt;,&amp;#32;&lt;span itemprop=&#34;datePublished&#34;&gt;2015&lt;/span&gt;&lt;/a&gt;&lt;span class=&#34;hugo-cite-citation&#34;&gt; 










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Chernov&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Vladimir&#34; /&gt;
    V.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2015&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Integer-based accurate conversion between RGB and HSV color spaces&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Computers &amp;amp; Electrical Engineering&lt;/span&gt;,&amp;#32;46&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;328–337&lt;/span&gt;.&lt;/span&gt;




&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
, which claims to be faster and more accurate than classical methods. Conversion using an image processing package like OpenCV is already fast enough for our purposes.&lt;/p&gt;
&lt;h2 id=&#34;32-quantitative-definition-of-a-theme&#34;&gt;3.2. Quantitative definition of a theme&lt;/h2&gt;
&lt;p&gt;Since visual artwork rarely consists of only a single color, it is more appropriate to use intervals to describe a range of colors. By considering the relative position of each interval, we can define a theme. As a result, a color theme can be described using three parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The number of intervals&lt;/li&gt;
&lt;li&gt;The range of each interval&lt;/li&gt;
&lt;li&gt;The relative position of each interval&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, in Fig. 1, the triadic theme consists of three intervals, each with a relative position of 120 degrees and a range that can start from 15 to 100.&lt;/p&gt;
&lt;h2 id=&#34;33-search-algorithm&#34;&gt;3.3. Search algorithm&lt;/h2&gt;
&lt;p&gt;Before delving into the algorithm, it is important to consider the constraints of the problem. According to the HSV color space, colors are confined to a range between 0 and 359. Additionally, in our dataset, we resize all images to 100 x 140 pixels, striking a balance between runtime and accuracy. Taking monochrome, analogous, complementary, and triadic themes into account, there are 22,680 possible themes when considering all combinations of numbers and ranges in intervals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constraints:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 ≤ color ≤ 359&lt;/li&gt;
&lt;li&gt;1 ≤ len(color) ≤ 14000&lt;/li&gt;
&lt;li&gt;len(theme) = 22680&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the following analysis, we use the notations 

$N$ and 

$K$ to represent the lengths of the &amp;ldquo;colors&amp;rdquo; and &amp;ldquo;themes&amp;rdquo; lists, respectively.&lt;/p&gt;
&lt;h3 id=&#34;331-naive-approach&#34;&gt;3.3.1. Naive approach&lt;/h3&gt;
&lt;p&gt;A naive approach would be to iterate through all colors and theme until finding the correct one. Here’s how the algorithm works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Iterate through all themes.
&lt;ul&gt;
&lt;li&gt;At each iteration, we iterate through all colors.&lt;/li&gt;
&lt;li&gt;Check if theme covers all colors.
&lt;ul&gt;
&lt;li&gt;If it does, return it.&lt;/li&gt;
&lt;li&gt;Otherwise, we move on to the next one.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The time complexity is 

$O(NK)$. Although we need extra memory to store the number of colors in each interval during each iteration, the space complexity remains 

$O(1)$ since it only depends on the number of intervals in each theme.&lt;/p&gt;
&lt;h3 id=&#34;332-optimized-approach-using-bucket-sort&#34;&gt;3.3.2. Optimized approach using Bucket sort&lt;/h3&gt;
&lt;p&gt;Since there are upper and lower bound of color, the problem can be optimized using a bucket sort with binary search.&lt;/p&gt;
&lt;p&gt;Here’s the basic idea of the algorithm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To divide the range of colors (0~360) into &amp;ldquo;buckets&amp;rdquo;, select a bucket size. For example, if the bucket size is 10, there will be 36 buckets in total.&lt;/li&gt;
&lt;li&gt;Iterate through each color and use binary search to find the correct bucket.&lt;/li&gt;
&lt;li&gt;Merge adjacent and non-empty buckets.&lt;/li&gt;
&lt;li&gt;Iterate through all themes.
&lt;ul&gt;
&lt;li&gt;At each iteration, iterate through all merged buckets.&lt;/li&gt;
&lt;li&gt;Check if the theme covers all buckets.
&lt;ul&gt;
&lt;li&gt;If it does, return it.&lt;/li&gt;
&lt;li&gt;Otherwise, move on to the next one.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assuming that 

$B$ represents the number of buckets, the time complexity of this algorithm is 

$O(NlogB + BK)$, where 

$NlogB$ comes from bucket sort with binary search. The space complexity is 

$O(B)$. The bucket size is considered a hyperparameter. In practice, a bucket size of 5 or 10 is sufficient to obtain accurate results. As a result, this algorithm significantly improves speed compared to a naive approach.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Animation of various search algorithms.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a) Naive approach&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-theme-brute-force&#34;&gt;&lt;/div&gt;
            &lt;button id=&#34;search-theme-brute-force-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
            &lt;button id=&#34;search-theme-brute-force-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b) Optimized approach with bucket sort&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;div id=&#34;search-theme-bucket&#34;&gt;&lt;/div&gt;
            &lt;button id=&#34;search-theme-bucket-run&#34; style=&#34;color: #BB86FC;&#34;&gt;Run&lt;/button&gt;
            &lt;button id=&#34;search-theme-bucket-reset&#34; style=&#34;color: #BB86FC;&#34;&gt;Reset&lt;/button&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;4-experiment&#34;&gt;4. Experiment&lt;/h1&gt;
&lt;h2 id=&#34;41-dataset&#34;&gt;4.1. Dataset&lt;/h2&gt;
&lt;p&gt;To test the speed and accuracy of our algorithm, we collected 113 digital images of fabric with dimensions of 3500 x 4900 pixels, as shown in Fig. 4. For the algorithm, we resized the images to 100 x 140 pixels and used a bucket size of 10.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The dataset is used in experiments involving monochrome, analogous, complementary, and triadic color themes.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;img src=&#34;./figure/image_dataset.webp&#34; width=&#34;1560&#34; height=&#34;1080&#34;&gt;

            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;To evaluate speed, we had humans judge the theme of each image using a commercial color picker and measured the time taken for each judgment. For accuracy evaluation, we used the human judgment results as the ground truth, as shown in Fig. 5.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            To evaluate accuracy, we use human judgement as the ground truth. For instance, the algorithm extracted analogous, complementary, and triadic color themes from the following images, which match the result obtained from human judgement using a color picker.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;img src=&#34;./figure/experiment_result.webp&#34; width=&#34;1386&#34; height=&#34;1464&#34;&gt;

            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;42-result&#34;&gt;4.2. Result&lt;/h2&gt;
&lt;p&gt;The algorithm only failed on 2 images, resulting in an accuracy of 98%. The reason for these failures is that the images are composed of multiple color themes. For example, the image in Fig. 6 is considered to be both complementary and analogous.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The algorithm fails to extract if the image is composed of multiple color themes.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;img src=&#34;./figure/failed_result.webp&#34; width=&#34;1386&#34; height=&#34;532&#34;&gt;

            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;The comparison of runtime is shown in Fig. 7. Excluding the time for importing images, the average runtime for processing a single image is 157 milliseconds for the algorithm and 10 seconds for a human. This represents a 63x gain in runtime compared to human processing. For reference, a naive approach could take up to 30 seconds, which is even slower than human processing.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            By using an optimized approach in the search algorithm, the processing speed is 63 times faster than human processing. The unit of measurement for processing speed is images per second, and the plot is shown on a log scale.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div class=&#34;p-t-10&#34;&gt;&lt;/div&gt;
        &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-theme-runtime-0-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-theme-runtime-0-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-theme-runtime-0-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-theme-runtime-1-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-theme-runtime-1-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-theme-runtime-1-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id=&#34;search-theme-runtime-benchmark&#34; class=&#34;flex-sb&#34;&gt;
            &lt;div class=&#34;benchmark-col-0&#34;&gt;
                &lt;div id=&#34;search-theme-runtime-2-bar-chart&#34;&gt;
                &lt;/div&gt;
                &lt;p id=&#34;search-theme-runtime-2-name&#34;&gt;name&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&#34;benchmark-col-1&#34;&gt;
                &lt;p id=&#34;search-theme-runtime-2-annotation&#34;&gt;1x&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;5-conclusion&#34;&gt;5. Conclusion&lt;/h1&gt;
&lt;p&gt;We have presented an algorithm for identifying color themes that does not require any training or human annotations. The algorithm is 63 times faster than human processing and achieves up to 98% accuracy on our dataset.&lt;/p&gt;
&lt;h1 id=&#34;reference&#34;&gt;Reference&lt;/h1&gt;


  










&lt;section class=&#34;hugo-cite-bibliography&#34;&gt;
  &lt;dl&gt;
    

      &lt;div id=&#34;sigh-2006&#34;&gt;
        &lt;dt&gt;
          Sigh

          
          (2006)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Sigh&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Satyendra&#34; /&gt;
    S.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2006&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Impact of color on marketing&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Management decision&lt;/span&gt;,&amp;#32;44(6)&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;783–789&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;newton-1730&#34;&gt;
        &lt;dt&gt;
          Newton

          
          (1730)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope 
      itemtype=&#34;https://schema.org/Book&#34;
      data-type=&#34;book&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Newton&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Isaac&#34; /&gt;
    I.&lt;/span&gt;&amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;1730&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;
    &lt;i&gt;Opticks: Or, A Treatise of the Reflections, Refractions, Inflections and Colours of Light&lt;/i&gt;&lt;/span&gt;.
  &amp;#32;
  &lt;span itemprop=&#34;publisher&#34;
             itemtype=&#34;http://schema.org/Organization&#34;
             itemscope=&#34;&#34;&gt;
    &lt;span itemprop=&#34;name&#34;&gt;William Innys at the West-End of St.Paul&amp;#39;s&lt;/span&gt;&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;

      &lt;div id=&#34;chernov-2015&#34;&gt;
        &lt;dt&gt;
          Chernov

          
          (2015)&lt;/dt&gt;

        &lt;dd&gt;
          










&lt;span itemscope
      itemtype=&#34;https://schema.org/Article&#34;
      data-type=&#34;article&#34;&gt;&lt;span itemprop=&#34;author&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;span itemprop=&#34;familyName&#34;&gt;Chernov&lt;/span&gt;,&amp;#32;
    &lt;meta itemprop=&#34;givenName&#34; content=&#34;Vladimir&#34; /&gt;
    V.&lt;/span&gt;
  &amp;#32;
    (&lt;span itemprop=&#34;datePublished&#34;&gt;2015&lt;/span&gt;).
  &amp;#32;&lt;span itemprop=&#34;name&#34;&gt;Integer-based accurate conversion between RGB and HSV color spaces&lt;/span&gt;.&lt;i&gt;
    &lt;span itemprop=&#34;about&#34;&gt;Computers &amp;amp; Electrical Engineering&lt;/span&gt;,&amp;#32;46&lt;/i&gt;.&amp;#32;&lt;span itemprop=&#34;pagination&#34;&gt;328–337&lt;/span&gt;.&lt;/span&gt;




&lt;/dd&gt;

      &lt;/div&gt;
  &lt;/dl&gt;
&lt;/section&gt;



&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;searchThemeBruteForce({frameIndex: 0})&lt;/script&gt;
&lt;script&gt;searchThemeBucket({frameIndex: 0})&lt;/script&gt;
&lt;script&gt;searchThemeRunTime()&lt;/script&gt;
&lt;script&gt;analogous()&lt;/script&gt;
&lt;script&gt;complementary()&lt;/script&gt;
&lt;script&gt;triadic()&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [1, 2, 3, 4, 5, 6, 7], closeInner: true, closeOuter: true})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Example Project</title>
      <link>https://alanhung.dev/project/example/</link>
      <pubDate>Wed, 27 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/example/</guid>
      <description>&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis posuere tellus ac convallis placerat. Proin tincidunt magna sed ex sollicitudin condimentum. Sed ac faucibus dolor, scelerisque sollicitudin nisi. Cras purus urna, suscipit quis sapien eu, pulvinar tempor diam. Quisque risus orci, mollis id ante sit amet, gravida egestas nisl. Sed ac tempus magna. Proin in dui enim. Donec condimentum, sem id dapibus fringilla, tellus enim condimentum arcu, nec volutpat est felis vel metus. Vestibulum sit amet erat at nulla eleifend gravida.&lt;/p&gt;
&lt;p&gt;Nullam vel molestie justo. Curabitur vitae efficitur leo. In hac habitasse platea dictumst. Sed pulvinar mauris dui, eget varius purus congue ac. Nulla euismod, lorem vel elementum dapibus, nunc justo porta mi, sed tempus est est vel tellus. Nam et enim eleifend, laoreet sem sit amet, elementum sem. Morbi ut leo congue, maximus velit ut, finibus arcu. In et libero cursus, rutrum risus non, molestie leo. Nullam congue quam et volutpat malesuada. Sed risus tortor, pulvinar et dictum nec, sodales non mi. Phasellus lacinia commodo laoreet. Nam mollis, erat in feugiat consectetur, purus eros egestas tellus, in auctor urna odio at nibh. Mauris imperdiet nisi ac magna convallis, at rhoncus ligula cursus.&lt;/p&gt;
&lt;p&gt;Cras aliquam rhoncus ipsum, in hendrerit nunc mattis vitae. Duis vitae efficitur metus, ac tempus leo. Cras nec fringilla lacus. Quisque sit amet risus at ipsum pharetra commodo. Sed aliquam mauris at consequat eleifend. Praesent porta, augue sed viverra bibendum, neque ante euismod ante, in vehicula justo lorem ac eros. Suspendisse augue libero, venenatis eget tincidunt ut, malesuada at lorem. Donec vitae bibendum arcu. Aenean maximus nulla non pretium iaculis. Quisque imperdiet, nulla in pulvinar aliquet, velit quam ultrices quam, sit amet fringilla leo sem vel nunc. Mauris in lacinia lacus.&lt;/p&gt;
&lt;p&gt;Suspendisse a tincidunt lacus. Curabitur at urna sagittis, dictum ante sit amet, euismod magna. Sed rutrum massa id tortor commodo, vitae elementum turpis tempus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean purus turpis, venenatis a ullamcorper nec, tincidunt et massa. Integer posuere quam rutrum arcu vehicula imperdiet. Mauris ullamcorper quam vitae purus congue, quis euismod magna eleifend. Vestibulum semper vel augue eget tincidunt. Fusce eget justo sodales, dapibus odio eu, ultrices lorem. Duis condimentum lorem id eros commodo, in facilisis mauris scelerisque. Morbi sed auctor leo. Nullam volutpat a lacus quis pharetra. Nulla congue rutrum magna a ornare.&lt;/p&gt;
&lt;p&gt;Aliquam in turpis accumsan, malesuada nibh ut, hendrerit justo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque sed erat nec justo posuere suscipit. Donec ut efficitur arcu, in malesuada neque. Nunc dignissim nisl massa, id vulputate nunc pretium nec. Quisque eget urna in risus suscipit ultricies. Pellentesque odio odio, tincidunt in eleifend sed, posuere a diam. Nam gravida nisl convallis semper elementum. Morbi vitae felis faucibus, vulputate orci placerat, aliquet nisi. Aliquam erat volutpat. Maecenas sagittis pulvinar purus, sed porta quam laoreet at.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>External Project</title>
      <link>https://alanhung.dev/project/external-project/</link>
      <pubDate>Wed, 27 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/external-project/</guid>
      <description></description>
    </item>
    
    <item>
      <title>An example journal article</title>
      <link>https://alanhung.dev/publication/journal-article/</link>
      <pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/publication/journal-article/</guid>
      <description>&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    Click the &lt;em&gt;Cite&lt;/em&gt; button above to demo the feature to enable visitors to import publication metadata into their reference management software.
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    Create your slides in Markdown - click the &lt;em&gt;Slides&lt;/em&gt; button to check out the example.
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Supplementary notes can be added here, including &lt;a href=&#34;https://wowchemy.com/docs/writing-markdown-latex/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;code, math, and images&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title> The Impact of Uniaxial Strain on Low Frequency Noise of nanoscale PMOSFETs with e-SiGe and i-SiGe Source/Drain</title>
      <link>https://alanhung.dev/publication/low-frequency-noise-3/</link>
      <pubDate>Sat, 10 Jul 2010 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/publication/low-frequency-noise-3/</guid>
      <description>&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;The impact of uni-axial strain from embedded SiGe in recessed S/D (e-SiGe) and Ge implanted S/D (i-SiGe) on effective mobility μ eff , gate leakage current, short channel effect (SCE) and low frequency noise (LFN) in pMOS has been investigated. The e-SiGe can realize superior μ eff enhancement but lead to worse SCE and LFN. The i-SiGe can reduce SCE and LFN but suffers limited μ eff improvement. Mobility fluctuation model can explain the trade-off and forward body biases (FBB) method can overcome the trade-off. SiGe strain combined with FBB is an effective solution in nanoscale pMOS to enhance RF and analog performance.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Low frequency noise in nanoscale pMOSFETs with strain induced mobility enhancement and dynamic body biases</title>
      <link>https://alanhung.dev/publication/low-frequency-noise-1/</link>
      <pubDate>Fri, 17 Jul 2009 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/publication/low-frequency-noise-1/</guid>
      <description>&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;Local strain effect on low frequency noise (LFN) of pMOSFETs with gate length down to 60 nm was investigated in this paper. Novel and interesting results were identified from the pMOSFETs adopting embedded SiGe (e-SiGe) in source/drain for uni-axial compressive stress. This local compressive strain can realize significant mobility enhancement and desired current boost in nanoscale pMOSFETs. However, the dramatic increase of LFN emerges as a penalty traded off with mobility enhancement. The escalated LFN may become a critical killer to analog and RF circuits. Forward body biases (FBB) can improve the effective mobility and reduce LFN attributed to reduced normal field. However, the benefit from FBB becomes insignificant in strained pMOSFETs with sub-100 nm gate length.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Flicker noise in nanoscale pMOSFETs with mobility enhancement engineering and dynamic body biases</title>
      <link>https://alanhung.dev/publication/low-frequency-noise-2/</link>
      <pubDate>Fri, 26 Jun 2009 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/publication/low-frequency-noise-2/</guid>
      <description>&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;The uni-axial compressive strain from e-SiGe S/D combined with dynamic body biases effect on flicker noise of pMOSFETs is presented in this paper. This compressive strain contributes higher mobility but the worse flicker noise in terms of higher S ID /I D 2 becomes a potential killer to RF/analog circuits. Forward body biases (FBB) can reduce the flicker noise but the degraded body bias effect in strained pMOSFETs makes it not as efficient as the standard ones without strain. Hooge&amp;rsquo;s mobility fluctuation model is adopted to explain the uni-axial strain and dynamic body biases effect on flicker noise. The increase of Hooge parameter α H is identified the key factor responsible the degraded flicker noise in strained pMOSFETs.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://alanhung.dev/admin/config.yml</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/admin/config.yml</guid>
      <description></description>
    </item>
    
    <item>
      <title>Design Portfolio</title>
      <link>https://alanhung.dev/project/design-portfolio/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/design-portfolio/</guid>
      <description>&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#introduction&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-fabric-design&#34;&gt;1. Fabric Design&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#2017-springsummer-collections&#34;&gt;2017 Spring/Summer Collections&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#design-brief&#34;&gt;Design Brief&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#ideation&#34;&gt;Ideation&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#result&#34;&gt;Result&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-pattern-design&#34;&gt;2. Pattern Design&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#design-brief-1&#34;&gt;Design Brief&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#result-1&#34;&gt;Result&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-product-design&#34;&gt;3. Product Design&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#design-brief-2&#34;&gt;Design Brief&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#design-1&#34;&gt;Design 1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#design-2&#34;&gt;Design 2&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#design-3&#34;&gt;Design 3&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#design-4&#34;&gt;Design 4&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;This document briefly introduces our work in fabric, pattern, and product design. For fabric design, the focus is on simple patterns and two-color schemes, with gradients used to blend colors. For pattern design, reproducibility is key, with circles and straight lines used to create regular shapes. For product design, functionality, practicality, manufacturing difficulties, and cost are all considered. Four designs are presented, including a cup cozy inspired by koalas, a card pouch redesigned for the Year of the Tiger, and an abstract girl design with a metal keychain.&lt;/p&gt;
&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;To improve the team&amp;rsquo;s efficiency, the first step is to understand each participant&amp;rsquo;s daily job. As our team mainly focuses on design, I participated in three aspects of the design procedure: fabric, pattern, and product design.&lt;/p&gt;
&lt;h1 id=&#34;1-fabric-design&#34;&gt;1. Fabric Design&lt;/h1&gt;
&lt;h2 id=&#34;2017-springsummer-collections&#34;&gt;2017 Spring/Summer Collections&lt;/h2&gt;
&lt;h3 id=&#34;design-brief&#34;&gt;Design Brief&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Target audience:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This fabric is designed for people who enjoy needlework, such as applique and embroidery, as shown in Fig 1.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This type of fabric is typically used as a background for needlework. Therefore, designers usually follow these guidelines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The pattern should be simple and not obvious, such as dots or straight lines.&lt;/li&gt;
&lt;li&gt;The fabric normally consists of no more than two colors.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The target audience for Fabric is people who enjoy appliqué and embroidery.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_01.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_02.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;ideation&#34;&gt;Ideation&lt;/h3&gt;
&lt;p&gt;As shown in the Fig. 2, we have chosen three primary colors inspired by nature in spring and summer. Since these colors form an isosceles triangle, we can choose the opposite side of the primary color on the color wheel as a secondary color. In this way, we can have complementary and analogous color schemes by combining these four colors.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The primary colors are inspired by nature, and the secondary color is chosen to have both complementary and analogous color schemes.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_03.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_04.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_05.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_06.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Color schemes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complementary: 1 &amp;amp; 4&lt;/li&gt;
&lt;li&gt;Analogous: 2 &amp;amp; 4 and 3 &amp;amp; 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since our color schemes only consist of two colors, using gradients is an effective approach to blend these two colors together, as shown in Fig 3.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Using gradients is an effective way to blend pairs of colors.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_07.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_08.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;
&lt;p&gt;The fabric collections, based on the colors we design, are shown in the Fig 4.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The figure displays the fabric collections that we designed, organized by their respective color schemes.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_09.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_10.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_11.webp&#34; width=&#34;1080&#34; height=&#34;607&#34;&gt;
        
&lt;/div&gt;


        &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_12.webp&#34; width=&#34;1080&#34; height=&#34;607&#34;&gt;
        
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;2-pattern-design&#34;&gt;2. Pattern Design&lt;/h1&gt;
&lt;h3 id=&#34;design-brief-1&#34;&gt;Design Brief&lt;/h3&gt;
&lt;p&gt;Design patterns are an important step to include during product design. Unlike illustrations, where we can draw any curve or shape, we need to consider the following points when designing patterns.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Designers should include additional seam allowance to ensure that pieces can be joined properly.&lt;/li&gt;
&lt;li&gt;The curve and shape should be reproducible with available tools, such as compasses and rulers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;result-1&#34;&gt;Result&lt;/h3&gt;
&lt;p&gt;In Design 1, I created a curved shape by combining circles with two different radii. This shape has been used in the clasp frame pouch.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_13.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_14.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Design 2 involves creating a regular hexagon using three circles, which can be useful for creating decorative elements.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_15.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_16.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h1 id=&#34;3-product-design&#34;&gt;3. Product Design&lt;/h1&gt;
&lt;h3 id=&#34;design-brief-2&#34;&gt;Design Brief&lt;/h3&gt;
&lt;p&gt;There are no strict guidelines for product design. Designers are usually provided with a main topic and then create products based on their past experiences. However, since generating revenue is the main purpose, designers usually consider the following points during the design process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Innovations&lt;/li&gt;
&lt;li&gt;Functionality&lt;/li&gt;
&lt;li&gt;Practicality&lt;/li&gt;
&lt;li&gt;Manufacturing difficulties&lt;/li&gt;
&lt;li&gt;Cost&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;design-1&#34;&gt;Design 1&lt;/h3&gt;
&lt;p&gt;By using different types of curves, we can break the symmetry between left and right, while also avoiding a visually abrupt transition. To enhance functionality, the item features multiple compartments with zippers and buttons.
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_17.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_18.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_19.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_20.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id=&#34;design-2&#34;&gt;Design 2&lt;/h3&gt;
&lt;p&gt;This design presents an abstract idea of an adorable girl by using simple curves and shapes, which can reduce manufacturing difficulties. The metal keychain serves two purposes: first, it provides functionality, and second, it creates a contrast in material between the fabric and the metal.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_21.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_22.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_23.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_24.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;design-3&#34;&gt;Design 3&lt;/h3&gt;
&lt;p&gt;The cup cozy was designed with inspiration from koalas hugging trees. Blush and additional decor were added to enhance the design due to the low contrast of the color. To reduce manufacturing difficulties, fabric with a leaf pattern is used instead of creating each leaf individually.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_25.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_26.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h3 id=&#34;design-4&#34;&gt;Design 4&lt;/h3&gt;
&lt;p&gt;This card pouch was originally designed for the Year of the Tiger. To avoid an intimidating appearance, I have redrawn the figure and adjusted the proportion between the body and the head. This not only makes the design more appealing but also significantly reduces the cost and manufacturing difficulties since it only requires two colors of fabric.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_27.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_28.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_29.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;img src=&#34;./figure/figure_30.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34;&gt;
        
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

</description>
    </item>
    
    <item>
      <title>Product Photography</title>
      <link>https://alanhung.dev/project/photography/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/photography/</guid>
      <description>&lt;p&gt;&lt;em&gt;A collection of my work on fabric product.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;script&gt;removeTitle()&lt;/script&gt;
&lt;div class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
     &lt;div class=&#34;flex-w&#34;&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_01.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_01.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_01&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_02.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_02.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_02&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_03.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_03.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_03&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_04.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_04.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_04&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_05.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_05.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_05&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_06.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_06.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_06&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_07.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_07.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_07&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_08.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_08.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_08&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_09.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_09.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_09&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_10.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_10.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_10&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_11.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_11.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_11&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_12.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_12.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_12&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_13.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_13.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_13&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_14.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_14.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_14&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_15.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_15.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_15&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_16.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_16.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_16&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_17.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_17.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_17&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_18.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_18.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_18&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_19.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_19.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_19&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size29 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_20.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_20.webp&#34; width=&#34;1080&#34; height=&#34;607&#34; alt=&#34;figure_20&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_21.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_21.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_21&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_22.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_22.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_22&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;a href=&#34;./figure/original/figure_23.webp&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_23.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_23&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0;margin-right:0;&#34;&gt;
         &lt;/a&gt;
     &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Product Videography</title>
      <link>https://alanhung.dev/project/videography/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/videography/</guid>
      <description>&lt;p&gt;&lt;em&gt;A collection of my work on fabric product.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;script&gt;removeTitle()&lt;/script&gt;
&lt;div class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
     &lt;div class=&#34;flex-w&#34;&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4214480068609657&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_02.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_02&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/497480264479142&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_04.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_04&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2395806810477001&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_05.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_05&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/220619139331344&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_06.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_06&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2717891894994659&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_07.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_07&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4217675061623491&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_09.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_09&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4204830222907975&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_12.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_12&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4105305966193735&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_13.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_13&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4206103716113959&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_14.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_14&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/786010681745641&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_15.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_15&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4211359855588345&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_16.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_16&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2475401555850859&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_18.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_18&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/583112338969108&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_19.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_19&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/1762374247107834&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_21.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_21&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4220819997975664&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_22.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_22&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4193795717344759&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_24.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_24&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4188638587860472&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_25.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_25&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4223919830999014&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_26.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_26&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/246924496725157&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_28.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_28&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2462991537091861&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_29.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_29&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/159917141884627&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_31.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_31&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/186397002658941&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_33.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_33&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4196965653694432&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_35.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_35&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2488216941235987&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_36.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_36&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/998880957146229&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_38.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_38&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/3040353436050113&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_39.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_39&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4245835202140810&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_40.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_40&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2675927132513752&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_41.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_41&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/3326863340704672&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_43.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_43&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/3038877886174195&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_45.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_45&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2542858392633139&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_46.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_46&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/607409273437019&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_47.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_47&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/389363101727703&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_48.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_48&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/2428466284100249&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_50.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_50&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4076666379057694&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_52.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_52&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;div class=&#34;w-size6 respon5&#34;&gt;
         &lt;div class=&#34;p-l-5 p-r-5 p-b-10&#34;&gt;
             &lt;a href=&#34;https://facebook.com/4179520505438947&#34; target=&#34;_blank&#34;&gt;
                 &lt;img src=&#34;./figure/figure_53.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_53&#34; style=&#34;margin-top:0rem; margin-bottom: 0rem;margin-left:0rem;margin-right:0rem;&#34;&gt;
             &lt;/a&gt;
         &lt;/div&gt;
     &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Transitions toward B2C E-commerce: Part I</title>
      <link>https://alanhung.dev/project/business-model-transitions-i/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/business-model-transitions-i/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;script&gt;changeTitle(&#34;Transitions towards B2C E-commerce: Part I - Business model perspective and Summary&#34;)&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-analysis-of-the-transition&#34;&gt;2. Analysis of the Transition&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#21-system-wise&#34;&gt;2.1. System-wise&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#22-business-wise&#34;&gt;2.2. Business-wise&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-result&#34;&gt;3. Result&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-data&#34;&gt;3.1. Data&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-milestones&#34;&gt;3.2. Milestones&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-conclusion&#34;&gt;4. Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;The document discusses a proposed transition from a B2B fabric design business model to a B2C e-commerce model for a Taiwan-based company named &amp;ldquo;&lt;a href=&#34;https://en.haori.com.tw/about_us/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Haori Taiwan&lt;/em&gt;&lt;/a&gt;&amp;rdquo;. The advantages and disadvantages of the original model are listed, and a proposed solution is presented. The document then analyzes the requirements of the transition in both system and business aspects, and presents the achievements of each milestone. The impact of the transition is quantified using measures of productivity, popularity, and sales, and the conclusion notes that &lt;span style=&#34;color:#FFAA39&#34;&gt;the transition has improved total sales in Taiwan by 378% compared to March 2017&lt;/span&gt;.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Our company, &amp;ldquo;&lt;a href=&#34;https://en.haori.com.tw/about_us/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Haori Taiwan&lt;/em&gt;&lt;/a&gt;&amp;rdquo;, is based in Taiwan and specializes in fabric design. The company&amp;rsquo;s business model is illustrated in Fig. 1(a). Designers send their designs to manufacturers, who produce the fabric that we then sell to product design houses and distributors. The advantages and disadvantages of this model are listed below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pros&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The business is straightforward&lt;/strong&gt;&lt;br&gt;
Our main tasks are designing fabric and communicating with manufacturers, distributors, and product design houses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low operational costs&lt;/strong&gt;&lt;br&gt;
Since the company primarily consists of designers, there is no need to have a large working area such as a factory or multiple stores. As a result, the operational costs are much lower than those of manufacturers and retailers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cons&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Long sales cycle&lt;/strong&gt;&lt;br&gt;
Starting from the delivery design, it takes months to manufacture, ship abroad, and receive payment from clients. This process is risky and presents a challenge for cash flow management.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lack of direct awareness of market trends&lt;/strong&gt;&lt;br&gt;
Without direct feedback from customers, it&amp;rsquo;s possible that the design may fall out of fashion. We can only react once our client reports a decline in sales.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The (a) original and (b) proposed business models of the company.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
    

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a) Original model&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;img src=&#34;./figure/original_model.webp&#34; width=&#34;5494&#34; height=&#34;6920&#34; alt=&#34;original_model&#34;&gt;
    &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;

    &lt;div class=&#34;w-size13 respon5 p-l-2 p-r-2&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b) Proposed model&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;img src=&#34;./figure/proposed_model.webp&#34; width=&#34;5494&#34; height=&#34;6920&#34; alt=&#34;proposed_model&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;To address these disadvantages, we propose transitioning to a B2C business model, depicted in Fig. 1(b). This approach is similar to that taken by the Finnish fabric design house, &lt;a href=&#34;https://www.marimekko.com/com_en/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Marimekko&lt;/a&gt;. It involves adding product design capabilities and establishing an e-commerce store to directly sell fabric and products to customers. &lt;span style=&#34;color:#FFAA39&#34;&gt;The objective of this transition is to overcome the drawbacks while maintaining the benefits of the original business model&lt;/span&gt;.&lt;/p&gt;
&lt;h1 id=&#34;2-analysis-of-the-transition&#34;&gt;2. Analysis of the Transition&lt;/h1&gt;
&lt;p&gt;To achieve our goals for this business transition, we need to solve two main problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System-wise&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;We need to add three departments to our company: product design, marketing, and inventory. However, simply hiring more employees to implement this transition could turn the previously mentioned benefits into drawbacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business-wise&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;What is the most effective way to reach potential customers? In other words, what is our plan to enter the market?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;21-system-wise&#34;&gt;2.1. System-wise&lt;/h2&gt;
&lt;p&gt;Our goal is to maintain the advantages of the original model while simplifying the workflow and minimizing operational costs. To achieve this, we will take the following approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Break down the requirements of the business transition.&lt;/li&gt;
&lt;li&gt;Analyze the tasks involved in each part.&lt;/li&gt;
&lt;li&gt;Reduce repetitive and tedious work.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&#34;color:#FFAA39&#34;&gt;In essence, our objective is to improve work efficiency and accomplish more tasks without the need to hire additional employees&lt;/span&gt;. This approach is also beneficial in the long-term since it reduces the time spent on human resource management, lowers operational costs, and makes the company more resilient and flexible during times of transition.&lt;/p&gt;
&lt;p&gt;We start by considering the requirements, as shown in Fig. 2. Compared to the original business model, there are three additional parts: design, inventory, and marketing. Although their functionalities appear to be completely different, their workflows intersect with each other. For example, the designer may need information about customer preferences while searching for fabric, and the inventory planner may need to organize fabric based on sales or customer preference so that the designer can easily find the required fabric. Therefore, &lt;span style=&#34;color:#FFAA39&#34;&gt;building an in-house library containing information required by different departments can significantly improve efficiency&lt;/span&gt;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Analysis of requirements for business model transition.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/requirement.webp&#34; width=&#34;8727&#34; height=&#34;6494&#34; alt=&#34;requirement&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;22-business-wise&#34;&gt;2.2. Business-wise&lt;/h2&gt;
&lt;p&gt;We conduct competitor analysis and SWOT analysis. The strategy and milestones are established as depicted in the Fig. 3, which are elaborated in detail in &amp;ldquo;&lt;a href=&#34;https://alanhung.dev/project/business-model-transitions-ii/#32-milestones&#34;&gt;&lt;em&gt;Transitions towards B2C E-commerce: Part II - Competitor Analysis and Strategy Formation&lt;/em&gt;&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Milestones of the transition plan.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;img src=&#34;./figure/Timeline.webp&#34; width=&#34;8798&#34; height=&#34;9565&#34; alt=&#34;Timeline&#34; style=&#34;margin:0;&#34;&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;3-result&#34;&gt;3. Result&lt;/h1&gt;
&lt;h2 id=&#34;31-data&#34;&gt;3.1. Data&lt;/h2&gt;
&lt;p&gt;To measure the impact of the business model transition, we selected four metrics as shown in Fig. 4:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Number of Facebook posts per month&lt;/li&gt;
&lt;li&gt;Average reactions per post on Facebook per month&lt;/li&gt;
&lt;li&gt;Printed fabric sales in Taiwan&lt;/li&gt;
&lt;li&gt;Total sales in Taiwan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The number of posts and average reactions reflect productivity and popularity, respectively. Sales data is normalized to the sales in February 2017, and a four-quarter moving average is applied. The data for &amp;ldquo;Benchmark&amp;rdquo; is from Competitor D in the previous &lt;a href=&#34;https://alanhung.dev/project/business-model-transitions-ii/#22-post-on-facebook&#34;&gt;competitor analysis&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            (a) Comparison of our performance with that of our competitor in two metrics: the number of posts and the average number of reactions per post. (b) Four-quarter moving average of fabric and total sales in Taiwan.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
    

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a) Posts on Facebook&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;div class=&#34;t-right&#34;&gt;
        &lt;span style=&#34;color:#03DAC6&#34;&gt;━━ Our Company &lt;/span&gt;&lt;br&gt;&lt;span style=&#34;color:#BB86FC&#34;&gt;━━ Benchmark&lt;/span&gt;
        &lt;/div&gt;
        &lt;div id=&#34;post-comparison-plot&#34;&gt;&lt;/div&gt;
    &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b) Four-Quarter Moving Average of Sales in Taiwan&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;div class=&#34;t-right&#34;&gt;
        &lt;span style=&#34;color:#FFA15A&#34;&gt;━━ Fabric Sales &lt;/span&gt;&lt;br&gt;&lt;span style=&#34;color:#B6E880&#34;&gt;━━ Total Sales&lt;/span&gt;
        &lt;/div&gt;
        &lt;div id=&#34;all-sales-plot&#34;&gt;&lt;/div&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;32-milestones&#34;&gt;3.2. Milestones&lt;/h2&gt;
&lt;p&gt;To provide more context about our development process, we have divided the timeline from February 2017 to August 2021 into three phases, which are described separately.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phase I&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;We entered the market by using competitive pricing and selling a similar product (printed fabric), and promoting it on social media. This was the strategy identified in our competitor analysis. Despite achieving significant sales improvements, we were still lagging behind our competitors on social media.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Result on Sales&lt;/u&gt;:&lt;br&gt;
&lt;span style=&#34;color:#FFAA39&#34;&gt;Sales growth of 289% for fabric and 73% in total (from 2017/3 to 2018/3)&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase II&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;We improved work efficiency by building an in-house library, automating workflows, and optimizing processes. This has had a positive impact on our social media presence, with the &lt;span style=&#34;color:#FFAA39&#34;&gt;number of posts increasing by 5.35 times&lt;/span&gt; compared to January 2018, and &lt;span style=&#34;color:#FFAA39&#34;&gt;post reactions increasing by 6.88 times&lt;/span&gt; compared to January 2018. Additionally, we have surpassed our competitor in terms of the number of posts.&lt;/li&gt;
&lt;li&gt;Cluster analysis was also performed to identify customers&amp;rsquo; preferences, which helps reduce purchase processing time and relocate budgets more effectively.&lt;/li&gt;
&lt;li&gt;The COVID-19 pandemic has impacted the logistics and import procedures of fabric, limiting the growth of fabric sales. However, due to our increasing popularity on social media, sales of other products have also increased.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Result on Sales&lt;/u&gt;:&lt;br&gt;
&lt;span style=&#34;color:#FFAA39&#34;&gt;Sales growth of 289% for fabric and 67% in total (from 2018/3 to 2019/3).&lt;br&gt;
Sales growth of -7% for fabric and 28% in total (from 2019/3 to 2020/3).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase III&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;As mentioned in the SWOT analysis, short-term opportunities on social media are decreasing, which is impacting sales. As a result, we have focused on increasing our market share through advertising and creating unique products.&lt;/li&gt;
&lt;li&gt;At the end of Phase II, we observed a diminishing marginal effect on Facebook posts. This means that the number of posts is no longer proportional to popularity. As a result, we decided to shift our focus from productivity to creativity. This change helped us surpass our competitors in popularity for the first time.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Result on Sales&lt;/u&gt;:&lt;br&gt;
&lt;span style=&#34;color:#FFAA39&#34;&gt;Sales growth of +13% for fabric and +3% in total (from 2020/3 to 2021/3).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To sum up, &lt;span style=&#34;color:#FFAA39&#34;&gt;this business transition has improved total sales by 378%&lt;/span&gt; compared to March 2017.&lt;/p&gt;



&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Table&amp;nbsp;&#34;
            data-post=&#34;:&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered-table&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The actions and results of each milestone are summarized in the following table
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  






  
  
  


  




&lt;div class=&#34;data-table&#34; role=&#34;region&#34; tabindex=&#34;0&#34; &gt;
  &lt;div id=&#34;milestones-summary&#34;&gt;&lt;/div&gt;
&lt;table class=&#34;table &#34; id=&#34;184567329&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Milestones&lt;/th&gt;
&lt;th&gt;Actions / Results&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;Break into Market&lt;/td&gt;
&lt;td&gt;Creating daily video tutorials is the most effective way to reach customers. We use competitive pricing and sell similar products as a means to enter the market.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/business-model-transitions-ii/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Transitions towards B2C E-commerce: Part II - Competitor Analysis and Strategy Formation&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;Tasks Automation&lt;/td&gt;
&lt;td&gt;We have implemented algorithms to automatically extract fabric features and find similar fabrics. This achieved processing speeds 12 to 63 times faster than human processing, with 98% accuracy.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/color-theme-extraction/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Color Theme Extraction Based on the Bucket Sort Algorithm&lt;/em&gt;&lt;/a&gt;&lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/repeated-pattern-detection/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Repeated Pattern Detection of Printed Fabric&lt;/em&gt;&lt;/a&gt;&lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/search-similar-fabric/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Investigation of Algorithms for Retrieving Similar Images&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;Data Analytic&lt;/td&gt;
&lt;td&gt;We performed cluster analysis on our fabric sales data, resulting in two improvements: First, we reduced processing time for each purchase by 50%. Second, we allocated our budget more effectively, resulting in up to a 4x improvement in sales.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/improve-fabric-sales/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Improving fabric sales through cluster analysis&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;In-house library&lt;/td&gt;
&lt;td&gt;The library is implemented using the Django framework and deployed on the Google Cloud Platform.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/fabric-library/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Design and Implementation of an in-House Fabric Library&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;Workflow Optimization&lt;/td&gt;
&lt;td&gt;The revised workflow led to a 4.4x increase in the number of posts and a 3.2x increase in the number of reactions per post, all while maintaining the same operational budget as the original workflow.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/social-media-promotion/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Workflow Optimization for Social Media Promotion&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;III&lt;/td&gt;
&lt;td&gt;Advertisement&lt;/td&gt;
&lt;td&gt;We use the RFM model and customers&amp;rsquo; reactions on messenger apps to create profiles. These profiles are then used as the target audience for advertising. However, this workflow is still under development.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;III&lt;/td&gt;
&lt;td&gt;Creative Work&lt;/td&gt;
&lt;td&gt;We reached 748k people with a single post and had a monthly reach of 1.2M on our Facebook page.&lt;br&gt;&lt;u&gt;More details&lt;/u&gt;: &lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/design-portfolio/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Design Portfolio&lt;/em&gt;&lt;/a&gt;&lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/photography/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Product Videography&lt;/em&gt;&lt;/a&gt;&lt;br&gt;＊&lt;a href=&#34;https://alanhung.dev/project/videography/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;Product Photography&lt;/em&gt;&lt;/a&gt;&lt;br&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;/div&gt;
Note: In addition to advertising workflow, a tool for inventory planning is also still under development.
   
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;4-conclusion&#34;&gt;4. Conclusion&lt;/h1&gt;
&lt;p&gt;We first point out the disadvantages in the original B2B business model, and propose a transition to a B2C e-commerce model. Next, we analyze the requirements of this transition in both system and business aspects. In terms of the system, we break down the problem by examining the functionalities of each department and their intersections. We point out that building an in-house library can not only improve efficiency but also retain our advantages in the original business model. As for the business aspect, we perform competitor and SWOT analysis to establish a strategy and milestones.&lt;/p&gt;
&lt;p&gt;To quantify the impact, we select the number of posts and reactions on each post as measures of productivity and popularity. Additionally, total sales and fabric sales are also selected.&lt;/p&gt;
&lt;p&gt;We present the achievements of each milestone and briefly describe the context in three different phases. Although we have observed that the short-term opportunity on social media is fading in 2021, this business transition has improved total sales in Taiwan by 278% compared to March 2017.&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [], tablesIndex:[], closeInner: true, closeOuter: true, allDevice: false})
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Workflow Optimization for Social Media Promotion</title>
      <link>https://alanhung.dev/project/social-media-promotion/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://alanhung.dev/project/social-media-promotion/</guid>
      <description>&lt;script&gt;removeCoverImage()&lt;/script&gt;
&lt;details class=&#34;toc-inpage d-print-none  &#34; open&gt;
  &lt;summary class=&#34;font-weight-bold&#34;&gt;Table of Contents&lt;/summary&gt;
  &lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#abstract&#34;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#1-introduction&#34;&gt;1. Introduction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#2-workflow&#34;&gt;2. Workflow&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#21-first-version&#34;&gt;2.1. First Version&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#22-revised-version&#34;&gt;2.2. Revised Version&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3-result&#34;&gt;3. Result&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#31-dataset&#34;&gt;3.1. Dataset&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#32-comparison&#34;&gt;3.2. Comparison&lt;/a&gt;
          &lt;ul&gt;
            &lt;li&gt;&lt;a href=&#34;#phase-i&#34;&gt;Phase I&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#phase-ii&#34;&gt;Phase II&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#phase-iii&#34;&gt;Phase III&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&#34;#phase-iv&#34;&gt;Phase IV&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#33-selected-posts&#34;&gt;3.3. Selected Posts&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#4-conclusion&#34;&gt;4. Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/details&gt;
&lt;p&gt;&lt;span id=&#34;milestones-of-business-model&#34;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;script&gt;notationMilestones()&lt;/script&gt;
&lt;h1 id=&#34;abstract&#34;&gt;Abstract&lt;/h1&gt;
&lt;p&gt;This document discusses a workflow for social media promotion, including issues with the original workflow and a revised version that integrates online collaboration, assessment and summary, fabric selection, and a library for similar products and fabric.&lt;/p&gt;
&lt;p&gt;The revised workflow led to a 4.4x increase in the number of posts and a 3.2x increase in the number of reactions per post, all while maintaining the same operational budget as the original workflow. The document also includes a comparison of post performance with that of a competitor, as well as a selection of top-performing posts.&lt;/p&gt;
&lt;h1 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;Social media has become an essential tool for business development due to its large number of active users and its ability to provide a direct way to interact with users. This can be leveraged for brand and product promotion. Among the many social media platforms, Facebook is often chosen because it is the largest, with &lt;a href=&#34;https://investor.fb.com/investor-news/press-release-details/2023/Meta-Reports-First-Quarter-2023-Results/default.aspx#:~:text=Revenue%20%e2%80%93%20Revenue%20was%20%2428.65%20billion,%25%20year%2Dover%2Dyear&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;2.99 billion monthly active users&lt;/a&gt; as of March 31, 2023.&lt;/p&gt;
&lt;p&gt;Social media platforms provide multiple formats, including text, images, and videos, for business owners to create posts. Video, which can &lt;a href=&#34;https://www.linkedin.com/pulse/social-video-generates-1200-more-shares-than-text-image-moroles/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;generate 1200% more shares&lt;/a&gt; than text and image content combined, is the most effective format.&lt;/p&gt;
&lt;p&gt;Even with knowledge of which platform to choose and what content format to use, creating posts and effectively engaging users is still difficult for businesses. There are two main challenges to consider when using social media for business purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The high number of active users means that there is a lot of competition, so businesses need to consistently create new and innovative posts to stand out.&lt;/li&gt;
&lt;li&gt;As social media becomes increasingly intertwined with product development and manufacturing, the workflow for managing it becomes more complex. However, there is no single standard workflow that fits all situations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore, designing a smooth workflow that can generate innovative posts is crucial to succeeding in business development on social media.&lt;/p&gt;
&lt;h1 id=&#34;2-workflow&#34;&gt;2. Workflow&lt;/h1&gt;
&lt;h2 id=&#34;21-first-version&#34;&gt;2.1. First Version&lt;/h2&gt;
&lt;img src=&#34;./figure/workflow/workflow_01_black.webp&#34; width=&#34;2219&#34; height=&#34;1375&#34; style=&#34;margin-top: 0;&#34;&gt;
&lt;p&gt;Fig. 1 provides an example of our original workflow, which includes the following steps:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ideation, Summary and Review&lt;/strong&gt;: Every week, all staff members meet to propose and discuss ideas. The ideas are then summarized and reviewed by stakeholders, as shown in Fig. 1(a). Ideas that pass the review process proceed to the next step.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preprocess&lt;/strong&gt;: In this step, the tailor creates a prototype based on the proposal, assesses manufacturing difficulties and functionality, and decides on the fabric to be used.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Production&lt;/strong&gt;: The product is customized based on feedback and assessment of the prototype. In addition, a videographer and photographer are required to record videos and take photos, respectively.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release and Review&lt;/strong&gt;: After publishing the post, all team members held a meeting to discuss its metrics and determine what needs to be improved next time.&lt;/p&gt;
&lt;p&gt;While this chronological workflow may seem effective, there are several issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Waste in Resources:&lt;/strong&gt; Ideas proposed by designers may be difficult to manufacture or may require too many resources in film and photo shooting. This can lead to termination of the proposal in the later phases of the workflow, resulting in wasted resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Waste of Time:&lt;/strong&gt; To solve the aforementioned problem, one might try to gather all relevant personnel during ideation, including tailors and photographers. However, this process can be time-consuming. For instance, there is no need for a photographer to join discussions on product features during brainstorming among designers. In addition, members may have different work sites, which means they need to spend extra time commuting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bottleneck&lt;/strong&gt;: Since stakeholders need to manually review all proposals before moving to the next phase of the workflow, this becomes a bottleneck for the entire workflow and is prone to human error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inefficiency and Unreliability&lt;/strong&gt;: As the number of products increase, it becomes difficult to identify all products that are similar to the proposed idea during the review phase. This can lead to the unintentional manufacturing of similar products without awareness.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            An example of each step in our original workflow.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a) Ideation&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/workflow/proposal_origin.webp&#34; width=&#34;1080&#34; height=&#34;492&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b) Preprocess&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/workflow/preprocess.webp&#34; width=&#34;1080&#34; height=&#34;538&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c) Production&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/workflow/production_01.webp&#34; width=&#34;1080&#34; height=&#34;538&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(d) Release &amp;amp; Review&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
            &lt;img src=&#34;./figure/workflow/publish_review.webp&#34; width=&#34;1080&#34; height=&#34;538&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h2 id=&#34;22-revised-version&#34;&gt;2.2. Revised Version&lt;/h2&gt;
&lt;img src=&#34;./figure/workflow/workflow_02_black.webp&#34; width=&#34;2449&#34; height=&#34;2101&#34; style=&#34;margin-top: 0;&#34;&gt;
&lt;p&gt;The workflow has been revised to address the issues mentioned above. Three additional steps have been integrated into the workflow, as shown in Fig. 2:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Online Collaboration&lt;/strong&gt;: We integrate our workflow with &lt;a href=&#34;http://monday.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;monday.com&lt;/a&gt;, as shown in Fig. 2(a). This platform allows all members, including tailors and photographers who are in the later phase of the process, to discuss ideas more efficiently. In this way, all members can discuss each idea in a more organized way and save time on commuting and holding meetings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assessment &amp;amp; Summary&lt;/strong&gt;: In addition to outlining the content and purpose of the proposal, members must identify its features❶ and assess the necessary resources❷. The KNN (K-Nearest-Neighbor) algorithm is then applied to retrieve similar products from the library based on their features❸. K-means is used to prioritize each proposal based on the required resources.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fabric Selection&lt;/strong&gt;: Thanks to our &lt;a href=&#34;https://demo.alanhung.dev&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;in-house fabric library&lt;/a&gt;, the time required for fabric selection has been significantly reduced.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Library&lt;/strong&gt;: We have set up a library for products similar to the fabric library. After each product release and review, members update the actual metrics and resources needed in the library. This information is then used in the Summary step.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Budget&lt;/strong&gt;: Apart from the time spent on in-house library development and the monthly subscription fee of the online collaboration application, there are no other expenses. This means that the revised workflow can be implemented within the original operational budget.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            Three major steps of revised workflow.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(a) Online Collaboration&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;img src=&#34;./figure/workflow/monday.webp&#34; width=&#34;1080&#34; height=&#34;607&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(b) Assessment &amp;amp; Summary&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;img src=&#34;./figure/workflow/proposal_ML.webp&#34; width=&#34;1080&#34; height=&#34;607&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;


    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        

&lt;div class=&#34;wrap-dropdown-content p-b-10 mdc-elevation--z24&#34;&gt;
    &lt;h6 class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 m-b-1 p-l-5 p-r-5&#34; style=&#34;font-size:18px;&#34;&gt;(c) Fabric Library&lt;i class=&#34;down-mark fs-12 color1 fa dis-none float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;show&lt;/i&gt;
        &lt;i class=&#34;up-mark fs-12 color1 fa float-r m-text29&#34; aria-hidden=&#34;true&#34;&gt;hide&lt;/i&gt;
    &lt;/h6&gt;
    &lt;figure class=&#34;dropdown-content dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
        
        &lt;img src=&#34;./figure/workflow/fabric_library.webp&#34; width=&#34;1080&#34; height=&#34;607&#34;&gt;
        &lt;/figure&gt;
&lt;/div&gt;

    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;h1 id=&#34;3-result&#34;&gt;3. Result&lt;/h1&gt;
&lt;h2 id=&#34;31-dataset&#34;&gt;3.1. Dataset&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Data Source&lt;/strong&gt;: Due to confidentiality, I cannot disclose information regarding sales, customer retention, and people reached. However, I can provide a comparison of post performance based on publicly available data from Facebook. We extracted this data using a web crawler implemented with Selenium in Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Competitor&lt;/strong&gt;: We have included data from our competitor, labeled &amp;ldquo;Benchmark&amp;rdquo; in the following analysis, for comparison purposes. We selected this competitor since it is &lt;a href=&#34;https://www.facebook.com/22pb22&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;the most active account on social media&lt;/a&gt; among all fabric retailers in Taiwan.&lt;/p&gt;
&lt;h2 id=&#34;32-comparison&#34;&gt;3.2. Comparison&lt;/h2&gt;
&lt;p&gt;As shown in Fig. 3, we have selected two metrics for comparison:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Number of Posts&lt;/strong&gt;: This can be considered a measure of productivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Average Number of Reactions per Post&lt;/strong&gt;: This metric is calculated by dividing the total number of reactions, such as &amp;ldquo;Like&amp;rdquo;, &amp;ldquo;Love&amp;rdquo;, &amp;ldquo;Haha&amp;rdquo;, &amp;ldquo;Wow&amp;rdquo;, &amp;ldquo;Sad&amp;rdquo;, and &amp;ldquo;Angry&amp;rdquo;, that users click on by the total number of posts per month. This measure can be used to gauge popularity.&lt;/p&gt;
&lt;div class=&#34;respon5 bo11 mdc-elevation--z24&#34;&gt;
    
    &lt;div class=&#34;wrap-dropdown-content p-b-10&#34;&gt;
        &lt;h5 data-pre=&#34;Figure&amp;nbsp;&#34;
            data-post=&#34;:&amp;nbsp;&#34;
            class=&#34;js-toggle-dropdown-content cs-pointer m-text29 color0-hov trans-0-4 p-l-15 p-r-15 numbered&#34;
            style=&#34;font-weight: normal;&#34;
        &gt;
            &lt;i class=&#34;down-mark fs-16 color1 fa fa-plus float-r dis-none&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            &lt;i class=&#34;up-mark fs-16 color1 fa fa-minus float-r&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
            The figure compares our performance with that of our competitor in two metrics: the number of posts and the average number of reactions per post.
        &lt;/h5&gt;
        &lt;figure class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;

            
            &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
                
    &lt;div class=&#34;w-size29 respon5&#34;&gt;
  
        &lt;div class=&#34;t-center&#34;&gt;
        &lt;span style=&#34;color:#03DAC6&#34;&gt;━━ This Work &lt;/span&gt;&amp;nbsp&amp;nbsp&amp;nbsp&lt;span style=&#34;color:#BB86FC&#34;&gt;━━ Benchmark&lt;/span&gt;
        &lt;/div&gt;
        &lt;div id=&#34;post-comparison-plot&#34;&gt;&lt;/div&gt;
    
&lt;/div&gt;



            &lt;/div&gt;
            

        &lt;/figure&gt;
    &lt;/div&gt;
    
&lt;/div&gt;

&lt;p&gt;To better understand the context of our development process, we divide the timeline into four phases and discuss each phase separately.&lt;/p&gt;
&lt;h3 id=&#34;phase-i&#34;&gt;Phase I&lt;/h3&gt;
&lt;p&gt;The competitor began promoting on social media as early as 2014, three years before we did. Since then, they have consistently published posts and steadily gained popularity.&lt;/p&gt;
&lt;h3 id=&#34;phase-ii&#34;&gt;Phase II&lt;/h3&gt;
&lt;p&gt;We adopted the first version of the workflow and started promoting our product on social media. However, we encountered the issues mentioned previously, which resulted in low productivity in terms of the number of posts, and our popularity was only one-third that of our competitor.&lt;/p&gt;
&lt;h3 id=&#34;phase-iii&#34;&gt;Phase III&lt;/h3&gt;
&lt;p&gt;The revised workflow has resulted in a 4.4x increase in the number of posts compared to Phase II. This is also the first time we have surpassed our competitor. Additionally, due to the consistency in post publication and the improved quality of each post, there has been a 3.2x increase in the number of reactions per post compared to Phase II.&lt;/p&gt;
&lt;h3 id=&#34;phase-iv&#34;&gt;Phase IV&lt;/h3&gt;
&lt;p&gt;Although the revised workflow can be implemented within the original operational budget, the cost of materials will inevitably increase as more content is created and popularity becomes saturated. In other words, we are facing the problem of diminishing marginal effect.&lt;/p&gt;
&lt;p&gt;To tackle this issue, we implemented workflow modifications (details omitted). As a result, we maintained the same level of popularity with fewer posts. Moreover, we surpassed our competitors in popularity for the first time.&lt;/p&gt;
&lt;h2 id=&#34;33-selected-posts&#34;&gt;3.3. Selected Posts&lt;/h2&gt;
&lt;p&gt;The following are the top three posts from our Facebook page. These posts reached 748k people with a single post, without any advertisements, and resulted in a monthly reach of 1.2M on our Facebook page.&lt;/p&gt;
&lt;div class=&#34;dropdown-content p-l-15 p-r-15 dis-block&#34; style=&#34;margin-top:0; margin-bottom:0&#34;&gt;
    &lt;div class=&#34;flex-w flex-sb p-l-2 p-r-2&#34;&gt;
        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;a href=&#34;https://facebook.com/4214480068609657&#34; target=&#34;_blank&#34;&gt;
                &lt;img src=&#34;./figure/figure_01.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_01&#34; style=&#34;margin-top:0.5rem; margin-bottom: 0rem;&#34;&gt;
            &lt;/a&gt;
            &lt;img src=&#34;./figure/figure_01_insight.webp&#34; width=&#34;1080&#34; height=&#34;490&#34; alt=&#34;figure_01_insight&#34; style=&#34;margin-top:0rem; margin-bottom: 0.5rem;&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;a href=&#34;https://facebook.com/4217675061623491&#34; target=&#34;_blank&#34;&gt;
                &lt;img src=&#34;./figure/figure_02.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_02&#34; style=&#34;margin-top:0.5rem; margin-bottom: 0rem;&#34;&gt;
            &lt;/a&gt;
            &lt;img src=&#34;./figure/figure_02_insight.webp&#34; width=&#34;1080&#34; height=&#34;490&#34; alt=&#34;figure_02_insight&#34; style=&#34;margin-top:0rem; margin-bottom: 0.5rem;&#34;&gt;
        
&lt;/div&gt;

        &lt;div class=&#34;w-size6 respon5 p-l-2 p-r-2&#34;&gt;
  
            &lt;a href=&#34;https://facebook.com/4206103716113959&#34; target=&#34;_blank&#34;&gt;
                &lt;img src=&#34;./figure/figure_03.webp&#34; width=&#34;1080&#34; height=&#34;1080&#34; alt=&#34;figure_03&#34; style=&#34;margin-top:0.5rem; margin-bottom: 0rem;&#34;&gt;
            &lt;/a&gt;
            &lt;img src=&#34;./figure/figure_03_insight.webp&#34; width=&#34;1080&#34; height=&#34;490&#34; alt=&#34;figure_03_insight&#34; style=&#34;margin-top:0rem; margin-bottom: 0.5rem;&#34;&gt;
        
&lt;/div&gt;

    &lt;/div&gt;
    &lt;div class=&#34;t-right&#34;&gt;
        &lt;a href=&#34;https://alanhung.dev/project/videography/&#34; target=&#34;_blank&#34;&gt;
        &lt;span id=&#34;search-pattern-brute-force-run&#34; style=&#34;color: #BB86FC;&#34;&gt;See more&lt;/span&gt;
        &lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;h1 id=&#34;4-conclusion&#34;&gt;4. Conclusion&lt;/h1&gt;
&lt;p&gt;In this document, we outline the issues with the original workflow, which include waste in resources and time, bottleneck, inefficiency, and unreliability. We present a revised workflow that integrates an online collaboration platform, an in-house library, and a machine learning algorithm to solve these issues. This workflow can be operated under the same operational budget as the previous one, while also outperforming it in productivity and post popularity, which are measured in the number of posts and average number of reactions per post.&lt;/p&gt;
&lt;p&gt;We also discuss a comparison with our competitor. Despite the competitor starting on social media three years earlier than us, we managed to surpass them with our revised workflow in 2021.&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34; src=&#34;./js/plot.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
    figClosed({figuresIndex: [1], closeInner: true, closeOuter: true, allDevice: true})
&lt;/script&gt;
</description>
    </item>
    
  </channel>
</rss>
