// get the ninja-keys element
const ninja = document.querySelector('ninja-keys');
// add the home and posts menu items
ninja.data = [{
id: "nav-about",
title: "About",
section: "Navigation",
handler: () => {
window.location.href = "/";
},
},{id: "nav-publications",
title: "Publications",
description: "* denotes shared first authorship",
section: "Navigation",
handler: () => {
window.location.href = "/publications/";
},
},{id: "nav-service",
title: "Service",
description: "Academic service, reviewing, and professional activities",
section: "Navigation",
handler: () => {
window.location.href = "/service/";
},
},{id: "nav-cv",
title: "CV",
description: "",
section: "Navigation",
handler: () => {
window.location.href = "/cv/";
},
},{id: "nav-acknowledgements",
title: "Acknowledgements",
description: "People who have shaped my research journey.",
section: "Navigation",
handler: () => {
window.location.href = "/acknowledgements/";
},
},{id: "post-a-post-with-plotly-js",
title: "a post with plotly.js",
description: "this is what included plotly.js code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2025/plotly/";
},
},{id: "post-a-post-with-image-galleries",
title: "a post with image galleries",
description: "this is what included image galleries could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/photo-gallery/";
},
},{id: "post-google-gemini-updates-flash-1-5-gemma-2-and-project-astra",
title: 'Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra ',
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.",
section: "Posts",
handler: () => {
window.open("https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/", "_blank");
},
},{id: "post-a-post-with-tabs",
title: "a post with tabs",
description: "this is what included tabs in a post could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/tabs/";
},
},{id: "post-a-post-with-typograms",
title: "a post with typograms",
description: "this is what included typograms code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/typograms/";
},
},{id: "post-a-post-that-can-be-cited",
title: "a post that can be cited",
description: "this is what a post that can be cited looks like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/post-citation/";
},
},{id: "post-a-post-with-pseudo-code",
title: "a post with pseudo code",
description: "this is what included pseudo code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/pseudocode/";
},
},{id: "post-a-post-with-code-diff",
title: "a post with code diff",
description: "this is how you can display code diffs",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/code-diff/";
},
},{id: "post-a-post-with-advanced-image-components",
title: "a post with advanced image components",
description: "this is what advanced image components could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/advanced-images/";
},
},{id: "post-a-post-with-vega-lite",
title: "a post with vega lite",
description: "this is what included vega lite code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/vega-lite/";
},
},{id: "post-a-post-with-geojson",
title: "a post with geojson",
description: "this is what included geojson code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/geojson-map/";
},
},{id: "post-a-post-with-echarts",
title: "a post with echarts",
description: "this is what included echarts code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/echarts/";
},
},{id: "post-a-post-with-chart-js",
title: "a post with chart.js",
description: "this is what included chart.js code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2024/chartjs/";
},
},{id: "post-a-post-with-tikzjax",
title: "a post with TikZJax",
description: "this is what included TikZ code could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/tikzjax/";
},
},{id: "post-a-post-with-bibliography",
title: "a post with bibliography",
description: "an example of a blog post with bibliography",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/post-bibliography/";
},
},{id: "post-a-post-with-jupyter-notebook",
title: "a post with jupyter notebook",
description: "an example of a blog post with jupyter notebook",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/jupyter-notebook/";
},
},{id: "post-a-post-with-custom-blockquotes",
title: "a post with custom blockquotes",
description: "an example of a blog post with custom blockquotes",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/custom-blockquotes/";
},
},{id: "post-a-post-with-table-of-contents-on-a-sidebar",
title: "a post with table of contents on a sidebar",
description: "an example of a blog post with table of contents on a sidebar",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/sidebar-table-of-contents/";
},
},{id: "post-a-post-with-audios",
title: "a post with audios",
description: "this is what included audios could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/audios/";
},
},{id: "post-a-post-with-videos",
title: "a post with videos",
description: "this is what included videos could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/videos/";
},
},{id: "post-displaying-beautiful-tables-with-bootstrap-tables",
title: "displaying beautiful tables with Bootstrap Tables",
description: "an example of how to use Bootstrap Tables",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/tables/";
},
},{id: "post-a-post-with-table-of-contents",
title: "a post with table of contents",
description: "an example of a blog post with table of contents",
section: "Posts",
handler: () => {
window.location.href = "/blog/2023/table-of-contents/";
},
},{id: "post-a-post-with-giscus-comments",
title: "a post with giscus comments",
description: "an example of a blog post with giscus comments",
section: "Posts",
handler: () => {
window.location.href = "/blog/2022/giscus-comments/";
},
},{id: "post-displaying-external-posts-on-your-al-folio-blog",
title: 'Displaying External Posts on Your al-folio Blog ',
description: "",
section: "Posts",
handler: () => {
window.open("https://medium.com/@al-folio/displaying-external-posts-on-your-al-folio-blog-b60a1d241a0a?source=rss-17feae71c3c4------2", "_blank");
},
},{id: "post-a-post-with-redirect",
title: "a post with redirect",
description: "you can also redirect to assets like pdf",
section: "Posts",
handler: () => {
window.location.href = "/assets/pdf/example_pdf.pdf";
},
},{id: "post-a-post-with-diagrams",
title: "a post with diagrams",
description: "an example of a blog post with diagrams",
section: "Posts",
handler: () => {
window.location.href = "/blog/2021/diagrams/";
},
},{id: "post-a-distill-style-blog-post",
title: "a distill-style blog post",
description: "an example of a distill-style blog post and main elements",
section: "Posts",
handler: () => {
window.location.href = "/blog/2021/distill/";
},
},{id: "post-a-post-with-twitter",
title: "a post with twitter",
description: "an example of a blog post with twitter",
section: "Posts",
handler: () => {
window.location.href = "/blog/2020/twitter/";
},
},{id: "post-a-post-with-disqus-comments",
title: "a post with disqus comments",
description: "an example of a blog post with disqus comments",
section: "Posts",
handler: () => {
window.location.href = "/blog/2015/disqus-comments/";
},
},{id: "post-a-post-with-math",
title: "a post with math",
description: "an example of a blog post with some math",
section: "Posts",
handler: () => {
window.location.href = "/blog/2015/math/";
},
},{id: "post-a-post-with-code",
title: "a post with code",
description: "an example of a blog post with some code",
section: "Posts",
handler: () => {
window.location.href = "/blog/2015/code/";
},
},{id: "post-a-post-with-images",
title: "a post with images",
description: "this is what included images could look like",
section: "Posts",
handler: () => {
window.location.href = "/blog/2015/images/";
},
},{id: "post-a-post-with-formatting-and-links",
title: "a post with formatting and links",
description: "march & april, looking forward to summer",
section: "Posts",
handler: () => {
window.location.href = "/blog/2015/formatting-and-links/";
},
},{id: "books-the-godfather",
title: 'The Godfather',
description: "",
section: "Books",handler: () => {
window.location.href = "/books/the_godfather/";
},},{id: "news-our-paper-hice-score-has-been-accepted-by-cvpr-2025",
title: 'Our paper HICE-Score has been accepted by CVPR 2025! ππ',
description: "",
section: "News",},{id: "news-our-paper-lance-has-been-accepted-by-cvpr-2025",
title: 'Our paper LanCE has been accepted by CVPR 2025! ππ',
description: "",
section: "News",},{id: "news-our-recent-work-contrastive-sparse-representation-has-generated-considerable-interest-as-a-promising-alternative-approach-for-efficient-embedding-retrieval-and-we-have-been-invited-to-publish-the-model-on-hugging-face-and-sentence-transformer-code-available-at-link",
title: 'Our recent work Contrastive Sparse Representation has generated considerable interest as a promising...',
description: "",
section: "News",},{id: "news-our-paper-contrastive-sparse-representations-csr-was-selected-for-an-oral-presentation-top-1-at-icml-2025-csr-compresses-sota-4k-dim-embeddings-to-just-32-active-dimensions-achieving-100-faster-retrieval-for-rag-and-vector-databases-with-minimal-accuracy-loss",
title: 'Our paper Contrastive Sparse Representations (CSR) was selected for an Oral Presentation (Top...',
description: "",
section: "News",},{id: "news-the-wait-is-over-csr-is-now-available-in-sentence-transformer-v5-0",
title: 'The wait is over! CSR is now available in Sentence-Transformer v5.0! π€π€',
description: "",
section: "News",},{id: "news-join-bytedance-bandai-as-a-research-intern-targeting-agentic-rl-οΈοΈ-οΈ",
title: 'Join ByteDance Bandai as a Research Intern, targeting Agentic RL!β‘οΈοΈβ‘οΈ',
description: "",
section: "News",},{id: "news-new-members-in-sparsity-family-two-papers-on-ultra-sparse-embeddings-and-sparse-feature-attention-accepted-at-iclr-2026-catch-us-in-rio-de-janeiro",
title: 'New members in sparsity family! Two papers on ultra-sparse embeddings and sparse feature...',
description: "",
section: "News",},{id: "news-one-paper-accepted-at-tcsvt-first-benchmark-for-multimodal-remote-sensing-detection-under-real-world-cloud-degradations",
title: 'One paper accepted at TCSVT! First benchmark for multimodal remote sensing detection under...',
description: "",
section: "News",},{id: "news-a-new-chapter-begins-beyond-excited-to-join-georgia-institute-of-technology-as-a-phd-student-this-fall-atlanta-i-m-coming-go-jackets",
title: 'A new chapter begins! Beyond excited to join Georgia Institute of Technology as...',
description: "",
section: "News",},{id: "news-thrilled-to-share-that-our-paper-a-non-negative-vae-the-generalized-gamma-belief-network-has-been-accepted-by-ieee-tpami",
title: 'Thrilled to share that our paper A Non-negative VAE: the Generalized Gamma Belief...',
description: "",
section: "News",},{id: "projects-project-1",
title: 'project 1',
description: "with background image",
section: "Projects",handler: () => {
window.location.href = "/projects/1_project/";
},},{id: "projects-project-2",
title: 'project 2',
description: "a project with a background image and giscus comments",
section: "Projects",handler: () => {
window.location.href = "/projects/2_project/";
},},{id: "projects-project-3-with-very-long-name",
title: 'project 3 with very long name',
description: "a project that redirects to another website",
section: "Projects",handler: () => {
window.location.href = "/projects/3_project/";
},},{id: "projects-project-4",
title: 'project 4',
description: "another without an image",
section: "Projects",handler: () => {
window.location.href = "/projects/4_project/";
},},{id: "projects-project-5",
title: 'project 5',
description: "a project with a background image",
section: "Projects",handler: () => {
window.location.href = "/projects/5_project/";
},},{id: "projects-project-6",
title: 'project 6',
description: "a project with no image",
section: "Projects",handler: () => {
window.location.href = "/projects/6_project/";
},},{id: "projects-project-7",
title: 'project 7',
description: "with background image",
section: "Projects",handler: () => {
window.location.href = "/projects/7_project/";
},},{id: "projects-project-8",
title: 'project 8',
description: "an other project with a background image and giscus comments",
section: "Projects",handler: () => {
window.location.href = "/projects/8_project/";
},},{id: "projects-project-9",
title: 'project 9',
description: "another project with an image π",
section: "Projects",handler: () => {
window.location.href = "/projects/9_project/";
},},{id: "teachings-data-science-fundamentals",
title: 'Data Science Fundamentals',
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.",
section: "Teachings",handler: () => {
window.location.href = "/teachings/data-science-fundamentals/";
},},{id: "teachings-introduction-to-machine-learning",
title: 'Introduction to Machine Learning',
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.",
section: "Teachings",handler: () => {
window.location.href = "/teachings/introduction-to-machine-learning/";
},},{
id: 'social-email',
title: 'email',
section: 'Socials',
handler: () => {
window.open("mailto:%6E%65%69%6C%77%65%6E%39%38%37@%67%6D%61%69%6C.%63%6F%6D", "_blank");
},
},{
id: 'social-scholar',
title: 'Google Scholar',
section: 'Socials',
handler: () => {
window.open("https://scholar.google.com/citations?user=mrdyOyQAAAAJ", "_blank");
},
},{
id: 'social-github',
title: 'GitHub',
section: 'Socials',
handler: () => {
window.open("https://github.com/neilwen987", "_blank");
},
},{
id: 'social-x',
title: 'X',
section: 'Socials',
handler: () => {
window.open("https://twitter.com/TianshengV111", "_blank");
},
},{
id: 'light-theme',
title: 'Change theme to light',
description: 'Change the theme of the site to Light',
section: 'Theme',
handler: () => {
setThemeSetting("light");
},
},
{
id: 'dark-theme',
title: 'Change theme to dark',
description: 'Change the theme of the site to Dark',
section: 'Theme',
handler: () => {
setThemeSetting("dark");
},
},
{
id: 'system-theme',
title: 'Use system default theme',
description: 'Change the theme of the site to System Default',
section: 'Theme',
handler: () => {
setThemeSetting("system");
},
},];