<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Zeyuan Shang</title>
    <description></description>
    <link>www.shangzeyuan.com</link>
    <atom:link href="www.shangzeyuan.com/feed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>2021 Weekly Summary Report</title>
        <description>&lt;h3 id=&quot;202213---202219&quot;&gt;2022/1/3 - 2022/1/9&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Python event optimization&lt;/li&gt;
      &lt;li&gt;Check data size while caching&lt;/li&gt;
      &lt;li&gt;WhatIf optimization to avoid an idle thread&lt;/li&gt;
      &lt;li&gt;Memory issue investigation&lt;/li&gt;
      &lt;li&gt;Nginx configuration for embedded views&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;LeetCode 101 Chap 11&lt;/li&gt;
      &lt;li&gt;Japanese&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;STEM OPT evaluation&lt;/li&gt;
      &lt;li&gt;ICDE reviews&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211227---202212&quot;&gt;2021/12/27 - 2022/1/2&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor cache hints&lt;/li&gt;
      &lt;li&gt;Investigate EMR Kerberos&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;LeetCode 101 Chap 8-10&lt;/li&gt;
      &lt;li&gt;Japanese&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211220---20211226&quot;&gt;2021/12/20 - 2021/12/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Davos slides&lt;/li&gt;
      &lt;li&gt;Backend job descriptions&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;LeetCode 101 Chap 7&lt;/li&gt;
      &lt;li&gt;Japanese&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211213---20211219&quot;&gt;2021/12/13 - 2021/12/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Multi-job benchmark&lt;/li&gt;
      &lt;li&gt;Shared sample store &amp;amp; cacha manager&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;LeetCode 101 Chap 6&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021126---20211212&quot;&gt;2021/12/6 - 2021/12/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Expose UDO on ECS&lt;/li&gt;
      &lt;li&gt;Enable auto scaling&lt;/li&gt;
      &lt;li&gt;Prometheus integration&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;LeetCode 101 Chap 1-5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211129---2021125&quot;&gt;2021/11/29 - 2021/12/5&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
      &lt;li&gt;I-485 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211122---20211128&quot;&gt;2021/11/22 - 2021/11/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;UDO on AWS ECS&lt;/li&gt;
      &lt;li&gt;Multi-job benchmark&lt;/li&gt;
      &lt;li&gt;Verbier as a job&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;百面深度学习 Chap 5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
      &lt;li&gt;I-485 preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211115---20211121&quot;&gt;2021/11/15 - 2021/11/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;More logging in control plane&lt;/li&gt;
      &lt;li&gt;Rename workspace id&lt;/li&gt;
      &lt;li&gt;Python runtime fix&lt;/li&gt;
      &lt;li&gt;Support mean for timestamp&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021118---20211114&quot;&gt;2021/11/8 - 2021/11/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Enable expose in UDO&lt;/li&gt;
      &lt;li&gt;Investigate AWS Lambda&lt;/li&gt;
      &lt;li&gt;Data source load refactor&lt;/li&gt;
      &lt;li&gt;Reorganize K8s files (decoupling)&lt;/li&gt;
      &lt;li&gt;Deploy istio on staging&lt;/li&gt;
      &lt;li&gt;Deprecate load data source&lt;/li&gt;
      &lt;li&gt;UDO use cases&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021111---2021117&quot;&gt;2021/11/1 - 2021/11/7&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Setup conbench&lt;/li&gt;
      &lt;li&gt;Datadog integrations (Redis, Mongo)&lt;/li&gt;
      &lt;li&gt;Cache manager refactor&lt;/li&gt;
      &lt;li&gt;Investigate &amp;amp; install istio&lt;/li&gt;
      &lt;li&gt;Final version optimization&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;百面深度学习 Chap 3-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
      &lt;li&gt;EB1 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211025---20211031&quot;&gt;2021/10/25 - 2021/10/31&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;OpenShift deployment&lt;/li&gt;
      &lt;li&gt;Refactor K8s files&lt;/li&gt;
      &lt;li&gt;Rewrite process mining&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;百面深度学习 Chap 2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211018---20211024&quot;&gt;2021/10/18 - 2021/10/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Local sample store&lt;/li&gt;
      &lt;li&gt;Shared sample store&lt;/li&gt;
      &lt;li&gt;Skip intermediate versions for operators&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;百面深度学习 Chap 1&lt;/li&gt;
      &lt;li&gt;C++ tips 175-187 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20211011---20211017&quot;&gt;2021/10/11 - 2021/10/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Pipeline validator&lt;/li&gt;
      &lt;li&gt;Pipeline scorer&lt;/li&gt;
      &lt;li&gt;Remove log to file&lt;/li&gt;
      &lt;li&gt;Better stack trace&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;容器实战高手课 15-24 (finished)&lt;/li&gt;
      &lt;li&gt;C++ tips 152-173&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021104---20211010&quot;&gt;2021/10/4 - 2021/10/10&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Containerize KDA&lt;/li&gt;
      &lt;li&gt;Containerize text feature&lt;/li&gt;
      &lt;li&gt;Silence pystan&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;容器实战高手课 8-14&lt;/li&gt;
      &lt;li&gt;C++ tips 131-136&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021927---2021103&quot;&gt;2021/9/27 - 2021/10/3&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;K8s deployment documentation&lt;/li&gt;
      &lt;li&gt;Optimize K8s QoS class&lt;/li&gt;
      &lt;li&gt;Deploy &amp;amp; test control plane&lt;/li&gt;
      &lt;li&gt;Job resource accounting&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;容器实战高手课 0-7&lt;/li&gt;
      &lt;li&gt;C++ tips 122-130&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021920---2021926&quot;&gt;2021/9/20 - 2021/9/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Release script for AWS&lt;/li&gt;
      &lt;li&gt;Deploy UDO disk limit on AWS&lt;/li&gt;
      &lt;li&gt;Migrate staging, demo and saas&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;深入剖析Kubernetes 32-47 (finished)&lt;/li&gt;
      &lt;li&gt;C++ tips 88-120&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021913---2021919&quot;&gt;2021/9/13 - 2021/9/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix UDO network limit&lt;/li&gt;
      &lt;li&gt;Deploy UDO disk limit on GCP&lt;/li&gt;
      &lt;li&gt;Shared cache&lt;/li&gt;
      &lt;li&gt;Migrate CI to K8s&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;深入剖析Kubernetes 5-31&lt;/li&gt;
      &lt;li&gt;C++ tips 55-77&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Preparation for N2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202196---2021912&quot;&gt;2021/9/6 - 2021/9/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Einblick deployment on AWS&lt;/li&gt;
      &lt;li&gt;Python package limit for UDO&lt;/li&gt;
      &lt;li&gt;Better shared cache&lt;/li&gt;
      &lt;li&gt;Investigate AWS DataSync&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;C++ tips 1-49&lt;/li&gt;
      &lt;li&gt;深入剖析Kubernetes 0-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;N2 reservation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021830---202195&quot;&gt;2021/8/30 - 2021/9/5&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Network limit for UDO&lt;/li&gt;
      &lt;li&gt;Disk limit for UDO&lt;/li&gt;
      &lt;li&gt;Data adapter fix&lt;/li&gt;
      &lt;li&gt;Introduce kustomize&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;现代C++实战14-30 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021823---2021829&quot;&gt;2021/8/23 - 2021/8/29&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Better header files with forward declarations&lt;/li&gt;
      &lt;li&gt;Join optimization&lt;/li&gt;
      &lt;li&gt;Add planner convert options&lt;/li&gt;
      &lt;li&gt;Ccache with CLion&lt;/li&gt;
      &lt;li&gt;DataDog K8s integration&lt;/li&gt;
      &lt;li&gt;DataDog monitors&lt;/li&gt;
      &lt;li&gt;Refactor UDO client&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;现代C++实战0-13&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021816---2021822&quot;&gt;2021/8/16 - 2021/8/22&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Time limit for UDO&lt;/li&gt;
      &lt;li&gt;Finalize Python operators&lt;/li&gt;
      &lt;li&gt;Refactor UDO server&lt;/li&gt;
      &lt;li&gt;Containerize profiler&lt;/li&gt;
      &lt;li&gt;Reorganize header files&lt;/li&gt;
      &lt;li&gt;Switch to Arrow’s thread pool&lt;/li&gt;
      &lt;li&gt;Switch to Ninja&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 30-35 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202189---2021815&quot;&gt;2021/8/9 - 2021/8/15&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor operator&lt;/li&gt;
      &lt;li&gt;Switch to Arrow 5.0&lt;/li&gt;
      &lt;li&gt;Set up cache on GitLab&lt;/li&gt;
      &lt;li&gt;Clean up streams in operators&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Mail EB1B evidence&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202182---202188&quot;&gt;2021/8/2 - 2021/8/8&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor Python data sources to readers&lt;/li&gt;
      &lt;li&gt;Refactor CI scripts&lt;/li&gt;
      &lt;li&gt;Log redaction through Replicated&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;VLDB camera ready &amp;amp; talk&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 29&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021726---202181&quot;&gt;2021/7/26 - 2021/8/1&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Shared cache v1.0&lt;/li&gt;
      &lt;li&gt;Fixed batch size for all connectors&lt;/li&gt;
      &lt;li&gt;Job refactor&lt;/li&gt;
      &lt;li&gt;Update SaaS configs&lt;/li&gt;
      &lt;li&gt;Containerize pipeline trainer&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 27-28&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021719---2021725&quot;&gt;2021/7/19 - 2021/7/25&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Shared cache v1.0&lt;/li&gt;
      &lt;li&gt;Refactor sample&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 25-26&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021712---2021718&quot;&gt;2021/7/12 - 2021/7/18&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support week in binning&lt;/li&gt;
      &lt;li&gt;Count not null in aggregation&lt;/li&gt;
      &lt;li&gt;Turn on containerized AutoML by default&lt;/li&gt;
      &lt;li&gt;Add validation info to AutoML&lt;/li&gt;
      &lt;li&gt;Shared cache: control plane&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 9-24&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202175---2021711&quot;&gt;2021/7/5 - 2021/7/11&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support overall progress in Python operators&lt;/li&gt;
      &lt;li&gt;Parquet timestamp conversion&lt;/li&gt;
      &lt;li&gt;Refactor Python operator &amp;amp; job&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 1-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021628---202174&quot;&gt;2021/6/28 - 2021/7/4&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Deprecate old data sources (e.g., CSV)&lt;/li&gt;
      &lt;li&gt;AutoML containerization deployment &amp;amp; optimization&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 18 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021621---2021627&quot;&gt;2021/6/21 - 2021/6/27&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Projection column limit&lt;/li&gt;
      &lt;li&gt;File based data source for S3&lt;/li&gt;
      &lt;li&gt;Better scaling for aggregation&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 17&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021614---2021620&quot;&gt;2021/6/14 - 2021/6/20&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;AutoML containerization&lt;/li&gt;
      &lt;li&gt;Improve big query connector for large datasets&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202167---2021613&quot;&gt;2021/6/7 - 2021/6/13&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Scaling factor framework&lt;/li&gt;
      &lt;li&gt;AutoML containerization&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;N2 Preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021531---202166&quot;&gt;2021/5/31 - 2021/6/6&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Add stream progress in logging&lt;/li&gt;
      &lt;li&gt;Support null type in tensor&lt;/li&gt;
      &lt;li&gt;Script for automatic update&lt;/li&gt;
      &lt;li&gt;Containerization framework&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;新完全掌握语法9-12&lt;/li&gt;
      &lt;li&gt;练习&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 16&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Recommendation letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021524---2021530&quot;&gt;2021/5/24 - 2021/5/30&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Snowflake experimental reader&lt;/li&gt;
      &lt;li&gt;Containerization framework&lt;/li&gt;
      &lt;li&gt;Expose more AutoML info&lt;/li&gt;
      &lt;li&gt;Vertica pushdown for predicate and sampling&lt;/li&gt;
      &lt;li&gt;Davos CPU and memory limits&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;新完全掌握语法5-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 13-15&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021517---2021523&quot;&gt;2021/5/17 - 2021/5/23&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Switch to Nginx ingress&lt;/li&gt;
      &lt;li&gt;Limit UDO jobs&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 12&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021510---2021516&quot;&gt;2021/5/10 - 2021/5/16&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;UDO finish&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 329-331&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B recommenders&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202153---202159&quot;&gt;2021/5/3 - 2021/5/9&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;UDO profiling&lt;/li&gt;
      &lt;li&gt;UDO container logs&lt;/li&gt;
      &lt;li&gt;UDO network optimization&lt;/li&gt;
      &lt;li&gt;Limit AutoML jobs&lt;/li&gt;
      &lt;li&gt;Force HTTPS&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 319-328&lt;/li&gt;
      &lt;li&gt;新完全掌握语法4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 11&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;EB1B preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021426---202152&quot;&gt;2021/4/26 - 2021/5/2&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Dynamic batching for UDO&lt;/li&gt;
      &lt;li&gt;Referenced memory usage for batch&lt;/li&gt;
      &lt;li&gt;Vertica ODBC&lt;/li&gt;
      &lt;li&gt;Investigate Python GIL impact&lt;/li&gt;
      &lt;li&gt;Better error message for failed UDO docker container&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 318&lt;/li&gt;
      &lt;li&gt;新完全掌握语法1-3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Gym 3&lt;/li&gt;
      &lt;li&gt;EB1B preparation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021419---2021425&quot;&gt;2021/4/19 - 2021/4/25&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor sample store&lt;/li&gt;
      &lt;li&gt;Multi-node migration&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 9&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Gym 3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021412---2021418&quot;&gt;2021/4/12 - 2021/4/18&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Better profiling in AutoML&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 314-316&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 61-80&lt;/li&gt;
      &lt;li&gt;新完全掌握语法A-D&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202145---2021411&quot;&gt;2021/4/5 - 2021/4/11&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Specify labels for f1/precision/recall&lt;/li&gt;
      &lt;li&gt;Improve UDOs&lt;/li&gt;
      &lt;li&gt;Join result size control&lt;/li&gt;
      &lt;li&gt;Vertica connector&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 305-313&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 56-60&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021329---202144&quot;&gt;2021/3/29 - 2021/4/4&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Consider expose keys in caching&lt;/li&gt;
      &lt;li&gt;Airbyte for K8s&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 298-302&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 46-55&lt;/li&gt;
      &lt;li&gt;新完全掌握语法25-26&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021322---2021328&quot;&gt;2021/3/22 - 2021/3/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Integrate Valgrind&lt;/li&gt;
      &lt;li&gt;Refactor unit tests&lt;/li&gt;
      &lt;li&gt;Throw an error if AutoML times out&lt;/li&gt;
      &lt;li&gt;Rename UDFEquation to Transformation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese vocabulary 31-45&lt;/li&gt;
      &lt;li&gt;新完全掌握语法19-24&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 6-7&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021315---2021321&quot;&gt;2021/3/15 - 2021/3/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Binning in KDA&lt;/li&gt;
      &lt;li&gt;Remove ; in macros&lt;/li&gt;
      &lt;li&gt;Expose metrics in C++ server&lt;/li&gt;
      &lt;li&gt;Grafana dashboards&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 297&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 16-30&lt;/li&gt;
      &lt;li&gt;新完全掌握语法18&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202138---2021314&quot;&gt;2021/3/8 - 2021/3/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Make Binning callable&lt;/li&gt;
      &lt;li&gt;Nginx for Einblick&lt;/li&gt;
      &lt;li&gt;Dynamic sampling pushdown&lt;/li&gt;
      &lt;li&gt;Decouple UDO and UDOOperator&lt;/li&gt;
      &lt;li&gt;Cluster-wide monitoring&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 295-296&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 6-15&lt;/li&gt;
      &lt;li&gt;新完全掌握语法15-17&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202131---202137&quot;&gt;2021/3/1 - 2021/3/7&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Handle date types in Python for Arrow&lt;/li&gt;
      &lt;li&gt;Cache hint request&lt;/li&gt;
      &lt;li&gt;SQL prediacte pushdown translation&lt;/li&gt;
      &lt;li&gt;Sampling pushdown&lt;/li&gt;
      &lt;li&gt;Refactor Python data source&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 283-294&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 1-5&lt;/li&gt;
      &lt;li&gt;新完全掌握语法12-14&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Gym 5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20221222---2021228&quot;&gt;20221/2/22 - 2021/2/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Improve Snowflake&lt;/li&gt;
      &lt;li&gt;Integrate horloge&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Paper
    &lt;ul&gt;
      &lt;li&gt;Writing&lt;/li&gt;
      &lt;li&gt;Experiments&lt;/li&gt;
      &lt;li&gt;Submit&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 277-282&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 168-177&lt;/li&gt;
      &lt;li&gt;新完全掌握语法1-11&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021215---2021221&quot;&gt;2021/2/15 - 2021/2/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Expose external UDO’s outputs&lt;/li&gt;
      &lt;li&gt;Verify gottardo for embedded&lt;/li&gt;
      &lt;li&gt;Refactor what if&lt;/li&gt;
      &lt;li&gt;Better error message&lt;/li&gt;
      &lt;li&gt;Investigate cloud databases&lt;/li&gt;
      &lt;li&gt;Set up Snowflake&lt;/li&gt;
      &lt;li&gt;Upgrade to Arrow 3.0&lt;/li&gt;
      &lt;li&gt;Support datetime&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 271-276&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 148-167&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;股票大作手回忆录 Chap 20-24&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202128---2021214&quot;&gt;2021/2/8 - 2021/2/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Integrate gottardo&lt;/li&gt;
      &lt;li&gt;Integrate Keycloak&lt;/li&gt;
      &lt;li&gt;What if optimization&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 268-270&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 138-147&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;股票大作手回忆录 Chap 19&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202121---202127&quot;&gt;2021/2/1 - 2021/2/7&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Paper&lt;/li&gt;
      &lt;li&gt;Refactor AutoML pipelines&lt;/li&gt;
      &lt;li&gt;Cache long-chain job&lt;/li&gt;
      &lt;li&gt;Support join prefix option&lt;/li&gt;
      &lt;li&gt;Reduce AutoML latency&lt;/li&gt;
      &lt;li&gt;Support Google Big Query&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 260-267&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 131-137&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;股票大作手回忆录 Chap 11-15&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;ICDE reviews&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021125---2021131&quot;&gt;2021/1/25 - 2021/1/31&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Paper&lt;/li&gt;
      &lt;li&gt;Collect feedbacks&lt;/li&gt;
      &lt;li&gt;Refine coding tasks&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 258-259&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021118---2021124&quot;&gt;2021/1/18 - 2021/1/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Load balancing&lt;/li&gt;
      &lt;li&gt;Support single pass mode&lt;/li&gt;
      &lt;li&gt;Paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 251-257&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 116-130&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 3&lt;/li&gt;
      &lt;li&gt;股票大作手回忆录 Chap 9-10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2021111---2020117&quot;&gt;2021/1/11 - 2020/1/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Paper full pass&lt;/li&gt;
      &lt;li&gt;Set up a server for NLP&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 247-250&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 106-115&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 2&lt;/li&gt;
      &lt;li&gt;股票大作手回忆录 Chap 7-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;202114---2021110&quot;&gt;2021/1/4 - 2021/1/10&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Progressiveness benchmark&lt;/li&gt;
      &lt;li&gt;Investigate Prometheus operator in Kubernetes&lt;/li&gt;
      &lt;li&gt;WhatIf optimization&lt;/li&gt;
      &lt;li&gt;Update paper&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 245-246&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 96-105&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;股票大作手回忆录 Chap 3-6&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/2021_weekly_summary_report/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/2021_weekly_summary_report/</guid>
      </item>
    
      <item>
        <title>Alpine Meadow 2.0: New Horizons in AutoML</title>
        <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: This bost is about something I really would like to do but unfortunately haven’t got time yet :).&lt;/p&gt;

&lt;p&gt;Following up my &lt;a href=&quot;/blog/automl_methods_challenges_and_opportunities&quot;&gt;last post&lt;/a&gt;, I would like to talk about my ideas about the future directions in AutoML research, which are mostly based on my personal interests and some “pain points” I encountered with while working on AutoML-related things.&lt;/p&gt;

&lt;h2 id=&quot;online-automl&quot;&gt;Online AutoML&lt;/h2&gt;

&lt;p&gt;As far as I know, most of the AutoML studies focus on a relative “closed” problem setting, i.e., given the dataset (w/ or w/o train/validation splits), the target column and selection metric (e.g., accuracy), finding a pipeline that is as good as possible (in terms of the given metric).&lt;/p&gt;

&lt;p&gt;However, in the real world, the data keeps changing over time, either the volume increases as more and more data comes or the distribution shifts.
To this end, an “online” AutoML system should be able to take advantage of this and adapt its decision making over time.
No matter the decision making process is a model or some heuristics, they shall learn the trends of incoming data while not forgetting the knowledge learned from previous inputs.&lt;/p&gt;

&lt;h2 id=&quot;interpretable-and-interactive-automl&quot;&gt;Interpretable and Interactive AutoML&lt;/h2&gt;

&lt;p&gt;AutoML has always been a black box, especially the decision making process.
It usually involves meta-learning, Bayesian Optimization, multi-armed bandit and even deep reinforcement learning.
All these techniques are mostly hard to interpret, which poses an huge challenge for understanding the behaviors of the AutoML system.&lt;/p&gt;

&lt;p&gt;However, besides the predictive performance of pipeline, the real world users tend to understand how the pipelines have been selected.
What kind of primitives or pipelines has the system tried?
Based on what observations the system decided to switch to another primitive/pipeline or put into more resources for this primitive/pipeline?&lt;/p&gt;

&lt;p&gt;We are currently using a cost model (with a set of heuristics) and it provides good explainability.
You can easily know a pipeline is selected because of its relative advantages in performance and speed.
We are working on this to make this process more visually interpretable.&lt;/p&gt;

&lt;h2 id=&quot;ensemble&quot;&gt;Ensemble&lt;/h2&gt;

&lt;p&gt;AutoML is a process of trials and errors, which usually involves training and evaluating many pipelines.
Therefore ensemble learning works seamlessly with AutoML, since these pipelines can be ensembled to make a more powerful pipeline.
Previous works like Auto-Sklearn employ ensembling at the end of the search and build a ensemble of pipelines using some greedy methods.&lt;/p&gt;

&lt;p&gt;However, simply ensembling all the evaluated pipelines is not efficient since ensembling itself has overheads.
Further, ensemble exploits the diversity of models while during the AutoML search we only favor pipelines with better performance.
It could be the case that at the end of the search there are lots of good pipelines similar with each other, and then ensemble would not help much.
In this sense, to better promote ensembling, we want to consider the possible benefit to ensembling when we select pipelines, that is, if a pipeline might greatly improve the diversity, we should simply try it, even though the pipeline may not have the optimal performance.&lt;/p&gt;

&lt;p&gt;In other words, ensembling changes the goal of AutoML from finding the best pipeline to finding the best group of pipelines (to form the best ensemble).
We are going to update the cost model in our system to favor the exploration, thus encouraging more diversity in the pipeline traces.&lt;/p&gt;

&lt;h2 id=&quot;pruning&quot;&gt;Pruning&lt;/h2&gt;

&lt;p&gt;Efficient evaluation of pipelines have been neglected by many previous works.
Most systems simply do cross-validation at this step, and this could be impractical or sub-optimal for big datasets.
At the same time, for classical learning methods (e.g., SVM), their capacities are relatively small and they don’t require many data points.
This implies that we are able to predict the predictive performance of a model while only training it on a small subset.&lt;/p&gt;

&lt;p&gt;In our SIGMOD 2019 paper, we proposed the Adaptive Pipeline Selection algorithm, which trains models over increasingly-larger samples and evaluate them on the samples (on which they are trained) and the validation dataset.
We further used the training error as a lower bound for the validation error.
Therefore if the training error is beyond the current best validation error, we think it is very unlikely for this model to have a better performance than the current best model, and then we can simply prune this model to save more computational resources.
Another advantage brought by this algorithm is the training efficiency.
Since we train over larger samples, for learning algorithms which support incremental training, we only need to train over the difference of samples.&lt;/p&gt;

&lt;p&gt;There are a bunch of potential improvements here.
Instead of using the training error to estimate the validation error, we can predict the learning curve to estimate the validation error.
We can also adopt a “soft” pruning method here.
Instead of kill the pipeline immediately, we probably can just starve it by allocating less resources on it, to avoid killing a good pipeline in the early stage.&lt;/p&gt;

&lt;h2 id=&quot;execution&quot;&gt;Execution&lt;/h2&gt;

&lt;p&gt;Execution is another important topic which have been rarely discussed by previous works.
At the end of day, if we are able to execute pipelines 1,000 times faster than other systems, we probably don’t need a fancy pipeline selection algorithm there, we can just do grid search and it is good.
Therefore we somehow want to build a specialized system for executing the workloads for AutoML.&lt;/p&gt;

&lt;p&gt;One thing we notice which is probably specific to AutoML is that lots of pipelines share similar structures (e.g., the same primitives), and this means caching the intermediate outputs of primitives is probably a good idea.
Assume that you are working on an image classification problem and you want to use a pre-trained neural network (maybe on ImageNet) to extract high-level features and then select a simple predictive model (e.g., SVM, logistic regression).
Then if you cache the outputs of the neural networks, you can save lots of time since the inference of neural networks takes a long time.
In other words, you can try many more different models with different hyper-parameters than others if you adopt caching on this problem.&lt;/p&gt;

&lt;p&gt;You can even employ a more fine-grained caching, e.g., if you run the pre-trained neural network on the first 100 data points, and if you want to get the high-level features for the first 200 data points, you can just execute the neural network over the difference and use the cached output for the overlap.&lt;/p&gt;

&lt;p&gt;We are currently building an awesome system designed for the general data analytical workloads (including AutoML, OLAP and many others), and I probably will write a post about it later.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;To sum up, there are new needs for AutoML and we shall do an end-to-end re-design of the AutoML system, from the interface, through the decision process, down to the execution.
There are millions of opportunities in this emerging area and I wish there could be more publications on these interesting topics.&lt;/p&gt;
</description>
        <pubDate>Thu, 30 Jan 2020 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/alpine-meadow-2.0/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/alpine-meadow-2.0/</guid>
      </item>
    
      <item>
        <title>2020 Weekly Summary Report</title>
        <description>&lt;h3 id=&quot;20201228---202113&quot;&gt;2020/12/28 - 2021/1/3&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Scheduling experiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 237-244&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 81-90&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Kubernetes in Action Chap 1&lt;/li&gt;
      &lt;li&gt;股票大作手回忆录 Chap 1-2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201221---20201227&quot;&gt;2020/12/21 - 2020/12/27&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Scheduling experiments&lt;/li&gt;
      &lt;li&gt;Fix web socket for ingress&lt;/li&gt;
      &lt;li&gt;Optimize UDF/UDA&lt;/li&gt;
      &lt;li&gt;Optimize AutoML&lt;/li&gt;
      &lt;li&gt;Update paper&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 233-236&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 71-80&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201214---20201220&quot;&gt;2020/12/14 - 2020/12/20&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;UDF/UDA executor&lt;/li&gt;
      &lt;li&gt;Secure UDF/UDA executor&lt;/li&gt;
      &lt;li&gt;Support UDF/UDA returning UDF/UDA&lt;/li&gt;
      &lt;li&gt;Integrate migration with Kubernetes&lt;/li&gt;
      &lt;li&gt;Support list operators call&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 229-232&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 51-70&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
      &lt;li&gt;Linked search&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2020127---20201213&quot;&gt;2020/12/7 - 2020/12/13&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Blog post&lt;/li&gt;
      &lt;li&gt;Fix SQL reader for complex query&lt;/li&gt;
      &lt;li&gt;Investigate Numba&lt;/li&gt;
      &lt;li&gt;Refactor dataset API&lt;/li&gt;
      &lt;li&gt;Improve first response for histogram&lt;/li&gt;
      &lt;li&gt;Stop a job with no subscribers&lt;/li&gt;
      &lt;li&gt;Paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 224-228&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 41-45&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Hulu ML book Chap 9-14 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201130---2020126&quot;&gt;2020/11/30 - 2020/12/6&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;HTTPS support&lt;/li&gt;
      &lt;li&gt;Caching experiments&lt;/li&gt;
      &lt;li&gt;Frequency-based caching strategy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 220-223&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 36-40&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Hulu ML book Chap 6-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;ICDE reviews&lt;/li&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201123---20201129&quot;&gt;2020/11/23 - 2020/11/29&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Better output for UDF/UDA&lt;/li&gt;
      &lt;li&gt;WhatIf&lt;/li&gt;
      &lt;li&gt;Implement the server in C++&lt;/li&gt;
      &lt;li&gt;Upgrade gRPC and Protobuf&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 216-219&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 6-25&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Hulu ML book Chap 2-5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201116---20201122&quot;&gt;2020/11/16 - 2020/11/22&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Handle duplicate columns in join&lt;/li&gt;
      &lt;li&gt;Single experiments&lt;/li&gt;
      &lt;li&gt;Reduce CPU usage while idle&lt;/li&gt;
      &lt;li&gt;Make C++ unit tests faster&lt;/li&gt;
      &lt;li&gt;Fix memory leak with AutoML&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 210-215&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 1-5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;STL 源码剖析 Chap 4-8&lt;/li&gt;
      &lt;li&gt;Hulu ML book Chap 1&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201109---20201115&quot;&gt;2020/11/09 - 2020/11/15&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Basic WhatIf operator&lt;/li&gt;
      &lt;li&gt;Integrate timestamp parsers in CSV&lt;/li&gt;
      &lt;li&gt;Replicated LDAP configurations&lt;/li&gt;
      &lt;li&gt;Upgrade Arrow to 2.0&lt;/li&gt;
      &lt;li&gt;Single experiments&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 207-209&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 136-147&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 45-51 (finished)&lt;/li&gt;
      &lt;li&gt;STL源码剖析 Chap 1-3&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201102---20201108&quot;&gt;2020/11/02 - 2020/11/08&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Switch to Arrow streaming CSV reader&lt;/li&gt;
      &lt;li&gt;Make CSV loading more robust&lt;/li&gt;
      &lt;li&gt;Speedup UDF/UDA startup&lt;/li&gt;
      &lt;li&gt;Add an option for logging level&lt;/li&gt;
      &lt;li&gt;Improve shuffling&lt;/li&gt;
      &lt;li&gt;Scheduling experiments&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 205-206&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 127-135&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 42-44&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Mail STEM OPT&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201026---20201101&quot;&gt;2020/10/26 - 2020/11/01&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Skip unnecessary responses&lt;/li&gt;
      &lt;li&gt;MonetDB comparison&lt;/li&gt;
      &lt;li&gt;Stop jobs in closed workspaces&lt;/li&gt;
      &lt;li&gt;Update configs for Replicated&lt;/li&gt;
      &lt;li&gt;Integrate secure UDF/UDA for local, docker and K8s&lt;/li&gt;
      &lt;li&gt;Better algorithm for reservoir sampling&lt;/li&gt;
      &lt;li&gt;Fix job step index in error message&lt;/li&gt;
      &lt;li&gt;Add ephemeral sampling&lt;/li&gt;
      &lt;li&gt;Fix AutoML bug&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 199-204&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 112-126&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 38-41&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Gym&lt;/li&gt;
      &lt;li&gt;Prepare STEM OPT&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201019---20201025&quot;&gt;2020/10/19 - 2020/10/25&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix the oil dataset&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
      &lt;li&gt;Technical report&lt;/li&gt;
      &lt;li&gt;Run experiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 195-198&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 37&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Gym&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201012---20201018&quot;&gt;2020/10/12 - 2020/10/18&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Migrate staging to Replicated&lt;/li&gt;
      &lt;li&gt;Expose the output in close function for external UDF/UDA&lt;/li&gt;
      &lt;li&gt;Optimize aggregation&lt;/li&gt;
      &lt;li&gt;Optimize order by&lt;/li&gt;
      &lt;li&gt;Make AutoML multi-processing&lt;/li&gt;
      &lt;li&gt;Fix Loki logs&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 194&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 103-111&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 30-36&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Submit STEM OPT MIT application&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20201005---20201011&quot;&gt;2020/10/05 - 2020/10/11&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Add dockerignore&lt;/li&gt;
      &lt;li&gt;Remove exceptions in C++&lt;/li&gt;
      &lt;li&gt;Add incremental external UDF/UDA&lt;/li&gt;
      &lt;li&gt;Try out embedded cluster for Replicated&lt;/li&gt;
      &lt;li&gt;Improve nominal binning&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 188-193&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 94-102&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 26-29&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200928---20201004&quot;&gt;2020/09/28 - 2020/10/04&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Techinical report&lt;/li&gt;
      &lt;li&gt;Upgrade Arrow to 1.0&lt;/li&gt;
      &lt;li&gt;Code coverage for Python&lt;/li&gt;
      &lt;li&gt;External UDF/UDA installing requirements and monitoring&lt;/li&gt;
      &lt;li&gt;Natural binning&lt;/li&gt;
      &lt;li&gt;Fix replay benchmark&lt;/li&gt;
      &lt;li&gt;Experiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 184-187&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 25&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;OPT STEM preparation&lt;/li&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200921---20200927&quot;&gt;2020/09/21 - 2020/09/27&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Investigate Replicated&lt;/li&gt;
      &lt;li&gt;Sandboxing UDF/UDA design &amp;amp; implementation&lt;/li&gt;
      &lt;li&gt;Build Apache Arrow from source&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 177-183&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 82-93&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 19-24&lt;/li&gt;
      &lt;li&gt;Codebase of Aria&lt;/li&gt;
      &lt;li&gt;Codebase of AutoBazzar&lt;/li&gt;
      &lt;li&gt;Random papers&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200914---20200920&quot;&gt;2020/09/14 - 2020/09/20&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Compiled expression optimization&lt;/li&gt;
      &lt;li&gt;Expose key refactor&lt;/li&gt;
      &lt;li&gt;External UDF/UDA shortcut&lt;/li&gt;
      &lt;li&gt;Filter pushdown optimization&lt;/li&gt;
      &lt;li&gt;Investigate Replicated&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 175-176&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 64-81&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 13-18&lt;/li&gt;
      &lt;li&gt;Random papers&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200907---20200913&quot;&gt;2020/09/07 - 2020/09/13&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Technical report&lt;/li&gt;
      &lt;li&gt;Figure out Excel solutions&lt;/li&gt;
      &lt;li&gt;Support hybrid UDF equation&lt;/li&gt;
      &lt;li&gt;Better error handling in AutoML&lt;/li&gt;
      &lt;li&gt;Adaptive caching strategy&lt;/li&gt;
      &lt;li&gt;Fix the replay benchmark&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 167-174&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 49-63&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 7-8&lt;/li&gt;
      &lt;li&gt;Random papers&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200831---20200906&quot;&gt;2020/08/31 - 2020/09/06&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Put expose into loop&lt;/li&gt;
      &lt;li&gt;Run benchmarks (scheduling, caching, disk/memory management, pushdown)&lt;/li&gt;
      &lt;li&gt;New workload for replay&lt;/li&gt;
      &lt;li&gt;Fix PM2 error&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 160-166&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 40-48&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 3-6&lt;/li&gt;
      &lt;li&gt;Random papers&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200824---20200830&quot;&gt;2020/08/24 - 2020/08/30&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor operator &amp;amp; job&lt;/li&gt;
      &lt;li&gt;Safe memory usage&lt;/li&gt;
      &lt;li&gt;Release resources in close&lt;/li&gt;
      &lt;li&gt;Try Repicated&lt;/li&gt;
      &lt;li&gt;Better Grafana dashboard&lt;/li&gt;
      &lt;li&gt;Progress semantic&lt;/li&gt;
      &lt;li&gt;Add a configuration file for benchmark&lt;/li&gt;
      &lt;li&gt;Technical report skeleton&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 156-159&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 34-39&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;OSTEP Chap 1-2&lt;/li&gt;
      &lt;li&gt;uvloop codebase&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200817---20200823&quot;&gt;2020/08/17 - 2020/08/23&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor binning&lt;/li&gt;
      &lt;li&gt;Better profiling &amp;amp; monitoring&lt;/li&gt;
      &lt;li&gt;Infer job type&lt;/li&gt;
      &lt;li&gt;New aggregation methods&lt;/li&gt;
      &lt;li&gt;Refactor TableResult&lt;/li&gt;
      &lt;li&gt;Improve Python metrics&lt;/li&gt;
      &lt;li&gt;More C++ profiling&lt;/li&gt;
      &lt;li&gt;More Python profiling&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Overview of pipelines&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 152-155&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 31-33&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 11-12&lt;/li&gt;
      &lt;li&gt;15721 Lecture 1-25&lt;/li&gt;
      &lt;li&gt;Google C++ Style Guide&lt;/li&gt;
      &lt;li&gt;Google Python Style Guide&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200810---20200816&quot;&gt;2020/08/10 - 2020/08/16&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor locks&lt;/li&gt;
      &lt;li&gt;Data model for the cloud web portal&lt;/li&gt;
      &lt;li&gt;Support dumping as CSV&lt;/li&gt;
      &lt;li&gt;Investigate code generation&lt;/li&gt;
      &lt;li&gt;Refresh data source&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Overview of pipelines&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 150-151&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 25-30&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 9-10&lt;/li&gt;
      &lt;li&gt;The Algorithmic Foundations of Differential Privacy Chap 1-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200803---20200809&quot;&gt;2020/08/03 - 2020/08/09&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Make protobuf TableResult smaller&lt;/li&gt;
      &lt;li&gt;Make release notes&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Refactor API&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese vocabulary 22-24&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 7-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Move&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200727---20200802&quot;&gt;2020/07/27 - 2020/08/02&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Optimize aggregation&lt;/li&gt;
      &lt;li&gt;Cloud web portal design&lt;/li&gt;
      &lt;li&gt;Benchmark for scheduling&lt;/li&gt;
      &lt;li&gt;Reduce docker image size&lt;/li&gt;
      &lt;li&gt;Make benchmark plan&lt;/li&gt;
      &lt;li&gt;Add timestamp arithmetic&lt;/li&gt;
      &lt;li&gt;Refactor subscribe response&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 147-149&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 13-21&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 4-6&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare for moving&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200720---20200726&quot;&gt;2020/07/20 - 2020/07/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor the synthesized benchmark&lt;/li&gt;
      &lt;li&gt;Support AutoML in the workload generator&lt;/li&gt;
      &lt;li&gt;Add simple user interaction simulator&lt;/li&gt;
      &lt;li&gt;Fix random bugs for DARPA demo&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Show tasks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 145-146&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 1-3&lt;/li&gt;
      &lt;li&gt;ICDE reviews (3)&lt;/li&gt;
      &lt;li&gt;MonetDB papers (3)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare for moving&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200713---20200719&quot;&gt;2020/07/13 - 2020/07/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Improve AWS EKS script&lt;/li&gt;
      &lt;li&gt;Investigate Azure&lt;/li&gt;
      &lt;li&gt;Categorize unit tests&lt;/li&gt;
      &lt;li&gt;Tutorial for AWS EKS&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 144&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 1-12&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (5)&lt;/li&gt;
      &lt;li&gt;ICDE reviews (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200706---20200712&quot;&gt;2020/07/06 - 2020/07/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Investigate AWS&lt;/li&gt;
      &lt;li&gt;Investigate DataBricks&lt;/li&gt;
      &lt;li&gt;Improve caching manager&lt;/li&gt;
      &lt;li&gt;Automate AWS EKS deployment&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 140-143&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 1-15&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (4)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200629---20200705&quot;&gt;2020/06/29 - 2020/07/05&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Improve disk cache&lt;/li&gt;
      &lt;li&gt;New join operator&lt;/li&gt;
      &lt;li&gt;Integrate Postgres&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;API server&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 134-139&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 82-98 (finished)&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200622---20200628&quot;&gt;2020/06/22 - 2020/06/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Disk management design document&lt;/li&gt;
      &lt;li&gt;Improve sampling&lt;/li&gt;
      &lt;li&gt;Refactor context&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 131-133&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 79-81&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200615---20200621&quot;&gt;2020/06/15 - 2020/06/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Recalculate bins&lt;/li&gt;
      &lt;li&gt;Refactor removing samples&lt;/li&gt;
      &lt;li&gt;Integrate HDFS&lt;/li&gt;
      &lt;li&gt;Investigate big data systems&lt;/li&gt;
      &lt;li&gt;Arrow disk storage serialization benchmark&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 128-130&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 67-78&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 18 (finished)&lt;/li&gt;
      &lt;li&gt;Streaming 101 &amp;amp; 102&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200608---20200614&quot;&gt;2020/06/08 - 2020/06/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Upgrade Arrow to 0.17&lt;/li&gt;
      &lt;li&gt;Refactor from include guard to pragma&lt;/li&gt;
      &lt;li&gt;Implement calculated data source in C++&lt;/li&gt;
      &lt;li&gt;Disable third-party tests&lt;/li&gt;
      &lt;li&gt;Refactor C++/Python bindings&lt;/li&gt;
      &lt;li&gt;Remove unused code&lt;/li&gt;
      &lt;li&gt;Refactor AutoML&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Integrate the thresholding primitive&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 125-127&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 58-66&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 14-17&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Walk&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200601---20200607&quot;&gt;2020/06/01 - 2020/06/07&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Test memory management&lt;/li&gt;
      &lt;li&gt;Scheduling strategy&lt;/li&gt;
      &lt;li&gt;Python process priority&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Read NNI web UI code&lt;/li&gt;
      &lt;li&gt;Set up React codebase&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 119-124&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 52-57&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 12-13&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Walk&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200525---20200531&quot;&gt;2020/05/25 - 2020/05/31&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Job memory management&lt;/li&gt;
      &lt;li&gt;Sample memory management fix&lt;/li&gt;
      &lt;li&gt;Migrate GCP&lt;/li&gt;
      &lt;li&gt;Scheduling design document&lt;/li&gt;
      &lt;li&gt;Support Python configuration for context&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 113-118&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 46-51&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Paper reviews&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200518---20200524&quot;&gt;2020/05/18 - 2020/05/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Sample memory management&lt;/li&gt;
      &lt;li&gt;Stream memory management&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 105-112&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 37-45&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 8-11&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200511---20200517&quot;&gt;2020/05/11 - 2020/05/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;New aggregation&lt;/li&gt;
      &lt;li&gt;Integrate Loki&lt;/li&gt;
      &lt;li&gt;Prepare coding interview questions&lt;/li&gt;
      &lt;li&gt;Design document for memory management&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;React tutorial&lt;/li&gt;
      &lt;li&gt;Investigate NNI&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 97-104&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 28-36&lt;/li&gt;
      &lt;li&gt;Japanese calligraphy&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
      &lt;li&gt;RL book Chap 7&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare O-1 letters&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200504---20200510&quot;&gt;2020/05/04 - 2020/05/10&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;C++/Python binding refactor&lt;/li&gt;
      &lt;li&gt;Support reloading data source&lt;/li&gt;
      &lt;li&gt;Refactor aggregation&lt;/li&gt;
      &lt;li&gt;Refactor header files&lt;/li&gt;
      &lt;li&gt;Customized aggregation in Python&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Set up OpenML benchmark&lt;/li&gt;
      &lt;li&gt;Export pipeline as script&lt;/li&gt;
      &lt;li&gt;Upgrade sklearn to 0.22&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 89-96&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 19-27&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 5-6&lt;/li&gt;
      &lt;li&gt;VLDB paper review&lt;/li&gt;
      &lt;li&gt;IDEA paper&lt;/li&gt;
      &lt;li&gt;Linguist book&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200427---20200503&quot;&gt;2020/04/27 - 2020/05/03&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Quantile binning extending&lt;/li&gt;
      &lt;li&gt;Folder union data source&lt;/li&gt;
      &lt;li&gt;Refactor planning framework&lt;/li&gt;
      &lt;li&gt;Integrate Prometheus and Grafana&lt;/li&gt;
      &lt;li&gt;External UDF/UDA&lt;/li&gt;
      &lt;li&gt;Replay benchmark V2&lt;/li&gt;
      &lt;li&gt;Documentation for UDF/UDA&lt;/li&gt;
      &lt;li&gt;Better asserts and exceptions&lt;/li&gt;
      &lt;li&gt;Design document for customized aggregation&lt;/li&gt;
      &lt;li&gt;Documentation for server&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 83-88&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 4-18&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 4&lt;/li&gt;
      &lt;li&gt;Random papers (7)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200420---20200426&quot;&gt;2020/04/20 - 2020/04/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Convert unit test workloads&lt;/li&gt;
      &lt;li&gt;Better micro benchmark&lt;/li&gt;
      &lt;li&gt;Conform to Google C++ style&lt;/li&gt;
      &lt;li&gt;Set up email for daily benchmark&lt;/li&gt;
      &lt;li&gt;Replay benchmark&lt;/li&gt;
      &lt;li&gt;Log failed job&lt;/li&gt;
      &lt;li&gt;Support nullness function&lt;/li&gt;
      &lt;li&gt;Quantile binning&lt;/li&gt;
      &lt;li&gt;Documentation for scheduling&lt;/li&gt;
      &lt;li&gt;Documentation for caching&lt;/li&gt;
      &lt;li&gt;Documentation for memory management&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Upgrade SMAC to 0.12&lt;/li&gt;
      &lt;li&gt;Integrate NNI’s curve fitting&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 81-82&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 1-3&lt;/li&gt;
      &lt;li&gt;Japanese review 19-24&lt;/li&gt;
      &lt;li&gt;N5 tests&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200413---20200419&quot;&gt;2020/04/13 - 2020/04/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support shrinking sample&lt;/li&gt;
      &lt;li&gt;Support sample TTL&lt;/li&gt;
      &lt;li&gt;Fix sampling for large data sources&lt;/li&gt;
      &lt;li&gt;Fix sample semantics for aggregation&lt;/li&gt;
      &lt;li&gt;Support numerical to string&lt;/li&gt;
      &lt;li&gt;Add warning mechanism for operators&lt;/li&gt;
      &lt;li&gt;Daily regression benchmark&lt;/li&gt;
      &lt;li&gt;Fix GitLab JIRA integration&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Check target type in AutoML&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese vocabulary 91-98&lt;/li&gt;
      &lt;li&gt;Japanese review 9-18&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200406---20200412&quot;&gt;2020/04/06 - 2020/04/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Improve data source loading&lt;/li&gt;
      &lt;li&gt;Documentation for planning, benchmarks, C++, Python&lt;/li&gt;
      &lt;li&gt;Memory management for large Parquet files&lt;/li&gt;
      &lt;li&gt;Add warning for data sources&lt;/li&gt;
      &lt;li&gt;Prepare image for BMW&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Investigate papers&lt;/li&gt;
      &lt;li&gt;Section 2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 79-80&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 82-90&lt;/li&gt;
      &lt;li&gt;Japanese review 1-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare O-1 documents&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200330---20200405&quot;&gt;2020/03/30 - 2020/04/05&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Documentation for stream, sample, operator, job, tests&lt;/li&gt;
      &lt;li&gt;Upgrade Arrow to 0.16&lt;/li&gt;
      &lt;li&gt;Refactor header files&lt;/li&gt;
      &lt;li&gt;Export job as pure scikit-learn&lt;/li&gt;
      &lt;li&gt;Support dump streams to disk&lt;/li&gt;
      &lt;li&gt;Make Brewfile&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Support multiple metrics&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Draft outline&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 71-78&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 78-81&lt;/li&gt;
      &lt;li&gt;Workouts&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200323---20200329&quot;&gt;2020/03/23 - 2020/03/29&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Group by numerical values&lt;/li&gt;
      &lt;li&gt;Time extraction functions&lt;/li&gt;
      &lt;li&gt;Test Oracle DB&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
      &lt;li&gt;Fix job lifetime management&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Fix hanging bug&lt;/li&gt;
      &lt;li&gt;More meta-learning&lt;/li&gt;
      &lt;li&gt;Make meta-learning faster&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 66-70&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 69-77&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Park paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200316---20200322&quot;&gt;2020/03/16 - 2020/03/22&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor loading in Python&lt;/li&gt;
      &lt;li&gt;Refine sampling strategies&lt;/li&gt;
      &lt;li&gt;Test datasets with errors&lt;/li&gt;
      &lt;li&gt;Scripts for release&lt;/li&gt;
      &lt;li&gt;Configure k8s environment&lt;/li&gt;
      &lt;li&gt;Fix binning bug&lt;/li&gt;
      &lt;li&gt;Fix timestamp conversion bug&lt;/li&gt;
      &lt;li&gt;Fix rtail output&lt;/li&gt;
      &lt;li&gt;Exceptions with context&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 62-65&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 66-68&lt;/li&gt;
      &lt;li&gt;Japanese practice 1-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;RL book Chap 1-2&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200309---20200315&quot;&gt;2020/03/09 - 2020/03/15&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix null type info&lt;/li&gt;
      &lt;li&gt;Expose logs through HTTP&lt;/li&gt;
      &lt;li&gt;Make Oracle faster&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Support class weights&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 57-61&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 56-65&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workouts&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Building Micro Services Chap 9-12 (finished)&lt;/li&gt;
      &lt;li&gt;TDS review&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;File federal tax return&lt;/li&gt;
      &lt;li&gt;File state tax return&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200302---20200308&quot;&gt;2020/03/02 - 2020/03/08&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Work with BMW (found lots of bugs!)&lt;/li&gt;
      &lt;li&gt;Support more types in SQL&lt;/li&gt;
      &lt;li&gt;Handle inf in binning and aggregation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 56&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 48-55&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workouts&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Building Micro Services Chap 6-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200224---20200301&quot;&gt;2020/02/24 - 2020/03/01&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Set up Oracle on GCP&lt;/li&gt;
      &lt;li&gt;Support bulk operation of SOCI in SQL data source&lt;/li&gt;
      &lt;li&gt;Stop AutoML operators&lt;/li&gt;
      &lt;li&gt;Convert workloads to JSON&lt;/li&gt;
      &lt;li&gt;Scaling test of BMW&lt;/li&gt;
      &lt;li&gt;Add type cast operator&lt;/li&gt;
      &lt;li&gt;Add docker compose&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Refactor metadata management&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 52-55&lt;/li&gt;
      &lt;li&gt;Japanese vocabulary 35-47&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;VLDBJ paper review&lt;/li&gt;
      &lt;li&gt;Building Micro Services Chap 5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200217---20200223&quot;&gt;2020/02/17 - 2020/02/23&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Documentation skeleton&lt;/li&gt;
      &lt;li&gt;Support specifying time granularity in datetime binning&lt;/li&gt;
      &lt;li&gt;Log operator running time&lt;/li&gt;
      &lt;li&gt;Support predicting probabilities in pipeline&lt;/li&gt;
      &lt;li&gt;Support reading from OracleDB&lt;/li&gt;
      &lt;li&gt;Refactor third-party modules&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Re-enable meta-learning&lt;/li&gt;
      &lt;li&gt;Better epochs in APS&lt;/li&gt;
      &lt;li&gt;Support computing naive score&lt;/li&gt;
      &lt;li&gt;Simple explainability&lt;/li&gt;
      &lt;li&gt;Set up benchmarks&lt;/li&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
      &lt;li&gt;Re-enable ensembling&lt;/li&gt;
      &lt;li&gt;Remove null values in target columns&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 46-51&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Building Micro Services Chap 4&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
      &lt;li&gt;NAS reviews (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200210---20200216&quot;&gt;2020/02/10 - 2020/02/16&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Exception handling for Python operators&lt;/li&gt;
      &lt;li&gt;SHAP primitive&lt;/li&gt;
      &lt;li&gt;Set up new GitLab runners&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Set up new linters&lt;/li&gt;
      &lt;li&gt;More profiling and logging&lt;/li&gt;
      &lt;li&gt;Constrain the search space for explainability&lt;/li&gt;
      &lt;li&gt;Better dump&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 42-45&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workout&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200203---20200209&quot;&gt;2020/02/03 - 2020/02/09&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Test workload on Parquet&lt;/li&gt;
      &lt;li&gt;Improve binning&lt;/li&gt;
      &lt;li&gt;Keep track of memory usage for stream&lt;/li&gt;
      &lt;li&gt;Make CI faster&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Support mini-metadata&lt;/li&gt;
      &lt;li&gt;Support more problems&lt;/li&gt;
      &lt;li&gt;Submit TA2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;Japanese lecture 34-41&lt;/li&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workout&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Blog
    &lt;ul&gt;
      &lt;li&gt;AM 2.0 Post&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200127---20200202&quot;&gt;2020/01/27 - 2020/02/02&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Monitoring in C++ and Python&lt;/li&gt;
      &lt;li&gt;Set up monitoring server&lt;/li&gt;
      &lt;li&gt;Expose UDF executor&lt;/li&gt;
      &lt;li&gt;Support UDF executor with parameters&lt;/li&gt;
      &lt;li&gt;Support reading Parquet file&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Brainstorm ideas&lt;/li&gt;
      &lt;li&gt;Design data model&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Master thesis
    &lt;ul&gt;
      &lt;li&gt;Print, sign and submit&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workout&lt;/li&gt;
      &lt;li&gt;Japanese lecture 29-33&lt;/li&gt;
      &lt;li&gt;CS285 lecture 10-21&lt;/li&gt;
      &lt;li&gt;CS285 Homework 3, 4, 5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Building Micro Services Chap 2-3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200120---20200126&quot;&gt;2020/01/20 - 2020/01/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Expose more information in AutoML&lt;/li&gt;
      &lt;li&gt;Support model persistence&lt;/li&gt;
      &lt;li&gt;Support literal data source&lt;/li&gt;
      &lt;li&gt;Support exporting pipeline as a Python script&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Master thesis
    &lt;ul&gt;
      &lt;li&gt;Revise&lt;/li&gt;
      &lt;li&gt;Sent for review&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workout&lt;/li&gt;
      &lt;li&gt;Japanese lecture 18-28&lt;/li&gt;
      &lt;li&gt;CS285 lecture 8-9&lt;/li&gt;
      &lt;li&gt;CS285 Homework 2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Agile Development Chap 1-10 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Work out&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200113---20200119&quot;&gt;2020/01/13 - 2020/01/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support Python UDF&lt;/li&gt;
      &lt;li&gt;Support Python UDA&lt;/li&gt;
      &lt;li&gt;UDF Equation&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Learning
    &lt;ul&gt;
      &lt;li&gt;English speaking&lt;/li&gt;
      &lt;li&gt;Workout&lt;/li&gt;
      &lt;li&gt;CS285 lecture 1-7&lt;/li&gt;
      &lt;li&gt;CS285 Homework 1&lt;/li&gt;
      &lt;li&gt;Japanese lecture 1-17&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Building Micro Services Chap 1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Work out&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20200106---20200112&quot;&gt;2020/01/06 - 2020/01/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Release Niseko 0.1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Designing Distributed Systems Chap 1-13 (finished)&lt;/li&gt;
      &lt;li&gt;Reinforcement Learning Chap 1-2 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/2020_weekly_summary_report/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/2020_weekly_summary_report/</guid>
      </item>
    
      <item>
        <title>Some Interesting ML-related Papers in VLDB 2018</title>
        <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: VLDB 2019 just happened and now I am going to write a post about papers in VLDB 2018 :).&lt;/p&gt;

&lt;p&gt;In this post, I am going to write my reading report for ML-related research papers in VLDB 2018. I will go through all the papers based my own research interests and write their basic ideas, methods and my personal evaluations. Please let me know if you find anything inappropriate.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;mlbench-benchmarking-machine-learning-services-against-human-experts&quot;&gt;MLBench: Benchmarking Machine Learning Services Against Human Experts&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents MLBench, a benchmark providing a best-effort baseline of both feature engineering and machine learning models for each dataset, proposes a performance metric measuring the map between a ML system and top-ranked Kaggle performers, and extract some interesting insights.&lt;/li&gt;
          &lt;li&gt;The performance metric, namely “quality tolerance”, is \(\pi\) if the user is satisfied by only being ranked amont the top \(\pi\%\) in a Kaggle competition.&lt;/li&gt;
          &lt;li&gt;They manually collected the winning code from 41 Kaggle competitions as the best-effort baseline and compare Azure ML and Amazon ML services on these datasets (with or without hyper-parameter tuning). They found that model diversity helps, model selection is necessary and hyper-parameter tuning also makes a difference.&lt;/li&gt;
          &lt;li&gt;Further, nonlinear models outperform linear models on big datasets (but they are also more likely to suffer from overfitting on small datasets), and linear models have similar performance in general, therefore it is a hit-or-miss pattern for linear models. Another interesting insight to note is that among nonlinear models, they exert similar performance within each model family (e.g., SVM or decision tree), and the loner training time doesn’t help within the nonlinear or linear model space.&lt;/li&gt;
          &lt;li&gt;Not surprisingly, feature engineering helps a lot.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and easy to understand, and also it discusses the limitations and potential alternative methods to justify its designs.&lt;/li&gt;
          &lt;li&gt;This is definitely a good paper with lots of insightful findings. Based on my experience of building AutoML systems, some models are just mostly better, but this is not easy to explain in theory (whereas there is &lt;a href=&quot;https://en.wikipedia.org/wiki/No_free_lunch_theorem&quot;&gt;No Free Lunch Theorem&lt;/a&gt;).&lt;/li&gt;
          &lt;li&gt;I think it would be more helpful to make a large-scale comparison across hundreds of datasets and different libraries.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;on-optimizing-operator-fusion-plans-for-large-scale-machine-learning-in-systemml&quot;&gt;On Optimizing Operator Fusion Plans for Large-Scale Machine Learning in SystemML&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents an exact, cost-based framework for optimizing operator fusion plans over DAGs of linear algebra operations, which guarantees finding the optimal plan regarding the considered decisions.&lt;/li&gt;
          &lt;li&gt;For candidate exploration, they enumerate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;partial fusion plan&lt;/code&gt; per operator. They propose a memo table to store all the candidate plans and design a DFS algorithm to populate the memo table bottom-up.&lt;/li&gt;
          &lt;li&gt;For candidate selection, they first split the plans into independent partitions, and linearize the search space per partition and enumerate plans while skipping plans that can be safely pruned. They also cache plans for repeated optimization problems.&lt;/li&gt;
          &lt;li&gt;They compare against Julia and TensorFlow on some synthetic datasets and real datasets (e.g., Airline78, MNIST, Netflix, Amazon product review).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and clear structured.&lt;/li&gt;
          &lt;li&gt;I do think there are better baselines for comparison in the experiments (e.g., TensorFlow is not built for such scenarios).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;snorkel-rapid-training-data-creation-with-weak-supervision&quot;&gt;Snorkel: Rapid Training Data Creation with Weak Supervision&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents Snorkel, a system that enables user to write labeling functions that express heuristics, learns a generative model over the labeling functions, and then trains a discriminative model.&lt;/li&gt;
          &lt;li&gt;Snorkel constructs the generative model as a factor graph (including three factors, labeling propensity, accuracy and pairwise correlations of labeling functions).&lt;/li&gt;
          &lt;li&gt;They train a discriminative model on the probabilistic labels by minimizing a noise-aware variant of the loss, i.e., the expected loss.&lt;/li&gt;
          &lt;li&gt;They present a theoretical analysis of when a simple majority vote will work just as well as the modeling of the accuracies of labeling functions, and introduces an optimizer for deciding when to model accuracies of labeling functions and which correlations to model among labeling functions.&lt;/li&gt;
          &lt;li&gt;Snorkel provides 132% average improvements to predictive performance over prior heuristics and comes within an average 3.60% of the predictive performance over large hand-curated training sets.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and clear structured.&lt;/li&gt;
          &lt;li&gt;Although the overall architecture is normal, the analysis of tradeoffs is really interesting and insightful.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;easeml-towards-multi-tenant-resource-sharing-for-machine-learning-workloads&quot;&gt;Ease.ml: Towards Multi-tenant Resource Sharing for Machine Learning Workloads&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents ease.ml, a declarative machine learning service platform for multi-tenant resource sharing.&lt;/li&gt;
          &lt;li&gt;It proposes a novel algorithm for multi-tenant, cost-aware model selection algorithm. First step it determines the best model for each user by estimating the “potential for accuracy improvement” for each model and then picks the user with the highest potential. They develop a cost-aware variant of the standard GP-UCB algorithm for selecting the model of each user.&lt;/li&gt;
          &lt;li&gt;Secondly, they use a greedy algorithm that selects the user with a confidence bound above the average, and in practice, they pick the user with the maximum gap between the largest upper confidence bound and the best accuracy so far.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and clear structured. Its introduction is written in a way such that they provide some real-world failed experiences as the motivation.&lt;/li&gt;
          &lt;li&gt;It is always helpful to provide some examples for better illustration and some alternative designs to justify your proposed designs.&lt;/li&gt;
          &lt;li&gt;It is good to discuss about the limitations to better scope the paper and illustrate why the limitations are currently not resolved.&lt;/li&gt;
          &lt;li&gt;They mention Bayesian Optimization in the abstract but it is not discussed in the paper, I guess it is probably used in the hyerparameter tuning?&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/some_good_papers_in_vldb_2018/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/some_good_papers_in_vldb_2018/</guid>
      </item>
    
      <item>
        <title>AutoML: Methods, Challenges and Opportunities</title>
        <description>&lt;p&gt;Recently, we got an paper about interactive AutoML accepted by SIGMOD 2019 &lt;a class=&quot;citation&quot; href=&quot;#shang2019am&quot;&gt;(Shang et al., 2019)&lt;/a&gt;. In that paper, we discussed how we tackled the problem of automated machine learning while providing interactive responses. We architected our system into several components and discussed implementations and techniques for each of them. Although looking back, the overall design seems pretty straightforward, it takes us almost one year and a half to get into the kingdom of AutoML and figure out a reasonable architecture for a practical system. But I are really glad that eventually we figured this out and have this paper accepted to SIGMOD.&lt;/p&gt;

&lt;p&gt;Also, there is &lt;a href=&quot;https://www.automl.org/book/&quot;&gt;an awesome book&lt;/a&gt; about AutoML recently released, which is written by several well-known researchers from the AutoML community (and their papers are really helpful for us!). Inspired by both of the paper acceptance and the new book, I am going to write a blog post summarizing the methods we used or invented, challenges we faced and opportunities for future research. However, considering this is just a blog post, definitely some details of our methods will not be covered, so if you would like to know anything more about our system, please refer to our paper at SIGMOD 2019.&lt;/p&gt;

&lt;h2 id=&quot;1-introduction&quot;&gt;1. Introduction&lt;/h2&gt;

&lt;p&gt;First, what is AutoML? Based on my understanding, it removes humans from the loop of tedious process of cleaning data, preprocessing features, searching machine learning model and tuning its hyper-parameters. One example is that a doctor has a large volume of data (e.g., age, height, blood test results) collected from his patients and he would like to know if it is possible to build a machine learning pipeline predicting whether a new patient has some disease or not. Then AutoML is a perfect solution here as it doesn’t require the user to have machine learning or computer science knowledge. In other words, it democratizes the machine learning to the general public and make machine learning accessible. This probably explains why it is getting more and more popular.&lt;/p&gt;

&lt;p&gt;Nevertheless, AutoML is not supposed to totally bypass humans from the building of machine learning pipeline, otherwise even a perfect model can be found by AutoML, everything is still a black box for the user and it is difficult to have useful findings. This requires AutoML to leave some opportunities to have human efforts in the decision process, especially domain knowledge, e.g., a doctor can give the system some hints on how to clean or process the data, and if the machine learning pipeline has good interpretability, that is even more helpful since the doctor probably has chance to have some interesting discoveries.&lt;/p&gt;

&lt;p&gt;Further, it doesn’t make senses for AutoML to be a standalone component. It shall reside on a data exploration platform to better combine traditional data analytics and machine learning. We cannot expect our user to write code to run our AutoML system, we shall have a interactive easy-to-use GUI where user can trigger the AutoML operation. Therefore, it requires a general-purpose data platform to make AutoML actually accessible. That’s why we have integrated our AutoML system &lt;strong&gt;Alpine Meadow&lt;/strong&gt; with &lt;a href=&quot;http://dsail.csail.mit.edu/index.php/vizdom/&quot;&gt;&lt;strong&gt;Northstar&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Last but not least, AutoML can help the users to find a reasonable ML pipeline, but there is still so-called “the last mile” to go through, e.g., to achieve better performance, the users should be able to hand over this pipeline to some engineers or real data scientists to further improve it. For example, the pipeline found by AutoML can probably be exported as a Python script, and the engineering team can convert this script to a Apache Spark job to scale it on larger volumes of data.&lt;/p&gt;

&lt;p&gt;To summarize, in my opinion, a good AutoML system shall be &lt;strong&gt;Automated&lt;/strong&gt;, &lt;strong&gt;Interpretable&lt;/strong&gt;, &lt;strong&gt;Interactive&lt;/strong&gt;, &lt;strong&gt;Exportable&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;2-methods&quot;&gt;2. Methods&lt;/h2&gt;

&lt;p&gt;For an end-to-end AutoML system, the input is essentially the task description (i.e., dataset and problem, e.g., predict the digits for MNIST dataset), and the output is the so-called “best” pipeline. The metrics to evaluate a pipeline can be just calculated based on the predictions of a pipeline (e.g., accuracy or MST), or the speed of a pipeline (i.e., how long does it take to train or test this pipeline), even combined with each other.&lt;/p&gt;

&lt;p&gt;Since now we know what the input and output is, then it comes to the problem of designing all steps in the AutoML system. An intuitive design is that we build the search space (i.e., the space of applicable pipelines), select promising pipelines from the space, evaluate them in some way and return the best pipeline.&lt;/p&gt;

&lt;h3 id=&quot;21-building-search-space&quot;&gt;2.1 Building Search Space&lt;/h3&gt;

&lt;p&gt;As far as I know, currently all AutoML systems use some template-like methods more or less. Basically we pre-define the search space for each problem type (e.g., classification or regression) and column type (e.g., different scaling methods for numerical features or different encoding methods for categorical features) in some templates. At runtime, the system just reads out the search space based on the input task.&lt;/p&gt;

&lt;p&gt;Our system &lt;strong&gt;Alpine Meadow&lt;/strong&gt; improves the template-based method by abstracting the construction of the space into the execution of rules (we adopt this idea from database systems). This enables more flexibility than template-based method as rules can be programmed and added in an easy way, therefore we are able to support multiple dataset/problem types (e.g., image classification, collaborative filtering). And we further define the search space as a space of &lt;strong&gt;logical pipeline plans&lt;/strong&gt;, where each logical pipeline plan is a pipeline DAG with domains of hyper-parameters (i.e., their hyper-parameters are ranges not exact values).&lt;/p&gt;

&lt;h3 id=&quot;22-selecting-promising-pipelines&quot;&gt;2.2 Selecting Promising Pipelines&lt;/h3&gt;

&lt;p&gt;The search space is usually huge and heterogeneous, therefore sometimes simply taking a pipeline out of the search space by random is not efficient enough (but some randomness is necessary to avoid be trapped in sub-optimal regions). Some systems (e.g., Auto-sklearn &lt;a class=&quot;citation&quot; href=&quot;#feurer2015efficient&quot;&gt;(Feurer et al., 2015)&lt;/a&gt;) models the selection of pipeline as a hyper-parameter tuning problem, in other words, they convert the primitive structure (i.e., DAG) of a pipeline to some hyper-parameters. Then they are able to employ some hyper-parameter tuning techniques for finding promsing pipelines. For example, &lt;strong&gt;Bayesian Optimization&lt;/strong&gt; has been proved successful for tackling with hyper-parameter tuning and is also now widely-used. I am not going to talk about Bayesian Optimization here as there is already one very good review &lt;a class=&quot;citation&quot; href=&quot;#shahriari2016taking&quot;&gt;(Shahriari et al., 2016)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In our system, the selection of pipeline consist of two parts, selecting the primitive structure (i.e., DAG) of a pipeline (which is defined as a logical pipeline plan), and fine tuning the hyper-parameters. We model the selection of logical pipeline plan as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-armed_bandit&quot;&gt;&lt;strong&gt;Multi-Armed Bandit&lt;/strong&gt;&lt;/a&gt; problem and we adopt the idea of &lt;strong&gt;cost model&lt;/strong&gt; from the DB world to estimate a score for each logical pipeline, while the cost model considers the &lt;em&gt;performance&lt;/em&gt; (e.g., accuracy) and &lt;em&gt;speed&lt;/em&gt; (e.g., time to train or test) at the same time to trade-off between performance and interactiveness. The cost model also employs some &lt;strong&gt;meta-learning&lt;/strong&gt; techniques to improve the estimation by using history data from some similar datasets (e.g., the accuracy and execution time of a pipeline on a similar dataset). For the multi-armed problem, we employ a combination of &lt;strong&gt;\(\epsilon\)-greedy&lt;/strong&gt; and &lt;strong&gt;upper confidence bound&lt;/strong&gt; to select promising logical pipeline plans. After selecting some promising logical pipelines, we use Bayesian Optimization to fine-tune their hyper-parameters.&lt;/p&gt;

&lt;h3 id=&quot;23-evaluation-of-pipelines&quot;&gt;2.3 Evaluation of Pipelines&lt;/h3&gt;

&lt;p&gt;When we evaluate a candidate pipeline, most of time we would like to find a pipeline with good predicting power, e.g., with high accuracy on test dataset. However, since we don’t have access to the test dataset at runtime, to get a sense of how the pipeline will perform on the test dataset (i.e., the generalization error), we can test it on some validation dataset. There are usually two ways: one is that we have a &lt;strong&gt;holdout&lt;/strong&gt; validation dataset, usually we do &lt;strong&gt;80%-20%&lt;/strong&gt; (in other words, we split 80% of the input dataset as the train dataset and the rest 20% dataset as the validation dataset). The other way is &lt;strong&gt;cross-validation&lt;/strong&gt;, usually we do &lt;strong&gt;k-fold cross-validation&lt;/strong&gt; where k is set as 3 or 5.&lt;/p&gt;

&lt;p&gt;However, they all have some disadvantages. The holdout way is fast but the estimation of generalization power is not accurate, while cross-validation is more accurate but tends to be slow. Based on this observation and also inspired by HyperBand &lt;a class=&quot;citation&quot; href=&quot;#li2016hyperband&quot;&gt;(Li et al., 2016)&lt;/a&gt;, we devise an &lt;strong&gt;Adaptive Pipeline Selection&lt;/strong&gt; (APS) method which trade-off between speed and accuracy of evaluation. Essentially, the adaptive pipeline selection is a resource-efficient way to evaluate pipeline. The basic idea is that we train and test the pipeline on a small sampled dataset, prune those pipelines performing bad on this dataset, and we increase the size of the dataset and continue this process. One of the major difference between APS and HyperBand is our pruning condition, that is, we use the train error as the upper bound of the validation error, and we compare it with the best-so-far validation error, if the train error is bigger, which means that this pipeline is not likely to be better than the current best, then we can safely prune it.&lt;/p&gt;

&lt;p&gt;Furthermore, we also investigate a little bit on optimizing the evaluation from the system perspective. One observation is that, any AutoML systems will try out lots of pipelines at the same time, so it is likely that some pipelines will share some common primitives, which means, some computations can be reused. This is the so-called &lt;strong&gt;inter-pipeline caching&lt;/strong&gt; in our system. The other angle is that by using APS, for a pipeline, since we train and test it on increasingly larger datasets with overlaps, there leaves out some opportunities to reuse the computation from the last iteration, which is the so-called &lt;strong&gt;intra-pipeline caching&lt;/strong&gt; in &lt;strong&gt;Alpine Meadow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;3-challenges-and-opportunities&quot;&gt;3. Challenges and Opportunities&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Learning of Rules&lt;/strong&gt;. For now, the rules or heuristics in most AutoML systems are mostly hand-crafted, therefore it prevents from the scaling and coverage of rules. If we manage to make these rules learned either over time or over external history (e.g., learning from models on Kaggle or OpenML), the performance is expected to be greatly improved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learned Cost Model&lt;/strong&gt;. Similar with the learning of rules, cost models can be fine tuned by machine learning. First, we can have better estimation of execution time by learning-based methods, second, the selection or ranking of pipelines can be optimized by learning as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Large-Scale Meta-Learning&lt;/strong&gt;. Meta-learning is getting more and more popular as it aims to find the common “knowledge” underneath different machine learning tasks. Given a new task, if we are able to reuse some prior knowledge from similar tasks we have seen before, the whole search of optimal pipeline can be &lt;strong&gt;warm-started&lt;/strong&gt;. Therefore, if we can figure out a common language for meta-learning (e.g., common description of pipeline and run, including execution time, predicting performance), and scale up the meta-learning data, we have good chance to find a good pipeline for a new task with little time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better Ensemble&lt;/strong&gt;. AutoML systems will evaluate lots of pipelines by design, therefore, if we can ensemble them together into a model, the expected performance (e.g., generalization error) can be further improved. Better ensemble requires us to have it in mind in every aspect of our system, for example, we should encourage diversity when we select pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Efficient Execution&lt;/strong&gt;. If our AutoML system is able to evaluate one or two orders of magnitude more pipelines than other systems, then we are very likely to win the game. Caching is one important technique as we have mentioned above, and other opportunities may be using GPU, more fine-grained pruning strategy in APS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interpretability&lt;/strong&gt;. Considering AutoML is an end-to-end process, if would be awesome if we are able to show our users how our system makes the decision of select this pipeline. Rule-based methods are sweet pots here as they are explainable by nature. Also, the cost model provides some intuition as well.&lt;/p&gt;

&lt;h2 id=&quot;4-references&quot;&gt;4. References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.automl.org/book/&quot;&gt;AutoML book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol class=&quot;bibliography&quot;&gt;&lt;li&gt;&lt;span id=&quot;feurer2015efficient&quot;&gt;Feurer, M., Klein, A., Eggensperger, K., Springenberg, J., Blum, M., &amp;amp; Hutter, F. (2015). Efficient and robust automated machine learning. &lt;i&gt;Advances in Neural Information Processing Systems&lt;/i&gt;, 2962–2970.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;shahriari2016taking&quot;&gt;Shahriari, B., Swersky, K., Wang, Z., Adams, R. P., &amp;amp; De Freitas, N. (2016). Taking the human out of the loop: A review of bayesian optimization. &lt;i&gt;Proceedings of the IEEE&lt;/i&gt;, &lt;i&gt;104&lt;/i&gt;(1), 148–175.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;li2016hyperband&quot;&gt;Li, L., Jamieson, K., DeSalvo, G., Rostamizadeh, A., &amp;amp; Talwalkar, A. (2016). Hyperband: A novel bandit-based approach to hyperparameter optimization. &lt;i&gt;ArXiv Preprint ArXiv:1603.06560&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;shang2019am&quot;&gt;Shang, Z., Zgraggen, E., Buratti, B., Kossmann, F., Eichmann, P., Chung, Y., Binnig, C., Upfal, E., &amp;amp; Kraska, T. (2019). Democratizing Data Science through Interactive Curation of ML Pipelines . &lt;i&gt;Proceedings of the 2019 International Conference on Management of Data&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;
</description>
        <pubDate>Fri, 05 Apr 2019 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/automl_methods_challenges_and_opportunities/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/automl_methods_challenges_and_opportunities/</guid>
      </item>
    
      <item>
        <title>A Practical Overview of Feature Engineering in Machine Learning and How to Automate it</title>
        <description>&lt;p&gt;In this blog post, I am going to talk about feature engineering in machine learning, which is fundamental but difficult. I will first examine what techniques we have for applying feature engineering and then discuss some works on automating the process.&lt;/p&gt;

&lt;h2 id=&quot;1-introduction&quot;&gt;1. Introduction&lt;/h2&gt;

&lt;p&gt;Feature engineering is probably the most time consuming process when we do fine-tuning of a machine pipeline, which consist of pre-processing single feature (e.g., scaling numerical features or encoding categorical features), exploring the data to find correlations (e.g, feature crossing), feature selection and dimensionality reduction.&lt;/p&gt;

&lt;p&gt;Feature engineering is very important to the final performance of the predictive pipeline, which in some way decides the predictive power. In general, if we can compose better features, the better result we will get. On Kaggle (a website for all kinds of machine learning competitions), most winners spend most of them efforts in feature engineering.&lt;/p&gt;

&lt;p&gt;In this blog post, I will first talk about the basic methods used in feature engineering, and then review the recent works in automating this process.&lt;/p&gt;

&lt;h2 id=&quot;2-methods-for-feature-engineering&quot;&gt;2. Methods for Feature Engineering&lt;/h2&gt;

&lt;p&gt;Basically, there are three different groups of methods for feature engineering&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Pre-processing single feature, e.g., scaling, encoding and embedding&lt;/li&gt;
  &lt;li&gt;Combination of multiple features, e.g., feature crossing&lt;/li&gt;
  &lt;li&gt;Feature selection, e.g., decision tree-based feature selection&lt;/li&gt;
  &lt;li&gt;Dimensionality reduction, e.g., PCA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this section, I will go over all these three groups of methods in details, and for each group I will discuss some widely-used techniques and their benefits, along with their implementations in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scikit-learn&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;21-single-feature-processing&quot;&gt;2.1 Single Feature Processing&lt;/h3&gt;

&lt;p&gt;For single features, we first check if there are missing values (if so we need to impute them), then scale numerical features to make them have the same magnitude and encode categorical features for later computation. For some specific features, we can apply quantization-based methods to transform them into a quantile range to remove data redundancy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imputation of Missing Values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For some features, there may exist missing values, therefore we have to apply some imputation. In &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn&lt;/code&gt;, we can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.impute.SimpleImputer(missing_values=nan,strategy=’mean’,fill_value=None)&lt;/code&gt;, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strategy&lt;/code&gt; specifies what value we will be using for replacing missing values, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mean&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;median&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;most_frequent&lt;/code&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;constant&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scaling of Numerical Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since different numerical features probably have different orders of magnitude of scale (e.g., the number of students  and the average subjects registered per student at MIT), the performance of our predictive model can be solely decided by features with large scale and variance. Therefore, it is important to make each numerical feature in comparable scales.&lt;/p&gt;

&lt;p&gt;There are two mostly-used scalers in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.StandardScaler&lt;/code&gt;: standardizing features by removing the mean and scaling to unit variance, i.e., \(\frac{x - \mu}{\delta}\)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.MinMaxScaler&lt;/code&gt;: transforming features by scaling each feature to a given range, e.g., to transform features into the range (0, 1), we can scale the features as \(\frac{X - X_{min}}{X_{max} - X_{min}}\).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also some other scalers, for example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.RobustScaler&lt;/code&gt; is most robust to outliers by using statistics like median and quantile ranges. Besides, there is also a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.Normalizer&lt;/code&gt; which normalizes the features to convert them into unit vectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encoding of Categorical Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are two types of encodings in sklearn, i.e., ordinal encoding and one-hot encoding. Ordinal encoding transforms features into the range between 0 and the number of categories minus by 1, implemented by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.OrdinalEncoder&lt;/code&gt; (for converting features) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.LabelEncoder&lt;/code&gt; (for converting labels).&lt;/p&gt;

&lt;p&gt;One-hot encoding converts features into a vector whose length is the number of categories (which is a one-to-one match to the categories), and sets 1 for the corresponding category and 0 for other categories. There are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.OneHotEncoder&lt;/code&gt; (for converting features) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.LabelBinarizer&lt;/code&gt; (for converting labels) in sklearn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Binarization and Quantization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes the absolute value of a feature makes little difference after being above some threshold (e.g., the GRE score for graduate school application), it will be useful to simply binarize the data. Sklearn provides a easy-to-use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.Binarizer&lt;/code&gt; which binarizes data (set feature values to 0 or 1) according to the given threshold.&lt;/p&gt;

&lt;p&gt;Binarization is actually a special case of quantization. We can employ quantization to transform features to follow some specific distribution (e.g., a uniform or a normal distribution). There is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.QuantileTransformer&lt;/code&gt; in sklearn implementing quantization. There are other transformers as well, e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.PowerTransformer&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;22-combination-of-multiple-features&quot;&gt;2.2 Combination of Multiple Features&lt;/h3&gt;

&lt;p&gt;Sometimes it is important to combine several related features together, for example, if we have the height and weight information, we can compute BMI as a new feature. However, this requires&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Polynomial Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A easy trick to extend linear regression to polynomial regression is to augment the data by adding polynomial features. For example, assume the feature vector is \((X_1, X_2)\), we can augment them into \((X_1, {X_1}^2, X_2, {X_2}^2, X_1 X_2)\), therefore we can better fit the linear model in the quadratic space. We can easily implement this using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.PolynomialFeatures&lt;/code&gt; in sklearn by specifying the degree (e.g., 2 in the example).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Functional Transformations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is also possible to support more complex transformations, e.g., \(X_3 = \frac{X_1}{X_2}\). Sklearn provides &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.preprocessing.FunctionTransformer&lt;/code&gt; for a user-defined function to transform features.&lt;/p&gt;

&lt;h3 id=&quot;23-feature-selection&quot;&gt;2.3 Feature Selection&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Filtering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Filter-based methods select features based on some metric to evaluate its importance to the to-be-solved problem and just keep the most important features. For example,&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Variance, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.VarianceThreshold&lt;/code&gt; removes all low-variance features based on the given threshold;&lt;/li&gt;
  &lt;li&gt;Pearson correlation, where we pass the Pearson correlation (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scipy.stats.pearsonr&lt;/code&gt;) as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;score_func&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.SelectKBest&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Chi-squared stats, where we pass the chi-squared stats (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.chi2&lt;/code&gt;) as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;score_func&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.SelectKBest&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;ANOVA F-value between label/feature, where we pass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.f_classif&lt;/code&gt; (for classification) or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.f_regression&lt;/code&gt; (for regression) as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;score_func&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.SelectKBest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also some other score functions, e.g., mutual information (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.mutual_info_classif&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.mutual_info_regression&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapper Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most widely-used method is recursive feature elimination. We have a base model that is able to assign importance to each feature (e.g., a decision tree), we can train it in a recursive way. In each round, we remove some features with smallest weights and eventually we will get the desired number of features. This method is implemented by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection.RFE&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedded Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embedded methods try to embed the feature selection along with the train of predictive model. For example, we can use L1 or L2 regularization for feature selection (especially L1). This is implemented by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.feature_selection. SelectFromModel&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;24-dimensionality-reduction&quot;&gt;2.4 Dimensionality Reduction&lt;/h3&gt;

&lt;p&gt;After all these above preprocessing steps, we are essentially ready to train our first model for prediction. However, if the number of features is too big (so called the &lt;a href=&quot;https://en.wikipedia.org/wiki/Curse_of_dimensionality&quot;&gt;Curse of Dimensionality&lt;/a&gt;), the training will be super slow and the performance in general will not be good. Therefore, it is sometimes necessary to reduce the dimensionality. There are several methods we can use:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;PCA (Principal Component Analysis), this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.PCA&lt;/code&gt;, and its kernel variant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.KernelPCA&lt;/code&gt;, sparse variant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.SparsePCA&lt;/code&gt; and online variant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.IncrementalPCA&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Truncated SVD (while PCA is TruncatedSVD on centered data), this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.TruncatedSVD&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Factor Analysis, this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.FactorAnalysis&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Independent Component Analysis, this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.FastICA&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Non-Negative Matrix Factorization, this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.NMF&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;DictionaryLearning, this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.decomposition.DictionaryLearning&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;Agglomerative Clustering, this is implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sklearn.cluster.FeatureAgglomeration&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;3-automatic-feature-engineering&quot;&gt;3. Automatic Feature Engineering&lt;/h2&gt;

&lt;p&gt;Although deep learning has been employed for feature engineering on image, video and text data, it requires huge volume of training instances therefore it is not suitable for small or medium size of datasets. Also, it is difficult to find a good representation of features in normal tabular datasets as the inputs for deep learning (while data like image and video has a good representation by nature). Furthermore, the features learned by deep learning is difficult to explain and interpret, which prevents users from understanding the machine learning pipeline.&lt;/p&gt;

&lt;p&gt;To this end, there have been several other methods proposed to automate the tedious process of feature engineering. In general, there are &lt;strong&gt;TBU&lt;/strong&gt; different categories: (1) expansion-reduction; (2) greedy evolution; (3) Learning-based transformation.&lt;/p&gt;

&lt;h3 id=&quot;31-rule-based-feature-expansion-reduction&quot;&gt;3.1 Rule-based Feature Expansion-Reduction&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;citation&quot; href=&quot;#kanter2015deep&quot;&gt;(Kanter &amp;amp; Veeramachaneni, 2015)&lt;/a&gt; proposes a rule-based methods &lt;em&gt;Deep Feature Synthesis&lt;/em&gt; to expand the search space for relational data. Basically they have some pre-defined functions for processing single row in a table (e.g., doing some aggregations for some columns, MIN/MAX/SUM), and they follow the links (i.e., primary-foreign key) to join tables together and run these pre-defined functions on these joined tables.&lt;/p&gt;

&lt;p&gt;After getting the processed features, they further use Truncated SVD for feature selection and dimensionality reduction. They build a random forest on top and since the processed features are fixed, they can fine-tune the hyper-parameters of the random forest by Bayesian Optimization.&lt;/p&gt;

&lt;h3 id=&quot;32-greedy-feature-evolution&quot;&gt;3.2 Greedy Feature Evolution&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;citation&quot; href=&quot;#katz2016explorekit&quot;&gt;(Katz et al., 2016)&lt;/a&gt; constructs feature greedily by evaluating the performance of the model trained with the addition of candidate feature. To sort of avoid the expensive computation of training models, they employ learning to rank those newly constructed features and only evaluate these most promising ones. However, since they still need to train models to expand the feature space, this category of methods are still considered time-consuming.&lt;/p&gt;

&lt;h3 id=&quot;33-learning-based-transformation&quot;&gt;3.3 Learning-based Transformation&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Supervised Learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;citation&quot; href=&quot;#nargesian2017learning&quot;&gt;(Nargesian et al., 2017)&lt;/a&gt; proposes a machine learning-based methods for transformation of features. Specifically, they have a pre-defined set of unary (e.g., log, square-root) and binary (e.g., sum, subtraction) operations for features, and they train a classifier predicts the most promising transformation for each feature, which takes the Quantile Sketch Array of feature(s) for all classes as the input.&lt;/p&gt;

&lt;p&gt;To train this classifier, they evaluate the model with the original feature and the transformed feature, and if the improvement is beyond a threshold, they use this transformation as the positive sample and other transformations as the negative samples. One limitation is that their methods only work for binary classification problem and consider single feature (they don’t support any operations for multiple features).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reinforcement Learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;citation&quot; href=&quot;#khurana2018feature&quot;&gt;(Khurana et al., 2018)&lt;/a&gt; is sort of the follow-up of the above-mentioned paper. They still define a set of transformations for features, and they abstract the process of applying feature engineering as traversing on the transformation graph where the dataset is the node in the graph and the edge between two nodes is the transformation which changes the dataset (the source node) into another dataset (the destination node) by employing corresponding transformations on all applicable features. It starts with the initial dataset, and the ideal solution is to apply the sequence of transformation until the optimal node is constructed.&lt;/p&gt;

&lt;p&gt;To guide the expansion of the transformation graph, we need to find a strategy that picks the “correct” transformation and the “correct” source node at each step. There are lots of important factors influencing the decision, e.g., the node’s accuracy, the transformation’s average performance, number of times this transformation has been applied, accuracy gain to the source node from its parent, the depth of the node, the current remaining budget, number of features in the node and so on. They use reinforcement learning (more specifically, Q-learning with functional approximation) to find out the optimal strategy. One limitation is that they have to train every dataset to learn the Q-value function for this dataset.&lt;/p&gt;

&lt;h2 id=&quot;4-references&quot;&gt;4. References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zhihu.com/question/29316149&quot;&gt;特征工程到底是什么？(Chinese)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920049081.do&quot;&gt;Feature Engineering for Machine Learning: Principles and Techniques for Data Scientists&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.stanford.edu/~hastie/Papers/ESLII.pdf&quot;&gt;The Elements of Statistical Learning: Data Mining, Inference, and Prediction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/MLbook2016.htm&quot;&gt;机器学习-周志华&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol class=&quot;bibliography&quot;&gt;&lt;li&gt;&lt;span id=&quot;kanter2015deep&quot;&gt;Kanter, J. M., &amp;amp; Veeramachaneni, K. (2015). Deep feature synthesis: Towards automating data science endeavors. &lt;i&gt;2015 IEEE International Conference on Data Science and Advanced Analytics (DSAA)&lt;/i&gt;, 1–10.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;katz2016explorekit&quot;&gt;Katz, G., Shin, E. C. R., &amp;amp; Song, D. (2016). Explorekit: Automatic feature generation and selection. &lt;i&gt;2016 IEEE 16th International Conference on Data Mining (ICDM)&lt;/i&gt;, 979–984.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;nargesian2017learning&quot;&gt;Nargesian, F., Samulowitz, H., Khurana, U., Khalil, E. B., &amp;amp; Turaga, D. S. (2017). Learning Feature Engineering for Classification. &lt;i&gt;IJCAI&lt;/i&gt;, 2529–2535.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id=&quot;khurana2018feature&quot;&gt;Khurana, U., Samulowitz, H., &amp;amp; Turaga, D. (2018). Feature engineering for predictive modeling using reinforcement learning. &lt;i&gt;Thirty-Second AAAI Conference on Artificial Intelligence&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;
</description>
        <pubDate>Tue, 05 Mar 2019 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/a_practical_overview_of_feature_engineering_and_how_to_automate_it/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/a_practical_overview_of_feature_engineering_and_how_to_automate_it/</guid>
      </item>
    
      <item>
        <title>Some Good Papers in SIGMOD 2018 (Industry Sessions)</title>
        <description>&lt;p&gt;In this post, I am going to write my reading report for industry papers in SIGMOD 2018. I will go through all the papers I feel interesting and write their basic ideas, methods and my personal evaluations. Please let me know if you find anything inappropriate.&lt;/p&gt;

&lt;h2 id=&quot;session-1-adaptive-query-processing&quot;&gt;Session 1: Adaptive Query Processing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;computation-reuse-in-analytics-job-service-at-microsoft&quot;&gt;Computation Reuse in Analytics Job Service at Microsoft&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a computation reuse framework, CLOUDVIEWS, addressing the computation overlap problem in Microsoft’s SCOPE job service.&lt;/li&gt;
          &lt;li&gt;To materialize overlapping computations over recurring jobs (jobs that appear repeatedly, have template changes in each instance, and operate over new data each time), they use normalized signatures (which normalize the recurring changes) to identify subgraphs across recurring instances for materialization and precise signature to identify subgraphs within a recurring instance for reuse.&lt;/li&gt;
          &lt;li&gt;To provide accurate estimation for materialization, they use a feedback loop which extracts runtime statistics from the previous runs (by enumerating all possible subgraphs of all jobs seen within a time window in the past).&lt;/li&gt;
          &lt;li&gt;For the runtime, they build a metadata service for managing the information of materialized views, which provides looking-up (with inverted index) and saving (with exclusive lock). To prevent from multiple jobs with the same overlapping computation being scheduled concurrently, they reorder recurring jobs in the client job submission systems.&lt;/li&gt;
          &lt;li&gt;Computation reuse actually finds hidden redundancies, promotes data sharing across teams, provides better reliability and better cost estimates.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured. As an industry paper, it depicts the challenge, architecture, interface in a clear way. The section for “Lessons Learned” is really interesting.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-2-real-time-analytics&quot;&gt;Session 2: Real-time Analytics&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;pinot-realtime-olap-for-530-million-users&quot;&gt;Pinot: Realtime OLAP for 530 Million Users&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents Pinot, a single system at Linkedin serving tens of thousands of analytical queries per second, while offering near-realtime data ingestion from streaming data sources and handling the operational requirements of large web properties.&lt;/li&gt;
          &lt;li&gt;Pinot is used to power customer facing applications such as “Who viewed my profile” (WVMP) and newsfeed customization which requires very low latency, as well as internal business analyst dashboards where users want to slice and dice data.&lt;/li&gt;
          &lt;li&gt;Pinot follows the lambda architecture, and supports near-realtime data ingestion by reading from Kafka and offline data from Hadoop. Zookeeper is used as persistent metadata store and as the communication mechanism between nodes in the cluster.&lt;/li&gt;
          &lt;li&gt;Pinot uses fixed schema for tables, and tables are composed of segments. Segments are replicated and data in segments is immutable. Data orientation in Pinot segments is columnar, and various encodings are supported.&lt;/li&gt;
          &lt;li&gt;Pinot has been designed as a share-nothing architecture with stateless instances to be able to run on cloud infrastructure.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured. It provides a detailed and comprehensive solution to realtime OLAP analytics.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;robust-scalable-real-time-event-time-series-aggregation-at-twitter&quot;&gt;Robust, Scalable, Real-Time Event Time Series Aggregation at Twitter&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents TSAR (TimeSeries AggregatorR), a robust, scalable, real-time event time series aggregation framework built primarily for engagement monitoring: aggregating interactions with Tweets, segmented along a multitude of dimensions such as device, engagement type, etc.&lt;/li&gt;
          &lt;li&gt;TSAR is built on top of Summingbird, an open-source framework for integrating batch and online MapReduce computations.&lt;/li&gt;
          &lt;li&gt;TSAR relies on Twitter’s Manhattan key-value store to provide access for high-load dashboard applications. The output of batch jobs is first written to HDFS, and then bulk imported into Manhattan.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper mentions the Lambda Architecture, and the Kappa Architecture - where everything is a stream and therefore there is no distinction between batch and stream processing. In the future, it seems that there will be a unified architecture incorporating these two architectures.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;tcprt-instrument-and-diagnostic-analysis-system-for-service-quality-of-cloud-databases-at-massive-scale-in-real-time&quot;&gt;TcpRT: Instrument and Diagnostic Analysis System for Service Quality of Cloud Databases at Massive Scale in Real-time&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents TcpRT, the instrument and diagnosis in Alibaba Cloud RDS for real-time anomaly detection.&lt;/li&gt;
          &lt;li&gt;The overall workflow/architecture TcpRT is: the kernel module collects the metrics of each query, then sends them to a local process for aggregations, the results are written to Kafka, and ETL jobs are triggered to be running on JStorm to process the data in Kafaka and transform them into time series. These time series outputs are cached in Redist cluster for a while and then they are flushed to HybridDB. The automatic anomaly detection module scans time series data in Redis Cluster and HybridDB periodically.&lt;/li&gt;
          &lt;li&gt;They implement the collector module on top of the TCP congestion control module in Linux kernel, and they use a customized debugfs (a high performance in-memory filesystem) to transfer the collected trace records to the user space for further aggregation and transmission.&lt;/li&gt;
          &lt;li&gt;To support exact-one semantics, they have an independent offline repair job running to replay the data within the failure time with eventual consistency.&lt;/li&gt;
          &lt;li&gt;As for anomaly detection, they use a self-adjustable Cauchy distribution statistical model from historical performance data for each DB instance. They also refer to the network topology and anomalous events (e.g., out-of-order, retransmissions) to detect network issues.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and it provides a detailed solution to real-time monitoring. The visualization/reporting component is as important as the infrastructure.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-3-db-systems-in-the-cloud-and-open-source&quot;&gt;Session 3: DB systems in the Cloud and Open Source&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;amazon-aurora-on-avoiding-distributed-consensus-for-ios-commits-and-membership-changes&quot;&gt;Amazon Aurora: On Avoiding Distributed Consensus for I/Os, Commits, and Membership Changes&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents Amazon Aurora, a high-throughput cloud-native relational database, which pushes redo processing to a multi-tenant scale-out storage service.&lt;/li&gt;
          &lt;li&gt;Aurora consists of database instances which act as SQL endpoints and include most of the components of a database kernel (query processing, access methods, transactions, locking, buffer caching and undo management) and storage fleet which takes over redo logging, materialization of data blocks, garbage collection and backup/restore.&lt;/li&gt;
          &lt;li&gt;Aurora uses quorum model for read/write, where a system employs \(V\) copies and must obey two rules: (1) \(V_r + V_w &amp;gt; V\); (2) \(V_w &amp;gt; V/2\). Storage is partitioned into segments which are the minimum unit of failure, and they are small with no more than 10GB of addressable data blocks.&lt;/li&gt;
          &lt;li&gt;Each storage node in Aurora maintains a local Segment Complete LSN (SCL), and piggybacks it to the database instance which advances the Protection Group Complete LSN (PGCL) if four of six members of the protection group of storage nodes have advanced. They further have a Volume Complete LSN (VCL) on top of PGCL.&lt;/li&gt;
          &lt;li&gt;For crash recovery, it simply computes VCL and annuls any log records beyond VCL, and it uses volume epoch for establishing write quorum.&lt;/li&gt;
          &lt;li&gt;Aurora doesn’t do quorum read as the database instance knows which segments have the last durable version of a data block and can request it directly.&lt;/li&gt;
          &lt;li&gt;Aurora uses epoch for membership change, and they make two transitions (add the new member and then discard the failed member) to make each transition is reversible.&lt;/li&gt;
          &lt;li&gt;In Aurora, a protection group is composed of three full segments, which store both redo log records and materialized data blocks, and three tail segments, which contain redo log records alone. By doing this, it gives a smaller cost amplification and provides better flexibility.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written. However, it doesn’t talk about how these database instances communicate.&lt;/li&gt;
          &lt;li&gt;This paper presents a elegant and effective solution to scale the relation database on cloud, basically it isolates the complex logic and heavy computation/storage to better use the cloud environment.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;survivability-of-cloud-databases---factors-and-prediction&quot;&gt;Survivability of Cloud Databases - Factors and Prediction&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a solution to predicting how long public cloud databases survive before being dropped on Azure SQL DB.&lt;/li&gt;
          &lt;li&gt;They use Kaplan-Meier (KM) estimator to estimate the survival curve empirically.&lt;/li&gt;
          &lt;li&gt;They formulate the problem of predicting whether a database will be live more than 30 days given 2 days of telemetry data. This is a classification problem and they learn a random forest for prediction. Features include creation time, server and database names (patterns), database size, edition and performance level, subscription type and subscription history.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written. Although the method is relatively simple, it researches around an interesting and useful problem in cloud databases, which is like predicting user churn rate in subscription-based websites.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;graph-databases--query-processing-on-modern-hardware&quot;&gt;Graph Databases &amp;amp; Query Processing on Modern Hardware&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;rapid-in-memory-analytical-query-processing-engine-with-extreme-performance-per-watt&quot;&gt;RAPID: In-Memory Analytical Query Processing Engine with Extreme Performance per Watt&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents RAPID, a relational query processing engine designed to support modern analytical workloads with an emphasis on architecture-conscious performance at lower power consumption compared to existing database systems. RAPID provides a novel design from scratch with hardware aware data/storage model, query optimizations and data processing operators.&lt;/li&gt;
          &lt;li&gt;For the hardware architecture, RAPID adopts a Data Processing Unit (DPU) consisting of 32 data processing cores (dpCore), an on-chip programmable data movement engine Data Movement System (DMS), and a hardware block called the Atomic Transaction Engine (ATE) to communicate among dpCores efficiently.&lt;/li&gt;
          &lt;li&gt;The RAPID software is integrated into the host DBMS by offloading the query to RAPID for execution and sending results back, therefore durability and persistence are provided by the host database system.&lt;/li&gt;
          &lt;li&gt;RAPID stores the entire data in main-memory in columnar format, and it extensively uses decimal scaled binary number (DSB) encoding, dictionary encoding and run length encoding.&lt;/li&gt;
          &lt;li&gt;RAPID query execution framework adopts: (1) push-based execution model to avoid deep call stacks and save valuable resources (e.g., instruction caches and program stack memory); (2) an actor model for parallelism; (3) hardware-aware design for relational data access; (4) vectorized query processing.&lt;/li&gt;
          &lt;li&gt;RAPID’s query compiler and optimizer is a cost-based physical query optimizer working on top of the logical query optimizations by the host database. It uses “task” as the materialization point to stage pipelines. It also proposes some optimizations on partitioning and has optimized implementations for data processing operators. RAPID implements hash join by using a hash join kernel optimized for the DPU and DMEM.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written. It points out a fruitful direction for future research: co-design of hardware and software for specific applications (e.g., database and deep learning).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 16 Feb 2019 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_industry/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_industry/</guid>
      </item>
    
      <item>
        <title>2019 Weekly Summary Report</title>
        <description>&lt;h3 id=&quot;20191230---20200105&quot;&gt;2019/12/30 - 2020/01/05&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191223---20191229&quot;&gt;2019/12/23 - 2019/12/29&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Relax in Japan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191216---20191222&quot;&gt;2019/12/16 - 2019/12/22&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Relax in Japan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2019129---20191215&quot;&gt;2019/12/9 - 2019/12/15&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Discuss UDF and UDA&lt;/li&gt;
      &lt;li&gt;C++ UDF&lt;/li&gt;
      &lt;li&gt;C++ UDA&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Travel for NeurIPS 2019&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2019122---2019128&quot;&gt;2019/12/2 - 2019/12/8&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Camera ready for MetaLearn 2019&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Load a large dataset (100GB) into a DB on GCP&lt;/li&gt;
      &lt;li&gt;Refactor UDF/UDA docs&lt;/li&gt;
      &lt;li&gt;New image&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Refactor&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Submit TA2 image&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Exceptional C++ (done)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Review SIGMOD papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191125---2019121&quot;&gt;2019/11/25 - 2019/12/1&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Design new architecture&lt;/li&gt;
      &lt;li&gt;Update UDF/UDA design doc&lt;/li&gt;
      &lt;li&gt;Update othere design docs&lt;/li&gt;
      &lt;li&gt;Add planner&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;1.0 design doc&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;DuckDB code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Update J-1 waiver doc&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191118---20191124&quot;&gt;2019/11/18 - 2019/11/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;DuckDB benchmark&lt;/li&gt;
      &lt;li&gt;Throughput benchmark&lt;/li&gt;
      &lt;li&gt;Sampling benchmark&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
      &lt;li&gt;Support removing job&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Refactor code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Refactor code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Interpretable Machine Learning Chap 1-7 (finished)&lt;/li&gt;
      &lt;li&gt;DuckDB code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare J-1 waiver doc&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191111---20191117&quot;&gt;2019/11/11 - 2019/11/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Design documents&lt;/li&gt;
      &lt;li&gt;Refactor Python operators&lt;/li&gt;
      &lt;li&gt;Refactor job-related code (e.g., removing job runner)&lt;/li&gt;
      &lt;li&gt;Make Python test easier&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (3)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Prepare Japan tourist visa&lt;/li&gt;
      &lt;li&gt;International driving permit&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191104---20191110&quot;&gt;2019/11/04 - 2019/11/10&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Paper section 3-4&lt;/li&gt;
      &lt;li&gt;Comparison with MonetDB&lt;/li&gt;
      &lt;li&gt;Investigate VerdictDB&lt;/li&gt;
      &lt;li&gt;Discuss design&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Investigate pybind11&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 7-12 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191028---20191103&quot;&gt;2019/10/28 - 2019/11/03&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Design and implement scheduling algorithm&lt;/li&gt;
      &lt;li&gt;Prepare DSAIL Retreat slides &amp;amp; poster&lt;/li&gt;
      &lt;li&gt;Collect ground truths and validate&lt;/li&gt;
      &lt;li&gt;Support caching for streams&lt;/li&gt;
      &lt;li&gt;Restructure the paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
      &lt;li&gt;Support context for job&lt;/li&gt;
      &lt;li&gt;Implement rename operator&lt;/li&gt;
      &lt;li&gt;Support time range&lt;/li&gt;
      &lt;li&gt;Fix caching for calculated data source&lt;/li&gt;
      &lt;li&gt;Fix null values for binning and aggregation&lt;/li&gt;
      &lt;li&gt;Fix float/double precision problem&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 2-6&lt;/li&gt;
      &lt;li&gt;VLDB paper (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191021---20191027&quot;&gt;2019/10/21 - 2019/10/27&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Generate workloads with IDE-Bench&lt;/li&gt;
      &lt;li&gt;Experiment plan&lt;/li&gt;
      &lt;li&gt;Adaptive scheduling strategy&lt;/li&gt;
      &lt;li&gt;Profile and improve throughput&lt;/li&gt;
      &lt;li&gt;Benchmark for huge dataset&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;LLVM Essentials Chap 5-7&lt;/li&gt;
      &lt;li&gt;LLVM Slides 1-3 (finished)&lt;/li&gt;
      &lt;li&gt;VLDB papers (4)&lt;/li&gt;
      &lt;li&gt;Linux多线程服务端编程 Chap 1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Baidu scholarship application&lt;/li&gt;
      &lt;li&gt;Polish website&lt;/li&gt;
      &lt;li&gt;Clean room&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191014---20191020&quot;&gt;2019/10/14 - 2019/10/20&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Discuss with Tim about paper submission (VLDB Dec)&lt;/li&gt;
      &lt;li&gt;Benchmark for multiple jobs&lt;/li&gt;
      &lt;li&gt;Profile and improve throughput&lt;/li&gt;
      &lt;li&gt;Improve binning with Arrow kernels&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support deprecating streams in Python&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Designing Data-Intensive Applications Chap 11-12(finished)&lt;/li&gt;
      &lt;li&gt;LLVM Essentials Chap 1-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Thesis proposal submission&lt;/li&gt;
      &lt;li&gt;Mail OPT application&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20191007---20191013&quot;&gt;2019/10/07 - 2019/10/13&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper section 6-9&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Assign operator and job id&lt;/li&gt;
      &lt;li&gt;Create operator/job from description&lt;/li&gt;
      &lt;li&gt;Upgrade Apache Arrow to 0.15&lt;/li&gt;
      &lt;li&gt;Support random in filter&lt;/li&gt;
      &lt;li&gt;Integrate Prometheus cpp&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Integrate feature engineering&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Run dump exerperiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Designing Data-Intensive Applications Chap 9-10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190930---20191006&quot;&gt;2019/09/30 - 2019/10/06&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper section 2-5&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Refactor AutoML&lt;/li&gt;
      &lt;li&gt;Support feature importance operator&lt;/li&gt;
      &lt;li&gt;Design memory management&lt;/li&gt;
      &lt;li&gt;Make AutoML and feature importance faster&lt;/li&gt;
      &lt;li&gt;Refactor job management&lt;/li&gt;
      &lt;li&gt;Refactor Cython structure&lt;/li&gt;
      &lt;li&gt;Store aggregation results in nested layout&lt;/li&gt;
      &lt;li&gt;Investigate running Python in C++&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Run dump exerperiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Designing Data-Intensive Applications Chap 5-8&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Make thesis proposal&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190923---20190929&quot;&gt;2019/09/23 - 2019/09/29&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Simple scheduling strategy&lt;/li&gt;
      &lt;li&gt;Support min/max/distinct count aggregation&lt;/li&gt;
      &lt;li&gt;Keep track of job response timeline&lt;/li&gt;
      &lt;li&gt;Keep track of Python operator&lt;/li&gt;
      &lt;li&gt;Support startswith in filter&lt;/li&gt;
      &lt;li&gt;Refactor job runner&lt;/li&gt;
      &lt;li&gt;Refactor AutoML&lt;/li&gt;
      &lt;li&gt;Switch to pytest&lt;/li&gt;
      &lt;li&gt;Conform to Google C++ style&lt;/li&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Expose more information&lt;/li&gt;
      &lt;li&gt;Run dump exerperiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190916---20190922&quot;&gt;2019/09/16 - 2019/09/22&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper new outline&lt;/li&gt;
      &lt;li&gt;Davos paper writing&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support training and testing ML pipelines&lt;/li&gt;
      &lt;li&gt;Make a list of TODO features&lt;/li&gt;
      &lt;li&gt;Add SubJob operator&lt;/li&gt;
      &lt;li&gt;Refactor code to support job-based scheduling&lt;/li&gt;
      &lt;li&gt;Set up CppLint and clang-tidy&lt;/li&gt;
      &lt;li&gt;Refactor code&lt;/li&gt;
      &lt;li&gt;Keep track of jobs and operators in both C++ and Python&lt;/li&gt;
      &lt;li&gt;Implement new scheduling model&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;C++ Concurrency in Action Chap 8-10 (finished)&lt;/li&gt;
      &lt;li&gt;Random English readings (2)&lt;/li&gt;
      &lt;li&gt;Random paper (1)&lt;/li&gt;
      &lt;li&gt;Designing Data-Intensive Applications Chap 1-4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Practice piano (p58)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190909---20190915&quot;&gt;2019/09/09 - 2019/09/15&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Niseko paper submission (NeurIPS Meta-Learning workshop)&lt;/li&gt;
      &lt;li&gt;Alpine Meadow &amp;amp; Davos paper submission (NeurIPS Systems for ML workshop)&lt;/li&gt;
      &lt;li&gt;Davos paper writing&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Make starter projects for UROPs&lt;/li&gt;
      &lt;li&gt;Support faster projection&lt;/li&gt;
      &lt;li&gt;Implement OrderBy operator&lt;/li&gt;
      &lt;li&gt;Framework for translating jobs to SQL&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;C++ Concurrency in Action Chap 4-7&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Practice piano (p50)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190902---20190908&quot;&gt;2019/09/02 - 2019/09/08&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper outline&lt;/li&gt;
      &lt;li&gt;Davos paper writing&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Fix Gandiva offset bug&lt;/li&gt;
      &lt;li&gt;Support group by for strings&lt;/li&gt;
      &lt;li&gt;Improve sample info&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Run dump experiments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;C++ Concurrency in Action Chap 1-3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190826---20190901&quot;&gt;2019/08/26 - 2019/09/01&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper introduction&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support reading from S3&lt;/li&gt;
      &lt;li&gt;Support shuffling when sampling&lt;/li&gt;
      &lt;li&gt;Attend Arrow talk at VLDB&lt;/li&gt;
      &lt;li&gt;Set up Arrow development environment&lt;/li&gt;
      &lt;li&gt;Investigate Gandiva bug&lt;/li&gt;
      &lt;li&gt;Upload a 100 GB file to S3 and test&lt;/li&gt;
      &lt;li&gt;Fix CSV data source progress for S3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Fix random bugs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Niseko
    &lt;ul&gt;
      &lt;li&gt;Understand AM dumps&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective Modern C++ Chap 6-8 (finished)&lt;/li&gt;
      &lt;li&gt;Make VLDB 2018 reading list&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190819---20190825&quot;&gt;2019/08/19 - 2019/08/25&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support reading from MySQL database&lt;/li&gt;
      &lt;li&gt;Generate documentation&lt;/li&gt;
      &lt;li&gt;Test huge dataset&lt;/li&gt;
      &lt;li&gt;PM2 to manage server process&lt;/li&gt;
      &lt;li&gt;Support stopping job&lt;/li&gt;
      &lt;li&gt;Fix several bugs&lt;/li&gt;
      &lt;li&gt;Translator framework&lt;/li&gt;
      &lt;li&gt;Simple benchmark&lt;/li&gt;
      &lt;li&gt;Refactor CMake files&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective Modern C++ Chap 4-5&lt;/li&gt;
      &lt;li&gt;Star code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190812---20190818&quot;&gt;2019/08/12 - 2019/08/18&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Support reading from SQL database (SQLite3)&lt;/li&gt;
      &lt;li&gt;AutoML operator&lt;/li&gt;
      &lt;li&gt;Update API for sampling&lt;/li&gt;
      &lt;li&gt;Fix several bugs&lt;/li&gt;
      &lt;li&gt;Simple monitor&lt;/li&gt;
      &lt;li&gt;Fix hanging issue&lt;/li&gt;
      &lt;li&gt;Support creating data source from job&lt;/li&gt;
      &lt;li&gt;In operator&lt;/li&gt;
      &lt;li&gt;Distinct operator&lt;/li&gt;
      &lt;li&gt;Renamings in API&lt;/li&gt;
      &lt;li&gt;Refactor server code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective Modern C++ Chap 3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Move!&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190805---20190811&quot;&gt;2019/08/05 - 2019/08/11&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Deprecated stream&lt;/li&gt;
      &lt;li&gt;Join operator&lt;/li&gt;
      &lt;li&gt;Run Alpine Meadow&lt;/li&gt;
      &lt;li&gt;Design AutoML API&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Refactor to remove D3M dependencies&lt;/li&gt;
      &lt;li&gt;Refactor to run on Davos&lt;/li&gt;
      &lt;li&gt;Fix exiting (adding timeout)&lt;/li&gt;
      &lt;li&gt;Fix logging&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective STL Chap 3-7 (finished)&lt;/li&gt;
      &lt;li&gt;Effective Modern C++ Chap 1-2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190729---20190804&quot;&gt;2019/07/29 - 2019/08/04&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Davos paper outline&lt;/li&gt;
      &lt;li&gt;Read NIPS reviews&lt;/li&gt;
      &lt;li&gt;Submit NIPS rebuttal&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Add logging&lt;/li&gt;
      &lt;li&gt;Simple AutoML operator&lt;/li&gt;
      &lt;li&gt;Python script operator&lt;/li&gt;
      &lt;li&gt;Refactor server code&lt;/li&gt;
      &lt;li&gt;Architecture design&lt;/li&gt;
      &lt;li&gt;Semantic model&lt;/li&gt;
      &lt;li&gt;Code coverage report&lt;/li&gt;
      &lt;li&gt;More comments&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;七周七并发 Chap 3-9 (finished)&lt;/li&gt;
      &lt;li&gt;RxCpp code&lt;/li&gt;
      &lt;li&gt;Effective STL Chap 0-2&lt;/li&gt;
      &lt;li&gt;Terrier code&lt;/li&gt;
      &lt;li&gt;HpBandSter code&lt;/li&gt;
      &lt;li&gt;Tuplex code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190722---20190728&quot;&gt;2019/07/22 - 2019/07/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Fix memory leak bug in Davos&lt;/li&gt;
      &lt;li&gt;Better memory management&lt;/li&gt;
      &lt;li&gt;Better job management&lt;/li&gt;
      &lt;li&gt;Adopt publisher/subscriber model for stream in Davos&lt;/li&gt;
      &lt;li&gt;Refactor C++ and Python code&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 5 (finished)&lt;/li&gt;
      &lt;li&gt;Essential C++ Chap 1-7 (finished)&lt;/li&gt;
      &lt;li&gt;七周七并发 Chap 1-2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190715---20190721&quot;&gt;2019/07/15 - 2019/07/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Add progress in data stream&lt;/li&gt;
      &lt;li&gt;Investigate Python Embedding&lt;/li&gt;
      &lt;li&gt;Implement filter in C++&lt;/li&gt;
      &lt;li&gt;Implement calculate attribute in C++&lt;/li&gt;
      &lt;li&gt;Fix docker image&lt;/li&gt;
      &lt;li&gt;Introduce ANTLR for UDF&lt;/li&gt;
      &lt;li&gt;Internal metrics&lt;/li&gt;
      &lt;li&gt;Support sampler in Davos&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix bugs&lt;/li&gt;
      &lt;li&gt;Prepare submission for TA2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190708---20190714&quot;&gt;2019/07/08 - 2019/07/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Implement new server&lt;/li&gt;
      &lt;li&gt;Prepare docker images for development and server&lt;/li&gt;
      &lt;li&gt;Upgrade Apache Arrow&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix server bugs&lt;/li&gt;
      &lt;li&gt;Swtich back to use D3M primitives&lt;/li&gt;
      &lt;li&gt;Merge TA2 stuff together&lt;/li&gt;
      &lt;li&gt;Evaluation script for TA2&lt;/li&gt;
      &lt;li&gt;Support more datasets&lt;/li&gt;
      &lt;li&gt;Support data augmentation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;More Effective C++ Chap 3&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190701---20190707&quot;&gt;2019/07/01 - 2019/07/07&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Fix binning, aggregation operator&lt;/li&gt;
      &lt;li&gt;Set up docker&lt;/li&gt;
      &lt;li&gt;SIGMOD talk &amp;amp; poster&lt;/li&gt;
      &lt;li&gt;Set up CI&lt;/li&gt;
      &lt;li&gt;Land new design to master branch&lt;/li&gt;
      &lt;li&gt;Fix warnings &amp;amp; linters&lt;/li&gt;
      &lt;li&gt;Support task discovery&lt;/li&gt;
      &lt;li&gt;Support machine learning primitives&lt;/li&gt;
      &lt;li&gt;Add more tests&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Prepare DARPA D3M Breif&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;TPOT code&lt;/li&gt;
      &lt;li&gt;More Effective C++ Chap 1-2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190624---20190630&quot;&gt;2019/06/24 - 2019/06/30&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Support filter, brush in Davos&lt;/li&gt;
      &lt;li&gt;Support histogram workflow&lt;/li&gt;
      &lt;li&gt;Update SIGMOD talk slides&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix server bug&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Random papers (4)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190617---20190623&quot;&gt;2019/06/17 - 2019/06/23&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Implement new design&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190610---20190616&quot;&gt;2019/06/10 - 2019/06/16&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Prepare SIGMOD talk slides&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;TA2 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Python High Performance Chap 1-9 (finished)&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190603---20190609&quot;&gt;2019/06/03 - 2019/06/09&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Discuss new design&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective C++ Chap 7-9 (finished)&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190527---20190602&quot;&gt;2019/05/27 - 2019/06/02&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Support merge tables in Davos&lt;/li&gt;
      &lt;li&gt;Support reservior sampling in Davos&lt;/li&gt;
      &lt;li&gt;Support UDF in Davos&lt;/li&gt;
      &lt;li&gt;ML primitives and pipeline in Davos&lt;/li&gt;
      &lt;li&gt;Support projection in Davos&lt;/li&gt;
      &lt;li&gt;Davos paper outline&lt;/li&gt;
      &lt;li&gt;Support single and multiple batches in Davos&lt;/li&gt;
      &lt;li&gt;Support scoring pipelines in Davos&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Effective C++ Chap 1-6&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190520---20190526&quot;&gt;2019/05/20 - 2019/05/26&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;NIPS paper submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;TA3 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 Exam&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;分布式机器学习 Chap 7-12 (finished)&lt;/li&gt;
      &lt;li&gt;Random papers (1)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190513---20190519&quot;&gt;2019/05/13 - 2019/05/19&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;NIPS paper writing&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;TA2 submission&lt;/li&gt;
      &lt;li&gt;TA3 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 checkoff meeting&lt;/li&gt;
      &lt;li&gt;6.888 poster session&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Cython book Chap 11-13&lt;/li&gt;
      &lt;li&gt;Review AutoML papers (2)&lt;/li&gt;
      &lt;li&gt;分布式机器学习 Chap 1-6&lt;/li&gt;
      &lt;li&gt;Random papers (2)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190506---20190512&quot;&gt;2019/05/06 - 2019/05/12&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;More aggregation functionality&lt;/li&gt;
      &lt;li&gt;Support chunked-based reading of CSV&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks for Alpine Meadow&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix TA2 submission&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 final project&lt;/li&gt;
      &lt;li&gt;6.888 final project&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Cython book Chap 7-10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Netherlands visa interview&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190429---20190505&quot;&gt;2019/04/29 - 2019/05/05&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Start writing design document&lt;/li&gt;
      &lt;li&gt;Faster implementation of filter&lt;/li&gt;
      &lt;li&gt;Full implementation of binning&lt;/li&gt;
      &lt;li&gt;Full implementation of brushes&lt;/li&gt;
      &lt;li&gt;Aggregation with confidence interval&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix TA2TA3 CI&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class&lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;NIPS papers (3)&lt;/li&gt;
      &lt;li&gt;Cython book Chap 5-6&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Netherlands visa appointment&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190422---20190428&quot;&gt;2019/04/22 - 2019/04/28&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Davos
    &lt;ul&gt;
      &lt;li&gt;Understand histogram in IDEA&lt;/li&gt;
      &lt;li&gt;Investigate Bazel&lt;/li&gt;
      &lt;li&gt;Use docker to compile Davos API protobuf&lt;/li&gt;
      &lt;li&gt;C++ implementation of binning&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Alpine Meadow
    &lt;ul&gt;
      &lt;li&gt;Run benchmarks&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 PC Discussion&lt;/li&gt;
      &lt;li&gt;6.888 Project Meeting&lt;/li&gt;
      &lt;li&gt;6.888 PC Discussion Summary&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;NIPS papers (3)&lt;/li&gt;
      &lt;li&gt;Cython book Chap 1-4&lt;/li&gt;
      &lt;li&gt;Understand ConfigSpace&lt;/li&gt;
      &lt;li&gt;Understand Apache Arrow documentation&lt;/li&gt;
      &lt;li&gt;Understand DataLinter&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190415---20190421&quot;&gt;2019/04/15 - 2019/04/21&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;JIRA/Gitlab integration&lt;/li&gt;
      &lt;li&gt;Expose outputs in the new backend&lt;/li&gt;
      &lt;li&gt;Support simple D3M dataset in the new backend&lt;/li&gt;
      &lt;li&gt;Set up CI for the new backend&lt;/li&gt;
      &lt;li&gt;Interview with UROPs&lt;/li&gt;
      &lt;li&gt;Show metrics for the new backend&lt;/li&gt;
      &lt;li&gt;Scramble code of Alpine Meadow&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Brainstorm NIPS paper idea&lt;/li&gt;
      &lt;li&gt;Submit the final SIGMOD camera-ready paper&lt;/li&gt;
      &lt;li&gt;Run benchmarks for Alpine Meadow&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 Lab 4&lt;/li&gt;
      &lt;li&gt;6.888 Paper Reviews&lt;/li&gt;
      &lt;li&gt;6.888 Paper Review Slide&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;NIPS papers (5)&lt;/li&gt;
      &lt;li&gt;AutoML book Chap 10&lt;/li&gt;
      &lt;li&gt;Understand autosklearn&lt;/li&gt;
      &lt;li&gt;Understand SMAC&lt;/li&gt;
      &lt;li&gt;Tensorflow paper&lt;/li&gt;
      &lt;li&gt;AlphaD3M paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190408---20190414&quot;&gt;2019/04/08 - 2019/04/14&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Fix benchmark of Alpine Meadow&lt;/li&gt;
      &lt;li&gt;Support graph for fast D3M dataset loader&lt;/li&gt;
      &lt;li&gt;Scrum tutorial&lt;/li&gt;
      &lt;li&gt;Add examples for Alpine Meadow&lt;/li&gt;
      &lt;li&gt;Support catalog for new backend&lt;/li&gt;
      &lt;li&gt;Better logging in the new backend&lt;/li&gt;
      &lt;li&gt;Simple Python prototype for the new backend&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Submit SIGMOD camera-ready paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 Project Meeting&lt;/li&gt;
      &lt;li&gt;6.888 Lab 4&lt;/li&gt;
      &lt;li&gt;6.858 Lab 4&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;AutoML book Chap 1-9&lt;/li&gt;
      &lt;li&gt;Hulu Deep Learning posts&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;AutoML post&lt;/li&gt;
      &lt;li&gt;Add research of Alpine Meadow on personal website&lt;/li&gt;
      &lt;li&gt;NIPS papers (3)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190401---20190407&quot;&gt;2019/04/01 - 2019/04/07&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Discuss new backend design&lt;/li&gt;
      &lt;li&gt;Investigate Jira&lt;/li&gt;
      &lt;li&gt;Dump metrics as json&lt;/li&gt;
      &lt;li&gt;Setup and run benchmarks on K8s&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Run experiments for SIGMOD camera-ready paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 final project proposal&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;PhD grind (finished)&lt;/li&gt;
      &lt;li&gt;AutoML post Section 0 and 1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Misc
    &lt;ul&gt;
      &lt;li&gt;Update research page for personal website&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190325---20190331&quot;&gt;2019/03/25 - 2019/03/31&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Support persistent caching for image datasets&lt;/li&gt;
      &lt;li&gt;Support for Strata&lt;/li&gt;
      &lt;li&gt;Add benchmark for TPOT and autosklearn&lt;/li&gt;
      &lt;li&gt;Fast D3M dataset loader for image dataset&lt;/li&gt;
      &lt;li&gt;Refactor ensemble as an optimization&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;New idea for feature engineering&lt;/li&gt;
      &lt;li&gt;New idea for backend&lt;/li&gt;
      &lt;li&gt;Run experiments for SIGMOD camera-ready paper&lt;/li&gt;
      &lt;li&gt;Update plots for SIGMOD camera-ready paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;Find final project group for 6.888&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Mastering PhD Chap 11-19 (finished)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190318---20190324&quot;&gt;2019/03/18 - 2019/03/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Set up Kubernetes volume on GCP with Filestore&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Discuss the new backend system design&lt;/li&gt;
      &lt;li&gt;Run experiments for SIGMOD camera-ready paper&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 Lab 3 Part II (finished)&lt;/li&gt;
      &lt;li&gt;Prepare for 6.858 Quiz&lt;/li&gt;
      &lt;li&gt;6.858 Lab 3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;推荐系统实践 Chap 2-8 (finished)&lt;/li&gt;
      &lt;li&gt;Mastering PhD Chap 4-10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190311---20190317&quot;&gt;2019/03/11 - 2019/03/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Set up dockerfile for GPU and test the system with GPU&lt;/li&gt;
      &lt;li&gt;Make the marketing dataset faster by pre-computing results&lt;/li&gt;
      &lt;li&gt;Export a pipeline as a script&lt;/li&gt;
      &lt;li&gt;Submit TA3 image for dry-run evaluation&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 Lab 3 Part I&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Automatic feature engineering papers&lt;/li&gt;
      &lt;li&gt;Mastering PhD Chap 1-3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190304---20190310&quot;&gt;2019/03/04 - 2019/03/10&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Collect some related works for new backend&lt;/li&gt;
      &lt;li&gt;Implement the first prototype for histogram in the new backend&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Submit TA2 image for dry-run evaluation&lt;/li&gt;
      &lt;li&gt;Run the marketing dataset&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.888 Lab 2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Hands on Machine Learning Chap 9-16, Appendix (finished)&lt;/li&gt;
      &lt;li&gt;SIGMOD 2018 industry papers (3)&lt;/li&gt;
      &lt;li&gt;百面机器学习 Chap 13-14&lt;/li&gt;
      &lt;li&gt;CS231n slides&lt;/li&gt;
      &lt;li&gt;Write feature engineering post&lt;/li&gt;
      &lt;li&gt;CNN book (解析卷积神经网络——深度学习实践手册)&lt;/li&gt;
      &lt;li&gt;CS20 slides&lt;/li&gt;
      &lt;li&gt;推荐系统实践 Chap 1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190225---20190303&quot;&gt;2019/02/25 - 2019/03/03&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Discuss new backend design&lt;/li&gt;
      &lt;li&gt;Propose the first version of Protobuf for the new backend&lt;/li&gt;
      &lt;li&gt;Investigate streaming engine&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Submit TA2/TA3 to D3M program index&lt;/li&gt;
      &lt;li&gt;Upgrade to latest TA2-TA3 API&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 Lab 2&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Hands on Machine Learning Chap 4-6, 8&lt;/li&gt;
      &lt;li&gt;SIGMOD 2018 industry papers (4)&lt;/li&gt;
      &lt;li&gt;百面机器学习 Chap 4-12&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190218---20190224&quot;&gt;2019/02/18 - 2019/02/24&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Submit revised paper to SIGMOD&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Add routine heartbeat message&lt;/li&gt;
      &lt;li&gt;Add tag for pipeline&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Deep Learning Chap 12-20 (finished)&lt;/li&gt;
      &lt;li&gt;Hands on Machine Learning Chap 1-3, 7&lt;/li&gt;
      &lt;li&gt;百面机器学习 Chap 1-3&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;20190211---20190217&quot;&gt;2019/02/11 - 2019/02/17&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Research
    &lt;ul&gt;
      &lt;li&gt;Address SIGMOD paper reviews&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;D3M
    &lt;ul&gt;
      &lt;li&gt;Speed up time model&lt;/li&gt;
      &lt;li&gt;Support graph matching&lt;/li&gt;
      &lt;li&gt;Dump cost model as CSV/JSON&lt;/li&gt;
      &lt;li&gt;Check performance variation of mimic dataset and believe it is much smaller now&lt;/li&gt;
      &lt;li&gt;Visualize dumps/logs (time as x-axis and performance of pipeline is y-axis)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Class
    &lt;ul&gt;
      &lt;li&gt;6.858 Lab 1&lt;/li&gt;
      &lt;li&gt;6.888 Lab 0, 1&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading
    &lt;ul&gt;
      &lt;li&gt;Deep Learning Chap 10, 11&lt;/li&gt;
      &lt;li&gt;SIGMOD 2018 research papers (18)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;日语五十音&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 01 Jan 2019 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/2019_weekly_summary_report/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/2019_weekly_summary_report/</guid>
      </item>
    
      <item>
        <title>Some Good Papers in SIGMOD 2018 (Research Sessions 9-15)</title>
        <description>&lt;p&gt;In this post, I write my reading report for research papers in SIGMOD 2018. I will go through all the papers I feel interesting and write their basic ideas, methods and my personal evaluations. Please let me know if you find anything inappropriate.&lt;/p&gt;

&lt;h2 id=&quot;session-9-similarity-queries--estimation&quot;&gt;Session 9: Similarity Queries &amp;amp; Estimation&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;lightweight-cardinality-estimation-in-lsm-based-systems&quot;&gt;Lightweight Cardinality Estimation in LSM-based Systems&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a light-weight way of collecting statistics that alleviates the high cost of building synopses by incorporating the statistics accumulation into the common LSM-based database storage layer lifecycle events, e.g., flush, merge.&lt;/li&gt;
          &lt;li&gt;They support three kinds of synopses: equi-width histograms, equi-height histograms and wavelets, only on primary keys (PK) or on secondary keys (SK). To address the issue of anti-matter records (e.g., deletion), they construct a separate “anti”-synopsis for anto-matter records and compute the difference of these two synopses when there is a query. As for the distributed computation, every LSM-framework event creates a local synopsis that is sent over the network to the master node.&lt;/li&gt;
          &lt;li&gt;The mergeability of synopses is important in the distributed setting, however, only equi-width histograms can be combined (while wavelets allow merging with loss of accuracy). Since this paper primarily focuses on using the statistics for query optimization, where a silght mis-estimation could lead to significant errors, the authors choose to keep all statistics, even with mergeable ones as separate entries. To mitigate the cost of querying synopses, the system periodically merges appropriate synopses.&lt;/li&gt;
          &lt;li&gt;They used a experimental framework from a paper in SIGMOD 1996 which supports generating synthesized data of many distributions. Aside from those, they also used a real-life dataset of web sever log entries during World Cup 1998. They used four types of range queries: fixed-length, half open, random and point. They measured the overhead and accuracy in the experiments.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written with enough background and smooth logic flow. However, the pseudocode of algorithms are not well formatted.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;column-sketches-a-scan-accelerator-for-rapid-and-robust-predicate-evaluation&quot;&gt;Column Sketches: A Scan Accelerator for Rapid and Robust Predicate Evaluation&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents the Column Sketch, a data structure for accelerating scans which uses lossy compression to improve performance regardless of selectivity, data-value distribution, and data clustering.&lt;/li&gt;
          &lt;li&gt;Traditional indexes (e.g., B-trees) don’t perform well with high selectivity; lightweight indexes (e.g., ZoneMap, Column Imprints and Feature Based Data Skipping), which use summary statistics over groups of data to enable data skipping, provide no help when data does not exhibit clustering properties; early pruning methods (e.g., Byte-Slicing, Bit-Slicing and Approximate and Refine) which partition data, decompose the predicate into conjunctions of disjoint sub-predicates and use them to skip blocks of data. Thus they propose the column sketch for queries with moderate selectivity over unclustered data.&lt;/li&gt;
          &lt;li&gt;The column sketch consists of two parts, a compression map that maps the values in the base data to their assigned codes in the sketched column, and a sketched column that sores the output of compression map. During query, we read the sketched column first and only look at the base data when the predicate on the sketched data is true.&lt;/li&gt;
          &lt;li&gt;The objective of compression map is to: (1) assign frequently seen values their own unique code; (2) assign non-unique codes similar number of values; (3) preserve order when necessary; (4) handle unseen values in the domain without re-encoding; (5) exploit frequently queried values (optional). For numerical compression maps, they use equi-depth histograms with reserved codes for frequent values; for categorical compression maps, they use dictionary encoding with a limit of number of unique codes.&lt;/li&gt;
          &lt;li&gt;They use SIMD instructions when doing predicate evaluation over column sketches.&lt;/li&gt;
          &lt;li&gt;They compared against an optimized sequential scan, BitWeaving/V, Column Imprints and a B-tree index. To eliminate the effects of NUMA, each of the experiments in run on a single socket. They measure the performance in terms of cycles per tuple.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper mentions an interesting fact: currently scans outperform B-trees for query selectivities as low as 1%.&lt;/li&gt;
          &lt;li&gt;This paper is well written with clear logic flows. It is important to first clarify your design goals then describe the implementation details to let readers better understand your techniques.&lt;/li&gt;
          &lt;li&gt;This paper finds a scenario (or a problem setting) where the current approaches don’t work well (i.e., queries with moderate selectivity over unclustered data), then proposes the targeted methods to address it.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;overlap-set-similarity-joins-with-theoretical-guarantees&quot;&gt;Overlap Set Similarity Joins with Theoretical Guarantees&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents the solution to the set similarity join problem with overlap constraints. It divides the sets into small and large ones and processes them separately. They propose some optimization heuristics for small sets since there are been existing methods for large sets.&lt;/li&gt;
          &lt;li&gt;The size boundary between small and large sets is crucial to the efficiency, they further propose a cost-based method to select the size boundary.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-10-analytical-queries&quot;&gt;Session 10: Analytical Queries&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;efficient-k-regret-query-algorithm-with-restriction-free-bound-for-any-dimensionality&quot;&gt;Efficient k-Regret Query Algorithm with Restriction-free Bound for any Dimensionality&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents an algorithm to solve the k-regret query problem, which is a integration of top-k and skyline query.&lt;/li&gt;
          &lt;li&gt;They proposes the algorithm SPHERE, which is a variation of the \(\epsilon\)-kernel algorithm.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written as a theory paper. However, I don’t have the patience to carefully read it.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;a-rating-ranking-method-for-crowdsourced-top-k-computation&quot;&gt;A Rating-Ranking Method for Crowdsourced Top-k Computation&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a rating-ranking method for crowdsourced top-k computation, which asks either rating or ranking questions to the crowd.&lt;/li&gt;
          &lt;li&gt;Rating questions are used to get a rough score for each object, from which the objects with much smaller scores can be pruned; ranking questions are used to refine the scores.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured. It uses some statistics and probability methods to estimate the top-k objects, and the combination of rating and ranking is novel.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
## Session 12: Distributed and Parallel Databases

- ### PlinyCompute: A Platform for High-Performance, Distributed, Data-Intensive Tool Development
    - **Summary**
        1. This paper presents PlinyCompute, a system for development of high-performance, data-intensive, distributed computing tools and libraries.

    - **Comments**
        1. This paper is difficult to read. It will be better if they provide some intuition and examples.
--&gt;

&lt;h2 id=&quot;session-13-machine-learning--knowledge-base-construction&quot;&gt;Session 13: Machine Learning &amp;amp; Knowledge-base Construction&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;sketchml-accelerating-distributed-machine-learning-with-data-sketches&quot;&gt;SketchML: Accelerating Distributed Machine Learning with Data Sketches&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents SketchML, which compresses the sparse and nonuniform-distributed gradient values to better support distributed machine learning (assuming that the communication cost of gradients is nontrivial, i.e. communication-intensive workloads).&lt;/li&gt;
          &lt;li&gt;For a sparse gradient vector consisting of key-value pairs, they use a sketch-based algorithm (quantile sketch with loss of accuracy) to compress values and a delta-binary encoding method (without loss of accuracy) to compress keys.&lt;/li&gt;
          &lt;li&gt;They first convert the gradient values to the bucket indexes by quantile sketch, then use a MinMaxSketch to store the bucket indexes. This is based on the assumption that SGD can still converge with quantification error and underestimated gradients. They also propose separation of positive/negative gradients to avoid reversed gradient (where gradient is actually overestimated) and adaptive learning rate and grouped MinMaxSketch to address vanishing gradient.&lt;/li&gt;
          &lt;li&gt;They use datasets from KDD CUP 2010, KDD Cup 2012 to compare against Adam SGD and ZipML on Logistic Regression, SVM and Linear Regression.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured. However, some parts are a little bit wordy (e.g., why they didn’t use frequency sketch).&lt;/li&gt;
          &lt;li&gt;They also pointed out the limitations of their methods in the paper, I think it is good.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;mistique-a-system-to-store-and-query-model-intermediates-for-model-diagnosis&quot;&gt;MISTIQUE: A System to Store and Query Model Intermediates for Model Diagnosis&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents MISTIQUE, a system that works with traditional ML pipelines and deep neural networks to efficiently capture, store and query model intermediates for diagnosis.&lt;/li&gt;
          &lt;li&gt;To store the model intermediates, they use quantization (including lower precision float representation, k-bit quantization and threshold-based quantization), exact and approximate de-duplication (e.g., sharing the intermediate results between pipelines/models) and adaptive materialization (only materializing frequently-queried intermediates), to reduce the storage footprint.&lt;/li&gt;
          &lt;li&gt;They propose a cost model to decide whether to store a intermediate and whether to execute a query by running a model or reading an intermediate.&lt;/li&gt;
          &lt;li&gt;They used dataset and pipelines from Kaggle Zestimate competition for traditional ML models, and CIFAR10 with VGG16 and another simple CNN model for DNN models.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;The topic of storing intermediate results is very interesting and also important, especially for model diagnosis and AutoML. By smart use of intermediate results, we can save lots of computation and also use them to better guide the model search.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;a-general-and-efficient-querying-method-for-learning-to-hash&quot;&gt;A General and Efficient Querying Method for Learning to Hash&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a new fine-grained similarity indicator, quantization distance (QD), to replace the Hamming Rank (HR) used in learning to hash for the approximate nearest neighbors (ANN) search problem. They further develop two efficient querying methods based on QD.&lt;/li&gt;
          &lt;li&gt;The quantization distance is defined by the sum of the product of XOR of binary codes and absolute value of the projected vector for each dimension. Intuitively, it measures the minimum change required to the projected vector such that it can be quantized to bucket.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;Learning to hash is an interesting topic and the proposed indicator QD is more reasonable than coarse-grained Hamming Rank. It reminds me that sometimes we can replace some intermediate metric (or indicator) to achieve better performance and help algorithm design.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;dimboost-boosting-gradient-boosting-decision-tree-to-higher-dimensions&quot;&gt;DimBoost: Boosting Gradient Boosting Decision Tree to Higher Dimensions&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents DimBoost, a system for training gradient boosting decision tree (GBDT) on high-dimensionality data.&lt;/li&gt;
          &lt;li&gt;DimBoost uses the parameter server (PS) architecture, where several machines together store a parameter to prevent the single-point bottleneck, and provide interfaces for workers to push and pull parameters. Each worker holds a local copy of the parameter, and periodically pushes parameter updates to the PS.&lt;/li&gt;
          &lt;li&gt;To speed up histogram construction, they propose a sparsity-aware algorithm, and construct it in batch with layer-wise parallelism.&lt;/li&gt;
          &lt;li&gt;To speed up finding split, they compress the gradient histogram (with loss of precision), use round-robin based scheduling to assign the task of splitting active nodes to workers, and they use two-phase (firstly each server finds the local optimal split and send it to the assigned worker, and secondly the worker finds the global optimal from local optimal splits) to reduce the communication overhead.&lt;/li&gt;
          &lt;li&gt;DimBoost is implemented in Java and deployed on Yarn. They use Netty to manage the message passing between physical machines.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;It is good to cooperate with companies because they have huge volumes of real-world data and real-world problems to be solved.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;auto-detect-data-driven-error-detection-in-tables&quot;&gt;Auto-Detect: Data-Driven Error Detection in Tables&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents Auto-Detect, a statistics-based technique that leverages co-occurrence statistics from large corpora for error detection.&lt;/li&gt;
          &lt;li&gt;They convert values to patterns using some generalization languages, and detect the single-column error by checking the point-wise mutual information (PMI). By aggregating the scores (PMIs) of different generalization languages together, it give the final prediction for whether it is a error.&lt;/li&gt;
          &lt;li&gt;To generate the training data, they use distant-supervision to augment the labeled data to get a large training dataset. And they develop an approximate static-threshold aggregation algorithm to find thresholds for each generalization algorithm. If any of the generalization languages give a score lower than its threshold, we predict it as incompatible. To reduce the memory footprint, they use sketch (and thus control the memory budget).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;The generalization languages still have been to composed by manual. And we have to run the whole framework for each combination of columns.&lt;/li&gt;
          &lt;li&gt;If I understand correctly, for each column, they need to find another paired column, I didn’t find anything in the paper about how to find this paired column.&lt;/li&gt;
          &lt;li&gt;I am curious about the running time of their algorithms, seems that it would be slow. However, there are no related experiments in the paper.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-14-approximate-query-processing&quot;&gt;Session 14: Approximate Query Processing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;verdictdb-universalizing-approximate-query-processing&quot;&gt;VerdictDB: Universalizing Approximate Query Processing&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents VerdictDB, a middleware rewriting analytical queries to compute an approximate answer and error estimates.&lt;/li&gt;
          &lt;li&gt;VerdictDB creates samples offline and rewrites the query to make it execute on the samples, including uniform, hashed, stratified and irregular samples.&lt;/li&gt;
          &lt;li&gt;They propose the variational sub-sampling to enable faster error estimation while retaining the same asymptotic properties.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;I don’t think middleware is the right way to go for AQP, it provides good generalization and flexibility, however, it also makes low-level optimizations difficult.&lt;/li&gt;
          &lt;li&gt;This paper talks about offline sampling, while online sampling is also an important topic.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;aqp-connecting-approximate-query-processing-with-aggregate-precomputation-for-interactive-analytics&quot;&gt;AQP++: Connecting Approximate Query Processing With Aggregate Precomputation for Interactive Analytics&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents AQP++, which connects sampling-based approximate query processing (AQP) and aggregate precomputation (AggPre) and achieves a better trade-off among preprocessing cost, query response time, and answer quality. The basic idea is that it uses precomputed exact answers as the starting point, and then estimates the difference between the precomputed answer and the real answer by sampling. Therefore, AQP++ subsumes AQP and AggPre.&lt;/li&gt;
          &lt;li&gt;Since AQP++ uses AQP to estimate the difference, if we compare the variances of them estimations, when the correlation between the original query and the difference query is big, AQP++ returns a more accurate result.&lt;/li&gt;
          &lt;li&gt;To build the pre-computed aggregation, they propose blocked prefix cube which computes a small portion of the cells in the traditional prefix cubes. The problem of selecting blocks can be regarded as a optimization problem that minimizes the expected query error. They propose an adaptive hill climbing approach to address this problem.&lt;/li&gt;
          &lt;li&gt;To decide which pre-computed aggregation to use, they use sub-sampling to estimate the confidence interval of the difference query, and choose the one with the smallest confidence interval.&lt;/li&gt;
          &lt;li&gt;They ran their system on TPCD-Skew, BigBench (a synthetic dataset from the Big Data Benchmark) and TLCTrip (from the NYC Taxi and Limousine Commission).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
          &lt;li&gt;It is always interesting and useful to combine two seemingly orthogonal (but actually connected in some way) ideas together to achieve better overall performance in the system.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;!---
- ### Accelerating Machine Learning Inference with Probabilistic Predicates
    - **Summary**
        1. This paper presents probabilistic predicates, which trains a cheap binary classification model for an expensive filter.

    - **Comments**
        1. This paper is not easy to read and it contains lots of unuseful information.
--&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;random-sampling-over-joins-revisited&quot;&gt;Random Sampling over Joins Revisited&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a general join sampling framework that can be combined with any join size upper bound method, which can process general multi-way joins (acyclic or cyclic, with or without selection predicates).&lt;/li&gt;
          &lt;li&gt;It implements the sampling over a chain of joins by starting from a single root tuple, and joins it with all tuples in the next relation, and with some probability to reject the whole sample (and restart), or get a uniform random tuple from the joined results and continue processing the next relation. These probabilities can be computed by the upper bound of join sizes. By using this method, it returns each join result with equal probability (uniform and independent).&lt;/li&gt;
          &lt;li&gt;They used TPC-H dataset and a social graph data of twitter friendship links and user profiles. They used KStest to verify their samples are indeed uniform.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-15-database-for-emerging-hardware&quot;&gt;Session 15: Database for Emerging Hardware&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;efficient-top-k-query-processing-on-massively-parallel-hardware&quot;&gt;Efficient Top-K Query Processing on Massively Parallel Hardware&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents several algorithms for top-k problem on GPU, including a new algorithm based on bitonic sort.&lt;/li&gt;
          &lt;li&gt;The algorithm includes three steps: (1) local sort, it generates sorted sequences of size \(k\) using partial binotic sort; (2) merge, it bitonically merge two sorted sequences of size \(k\); (3) rebuild, it sorts the sequence with the greater \(k\) elements and discard the subsequence with the smaller \(k\) elements. After each merge and rebuild, the size of the problem is halved, and it recursively applies these two steps until \(k\) elements left.&lt;/li&gt;
          &lt;li&gt;They further propose several detailed optimizations about implementing these top-k algorithms on GPU.&lt;/li&gt;
          &lt;li&gt;They also present a cost model that predicts the performance of these algorithms with respect to \(k\), allowing a query optimizer to choose the best top-\(k\) implementation for a particular query.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and structured. It gives a short but useful description of the background knowledge (GPU data access, Sorting on the GPU) with intuitive examples.&lt;/li&gt;
          &lt;li&gt;This paper is a must-read for people want to do DB-related research on GPU.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 15 Oct 2018 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_research_2/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_research_2/</guid>
      </item>
    
      <item>
        <title>Some Good Papers in SIGMOD 2018 (Research Sessions 1-8)</title>
        <description>&lt;p&gt;In this post, I write my reading report for research papers in SIGMOD 2018. I will go through all the papers I feel interesting and write their basic ideas, methods and my personal evaluations. Please let me know if you find anything inappropriate.&lt;/p&gt;

&lt;h2 id=&quot;session-1-data-integration--cleaning&quot;&gt;Session 1: Data Integration &amp;amp; Cleaning&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;deep-learning-for-entity-matching-a-design-space-exploration&quot;&gt;Deep Learning for Entity Matching: A Design Space Exploration&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper proposes a categorization of DL solutions in EM: (1) attribute embedding; (2) attribute similarity representation: attribute summarization and attribute comparison; (3) classifier.&lt;/li&gt;
          &lt;li&gt;This paper considers three types of EM problems: structured, textual and dirty.&lt;/li&gt;
          &lt;li&gt;DL is competitive with state-of-the-art on structured instances with far longer training time, while it outperforms state-of-the-art on textual and dirty instances.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well-written and provides a good summary of DL solutions in EM. It proposes the design space for DL in EM and summarizes the problem types in EM, i.e., both the problem and solutions are well-defined.&lt;/li&gt;
          &lt;li&gt;This paper is a good example of how to apply DL in database research: categorizing the problem types, summarizing design space, applying DL and doing empirical evaluations.&lt;/li&gt;
          &lt;li&gt;It is really important to provide heuristics for the design choices, discussions for why the methods are better, goals and takeaways for the experiments.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-2-usability--securityprivacy&quot;&gt;Session 2: Usability &amp;amp; Security/Privacy&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;the-data-interaction-game&quot;&gt;The Data Interaction Game&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;Users actually interact with DBMSs during which they learn and modify how to express their information needs, which is rarely captured in current query interfaces, i.e., the user feedbacks are not well utilized or user strategies are assumed fixed. Therefore this paper models this as a game with identical interest between two rational agents whose goal is to establish a common language for representing information needs in form of queries. It further proposes a reinforcement learning method to explore this model.&lt;/li&gt;
          &lt;li&gt;This paper firstly uses a reinforcement learning algorithm (Roth and Erev’s model) to imitate and model the user behavior (justified by empirical analysis), then uses the same reinforcement algorithm to train the interactions between users and DBMSs.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is too dry to read, probably because it contains too much theoretical stuff and few illustrative examples. Probably I will read back when I have an better knowledge of reinforcement learning.&lt;/li&gt;
          &lt;li&gt;One thing I don’t understand is that they model the user behaviors with a reinforcement learning algorithm, and then they train the interactions with the same algorithm. Since the user behavior is already modeled, it doesn’t make sense for me that reinforcement learning can model the interactions in real world. Although I understand that collecting user feedbacks for training the interactions are difficult, this algorithm still seems making too strong assumptions and not very practical.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-3-transactions--indexing&quot;&gt;Session 3: Transactions &amp;amp; Indexing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;carousel-low-latency-transaction-processing-for-globally-distributed-data&quot;&gt;Carousel: Low-Latency Transaction Processing for Globally-Distributed Data&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;Most storage systems support geo-distributed and multi-partitioned transactions by layering transaction management, such as concurrency control and two-phase commit (2PC), on top of a consensus protocol, which incurs high latency to commit a transaction because it sequentially executes the layered protocols. This paper addresses this by targeting 2-round Fixed-set Interactive (2FI) transactions (where each transaction consists of a round of reads followed by a round of writes with read and write keys that are known at the start of the transaction) to enable transaction processing to overlap with 2PC and state replication.&lt;/li&gt;
          &lt;li&gt;By knowing the read and write sets (the assumption of 2FI transactions), the prepare request for 2PC can be sent along with the read request for reading data, therefore the total number of wide-area network roundtrips (WANRTs) observed by the client is at most two (read/prepare + write/commit).&lt;/li&gt;
          &lt;li&gt;This paper achieves the fast path for preparing (parallelizing 2PC and consensus) by sending prepare requests to all participants rather than participant leaders, which require some conditions as discussed in the paper. This actually saves the time that the leader replicates the prepare decision to its followers.&lt;/li&gt;
          &lt;li&gt;This paper uses two workloads: Retwis and YCSB+T, for comparison against TAPIR.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is a well-written paper, it gives a very detailed design overview, including assumptions, restrictions and architecture. I think this is really important for system papers.&lt;/li&gt;
          &lt;li&gt;This paper assumes a restricted transaction (i.e., 2FI transaction) model to parallelize transaction processing, consensus and replication. It points out the drawbacks of this model, i.e., no support for dependent reads and writes, and proposes the solution itself: using &lt;em&gt;reconnaissance transactions&lt;/em&gt; (divide the original transaction into two dependent transactions). I think it is a good way to justify your assumptions by pointing out the drawbacks directly and providing solutions.&lt;/li&gt;
          &lt;li&gt;When justifying anything (e.g., design assumptions), this paper always uses experimental results or cite other papers, I think it is necessary to justify your assumptions in such a way.&lt;/li&gt;
          &lt;li&gt;It is a good practice to describe the basic version of the system, and then propose some optimizations on top of it to make everything more elegant.&lt;/li&gt;
          &lt;li&gt;It is important to discuss failure-tolerance, although it is not necessary to implement it.&lt;/li&gt;
          &lt;li&gt;It is a good practice to describe how you implement your system, especially for system papers.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;faster-a-concurrent-key-value-store-with-in-place-updates&quot;&gt;FASTER: A Concurrent Key-Value Store with In-Place Updates&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper uses a epoch-based synchronization combined with trigger actions to facilitate lazy propagation of global changes to all threads. This generalization of threading model helps simplifying the scalable currency design.&lt;/li&gt;
          &lt;li&gt;This paper designs a concurrent latch-free resizable cache-friendly hash index by cache-aligned arrays, atomic operations for deleting keys, tentative bits for latch-free two-phase insert, afore-mentioned epoch protection to performing resizing, and atomic operations for checkpointing.&lt;/li&gt;
          &lt;li&gt;By combing the hash index with a simple in-memory record allocator such as &lt;em&gt;jemalloc&lt;/em&gt;, this paper states that they can build a in-memory key-value store easily.&lt;/li&gt;
          &lt;li&gt;Epoch-based framework also manages the loading of log records to secondary storage in a latch-free manner, they use head and tail offsets to control the circular in-memory buffer.&lt;/li&gt;
          &lt;li&gt;This paper proposes the &lt;em&gt;HybridLog&lt;/em&gt;, which combines in-place updates (in memory) and log-structured organization (on-disk), and consists of three regions: stable region (on secondary storage and append-only), read-only region (in-memory and read-copy-update) and mutable (in-memory and in-place update). The &lt;em&gt;HybridLog&lt;/em&gt; can also be used for checkpointing and recovery.&lt;/li&gt;
          &lt;li&gt;This paper uses one workload: YCSB-A, for comparison against Masstree, Intel TBB concurrent hashmap, RocksDB and Redis.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;For a system paper, it is important to describe your design goals, user interfaces and architecture to justify that your system is a well-developed system.&lt;/li&gt;
          &lt;li&gt;One thing I don’t understand: “A thread has guaranteed access to the memory location of a record, as long as it does not refresh its epoch”. Does this mean that this thread’s operations will be coordinated by the epoch framework, so it has the guaranteed access?&lt;/li&gt;
          &lt;li&gt;This paper is written in a incremental way: describing the basic framework, presenting a basic component, optimizing this component.&lt;/li&gt;
          &lt;li&gt;Cache-behavior is important for system papers, especially for systems sensitive to IO latency.&lt;/li&gt;
          &lt;li&gt;A good design philosophy: &lt;em&gt;make the common case faster&lt;/em&gt;.&lt;/li&gt;
          &lt;li&gt;In-place updates are critical for building a fast in-memory key-value store.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;workload-aware-cpu-performance-scaling-for-transactional-database-systems&quot;&gt;Workload-Aware CPU Performance Scaling for Transactional Database Systems&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper proposes an on-line workload-aware scheduling and frequency scaling algorithm POLARIS, which controls both transaction execution order and processor frequency to minimize CPU power assumption while observing per-workload latency targets.&lt;/li&gt;
          &lt;li&gt;The control of processor frequency is implemented by DVFS (dynamic voltage and frequency scaling), which is standardized as the Advanced Configuration and Power Interface (ACPI). ACPI defines &lt;em&gt;P-States&lt;/em&gt; for different voltage and frequency operating points, and &lt;em&gt;C-States&lt;/em&gt; for different idle levels. Linux provides a generic CPU power control module &lt;em&gt;cpufreq&lt;/em&gt;.&lt;/li&gt;
          &lt;li&gt;POLARIS aims to find the smallest processor frequency such that all transactions will finish running before their deadlines. It implements by estimating the execution time of transaction using statistical methods (i.e., keeping track of execution time of transactions in the past).&lt;/li&gt;
          &lt;li&gt;This paper gives a theoretical analysis of POLARIS, Yao-Demers-Schenker (YDS) and Optimal Available (OA).&lt;/li&gt;
          &lt;li&gt;This paper implements the prototype within Shore-MT and uses two workloads: TPC-C and TPC-E for comparison against OS baselines.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper researches around an interesting problem where few previous studies exist, and it is also important since power consumption is directly related with the maintenance cost of clusters.&lt;/li&gt;
          &lt;li&gt;The theoretical part is really interesting, in my opinion, there is nothing better than a combination of good theory and useful system.&lt;/li&gt;
          &lt;li&gt;They have a train phase for POLARIS to gain information about execution time, but I wonder if this obviates the on-line algorithm nature of POLARIS.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-4-query-processing&quot;&gt;Session 4: Query Processing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;how-to-architect-a-query-compiler-revisited&quot;&gt;How to Architect a Query Compiler, Revisited&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper uses Futamura projections to link interpreters and compilers through specialization, which is also the guiding principle in the design of query compilers. Partially evaluating an interpreter with respect to a source program produces a compiled version of that program, is known as the first Futamura projection.&lt;/li&gt;
          &lt;li&gt;For code generation, the query engine have different options to place it, (1) pure template expansions: each operator is specialized as a string with placeholders for parameters; (2) programmatic specialization: push the specialization into the structures that make up the query engine; (3) optimized programmatic specialization: push code generation to the level of primitive types and operations; (4) lightweight modular staging (LMS): an intermediate representation similar with LLVM.&lt;/li&gt;
          &lt;li&gt;LB2 (the system built in this paper) uses an abstract class &lt;em&gt;Record&lt;/em&gt; as the entry point and an abstract class &lt;em&gt;Buffer&lt;/em&gt; as the storage to support both row and column layout; it also abstracts the data structures, indexes. LB2 also hoists memory allocation and other expensive operations from frequently executed paths to less frequent paths, e.g., pre-allocating memory in advance for hash join and aggregate queries. LB2 enabled parallelism by modifying the internal logic of operators through &lt;em&gt;ParOp&lt;/em&gt;.&lt;/li&gt;
          &lt;li&gt;This paper compares against Postgres, Hyper and DBLAB. It uses TPC-H as the workload.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written, however I am not familiar with query compiler, I don’t understand some parts, e.g., how parallelism works in practice. It is worth reading it again if needed.&lt;/li&gt;
          &lt;li&gt;Although this paper proposes a quite novel way for compiling query, almost all real world systems (both in industry and academia) still stick to the old paradigm. It will be interesting to see if new DBMSs adopt such design.&lt;/li&gt;
          &lt;li&gt;I don’t know if code generation is only used inside database community. I guess the answer is probably yes since code generation is simply a technique to convert domain-specific languages (DSLs) to low-level language for performance’s sake.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;surf-practical-range-query-filtering-with-fast-succinct-tries&quot;&gt;SuRF: Practical Range Query Filtering with Fast Succinct Tries&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;SuRF is a data structure for approximate membership test, which supports both single-key lookups and range queries. The core data structure in SuRF is the Fast Succinct Tries (FST), which encodes upper levels with a fast bitmap-based encoding scheme (&lt;em&gt;LOUDS-Dense&lt;/em&gt;, speed-efficient) and encodes lower levels with a space efficient &lt;em&gt;LOUDS-Sparse&lt;/em&gt; schema. Level-Ordered Unary Degree Sequence (LOUDS) traverses the nodes in a breadth-first order and encodes each node’s degree using the unary code.&lt;/li&gt;
          &lt;li&gt;Based on the observation that all bit-sequences require either rank or select support but not both, SuRF further optimizes rank, select and local search. They use sampling with pre-computed values to optimize rank and select, and 128-bit SIMD instructions to perform the label search (which is faster than binary search). They also use prefetching so that relevant addresses in other sequences can be computed for future use.&lt;/li&gt;
          &lt;li&gt;Since FST itself is a trie-based index structure, SuRF must truncate it (i.e., remove lower levels and replace them with suffix bits extracted from the key) to balance between a low false positive rate with small memory usage.&lt;/li&gt;
          &lt;li&gt;This paper compares against B-tree (and its variants), other succinct tries and Bloom filter. It uses YCSB and a synthesized dataset of integer and string keys as the workloads. They also integrate SuRF into RocksDB and run a evaluation of time-series data.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;In general, this paper is well written and it gives comprehensive evaluations from both algorithm’s and system’s perspective.&lt;/li&gt;
          &lt;li&gt;Although the idea of using fast succinct tries is not novel, combining two different encodings together is a good way to balance between speed and space.&lt;/li&gt;
          &lt;li&gt;I think this paper is influential (and got the best paper award) because it states that it solves a practical problem: range query of membership test. Although the the practicalness still needs to be proved since real world workloads are far more complicated.&lt;/li&gt;
          &lt;li&gt;It is important to show your techniques have applications when you write the paper, and it will be even better when you can integrate your stuff into a real world widely-used system.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-5-graph-data-management&quot;&gt;Session 5: Graph Data Management&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;topppr-top-k-personalized-pagerank-queries-with-precision-guarantees-on-large-graphs&quot;&gt;TopPPR: Top-k Personalized PageRank Queries with Precision Guarantees on Large Graphs&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;Top-k PPR (Personalized PageRank) query is an important building block for web search and social networks, such as Twitter’s Who-To-Follow recommendation service. However, previous studies cannot guarantee the precision and performance with small overheads at the same time. TopPPR provides a method that (1) is \(\rho\)-precise with at least 1 - 1/n probability, (2) doesn’t require preprocessing, and (3) is computationally efficient.&lt;/li&gt;
          &lt;li&gt;TopPPR first performs forward search from the source node, and then conducts random walks from those nodes with non-zero forward residues; after that, it applies backward search from some target nodes and combines the results with the random walks to estimate PPR values for top-k derivation.&lt;/li&gt;
          &lt;li&gt;TopPPR adopts the filter-refinement paradigm for top-k processing. In the filter step, it computes a rough estimation of each node’s PPR, based on which it identifies a candidate node set &lt;em&gt;C&lt;/em&gt;; and then in the refinement step, it iteratively refines the PPR estimation for each node in &lt;em&gt;C&lt;/em&gt;, until it derives the top-k results with high confidence. Specifically, after forward search, during sampling, it utilizes Bernstein inequality to find a confidence bound, then it employs backward search on those potential nodes to reduce the variation of the confidence bound.&lt;/li&gt;
          &lt;li&gt;TopPPR employs \(\sqrt{1 - \alpha}\)-walk to improve over random walk with restart, which can update the estimation of more nodes and produce lower variance.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is very well written. It has a good motivation (e.g., real world application in Twitter), and it points the drawbacks of previous studies. Then it formulates the problem, and describes the basic techniques for PPR computation and explains the state-of-the-art solutions. Then it mentions the challenges, ideas and provides an analysis and discussion of the proposed algorithm. The evaluation part is also comprehensive.&lt;/li&gt;
          &lt;li&gt;It is a fruitful direction combining random methods (e.g., sampling) and deterministic methods (e.g., breadth-first search) adaptively.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-6-storage--indexing&quot;&gt;Session 6: Storage &amp;amp; Indexing&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;the-case-for-learned-index-structures&quot;&gt;The Case for Learned Index Structures&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper observes that B-trees can be seen as a model mapping a key to the position of a record, and utilizes deep-learning to train learned indexes based on this observation. The experimental results show that learned indexes have significant advantages (both in space and speed) over traditional indexes.&lt;/li&gt;
          &lt;li&gt;For learned indexes, this paper proposes a recursive model index which is similar with mixture of experts in machine learning community and learns the distribution of data level by level. Further, it can also include traditional indexes (e.g., B-trees) as a node in the model tree if the distribution is difficult to learn. During search, it queries the recursive model index and uses either binary or biased quaternary search.&lt;/li&gt;
          &lt;li&gt;Besides range index (i.e., B-trees), learned indexes can also work well on point index (i.e., hash maps) and existence index (e.g., bloom filter).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;As the paper says, the idea of replacing core components of a DBMS through learned models have far reaching implications for future system designs. Probably led by this paper, there has been a trend for researching the intersection of machine learning and systems, which are so called machine learning for systems and systems for machine learning. I think this area is a very promising direction in both system and machine learning research with huge real world impact.&lt;/li&gt;
          &lt;li&gt;Although this paper doesn’t contain much complicated theory or system design, it brings up a fundamental problem: can machine learning and system benefit each other? Therefore, a great paper is not only just making good technical contributions, but also guiding the future direction for the whole community.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;dostoevsky-better-space-time-trade-offs-for-lsm-tree-based-key-value-stores-via-adaptive-removal-of-superfluous-merging&quot;&gt;Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper investigates the the space-time trade-off in LSM-tree by introducing Lazy Leveling (which removes merge operations from all levels of LSM-tree but the largest) and Fluid LSM-tree (which generalizes the entire LSM-tree design by parameterizing the merges). They put everything together to design the key-value store Dostoevsky and implemented it on top of RocksDB, and they show that it strictly dominates state-of-the-art designs in terms of performance and storage space.&lt;/li&gt;
          &lt;li&gt;LSM-tree optimizes for write-heavy workloads, and it organizes runs into &lt;em&gt;L&lt;/em&gt; conceptual levels of exponentially increasing sizes. All designs today use either one of two merge policies: tiering or leveling (e.g., Cassandra and RocksDB use tiering and leveling by default, respectively). With tiering, we merge runs within a level only when the level reaches capacity; with leveling, we merge runs within a level whenever a new run comes in.&lt;/li&gt;
          &lt;li&gt;There is a trade-off between update cost and the costs of lookups and space-amplification. Leveling has strictly better lookup costs and space-amplification and strictly worse update cost than tiering. Furthermore, point lookup cost, long range lookup cost, and space-amplification derive mostly from the largest level, while update cost derives equally from across all levels.&lt;/li&gt;
          &lt;li&gt;They represent lazy leveling, which applies leveling at the largest level and tiering at all other levels. It improves the cost complexity of updates, maintains the same complexity for point lookups, long range lookups, and space-amplification, and provide competitive for short range lookups.&lt;/li&gt;
          &lt;li&gt;They propose fluid LSM-tree, a generalization of LSM-tree that enables switching and combining merge policies. It does this by controlling the frequency of merge operations separately for the largest level and for all other levels.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper gives a good introduction of LSM-tree and summarizes its properties and operations in great detail.&lt;/li&gt;
          &lt;li&gt;This paper is well written and organizes its content in array of bullet points, making the illustration clear to understand and the transition smooth.&lt;/li&gt;
          &lt;li&gt;For the evaluation section, we can start each paragraph with the key observation (e.g., Dostoevsky dominates existing systems).&lt;/li&gt;
          &lt;li&gt;This paper reminds me that for those traditional data structures, they can actually be parameterized to allow for flexibility and even better trade-off.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;hot-a-height-optimized-trie-index-for-main-memory-database-systems&quot;&gt;HOT: A Height Optimized Trie Index for Main-Memory Database Systems&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents the Height Optimized Trie (HOT), a fast and space-efficient in-memory index whose core idea is to dynamically vary the number of bits considered at each node, which enables a consistently high fanout and thereby good cache efficiency. They also carefully engineer the layout of each node for compactness and fast search using SIMD instructions.&lt;/li&gt;
          &lt;li&gt;To use the space more efficiently, HOT combines the nodes of a binary trie into compound nodes, and it features a data-dependent span and a fixed maximum fanout. During insertion, there are four cases: a normal insert only modifies an existing node, whereas leaf-node pushdown creates a new node. Overflows are either handled using a parent pull up or intermediate node creation.&lt;/li&gt;
          &lt;li&gt;As for the node layout, the size of the partial keys and the representation of the bit positions (single-mask or multi-mask) can be adapted to fit the data distribution. Partial keys are used to parallel the lookup with SIMD instructions.&lt;/li&gt;
          &lt;li&gt;HOT uses the combination of copy-on-write and CAS for lookup. For modification, it detects the set of affected nodes and acquire a lock for each of them. It also marks nodes as obsolete instead of directly reclaiming the nodes’ memory and HOT uses a epoch-based memory reclamation strategy.&lt;/li&gt;
          &lt;li&gt;This paper compares with ART, Masstree, STX B+-tree. The workload is extended based on YCSB. It shows it is 2x space efficient, generally outperforms its state-of-the-art competitors in terms of lookup and scan performance and it features the same linear scalability.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;The paper follows a general-to-specific style of writing, it firstly presents the overall data structure, then fills missing details. By adopting such style, it is much easier for readers to grasp the major idea and understand the algorithm.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;the-data-calculator-data-structure-design-and-cost-synthesis-from-first-principles-and-learned-cost-models&quot;&gt;The Data Calculator: Data Structure Design and Cost Synthesis from First Principles and Learned Cost Models&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents the Data Calculator, an interactive and semi-automated design engine for data structures. It offers a set of fine-grained design primitives that capture the first principles of data layout design: how data structure nodes lay data out, and how they are positioned relative to each other. It also supports computation of performance using learned cost models.&lt;/li&gt;
          &lt;li&gt;The Data Calculator firstly proposes a set of design primitives as fundamental design choices with different domains. Then it introduces elements as a full specification of a single data structure node which defines the data and access methods used to access the node’s data.&lt;/li&gt;
          &lt;li&gt;The Data Calculator computes the cost (latency) of running a given workload on a given hardware for a particular data structure specification by analyzing the data access primitives and using learned cost models to synthesize the cost of complex operations. These cost models are trained and fitted for combinations of data and hardware profiles.&lt;/li&gt;
          &lt;li&gt;The Data Calculator supports what-if design (comparing different design specifications) and auto-completion (benchmarking all candidate elements).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper provides lots of well-depicted figures with colorful elements, structured layout and illustrative text. This is a good practice when the concepts are difficult to explain in plain text.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;a-comparative-study-of-secondary-indexing-techniques-in-lsm-based-nosql-databases&quot;&gt;A Comparative Study of Secondary Indexing Techniques in LSM-based NoSQL Databases&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a taxonomy of NoSQL secondary indexes, &lt;em&gt;Embedded Indexes&lt;/em&gt; (i.e., lightweight filters embedded inside the primary table) and Stand-Alone Indexes (i.e., separate data structures). They built a system LevelDB++ on top of LevelDB to measure two embedded indexes and three state-of-the-art stand-alone indexes.&lt;/li&gt;
          &lt;li&gt;The experimental study and theoretical evaluation show that none of these indexing techniques dominate the others: the embedded indexes offer superior write throughput and are more space efficient, whereas the stand-alone indexes achieve faster query response times. Thus the optimal choice of secondary index depends on the application workload.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;efficient-selection-of-geospatial-data-on-maps-for-interactive-and-visualized-exploration&quot;&gt;Efficient Selection of Geospatial Data on Maps for Interactive and Visualized Exploration&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper proposes four features that a map rendering system shall support: representativeness, visibility constraint, zooming consistency and panning consistency. They further propose the problem of Interactive Spatial Object Selection (ISOS) problem and devise a greedy algorithm to address it. They also propose to use sampling strategy and pre-fetching strategy to improve the efficiency of their algorithm.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and easy to read. Also, the authors formulate the problem in a precise and easy-to-understand way, and the solutions are presented with good explanation and illustrative examples.&lt;/li&gt;
          &lt;li&gt;I think the problem discussed in this paper is pretty important, and those constraints are representative for interactive map exploration. The authors did a good job by formulating the complex problem into a well-formed “mathematical” problem and used good techniques to address it. They also provided interesting optimizations and solid proof.&lt;/li&gt;
          &lt;li&gt;It is important to prove that your proposed metric is useful, especially by experimental evaluations.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-7-tuning-monitoring--query-optimization&quot;&gt;Session 7: Tuning, Monitoring &amp;amp; Query Optimization&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;query-based-workload-forecasting-for-self-driving-database-management-systems&quot;&gt;Query-based Workload Forecasting for Self-Driving Database Management Systems&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents QueryBot 5000 that forecasts the expected arrival rate of queries in the future. It firstly pre-processes the queries by converting them into templates, maps these templates to the most similar group of previous queries based on its semantics (e.g., the accessed tables) with clustering techniques, and train those big clusters to predict the arrival rates.&lt;/li&gt;
          &lt;li&gt;The features for clustering are based on the arrival rate history. They combine the ensemble of linear regression and RNN and kernel regression (which is good at predicting spikes) to predict the arrival rate.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and easy to read.&lt;/li&gt;
          &lt;li&gt;The whole method essentially is a two-step clustering (by query template then by the history of arrival rate) and then a simple model predicting the future arrival rate based on the past arrival rates. Basically all the query-specific (e.g., the logical and physical features mentioned in the paper) are all discarded, therefore it essentially predicts the future based on the past without using any DB related context information. I think probably it is better to embed more DB information into the feature space.&lt;/li&gt;
          &lt;li&gt;Also, the whole framework is not end-to-end, there are three components trained or tuned individually. An end-to-end approach may further improve the performance.&lt;/li&gt;
          &lt;li&gt;If I understand correctly, the system doesn’t work for new query (never seen before by this system). Basically this system can only find arrival patterns of some kind of fixed workloads.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;on-the-calculation-of-optimality-ranges-for-relational-query-execution-plans&quot;&gt;On the Calculation of Optimality Ranges for Relational Query Execution Plans&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper analyzes the optimality range, which is the range of cardinality of an intermediate result where the current plan remains optimal. To compute the optimal range, they propose Parametric Cost Function (where the cardinalities of some intermediate results are parameters) and compute the intersection points of all possible plans.&lt;/li&gt;
          &lt;li&gt;To compute the optimal range, they propose Parametric Cost Function (where the cardinalities of some intermediate results are parameters) and maintains these optimality ranges by a data structure Optimal Plans Container. The basic idea is to find the intersection points with other candidate plans.&lt;/li&gt;
          &lt;li&gt;To make the space of candidates small, they adopt the Bell’s principle of optimality (an optimal solution can be always constructed from optimal sub solutions) to only enumerate only plans consisting of sub plans that are somewhere optimal. They further prune those plans whose optimality fall out of the current optimality range. They also derive the theoretical worse case bounds for the number of enumerated pipelines.&lt;/li&gt;
          &lt;li&gt;Optimality ranges can be used in the following cases: (1) execution plan caching: once the cardinality is out of its optimality range, the cached plan is not optimal anymore and evicted from the cache; (2) parametric queries: store a range in which a plan is optimal instead of a cost point (i.e., a configuration of parameters); (3) mid-query re-optimization: deciding if the optimizer should be invoked again while the current approach uses simple heuristics or considers only a subset of the alternatives.&lt;/li&gt;
          &lt;li&gt;The workloads are TPC-H, Join Order Benchmark (JOB) and a generated one. However, the improvement for mid-query re-optimization is not very impressive (around 20%).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;Although the authors stated that they considered all the alternative plans, actually they made some assumptions on the possible search space.&lt;/li&gt;
          &lt;li&gt;The optimality ranges are an interesting and important topic in query optimizer. I think probably we may design a better query optimizer with small computation overheads by using these optimality ranges.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;adaptive-optimization-of-very-large-join-queries&quot;&gt;Adaptive Optimization of Very Large Join Queries&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents an adaptive optimization framework that scales to queries with thousands of joins. It uses the search space linearization technique to find near-optimal execution plans for large classes of queries.&lt;/li&gt;
          &lt;li&gt;PostgreSQL uses dynamic programming to find the optimal join order for queries with less than 12 relations and switches to genetic algorithms for larger queries, while DB2 uses dynamic programming and switches to a greedy strategy when the queries become large.&lt;/li&gt;
          &lt;li&gt;For small queries (less than 14 relations or the number of connected subgraphs is within the chosen budget of 10,000), the framework uses DPHyp. For medium queries (up too 100 relations), the framework firstly uses IKKBZ to linearize the search space into a linear ordering of relations and it restricts the DP algorithm to consider only connected subchains of this linear relation ordering. For large queries, it adopts the idea from Iterative DP: first constructing an execution plan using a greedy algorithm (Greedy Operator Ordering), and then improving that plan by running a more expensive optimization algorithm (the algorithm for medium queries) on subplans up to size k (and k can be changed to control the optimization time).&lt;/li&gt;
          &lt;li&gt;This paper uses standard benchmarks: TPC-H, TPC-DS, LDBC BI, Join Order Benchmark, SQLite test suite. They also generate synthetic queries for scalability experiments.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written and easy to read. It also offers a pretty useful related works section that presents almost all the methods for finding join order, and they essentially provide an hybrid approach that uses different methods for different cases.&lt;/li&gt;
          &lt;li&gt;It provides a section of implementation details, which is pretty important for system papers.&lt;/li&gt;
          &lt;li&gt;I think this paper not only is a comprehensive summary of previous studies on joins, but also provides a practical way to handle joins in different cases.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;improving-join-reorderability-with-compensation-operators&quot;&gt;Improving Join Reorderability with Compensation Operators&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents a novel approach for join reordering problem for queries involving inner-joins, single-sided outer-joins, and/or antijoins, i.e., providing a more comprehensive enumeration of possible orders for join.&lt;/li&gt;
          &lt;li&gt;There are two state-of-the-art approaches for the join reorder problem: (1) Transformation-Based Approach (TBA), which enumerates all valid join reorderings using the associativity and commutativity properties of the join operators; (2) Compensation-Based Approach (CBA), which permits certain invalid join reorderings as long as they can be compensated to become valid. This paper proposes a algorithm based on the compensation-based approach, which proposes two new compensation operators to allow more rules for reorder joins.&lt;/li&gt;
          &lt;li&gt;This paper presents the enumeration algorithm based on the reordering algorithm, and optimizes it to enable reuse of query subplans by finding the equivalence while considering the dependencies of query nodes.&lt;/li&gt;
          &lt;li&gt;This paper uses TPC-H as its workload and implements the algorithm in PostgreSQL.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper essentially provides a way to extend the search space of all possible joins and explain how to explore this search space.&lt;/li&gt;
          &lt;li&gt;The idea of compensation is really a interesting topic in many areas, by introducing some compensation operations, we can apply some “invalid” transformations to provide better flexibility and performance improvement.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;session-8-spatial-data--streams&quot;&gt;Session 8: Spatial Data &amp;amp; Streams&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;dita-distributed-in-memory-trajectory-analytics&quot;&gt;DITA: Distributed In-Memory Trajectory Analytics&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents DITA, a distributed in-memory trajectory analytics system which support trajectory similarity search and join (both threshold-based and KNN-based) with numerous similarity functions. The core idea is a filter-verification framework which employs a trie-based method to efficiently search similar trajectories. To distribute the computation, an partitioning method is proposed based on the trie indexing mechanism and a cost model is constructed to balance the workloads. The whole system is built on Spark.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This is my paper and I think it is good. It supports huge volume of trajectories and is significantly better than state-of-the-art.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;h3 id=&quot;sketching-linear-classifiers-over-data-streams&quot;&gt;Sketching Linear Classifiers over Data Streams&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper presents the Weight-Median Sketch for learning linear classifiers over data streams that supports approximate retrieval of the most heavily-weighted features. In other words, it does dimension reduction in the streaming setting.&lt;/li&gt;
          &lt;li&gt;It essentially adopts the idea of count-sketch to save the gradients (for training the classifier) in a sketch-like structure. By “active set”, they simply introduce a heap to store heavy hitters (i.e., heavy weights).&lt;/li&gt;
          &lt;li&gt;They show three applications: streaming explanation (outlier detection), network monitoring (identifying differences between concurrent traffic streams), streaming pointwise mutual information (finding correlation between events).&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;
        &lt;ol&gt;
          &lt;li&gt;This paper is well written. It sort of “transfers” idea from one sub-area to another sub-area, I think this is interesting.&lt;/li&gt;
          &lt;li&gt;It is important to show some real world applications in the paper.&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 15 Jun 2018 00:00:00 +0000</pubDate>
        <link>www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_research_1/</link>
        <guid isPermaLink="true">www.shangzeyuan.com/blog/some_good_papers_in_sigmod_2018_research_1/</guid>
      </item>
    
  </channel>
</rss>