PageSourceSearch

https://hailin.wang/blog/

html hailin.wang collected 2026-10-09 22:07:48 UTC 35,258 bytes, 609 lines download raw bytes

1<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title> blog | Hailin Wang (汪海林) </title> <meta name="author" content="Hailin Wang"> <meta name="description" content="A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design. "> <meta name="keywords" content="jekyll, jekyll-theme, academic-website, portfolio-website"> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; font-src 'self' data: https:; media-src 'self' https:; frame-src 'self' https:; connect-src 'self' https:;"> <style>
2  :root {
3    --max-content-width: 930px;
4  }
5</style> <link rel="stylesheet" href="/assets/css/tailwind.css?v=50c64c15cbb9fd1ce6056fdb8bcb4b62"> <link defer rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css" integrity="sha256-MVopmdyC2tYTiJ8wlktf0uh0v4NgT+vNdyVFepi7Q0c=" crossorigin="anonymous"> <link defer rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/academicons.min.css" integrity="sha256-SzrCOBJbGVFMahewkgjwnApaV2+av1DwMAA+/QGLyZw=" crossorigin="anonymous"> <link defer rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/scholar-icons.css" integrity="sha256-VY3hHVj/hNX3fYG6wtbA6TcKJQl7+FthzGSyIB64klY=" crossorigin="anonymous"> <link defer rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons&amp;display=swap"> <link defer rel="stylesheet" href="/assets/css/jekyll-pygments-themes-github.css?v=591dab5a4e56573bf4ef7fd332894c99" media="" id="highlight_theme_light"> <link rel="shortcut icon" href="data:image/svg+xml,&lt;svg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20100%20100%22&gt;&lt;text%20y=%22.9em%22%20font-size=%2290%22&gt;%E2%9A%9B%EF%B8%8F&lt;/text&gt;&lt;/svg&gt;"> <link rel="stylesheet" href="/assets/css/main.css?v=3116ba77db9ee1581d05bb3e86fbf7f1"> <link rel="canonical" href="https://haiiliin.github.io/blog/"> 
5<script src="/assets/js/theme.js?v=5286c3e4c334d0ecb8fc0c40ff4fa7ec"></script>
5 <link defer rel="stylesheet" href="/assets/css/jekyll-pygments-themes-native.css?v=5847e5ed4a4568527aa6cfab446049ca" media="none" id="highlight_theme_dark"> 
5<script>
6    initTheme();
7  </script>
7 </head> <body class="fixed-top-nav "> <header> <nav id="navbar" class="navbar navbar-light navbar-expand-sm fixed-top" role="navigation"> <div class="container"> <a class="navbar-brand title font-weight-lighter" href="/"> Hailin Wang (汪海林) </a> <button class="navbar-toggler collapsed navbar-toggler-main" type="button" data-nav-toggle="navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar top-bar"></span> <span class="icon-bar middle-bar"></span> <span class="icon-bar bottom-bar"></span> </button> <div class="collapse navbar-collapse navbar-collapse-main" id="navbarNav"> <ul class="navbar-nav navbar-menu-list flex-nowrap"> <li class="nav-item "> <a class="nav-link" href="/">about </a> </li> <li class="nav-item "> <a class="nav-link" href="/news/">news </a> </li> <li class="nav-item active"> <a class="nav-link" href="/blog/">blog <span class="sr-only">(current)</span> </a> </li> <li class="nav-item "> <a class="nav-link" href="/publications/">publications </a> </li> <li class="nav-item "> <a class="nav-link" href="/repositories/">repositories </a> </li> <li class="nav-item "> <a class="nav-link" href="/cv/">CV </a> </li> <li class="nav-item"> <button id="search-toggle" type="button" title="Search" aria-label="Open search"> <span class="nav-link">ctrl k <i class="fa-solid fa-magnifying-glass"></i></span> </button> </li> <li class="toggle-container"> <button id="light-toggle" type="button" title="Change theme" aria-label="Change color theme"> <i class="fa-half-sun-moon" id="light-toggle-system"></i> <i class="fa-solid fa-moon" id="light-toggle-dark"></i> <i class="fa-solid fa-sun" id="light-toggle-light"></i> </button> </li> </ul> </div> </div> </nav> <progress id="progress" value="0"> <div class="progress-container"> <span class="progress-bar"></span> </div> </progress> </header> <div class="container mt-5" role="main"> <div class="post"> <div class="header-bar"> <h1>blog</h1> <h2>research, writing, and thoughts on science, technology, and life</h2> </div> <div class="tag-category-list"> <ul class="p-0 m-0"> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/formatting">formatting</a> </li> <p>•</p> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/images">images</a> </li> <p>•</p> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/links">links</a> </li> <p>•</p> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/math">math</a> </li> <p>•</p> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/code">code</a> </li> <p>•</p> <li> <i class="fa-solid fa-hashtag fa-sm"></i> <a href="/blog/tag/blockquotes">blockquotes</a> </li> <p>•</p> <li> <i class="fa-solid fa-tag fa-sm"></i> <a href="/blog/category/external-services">external-services</a> </li> </ul> </div> <br> <div class="container featured-posts"> <div class="row row-cols-2"> <div class="col mb-4"> <a href="/blog/2021/distill/"> <div class="card hoverable"> <div class="row g-0"> <div class="col-md-12"> <div class="card-body"> <div class="float-right"> <i class="fa-solid fa-thumbtack fa-xs"></i> </div> <h3 class="card-title text-lowercase">a distill-style blog post</h3> <p class="card-text">an example of a distill-style blog post and main elements</p> <p class="post-meta"> 25 min read   ·   <a href="/blog/2021"> <i class="fa-solid fa-calendar fa-sm"></i> 2021 </a> </p> </div> </div> </div> </div> </a> </div> <div class="col mb-4"> <a href="/blog/2015/code/"> <div class="card hoverable"> <div class="row g-0"> <div class="col-md-12"> <div class="card-body"> <div class="float-right"> <i class="fa-solid fa-thumbtack fa-xs"></i> </div> <h3 class="card-title text-lowercase">a post with code</h3> <p class="card-text">an example of a blog post with some code</p> <p class="post-meta"> 4 min read   ·   <a href="/blog/2015"> <i class="fa-solid fa-calendar fa-sm"></i> 2015 </a> </p> </div> </div> </div> </div> </a> </div> </div> </div> <hr> <ul class="post-list"> <li> <h3> <a class="post-title" href="/blog/2025/marimo/">a post with marimo snippets</a> </h3> <p>running Python in the browser with marimo</p> <p class="post-meta"> 2 min read   ·   April 28, 2025 </p> <p class="post-tags"> <a href="/blog/2025"> <i class="fa-solid fa-calendar fa-sm"></i> 2025 </a>   ·   <a href="/blog/tag/code"> <i class="fa-solid fa-hashtag fa-sm"></i> code</a>   <a href="/blog/tag/formatting"> <i class="fa-solid fa-hashtag fa-sm"></i> formatting</a>   ·   <a href="/blog/category/sample-posts"> <i class="fa-solid fa-tag fa-sm"></i> sample-posts</a> </p> </li> <li> <h3> <a class="post-title" href="/blog/2025/plotly/">a post with plotly.js</a> </h3> <p>this is what included plotly.js code could look like</p> <p class="post-meta"> 2 min read   ·   March 26, 2025 </p> <p class="post-tags"> <a href="/blog/2025"> <i class="fa-solid fa-calendar fa-sm"></i> 2025 </a>   ·   <a href="/blog/tag/formatting"> <i class="fa-solid fa-hashtag fa-sm"></i> formatting</a>   <a href="/blog/tag/charts"> <i class="fa-solid fa-hashtag fa-sm"></i> charts</a>   ·   <a href="/blog/category/sample-posts"> <i class="fa-solid fa-tag fa-sm"></i> sample-posts</a> </p> </li> <li> <div class="row"> <div class="col-sm-9"> <h3> <a class="post-title" href="/blog/2024/photo-gallery/">a post with image galleries</a> </h3> <p>this is what included image galleries could look like</p> <p class="post-meta"> 2 min read   ·   December 04, 2024 </p> <p class="post-tags"> <a href="/blog/2024"> <i class="fa-solid fa-calendar fa-sm"></i> 2024 </a>   ·   <a href="/blog/tag/formatting"> <i class="fa-solid fa-hashtag fa-sm"></i> formatting</a>   <a href="/blog/tag/images"> <i class="fa-solid fa-hashtag fa-sm"></i> images</a>   ·   <a href="/blog/category/sample-posts"> <i class="fa-solid fa-tag fa-sm"></i> sample-posts</a> </p> </div> <div class="col-sm-3"> <img class="card-img" src="/assets/img/9.jpg" style="object-fit: cover; height: 90%" alt="image"> </div> </div> </li> <li> <h3> <a class="post-title" href="https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/" target="_blank" rel="external nofollow noopener">Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra</a> <svg width="2rem" height="2rem" viewbox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"> <path d="M17 13.5v6H5v-12h6m3-3h6v6m0-6-9 9" class="icon_svg-stroke" stroke="#999" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </h3> <p>We’re sharing updates across our Gemini family of models and a glimpse of Project Astra, our vision for the future of AI assistants.</p> <p class="post-meta"> 7 min read   ·   May 14, 2024   ·   Google Blog </p> <p class="post-tags"> <a href="/blog/2024"> <i class="fa-solid fa-calendar fa-sm"></i> 2024 </a>   ·   <a href="/blog/tag/google"> <i class="fa-solid fa-hashtag fa-sm"></i> google</a>
7   ·   <a href="/blog/category/external-posts"> <i class="fa-solid fa-tag fa-sm"></i> external-posts</a> </p> </li> <li> <h3> <a class="post-title" href="/blog/2024/tabs/">a post with tabs</a> </h3> <p>this is what included tabs in a post could look like</p> <p class="post-meta"> 2 min read   ·   May 01, 2024 </p> <p class="post-tags"> <a href="/blog/2024"> <i class="fa-solid fa-calendar fa-sm"></i> 2024 </a>   ·   <a href="/blog/tag/formatting"> <i class="fa-solid fa-hashtag fa-sm"></i> formatting</a>   <a href="/blog/tag/code"> <i class="fa-solid fa-hashtag fa-sm"></i> code</a>   ·   <a href="/blog/category/sample-posts"> <i class="fa-solid fa-tag fa-sm"></i> sample-posts</a> </p> </li> </ul> <nav aria-label="Blog page navigation"> <ul class="af-pagination"> <li class="af-page-item disabled"> <a class="af-page-link" href="" tabindex="-1" aria-disabled="">&lt;</a> </li> <li class="af-page-item active"> <a class="af-page-link" href="/blog/" title="blog">1</a> </li> <li class="af-page-item "> <a class="af-page-link" href="/blog/page/2/" title="blog - page 2">2</a> </li> <li class="af-page-item "> <a class="af-page-link" href="/blog/page/3/" title="blog - page 3">3</a> </li> <li class="af-page-item "> <a class="af-page-link" href="/blog/page/4/" title="blog - page 4">4</a> </li> <li class="af-page-item "> <a class="af-page-link" href="/blog/page/5/" title="blog - page 5">5</a> </li> <li class="af-page-item "> <a class="af-page-link" href="/blog/page/2/">&gt;</a> </li> </ul> </nav> </div> </div> <footer class="fixed-bottom" role="contentinfo"> <div class="container mt-0"> © Copyright 2026 Hailin Wang. Powered by <a href="https://jekyllrb.com/" target="_blank" rel="external nofollow noopener">Jekyll</a> with <a href="https://github.com/alshedivat/al-folio" rel="external nofollow noopener" target="_blank">al-folio</a> theme. Hosted by <a href="https://pages.github.com/" target="_blank" rel="external nofollow noopener">GitHub Pages</a>. Photos from <a href="https://unsplash.com" target="_blank" rel="external nofollow noopener">Unsplash</a>. </div> </footer> 
7<script>
8  window.alFolio = {
9    compatBootstrap: false
10  };
11</script>
11 
11<script src="/assets/js/nav-toggle.js?v=141bd79a73ebc0f0b6ea58e440ae79fc"></script>
11 
11<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/masonry.pkgd.min.js" integrity="sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" crossorigin="anonymous"></script>
11 
11<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/imagesloaded.pkgd.min.js" integrity="sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=" crossorigin="anonymous"></script>
11 
11<script defer src="/assets/js/masonry.js?v=e49affc7bd2646f6acdad1dbe02c2359" type="text/javascript"></script>
11 
11<script defer type="text/javascript" id="MathJax-script" src="https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-mml-chtml.js" integrity="sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI=" crossorigin="anonymous"></script>
11 
11<script src="/assets/al_math/js/mathjax-setup.js"></script>
11 
11<script src="/assets/js/tooltips-setup.js?v=fe487e99db6c43751e6e7bdb2d6a0611"></script>
11 
11<script src="/assets/js/no_defer.js?v=53b1b1a645525975c963ce8bf8bfefcf"></script>
11 
11<script defer src="/assets/js/common.js?v=87baac90f765f2f3362dcf6aaf312a8a"></script>
11 
11<script defer src="/assets/js/copy_code.js?v=c8a01c11a92744d44b093fc3bda915df" type="text/javascript"></script>
11 
11<script defer src="/assets/js/jupyter_new_tab.js?v=896d254890d9b47f0281f63bfccf0dee"></script>
11 
11<script async src="https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js"></script>
11 
11<script async src="https://badge.dimensions.ai/badge.js"></script>
11 
11<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/medium-zoom.min.js" integrity="sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" crossorigin="anonymous"></script>
11 
11<script defer src="/assets/al_img_tools/js/zoom.js"></script>
11 
11<script defer src="/assets/js/progress-bar.js?v=499464c5c63ced6cf7ad62509f1e2610" type="text/javascript"></script>
11 
11<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vanilla-back-to-top.min.js" integrity="sha256-uMJJ3EoTyfRBoTbR+lrfu1uRQ87RZG8AR3cVNuQVeFg=" crossorigin="anonymous"></script>
11 
11<script>
12    addBackToTop();
13  </script>
13 
13<script type="module" src="/assets/al_search/js/search/ninja-keys.min.js"></script>
13 <ninja-keys hidebreadcrumbs noautoloadmdicons placeholder="Type to start searching"></ninja-keys> 
13<script src="/assets/al_search/js/search-setup.js"></script>
13 
13<script>
14// get the ninja-keys element
15const ninja = document.querySelector('ninja-keys');
16
17// add the home and posts menu items
18ninja.data = [{
19    id: "nav-about",
20    title: "about",
21    section: "Navigation",
22    handler: () => {
23      window.location.href = "/";
24    },
25  },{id: "nav-news",
26          title: "news",
27          description: "",
28          section: "Navigation",
29          handler: () => {
30            window.location.href = "/news/";
31          },
32        },{id: "nav-blog",
33          title: "blog",
34          description: "",
35          section: "Navigation",
36          handler: () => {
37            window.location.href = "/blog/";
38          },
39        },{id: "nav-publications",
40          title: "publications",
41          description: "publications by categories in reversed chronological order. generated by jekyll-scholar.",
42          section: "Navigation",
43          handler: () => {
44            window.location.href = "/publications/";
45          },
46        },{id: "nav-repositories",
47          title: "repositories",
48          description: "Edit the `_data/repositories.yml` and change the `github_users` and `github_repos` lists to include your own GitHub profile and repositories.",
49          section: "Navigation",
50          handler: () => {
51            window.location.href = "/repositories/";
52          },
53        },{id: "nav-cv",
54          title: "CV",
55          description: "This is a description of the page. You can modify it in &#39;_pages/cv.md&#39;. You can also change or remove the top pdf download button.",
56          section: "Navigation",
57          handler: () => {
58            window.location.href = "/cv/";
59          },
60        },{id: "post-a-post-with-marimo-snippets",
61        
62          title: "a post with marimo snippets",
63        
64        description: "running Python in the browser with marimo",
65        section: "Posts",
66        handler: () => {
67          
68            window.location.href = "/blog/2025/marimo/";
69          
70        },
71      },{id: "post-a-post-with-plotly-js",
72        
73          title: "a post with plotly.js",
74        
75        description: "this is what included plotly.js code could look like",
76        section: "Posts",
77        handler: () => {
78          
79            window.location.href = "/blog/2025/plotly/";
80          
81        },
82      },{id: "post-a-post-with-image-galleries",
83        
84          title: "a post with image galleries",
85        
86        description: "this is what included image galleries could look like",
87        section: "Posts",
88        handler: () => {
89          
90            window.location.href = "/blog/2024/photo-gallery/";
91          
92        },
93      },{id: "post-google-gemini-updates-flash-1-5-gemma-2-and-project-astra",
94        
95          title: 'Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra <svg width="1.2rem" height="1.2rem" top=".5rem" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><path d="M17 13.5v6H5v-12h6m3-3h6v6m0-6-9 9" class="icon_svg-stroke" stroke="#999" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',
96        
97        description: "We’re sharing updates across our Gemini family of models and a glimpse of Project Astra, our vision for the future of AI assistants.",
98        section: "Posts",
99        handler: () => {
100          
101            window.open("https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/", "_blank");
102          
103        },
104      },{id: "post-a-post-with-tabs",
105        
106          title: "a post with tabs",
107        
108        description: "this is what included tabs in a post could look like",
109        section: "Posts",
110        handler: () => {
111          
112            window.location.href = "/blog/2024/tabs/";
113          
114        },
115      },{id: "post-a-post-with-typograms",
116        
117          title: "a post with typograms",
118        
119        description: "this is what included typograms code could look like",
120        section: "Posts",
121        handler: () => {
122          
123            window.location.href = "/blog/2024/typograms/";
124          
125        },
126      },{id: "post-a-post-that-can-be-cited",
127        
128          title: "a post that can be cited",
129        
130        description: "this is what a post that can be cited looks like",
131        section: "Posts",
132        handler: () => {
133          
134            window.location.href = "/blog/2024/post-citation/";
135          
136        },
137      },{id: "post-a-post-with-pseudo-code",
138        
139          title: "a post with pseudo code",
140        
141        description: "this is what included pseudo code could look like",
142        section: "Posts",
143        handler: () => {
144          
145            window.location.href = "/blog/2024/pseudocode/";
146          
147        },
148      },{id: "post-a-post-with-code-diff",
149        
150          title: "a post with code diff",
151        
152        description: "this is how you can display code diffs",
153        section: "Posts",
154        handler: () => {
155          
156            window.location.href = "/blog/2024/code-diff/";
157          
158        },
159      },{id: "post-a-post-with-advanced-image-components",
160        
161          title: "a post with advanced image components",
162        
163        description: "this is what advanced image components could look like",
164        section: "Posts",
165        handler: () => {
166          
167            window.location.href = "/blog/2024/advanced-images/";
168          
169        },
170      },{id: "post-a-post-with-vega-lite",
171        
172          title: "a post with vega lite",
173        
174        description: "this is what included vega lite code could look like",
175        section: "Posts",
176        handler: () => {
177          
178            window.location.href = "/blog/2024/vega-lite/";
179          
180        },
181      },{id: "post-a-post-with-geojson",
182        
183          title: "a post with geojson",
184        
185        description: "this is what included geojson code could look like",
186        section: "Posts",
187        handler: () => {
188          
189            window.location.href = "/blog/2024/geojson-map/";
190          
191        },
192      },{id: "post-a-post-with-echarts",
193        
194          title: "a post with echarts",
195        
196        description: "this is what included echarts code could look like",
197        section: "Posts",
198        handler: () => {
199          
200            window.location.href = "/blog/2024/echarts/";
201          
202        },
203      },{id: "post-a-post-with-chart-js",
204        
205          title: "a post with chart.js",
206        
207        description: "this is what included chart.js code could look like",
208        section: "Posts",
209        handler: () => {
210          
211            window.location.href = "/blog/2024/chartjs/";
212          
213        },
214      },{id: "post-a-post-with-tikzjax",
215        
216          title: "a post with TikZJax",
217        
218        description: "this is what included TikZ code could look like",
219        section: "Posts",
220        handler: () => {
221          
222            window.location.href = "/blog/2023/tikzjax/";
223          
224        },
225      },{id: "post-a-post-with-bibliography",
226        
227          title: "a post with bibliography",
228        
229        description: "an example of a blog post with bibliography",
230        section: "Posts",
231        handler: () => {
232          
233            window.location.href = "/blog/2023/post-bibliography/";
234          
235        },
236      },{id: "post-a-post-with-jupyter-notebook",
237        
238          title: "a post with jupyter notebook",
239        
240        description: "an example of a blog post with jupyter notebook",
241        section: "Posts",
242        handler: () => {
243          
244            window.location.href = "/blog/2023/jupyter-notebook/";
245          
246        },
247      },{id: "post-a-post-with-custom-blockquotes",
248        
249          title: "a post with custom blockquotes",
250        
251        description: "an example of a blog post with custom blockquotes",
252        section: "Posts",
253        handler: () => {
254          
255            window.location.href = "/blog/2023/custom-blockquotes/";
256          
257        },
258      },{id: "post-a-post-with-table-of-contents-on-a-sidebar",
259        
260          title: "a post with table of contents on a sidebar",
261        
262        description: "an example of a blog post with table of contents on a sidebar",
263        section: "Posts",
264        handler: () => {
265          
266            window.location.href = "/blog/2023/sidebar-table-of-contents/";
267          
268        },
269      },{id: "post-a-post-with-audios",
270        
271          title: "a post with audios",
272        
273        description: "this is what included audios could look like",
274        section: "Posts",
275        handler: () => {
276          
277            window.location.href = "/blog/2023/audios/";
278          
279        },
280      },{id: "post-a-post-with-videos",
281        
282          title: "a post with videos",
283        
284        description: "this is what included videos could look like",
285        section: "Posts",
286        handler: () => {
287          
288            window.location.href = "/blog/2023/videos/";
289          
290        },
291      },{id: "post-displaying-beautiful-interactive-tables",
292        
293          title: "displaying beautiful interactive tables",
294        
295        description: "an example of how to use interactive tables in al-folio",
296        section: "Posts",
297        handler: () => {
298          
299            window.location.href = "/blog/2023/tables/";
300          
301        },
302      },{id: "post-a-post-with-table-of-contents",
303        
304          title: "a post with table of contents",
305        
306        description: "an example of a blog post with table of contents",
307        section: "Posts",
308        handler: () => {
309          
310            window.location.href = "/blog/2023/table-of-contents/";
311          
312        },
313      },{id: "post-a-post-with-giscus-comments",
314        
315          title: "a post with giscus comments",
316        
317        description: "an example of a blog post with giscus comments",
318        section: "Posts",
319        handler: () => {
320          
321            window.location.href = "/blog/2022/giscus-comments/";
322          
323        },
324      },{id: "post-یک-نوشتهٔ-راست-چین",
325        
326          title: "یک نوشتهٔ راست‌چین",
327        
328        description: "نمونه‌ای از پشتیبانی زبان‌های راست‌چین",
329        section: "Posts",
330        handler: () => {
331          
332            window.location.href = "/blog/2022/rtl/";
333          
334        },
335      },{id: "post-displaying-external-posts-on-your-al-folio-blog",
336        
337          title: 'Displaying External Posts on Your al-folio Blog <svg width="1.2rem" height="1.2rem" top=".5rem" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><path d="M17 13.5v6H5v-12h6m3-3h6v6m0-6-9 9" class="icon_svg-stroke" stroke="#999" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',
338        
339        description: "",
340        section: "Posts",
341        handler: () => {
342          
343            window.open("https://medium.com/@al-folio/displaying-external-posts-on-your-al-folio-blog-b60a1d241a0a?source=rss-17feae71c3c4------2", "_blank");
344          
345        },
346      },{id: "post-a-post-with-redirect",
347        
348          title: "a post with redirect",
349        
350        description: "you can also redirect to assets like pdf",
351        section: "Posts",
352        handler: () => {
353          
354            window.location.href = "/assets/pdf/example_pdf.pdf";
355          
356        },
357      },{id: "post-a-post-with-diagrams",
358        
359          title: "a post with diagrams",
360        
361        description: "an example of a blog post with diagrams",
362        section: "Posts",
363        handler: () => {
364          
365            window.location.href = "/blog/2021/diagrams/";
366          
367        },
368      },{id: "post-a-distill-style-blog-post",
369        
370          title: "a distill-style blog post",
371        
372        description: "an example of a distill-style blog post and main elements",
373        section: "Posts",
374        handler: () => {
375          
376            window.location.href = "/blog/2021/distill/";
377          
378        },
379      },{id: "post-a-post-with-twitter",
380        
381          title: "a post with twitter",
382        
383        description: "an example of a blog post with twitter",
384        section: "Posts",
385        handler: () => {
386          
387            window.location.href = "/blog/2020/twitter/";
388          
389        },
390      },{id: "post-a-post-with-disqus-comments",
391        
392          title: "a post with disqus comments",
393        
394        description: "an example of a blog post with disqus comments",
395        section: "Posts",
396        handler: () => {
397          
398            window.location.href = "/blog/2015/disqus-comments/";
399          
400        },
401      },{id: "post-a-post-with-math",
402        
403          title: "a post with math",
404        
405        description: "an example of a blog post with some math",
406        section: "Posts",
407        handler: () => {
408          
409            window.location.href = "/blog/2015/math/";
410          
411        },
412      },{id: "post-a-post-with-code",
413        
414          title: "a post with code",
415        
416        description: "an example of a blog post with some code",
417        section: "Posts",
418        handler: () => {
419          
420            window.location.href = "/blog/2015/code/";
421          
422        },
423      },{id: "post-a-post-with-images",
424        
425          title: "a post with images",
426        
427        description: "this is what included images could look like",
428        section: "Posts",
429        handler: () => {
430          
431            window.location.href = "/blog/2015/images/";
432          
433        },
434      },{id: "post-a-post-with-formatting-and-links",
435        
436          title: "a post with formatting and links",
437        
438        description: "march &amp; april, looking forward to summer",
439        section: "Posts",
440        handler: () => {
441          
442            window.location.href = "/blog/2015/formatting-and-links/";
443          
444        },
445      },{id: "books-the-godfather",
446          title: 'The Godfather',
447          description: "",
448          section: "Books",handler: () => {
449              window.location.href = "/books/the_godfather/";
450            },},{id: "news-my-academic-website-has-been-launched-you-can-find-it-at-https-hailin-wang-this-website-will-serve-as-a-hub-for-my-research-publications-and-academic-activities-i-look-forward-to-sharing-updates-and-engaging-with-the-academic-community-through-this-platform",
451          title: 'My academic website has been launched! You can find it at https://hailin.wang. This...',
452          description: "",
453          section: "News",},{id: "news-our-paper-micromechanics-inspired-modeling-of-granular-materials-submitted-to-the-international-journal-of-solids-and-structures-has-been-accepted-for-publication",
454          title: 'Our paper “Micromechanics-inspired modeling of granular materials” submitted to the International Journal of...',
455          description: "",
456          section: "News",},{id: "projects-project-1",
457          title: 'project 1',
458          description: "with background image",
459          section: "Projects",handler: () => {
460              window.location.href = "/projects/1_project/";
461            },},{id: "projects-project-2",
462          title: 'project 2',
463          description: "a project with a background image and giscus comments",
464          section: "Projects",handler: () => {
465              window.location.href = "/projects/2_project/";
466            },},{id: "projects-project-3-with-very-long-name",
467          title: 'project 3 with very long name',
468          description: "a project that redirects to another website",
469          section: "Projects",handler: () => {
470              window.location.href = "/projects/3_project/";
471            },},{id: "projects-project-4",
472          title: 'project 4',
473          description: "another without an image",
474          section: "Projects",handler: () => {
475              window.location.href = "/projects/4_project/";
476            },},{id: "projects-project-5",
477          title: 'project 5',
478          description: "a project with a background image",
479          section: "Projects",handler: () => {
480              window.location.href = "/projects/5_project/";
481            },},{id: "projects-project-6",
482          title: 'project 6',
483          description: "a project with no image",
484          section: "Projects",handler: () => {
485              window.location.href = "/projects/6_project/";
486            },},{id: "projects-project-7",
487          title: 'project 7',
488          description: "with background image",
489          section: "Projects",handler: () => {
490              window.location.href = "/projects/7_project/";
491            },},{id: "projects-project-8",
492          title: 'project 8',
493          description: "an other project with a background image and giscus comments",
494          section: "Projects",handler: () => {
495              window.location.href = "/projects/8_project/";
496            },},{id: "projects-project-9",
497          title: 'project 9',
498          description: "another project with an image 🎉",
499          section: "Projects",handler: () => {
500              window.location.href = "/projects/9_project/";
501            },},{id: "teachings-data-science-fundamentals",
502          title: 'Data Science Fundamentals',
503          description: "This course covers the foundational aspects of data science, including data collection, cleaning, analysis, and visualization. Students will learn practical skills for working with real-world datasets.",
504          section: "Teachings",handler: () => {
505              window.location.href = "/teachings/data-science-fundamentals/";
506            },},{id: "teachings-introduction-to-machine-learning",
507          title: 'Introduction to Machine Learning',
508          description: "This course provides an introduction to machine learning concepts, algorithms, and applications. Students will learn about supervised and unsupervised learning, model evaluation, and practical implementations.",
509          section: "Teachings",handler: () => {
510              window.location.href = "/teachings/introduction-to-machine-learning/";
511            },},{
512        id: 'social-cv',
513        title: 'CV',
514        section: 'Socials',
515        handler: () => {
516          window.open("/assets/rendercv/rendercv_output/Hailin_Wang_CV.pdf", "_blank");
517        },
518      },{
519        id: 'social-email',
520        title: 'email',
521        section: 'Socials',
522        handler: () => {
523          window.open("mailto:%68%61%69%6C%69%6E.%77%61%6E%67@%63%6F%6E%6E%65%63%74.%70%6F%6C%79%75.%68%6B", "_blank");
524        },
525      },{
526        id: 'social-scholar',
527        title: 'Google Scholar',
528        section: 'Socials',
529        handler: () => {
530          window.open("https://scholar.google.com/citations?user=-Bb_nmAAAAAJ", "_blank");
531        },
532      },{
533        id: 'social-scopus',
534        title: 'Scopus',
535        section: 'Socials',
536        handler: () => {
537          window.open("https://www.scopus.com/authid/detail.uri?authorId=36452240500", "_blank");
538        },
539      },{
540        id: 'social-orcid',
541        title: 'ORCID',
542        section: 'Socials',
543        handler: () => {
544          window.open("https://orcid.org/0000-0001-5759-2455", "_blank");
545        },
546      },{
547        id: 'social-researchgate',
548        title: 'ResearchGate',
549        section: 'Socials',
550        handler: () => {
551          window.open("https://www.researchgate.net/profile/Hailin-Wang-4/", "_blank");
552        },
553      },{
554        id: 'social-github',
555        title: 'GitHub',
556        section: 'Socials',
557        handler: () => {
558          window.open("https://github.com/haiiliin", "_blank");
559        },
560      },{
561        id: 'social-x',
562        title: 'X',
563        section: 'Socials',
564        handler: () => {
565          window.open("https://twitter.com/haiiliin", "_blank");
566        },
567      },{
568        id: 'social-instagram',
569        title: 'Instagram',
570        section: 'Socials',
571        handler: () => {
572          window.open("https://instagram.com/haiiliinw", "_blank");
573        },
574      },{
575        id: 'social-youtube',
576        title: 'YouTube',
577        section: 'Socials',
578        handler: () => {
579          window.open("https://youtube.com/@haiiliin", "_blank");
580        },
581      },{
582      id: 'light-theme',
583      title: 'Change theme to light',
584      description: 'Change the theme of the site to Light',
585      section: 'Theme',
586      handler: () => {
587        setThemeSetting("light");
588      },
589    },
590    {
591      id: 'dark-theme',
592      title: 'Change theme to dark',
593      description: 'Change the theme of the site to Dark',
594      section: 'Theme',
595      handler: () => {
596        setThemeSetting("dark");
597      },
598    },
599    {
600      id: 'system-theme',
601      title: 'Use system default theme',
602      description: 'Change the theme of the site to System Default',
603      section: 'Theme',
604      handler: () => {
605        setThemeSetting("system");
606      },
607    },];
608
609</script>
609 
609<script src="/assets/al_search/js/shortcut-key.js"></script>
609 </body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.