From 02968710443b807ac7697c9ef00305e056c4fc5c Mon Sep 17 00:00:00 2001 From: morethan987 Date: Sat, 11 Jan 2025 02:50:52 +0000 Subject: [PATCH] auto deploy morethan987/hugo_main@2198bf9c1885a435e800f53c89ce1995b64470d7 --- blog/note-to-blog-report/index.html | 15 ++++++++------- en/blog/note-to-blog-report/index.html | 5 +++-- en/index.json | 2 +- index.json | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/blog/note-to-blog-report/index.html b/blog/note-to-blog-report/index.html index 22c8d79..8235f81 100644 --- a/blog/note-to-blog-report/index.html +++ b/blog/note-to-blog-report/index.html @@ -115,7 +115,7 @@ "keywords": ["Hugo","博客","报告"], "mainEntityOfPage": "true", - "wordCount": "3804" + "wordCount": "3911" }] @@ -1239,7 +1239,7 @@

  • 已有方案
      -
    • Quartz(Hugo)
    • +
    • Quartz
    • Flowershow
    • 官方发布
    • Digital Garden
    • @@ -1276,7 +1276,7 @@

    • 已有方案
        -
      • Quartz(Hugo)
      • +
      • Quartz
      • Flowershow
      • 官方发布
      • Digital Garden
      • @@ -1558,13 +1558,13 @@

        已有方案

        -

        Quartz(Hugo) -
        +

        Quartz +
        # + style="text-decoration-line: none !important;" href="#quartz" aria-label="锚点">#

        @@ -1581,7 +1581,8 @@
        介绍
        -

        Quartz 是一个利用 Hugo 将 Obsidian 笔记转化为网页的工具集,最新版本优化了用户自定义的体验。

        +

        Quartz 是一个将 Obsidian 笔记转化为网页的工具集。Quartz 的最新版本是 v4 版本,相较于 v3 版本, v4 版本从底层完全重构了代码,去除了对于 Hugo 的依赖,优化了用户自定义的体验。目前 v4 版本主要使用 TypeScript 构建,原本 hugotemplate 也改用 JSX 替换。

        +

        因此,现在的 Quartz 几乎可以说和 Hugo 没什么关系了,但是目前国内的很多信息还是宣传 Quartz 的底层是 Hugo

        官方样例网站:Welcome to Quartz 4

        diff --git a/en/blog/note-to-blog-report/index.html b/en/blog/note-to-blog-report/index.html index 1066e41..019fce1 100644 --- a/en/blog/note-to-blog-report/index.html +++ b/en/blog/note-to-blog-report/index.html @@ -115,7 +115,7 @@ "keywords": ["Hugo","博客","报告"], "mainEntityOfPage": "true", - "wordCount": "1623" + "wordCount": "1687" }] @@ -1581,7 +1581,8 @@
        Introduction
        -

        Quartz is a toolset that uses Hugo to convert Obsidian notes into webpages. The latest version optimizes the user customization experience.

        +

        Quartz is a toolset that converts Obsidian notes into web pages. The latest version, v4, has undergone a complete rewrite compared to v3, removing its dependency on Hugo and optimizing the user customization experience. The v4 version is now primarily built with TypeScript, and the original Hugo templates have been replaced with JSX.

        +

        As a result, Quartz in its current form is almost entirely disconnected from Hugo. However, much of the information available in Internet still advertises Quartz as being built on top of Hugo.

        Official example website: Welcome to Quartz 4

        diff --git a/en/index.json b/en/index.json index 7568e15..00e0824 100644 --- a/en/index.json +++ b/en/index.json @@ -1,4 +1,4 @@ -[{"content":" Familiarizing oneself with the project analysis process, this is a practical analysis report. After I had completed my small plugin, I realized that there doesn\u0026rsquo;t seem to be a one-click solution in the note-to-blog field. So, I wrote this article to analyze whether it would make sense to create a new project to fill this gap.\nThere is no such thing as a \u0026ldquo;better\u0026rdquo; or \u0026ldquo;worse\u0026rdquo; project; there is only whether it is suitable or not. The evaluation criteria in this article are based on whether they meet the requirements of a blog website. Therefore, some projects may not be suitable for creating a blog site, but this does not diminish their value.\nField Definition # Before we begin the analysis, it\u0026rsquo;s important to have a clear understanding of the note-to-blog field.\nNotes: In this context, \u0026ldquo;notes\u0026rdquo; specifically refers to the notes in Obsidian, which use Obsidian Flavored Markdown. This adds certain complexities to the process of converting notes to a webpage.\nBlog: A blog, by definition, is a means to gain traffic. Creators spend time writing notes, and then using conversion software, generate beautifully formatted, feature-rich blog websites.\nEvaluation criteria are as follows:\nPrivacy:\nDoes it run locally? Is it open-source? Usability:\nHow well does it adapt to Obsidian\u0026rsquo;s syntax? How complex is the service deployment? How detailed is the documentation? How easy is it to customize settings? Web Functionality:\nDoes the default web template include all essential functions (search, day/night mode, etc.)? How visually appealing is the default webpage? Does it support SEO? How smoothly does it convert Obsidian\u0026rsquo;s native syntax (for example, are there untranslatable code blocks in internal links, or does it discard some Obsidian syntax features)? Project Overview # In my vision, this project would be an Obsidian plugin that seamlessly exports Obsidian notes into Hugo blog webpages, supporting all of Obsidian\u0026rsquo;s basic core features.\nResult: It greatly reduces the cost of creating a blog webpage, allowing anyone who can use Obsidian to have their own blog.\nMarket and User Feasibility Analysis # Market Demand Analysis # Overview # Basic Needs: The demand to build a personal website and continuously produce content, including for self-improvement, self-expression, and creating a unique and comprehensive personal skill showcase (for corporate recruitment), etc.\nTarget User Group: Heavy Obsidian users who want to share notes; knowledge creators who want to build a personal blog but have abandoned the idea due to technical difficulty.\nRelevant Data # Flowershow: As of October 2024, the plugin had been downloaded 3,355 times; by January 2025, this number had risen to 4,594, while the most downloaded plugin had reached 3,211,992 downloads. Quartz: As of January 2025, Quartz had accumulated 7.7k stars on GitHub. Existing Solutions # Quartz (Hugo) # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥\nIntroduction # Quartz is a toolset that uses Hugo to convert Obsidian notes into webpages. The latest version optimizes the user customization experience.\nOfficial example website: Welcome to Quartz 4\nReview # Pros:\nExtremely complete functionality The only toolset that successfully handles display wiki links Detailed documentation Cons:\nVirtually no drawbacks, but one notable limitation is the lack of Chinese documentation. Summary: An excellent project, where the styles displayed in Obsidian are the same as those displayed on the webpage. It has garnered the most stars on GitHub among all available solutions.\nFlowershow # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥🩶\nIntroduction # Flowershow is an overall publishing service based on Obsidian, which can convert your Obsidian notes into an online digital garden website with directory structure. Vercel is a cloud service for front-end deployment, enabling serverless front-end deployment via GitHub. Each content submission triggers automatic deployment. For domestic users, Netlify is an alternative.\nSubjectively, the development team behind Flowershow is very passionate and mission-driven. Their core philosophies are detailed in their About page.\nObjectively, Flowershow\u0026rsquo;s positioning as a blog webpage generation platform based on Obsidian is spot-on, and the final result is very good both from a front-end and back-end perspective.\nReview # Pros:\nClear positioning and a straightforward workflow Comprehensive feature support Professional team behind maintenance and operations Highly customizable, suitable for creators who enjoy personalizing their setup Cons (as of January 2025):\nSome Obsidian features are not handled, such as display wiki links. At least this section is omitted in the documentation. A reverse link feature is mentioned on the homepage, but it’s unclear in the site’s details. Summary: Overall, the project is well done, but some details still need improvement. This solution is suitable for creators who don\u0026rsquo;t require high support for Obsidian syntax.\nOfficial Publish # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\nIntroduction # Examples of websites using Obsidian\u0026rsquo;s official publishing service:\nObsidian Chinese Tutorial - A Chinese tutorial website, using the official Obsidian publishing service. Digital 3D Garden - Deep front-end customizations. Mister Chad - A simple, neat site with rich content. Discrete Structures for Computer Science - Official simple style. Review # Pros:\nThe official publish service offers top-notch support for Obsidian’s internal representations, ensuring all Obsidian features are correctly displayed on the webpage. Continuous maintenance ensures quick adaptation to updates from Obsidian. Highly customizable settings for users with coding experience, and a wide range of themes from other developers. Privacy settings, password protection, and access control for internal document management. SEO support and mobile platform adaptation for greater potential traffic. Cons:\nCosts $8 per month. Since personal websites typically have very little traffic initially, this can become a significant expense over time. This is the major drawback of the official service. If you stop paying, the website becomes inaccessible. Limited support in certain regions, with traffic constraints in China. Summary: The official service is suitable for users with sufficient funds and moderate customization needs.\nDigital Garden # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\nIntroduction # Digital Garden is an Obsidian plugin that exports notes as webpages and hosts them on GitHub, with deployment via Vercel or Netlify.\nExample sites:\nDigital Garden - Official example Aaron Youn - Created by an individual user John\u0026rsquo;s Digital Galaxy - Rich content showcasing Digital Garden’s features, including display links. Review # Pros:\nComprehensive feature support Supports Obsidian theme migration Cons:\nNot friendly with Chinese paths Web interface customization requires direct handling of source code (HTML, JavaScript, CSS), and the default interface is not very visually appealing. Summary: The workflow is simple, and the feature support is extensive. However, the interface requires effort to improve, and creators who care less about aesthetics can jump straight into using it.\nPerlite # Recommendation: ❤️‍🔥❤️‍🔥🩶🩶🩶\nIntroduction # Perlite is an open-source alternative to Obsidian\u0026rsquo;s official publishing service, providing a browser\n-based file reader with an interface nearly identical to Obsidian’s.\nReview # Pros:\nSupports almost all Obsidian features. Classic native interface, offering a familiar experience for users. Cons:\nIt is not a blog page but a \u0026ldquo;file reader\u0026rdquo; instead. Requires Docker, which can result in slower startup times compared to the simplicity of a plugin experience. Summary: Perlite is best suited for those who need a browser-based Obsidian experience, rather than as a public-facing blog.\nJekyll + Netlify + GitHub Pages # Recommendation: ❤️‍🔥❤️‍🔥🩶🩶🩶\nIntroduction # This method is derived from obsidian\u0026rsquo;s most perfect free publishing solution.\nExample website by the author: oldwinter’s Digital Garden\nReview # Pros:\nSimple configuration Highly customizable Cons:\nDoes not support certain Obsidian features like callout syntax No dark mode support No search functionality Summary: A good solution for converting Obsidian to a blog, but missing some core features, making it unsuitable for creators seeking a complete web experience.\nTiddlyWiki # Recommendation: ❤️‍🔥🩶🩶🩶🩶\nIntroduction # TiddlyWiki is an older note-taking framework that remains very active today, with developers continuously enhancing it.\nReview # Pros:\nExtremely simple and lightweight Widely used with a strong user base Domestic services available with no need for VPNs Cons:\nThe simplicity might result in a somewhat primitive interface. Not a full-fledged personal blog; lacks SEO and is difficult to access via search engines, limiting traffic potential. Summary: TiddlyWiki is ideal for personal note storage but not for creators seeking a blog that attracts traffic.\nConclusion # Before conducting a thorough analysis, I was unaware of the actual landscape in the note-to-blog field, which led me to consider creating a simplified plugin. 💡\nHowever, after systematic research, I must admit that Quartz stands out as the best project in this space. Whether it\u0026rsquo;s the adaptation to Obsidian\u0026rsquo;s syntax, ease of configuration, front-end aesthetics, customization options, or backend blog creation, there is very little room for improvement.\nThus, there is no need for me to initiate a project to duplicate what’s already been done. I salute all the teams involved in the note-to-blog field, whether mentioned in this article or not. 🫡\nThere are no \u0026ldquo;better\u0026rdquo; or \u0026ldquo;worse\u0026rdquo; projects, only those that are suitable or not. The evaluation criteria in this article focus on whether the solution meets the requirements for a blog webpage, and thus, some projects may not be ideal for blogging but still offer great value.\nSaluting open-source pioneers! 🫡🫡🫡\n","date":"10 January 2025","externalUrl":null,"permalink":"/en/blog/note-to-blog-report/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n Familiarizing oneself with the project analysis process, this is a practical analysis report.\n\u003c/div\u003e\n\n\u003cp\u003eAfter I had completed my \u003ca href=\"https://morethan987.github.io/en/blog/plugin-writing-experience/\"\u003esmall plugin\u003c/a\u003e, I realized that there doesn\u0026rsquo;t seem to be a one-click solution in the \u003cstrong\u003enote-to-blog\u003c/strong\u003e field. So, I wrote this article to analyze whether it would make sense to create a new project to fill this gap.\u003c/p\u003e","title":"Analysis Report on the Note-to-Blog Project","type":"blog"},{"content":" A blog website journey, from hand-coding to Hugo, a story of twists and turns. Why Hugo? # It all started with hearing that Hugo could generate webpages and that it was incredibly efficient at compiling static pages. I decided to dive into the research—Hugo is said to be the fastest static site generator in the world, as claimed on its official website.\nOf course, words are just words, so here’s the output I got when I compiled and ran Hugo locally without the public folder at the beginning:\nZH-CN EN Pages 53 51 Paginator pages 0 0 Non-page files 13 13 Static files 7 7 Processed images 3 0 Aliases 18 17 Cleaned 0 0 Built in 872 ms\nIn total, compiling 104 pages (both Chinese and English) took just 0.872 seconds, including the time to build the local server. That speed is hard to criticize. And the local server can listen for changes to the source code in real time and do incremental refactoring, depending on the size of the change, usually around 0.03 seconds.\nI haven\u0026rsquo;t used other page generators for setting up blogs, so I can\u0026rsquo;t compare Hugo\u0026rsquo;s speed with others. References # Here are all the resources I used during the blog setup process:\n莱特雷-letere This is a blogger’s site also built with Hugo. It contains a lot of tutorials on other web tools as well. The series is also available on Bilibili video tutorial. Blowfish This is the Hugo theme I used, and the documentation is excellent. I’ve never seen such a patient author. Official Hugo Website Hugo Themes Full Deployment Process # Setting Up Hugo # This part is covered in detail in the webpage and video tutorial by the blogger. If you don’t like reading text, you can follow the video tutorial. 😝\nHonestly, setting up Hugo is one of the easiest setups I\u0026rsquo;ve ever seen, no exaggeration. You simply download Hugo from the official website, place it in a folder, and unzip it. You’ll find just one file, hugo.exe—it’s that simple.\nHugo is really convenient. I tried Hexo before, but the Node.js setup turned me away. Even now, I have no idea why it failed to compile. 😢 The only slight difficulty is adding the directory containing hugo.exe to your environment variables.\nCreating a Template System # Open the terminal in the folder where hugo.exe is located and run the command hugo new site your-site-name. You’ll see a new folder appear in the current directory.\nThe template system sounds advanced, but it’s just a special folder structure created in the same directory as hugo.exe. You can’t arbitrarily modify its contents because each folder has a specific purpose.\nName Purpose asset Stores images, icons, and other assets used by the website config Website configuration folder (may not exist initially; some themes require it) hugo.toml One of the website configuration files content All content goes here public The folder containing the fully compiled website (empty initially) themes Stores your website’s themes Basic Theme Configuration # Hugo has a lot of themes, and you can browse them on Hugo Themes. You can download the theme you like and place it in the themes folder. The process might sound abstract, but you can check out the video tutorial for more guidance.\nHere’s one important tip: most themes come with a sample site located in the exampleSite folder. If you don’t want to configure everything from scratch, you can just use the sample configuration.\nAfter configuring the theme, you’ll need to customize it. I highly recommend the Blowfish theme, which is fantastic, and I truly respect the author 🫡.\nBlowfish Theme # The Blowfish official documentation is incredibly detailed, so I won’t repeat it here. Any additional words would be disrespectful to such a comprehensive guide 🫡.\nHowever, there are some issues you might encounter, and I’ll briefly mention them below. You should carefully read the official documentation to fully understand these points 🤔.\nWhy does the \u0026ldquo;Recent Articles\u0026rdquo; section still show up even if params.homepage.showRecent = false is set? If you face this issue, it’s likely because, like me, you lazily used the exampleSite configuration. This is because the homepage layout is controlled by more than one interface, and another one is located in the layouts\\partials\\home\\custom.html file.\nIf you don’t mind, just ignore it. But if you care (like I did 🤪), you can comment out the following code in the file:\n\u0026lt;section\u0026gt; {{ partial \u0026#34;recent-articles-demo.html\u0026#34; . }} \u0026lt;/section\u0026gt; Why doesn’t the logo change between day and night modes when I use an svg logo? This is a bug I discovered, and I’ve already submitted an improvement to the theme author. See code improvement.\nWhy does the small icon in the browser window still show the blowfish logo even after I change the site’s logo? This is mentioned in the official documentation, but it’s buried deep. You can find it under Partials Documentation for Blowfish.\nTo be honest, the official documentation is excellent. 👍 After going through the entire process, I only encountered a few minor issues that were not easy to understand 😋.\nPlugins I Use # I prefer using Obsidian for writing articles. However, the format used by Obsidian and the one used by Blowfish is quite different, so converting between the two can be a hassle 🤔.\nAfter searching around, I found that there weren’t any suitable plugins! So, I developed my own plugin: Hugo-Blowfish-Exporter.\nWhile the plugin is simple, it covers almost all of my needs, including:\n- Callouts (supports all official callout names, with additional icons) - Inline math formulas (Blowfish supports block-level formulas)\n- Mermaid (supports Mermaid diagrams)\n- Image embedding (automatically exports images)\n- Wiki-style links (only support the none-displayed link 😢)\nThe none-displayed link is simply exported as normal hyperlink in the HTML file;\nThe displayed link is more complex: change(override) the source code of Blowfish to support the file injection through the shortcode, mdimporter; every Obsidian file should includes a meta data slug to tag the folder that contains the target markdown file in your website repository.\nThe overriding of the theme\u0026rsquo;s source code can be found in the mdimporter and the stripFrontMatter used to remove metadata from the injected files\u0026rsquo; headers. For overriding the directory, refer to the configuration on GitHub.\nI put a lot of effort into this plugin, even though it only took a few days 🤔. But those few days were quite exhausting 😵‍💫.\nIf this plugin helps you, feel free to share it! If you’re not happy with the functionality, you can submit an issue on GitHub 🫡. If you\u0026rsquo;re familiar with the code, you can modify it directly; the code is well-commented and quite standard 🤗.\nAnd if you modify and upgrade the code, I’d be very grateful if you share your changes with me (via a pull request on GitHub)! ☺️\nFinal Thoughts # Setting up a blog site is just the first step in a long journey; the real challenge is filling it with content.\nAs I mentioned in An experience of writing plugins, many personal blogs fade into obscurity in as little as a year, from the initial burst of excitement to the eventual silence.\nIn this fast-paced world, most meaningless and inefficient things are eventually replaced by efficiency, and the original enthusiasm and dreams often compromise with reality. I too no longer have the passion I once had, and my actions have become more like those of a real adult.\nBut there\u0026rsquo;s still a bit of unwillingness in me. This website is a form of resistance, and I’ll do my best to maintain it. That’s also why I developed the plugin—to make updating the blog easier.\nI hope this tutorial helps anyone planning to set up their own blog. Let’s keep moving forward, together 🫡.\n","date":"7 January 2025","externalUrl":null,"permalink":"/en/blog/hugo-blog/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n A blog website journey, from hand-coding to Hugo, a story of twists and turns.\n\u003c/div\u003e\n\n\n\n\u003ch2 class=\"relative group\"\u003eWhy Hugo? \n \u003cdiv id=\"why-hugo\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#why-hugo\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eIt all started with hearing that Hugo could generate webpages and that it was incredibly efficient at compiling static pages. I decided to dive into the research—Hugo is said to be the \u003cstrong\u003efastest static site generator\u003c/strong\u003e in the world, as claimed on its official website.\u003c/p\u003e","title":"Hugo Blog Setup","type":"blog"},{"content":" A Reflection on Writing a Plugin and What I Learned from the Experience. The Beginning # It all started with my blog website. I stumbled upon an article on WeChat about building a blog with Hugo, and since I wanted to revamp my old, simple site, I decided to give it a try. My original site was extremely rudimentary, and the whole writing process involved jumping between HTML, JS, and CSS in a rather awkward manner. On top of that, I had always admired the blog of a great tech guru, Lilian Weng, which was also built with Hugo. This further strengthened my resolve to change my site\u0026rsquo;s underlying platform.\nSo, I quickly started diving into Hugo.\nTo my surprise, the results were extraordinary! My old webpage took me nearly a month to build, but with Hugo, I was able to finish everything in less than half a day. What shocked me even more was that Hugo, a program written in Go, didn’t require users to set up a Go environment! 😮\nAt the same time, I discovered an incredibly well-documented Hugo theme—Blowfish. This was by far the most detailed documentation I had ever seen for any project, bar none (๑•̀ㅂ•́)و✧.\nWith Hugo and Blowfish working in tandem, my small site quickly took shape. Of course, I’m not great at designing, so I just used the default layout from Blowfish, as I felt any changes would ruin the beauty of the page.\nTo be honest, after all this work, I didn’t have any strong emotional reactions, except for deep respect for the coding skills of the authors of Hugo and Blowfish.\nThat was until I wanted to upload the massive amount of notes I had in Obsidian to my new blog.\nThe Bitter Taste of Originality # I soon realized that there wasn’t a plugin available to directly convert the format of my Obsidian notes to fit the Blowfish theme. Fueled by the earlier \u0026ldquo;pleasant experience,\u0026rdquo; I decided to write a plugin myself! (😄 Although, I would soon stop laughing 😢)\nThe rest of the experience wasn’t anything particularly exciting—just endless switching between webpages, searching through API documentation, and never-ending conversations with AI bots. After countless revisions, I finally ended up with something exceedingly simple: a plugin that identifies specific patterns in documents and performs content replacement.\nIt was quite laughable. Compared to the few hours it took to set up the website, the nearly forty hours I spent writing that plugin felt almost negligible. At one point, I seriously considered just deleting my few hundred lines of code.\nYes, such a simple plugin drained me mentally and physically. I truly tasted the bitterness of originality.\nNow, looking back at Hugo and Blowfish, I feel deeply shocked by their complexity and the effort required to implement all of those features. If they were getting paid for this work, I could at least understand the level of effort involved. But they were both open-source, relying entirely on user goodwill and appreciation.\nI saw the last update of the Blowfish author’s blog, which was in March 2024, and I fell into deep thought.\nSentiments and Idealism # I imagine that the author of Blowfish must have paused the development of the theme for some reason—perhaps due to life circumstances. After all, this project didn’t bring in much real income.\nSuddenly, I remembered the changes I had noticed before—those GitHub profiles, once full of green squares, gradually becoming sparse, and eventually disappearing. Beneath this peaceful change, there might be a shift in someone\u0026rsquo;s life. Whether it\u0026rsquo;s because of busy work or the gradual fading of motivation, the original passionate drive eventually drowns in silence. I can\u0026rsquo;t stop this from happening, but I understand the reasons behind it.\nOpen-source is driven by passion, but passion doesn’t pay the bills. People need to live in the present.\nI recalled a tech YouTuber, Ma Nong Gao Tian, a core Python developer who humorously complained about the harsh realities of open-source life. His prematurely graying hair made me feel a pang of empathy—he had spent most of his life writing code and yet found himself out of work, surviving on a few extra bucks from his videos.\nIn Conclusion # Life is rarely as we wish. Once again, I looked at my forty-plus hours of work and couldn’t help but laugh and shake my head.\nAfter writing this, I’m off to bed. It’s now 1:48 AM on January 6, 2025, and I still haven’t reviewed for my English final exam tomorrow.\nLooking at this blog again, I laughed and shook my head.\nSuch is life.\n","date":"6 January 2025","externalUrl":null,"permalink":"/en/blog/plugin-writing-experience/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n A Reflection on Writing a Plugin and What I Learned from the Experience.\n\u003c/div\u003e\n\n\n\n\u003ch3 class=\"relative group\"\u003eThe Beginning \n \u003cdiv id=\"the-beginning\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#the-beginning\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003eIt all started with my blog website. I stumbled upon an article on WeChat about building a blog with \u003ccode\u003eHugo\u003c/code\u003e, and since I wanted to revamp my old, simple site, I decided to give it a try. My original site was extremely rudimentary, and the whole writing process involved jumping between \u003ccode\u003eHTML\u003c/code\u003e, \u003ccode\u003eJS\u003c/code\u003e, and \u003ccode\u003eCSS\u003c/code\u003e in a rather awkward manner. On top of that, I had always admired the \u003ca href=\"https://lilianweng.github.io/\" target=\"_blank\"\u003eblog\u003c/a\u003e of a great tech guru, \u003ccode\u003eLilian Weng\u003c/code\u003e, which was also built with \u003ccode\u003eHugo\u003c/code\u003e. This further strengthened my resolve to change my site\u0026rsquo;s underlying platform.\u003c/p\u003e","title":"An experience of writing plugin","type":"blog"},{"content":"Morethan\u0026rsquo;s dummy blog page~\n","date":"3 January 2025","externalUrl":null,"permalink":"/en/blog/moravecs-paradox/","section":"Blogs","summary":"\u003cp\u003eMorethan\u0026rsquo;s dummy blog page~\u003c/p\u003e","title":"The reflection of Moravec's paradox","type":"blog"},{"content":" Preface # This article is primarily a review and summary of the entire process of CUMCM 2024.\nOur team was formed in the winter of 2023, and CUMCM 2024 was our first participation in the \u0026ldquo;Mathematical Modeling\u0026rdquo; competition. After numerous mock contests, we finally made it to the national competition. After submitting the final paper, we won the first prize at the provincial level and were recommended for the first prize at the national level, ultimately receiving the second prize at the national level.\nThere were moments of excitement and surprise, as well as disappointment; we must have done some things right in the competition, which is why we won a national award in our first attempt; but there are definitely shortcomings, after all, there must be a reason for going from \u0026ldquo;recommended for the first prize at the national level\u0026rdquo; to \u0026ldquo;second prize at the national level\u0026rdquo;.\nIn short, this experience is truly unforgettable, and it is even more worth summarizing and learning from the experience to prepare for next year\u0026rsquo;s competition.\nCUMCM stands for Chinese Undergraduate Mathematical Contest in Modeling; it is commonly referred to as the \u0026ldquo;National Mathematical Modeling Competition\u0026rdquo;. Terminology Explanation # Term Explanation Computational System The traditional modeling process, encapsulating a large function Optimization System A system used to optimize the adjustable parameters in the computational system to generate the best parameter configuration Computational Flow The process of handling input data in the computational system Computational Flow Node A key intermediate step in the workflow Optimization Flow The main logic of the optimization system Main Body of the Paper Includes the abstract, restatement, descriptions of computational and optimization flows, results presentation and analysis, that is, all content before the conclusion of the paper Conclusion of the Paper Includes sensitivity analysis and model extension Objective Conditions # Task Division # Although there were many topics to choose from for the competition, our group chose to focus on optimization problems, which is Topic A.\nMe: Modeling + Coding + Part of Paper Writing CL: Modeling + Paper Writing + Part of Coding HWJ: Paper Beautification Workflow # The coding part of the entire Topic A can be roughly divided into two systems:\nComputational System: Function: Accept input data and parameters, return the required results Nature: Directly determined by the problem, different topics have different computational systems, which need to be constructed temporarily Optimization System: Function: Accept the computational system as the target function to be optimized, execute its own optimization logic, and finally return the computational results Nature: The method system is relatively mature and can be prepared in advance of the competition with various optimization systems The paper writing part is divided into:\nOverall Framework: Determined by the LaTeX template Main Content Filling: Clear description of the workflow and optimization flow Typesetting and Beautification: Adjust the details of each part, with illustrative images (flowcharts, schematics) Concluding Content Pre-Modeling # Objective: Under the premise of accurately understanding the problem, quickly carry out preliminary modeling, basically determine the direction of modeling and calculation methods;\nEstimated Time: 3 hours\nWork: All team members conduct a web search to see if there are any literature materials that basically hit the topic.\nHit Successful: The most ideal situation, at this time, you can directly study the papers and collect ideas; Hit Unsuccessful: Although there are no ready-made materials for reference, some ideas have been accumulated in the process of literature review. Early Modeling # Overall Objective: Construct a precise and optimization method adaptable computational system\nModeling: Clarify the operations between input data and each computational flow node Coding: Implement the computational flow with code and achieve data visualization Paper: Fill in the content of the first question and initially typeset Estimated Time: 30 hours\nWork:\nAll team members model together, first clarify the modeling ideas, and provide a complete mathematical derivation process Me and CL: Code implementation and paper content filling are carried out simultaneously HWJ: Draw more vivid schematic diagrams that cannot be generated by code Mid-Modeling # Overall Objective: Construct a suitable optimization system\nModeling: According to the particularity of the computational system, choose the most matching optimization system Coding: Make minor changes in the implementation of the optimization system to match the computational system Paper: Complete the main part of the paper and start local detail fine-tuning Estimated Time: 20 hours\nWork: Similar to the previous, but the focus of work has shifted from code writing to paper writing\nSimplify the paper, at this time, the paper is very bloated Fine-tune the logic of the paper to make the context more closely related Beautify the typesetting, reduce text, increase images Late Modeling # The basic modeling is completed, and all members check for loopholes: Conventional checks such as typos, inaccurate expressions, formula spelling errors, etc. Optimize code comments to make them more readable Focus on checking personal information Personal information must not be retained in the competition paper, including file paths in the code, such as C:\\Users\\Morethan; retaining personal information is a very serious mistake! Actual Combat Effectiveness # When we applied the above strategies to the actual combat process, that is, the formal competition of CUMCM 2024, the results were as follows:\nEffective Time: The total duration of the competition is three days, a total of 72 hours The team works from seven in the morning to eight in the evening, excluding meal times, with an effective time of 12 hours a day Time utilization rate is \\(50\\%\\) (quite low in comparison🤔) Completed Work: The main body of the paper is 28 A4 pages The code part is 35 A4 pages, excluding the reused code between each sub-question, there should be about 20 pages A total of 25 illustrations in the paper The above data is after the paper has been streamlined, with the initial draft of the paper being nearly 50 pages Uncompleted Work: The final result calculation, due to the large amount of calculation (the code efficiency is not high), the code was finished two hours in advance, but there was not enough time to calculate the results😭😭 The calculation accuracy of the model is not enough, the accuracy is 1s which does not meet the standard answer\u0026rsquo;s precision The conclusion part of the paper was not actually completed Strengths # Topic Selection # Focused on Topic A, accumulated sufficient experience in mock contests, and polished a set of efficient workflows\nThe methodology for Topic A is relatively well-constructed\nWorkflow # The workflow is relatively clear, and the efficiency is high\nGuided by the final paper, modeling, paper, and code are carried out simultaneously, ensuring sufficient content in the paper\nDivision of Labor # Adopted a blurred division of labor, each team member has a main job and a secondary job, can work independently on their main job, and can also complete some work on the secondary job, greatly improving time utilization\nThe team members are very capable, as handling two division tasks means more learning costs\nWeaknesses # Workflow # The plan is perfect, but some necessary links were not well done in practice\nEffective time ratio: finishing work at eight in the evening is too early! More time should be taken to model trial and error to ensure the correctness and accuracy of the model\nDivision of Labor # The code writing, code debugging, code visualization, result calculation, and result visualization involve too much code, which is difficult for one person to handle;\nTask overlap caused by blurred division of labor increases collaboration costs\nModeling # Topic understanding accuracy: This time, there was a significant deviation in our understanding of the topic, which led to wasting a lot of time on model correction; Code # Code efficiency: Due to no time limit before, there was insufficient preparation for \u0026ldquo;very long\u0026rdquo; code, no experience with code parallelism;\nResult precision: The initial modeling was too rough, and a bad characteristic was used: setting the time step to 1, and using it as an array index, which made it difficult to reduce the time step later, resulting in insufficient precision of the final results\nImprovement Plans # Carefully select the venue, increasing effective time✨is the most important✨ Division of Labor # Slightly change the division of labor, increase the investment of human resources in coding\nIncrease learning input in each main and secondary division to increase work efficiency\nModeling # Focus more on understanding the topic, don\u0026rsquo;t rush; correcting modeling errors is not worth the loss Code # Build a set of effective code collaboration plans to enhance code writing speed\nStart building code writing standards:\nVariable naming Documentation at the beginning of the file Code writing process standards Code parallelization: Add some parallelizable code to the code to increase running speed\nAll code improvements must be implemented in a document! Not just slogans! Paper # Study excellent papers\nPay attention to its paper framework Pay attention to its language style, text readability, detail, illustration logic, and image readability Improve ourselves\nOptimize the paper\u0026rsquo;s main logic framework, refine the content of each section Improvements in language style, text readability, detail, illustration logic, and image readability, etc. The results are fixed in the form of comments in the LaTeX template! Summary # A test paper without full marks is more rewarding than one with full marks!\nAccumulating knowledge of applied mathematics, enhancing paper writing skills, and improving the ability to discover problems are more meaningful than the competition itself. 🫡\nCUMCM, every MathModeler can benefit from it. 🤗\n","date":"12 September 2024","externalUrl":null,"permalink":"/en/blog/cumcm2024/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003ePreface \n \u003cdiv id=\"preface\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#preface\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eThis article is primarily a review and summary of the entire process of CUMCM 2024.\u003c/p\u003e","title":"CUMCM 2024 Summary","type":"blog"},{"content":" Virtual Env # Creat # Some tipical code 👇\n# creat a virtual env named \u0026#34;your_env_name\u0026#34; python -m venv your_env_name # assign the version of python, make sure your python in default direction python -m venv your_env_name --python=python3.11 # simply list the absolute direction of python, simple and efficient D:/PythonPython311/python.exe -m venv your_env_name More parameters you may need for a customized virtual env. 🤔\nParams Meaning --system-site-packages Give the virtual environment access to the system site-packages dir. --clear Delete the contents of the environment directory if it already exists, before environment creation. --version print the python version of the env All the detailed expaination of the parameters can be got by the code python -m venv -h. No need to search everywhere~😆 Activate # The virtual env is defaulted not active. In the direction your_env_name/Scripts/ will be a file named activate. Run it with your cmd.\n# activate virtual env your_env_name/Scripts/activate ","date":"10 August 2024","externalUrl":null,"permalink":"/en/blog/pytips/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eVirtual Env \n \u003cdiv id=\"virtual-env\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#virtual-env\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\n\n\u003ch3 class=\"relative group\"\u003eCreat \n \u003cdiv id=\"creat\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#creat\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003eSome tipical code 👇\u003c/p\u003e","title":"Python Tpis","type":"blog"},{"content":" Reference # Honestly, I\u0026rsquo;m not familiar with BayesianOPT, the opinions mentioned stem from the below. 👇\n【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\n一文详解贝叶斯优化(Bayesian Optimization)原理\n贝叶斯优化(BayesianOptimization)\n超参数优\u0026mdash;贝叶斯优化及其改进(PBT优化)\n贝叶斯优化 (Bayesian Optimization)\nMATLAB Offical Document\nAdvantages \u0026amp; Algorithm Principle # Here we are going to talk about the advantages \u0026amp; algorithm principle of BayesianOPT. If you only want to konw how to use it, you can read the #Advantage section, then go to the #MATLAB Practice\nAdvantages # Algorithm Principle # MATLAB Practice # Well, we can put Bayesian Optimization into practice even though we don\u0026rsquo;t understand it, using the predefined function of MATLAB, the bayesopt. Here is the official guidance of the function: bayesopt\nFinal code display # % define the obj function function y = objectiveFcn(x) y = (1 - x.x1)^2 + 100 * (x.x2 - x.x1^2)^2; end % define the variables vars = [optimizableVariable(\u0026#39;x1\u0026#39;, [-2, 2]) optimizableVariable(\u0026#39;x2\u0026#39;, [-2, 2])]; % conduce the optimizer results = bayesopt(@objectiveFcn, vars, ... \u0026#39;AcquisitionFunctionName\u0026#39;, \u0026#39;expected-improvement-plus\u0026#39;, ... \u0026#39;MaxObjectiveEvaluations\u0026#39;, 30, ... \u0026#39;IsObjectiveDeterministic\u0026#39;, true, ... \u0026#39;Verbose\u0026#39;, 1); % get result bestPoint = results.XAtMinObjective; bestObjective = results.MinObjective; % result output fprintf(\u0026#39;最优解 x1: %.4f, x2: %.4f\\n\u0026#39;, bestPoint.x1, bestPoint.x2); fprintf(\u0026#39;最优目标值: %.4f\\n\u0026#39;, bestObjective); I\u0026rsquo;d commit that the code is generated by AI. 🥲 AI is a better coder, at least when comparing with me. 🫠 Parameters Explaination # Params Meaning AcquisitionFunctionName select a Acquisition Function, which determines the method how bayesopt choose the next acquisition point MaxObjectiveEvaluations the maximize evalu turns IsObjectiveDeterministic If the obj function contains noise, set to true ; Otherwise, set to false Verbose Determine the detailing extend of console output, the complete output includes many figures. Want more detailed information? Refer to the Offical document: bayesopt. It\u0026rsquo;s more completed and with amount of examples.\nIt\u0026rsquo;s basic for every MathModeler to read the offical document. 😝 ","date":"5 August 2024","externalUrl":null,"permalink":"/en/blog/bayesianopt/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eReference \n \u003cdiv id=\"reference\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#reference\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eHonestly, I\u0026rsquo;m not familiar with BayesianOPT, the opinions mentioned stem from the below. 👇\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://blog.csdn.net/qq_27590277/article/details/115451660\" target=\"_blank\"\u003e【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\u003c/a\u003e\u003c/p\u003e","title":"Bayesian Optimization","type":"blog"},{"content":" Background Overview # You should know how to interact with the computer via the command line, including but not limited to: how to open the command line/terminal in Windows, when a running command ends, etc.\nA little knowledge of bypassing internet censorship is helpful. OverLeaf is foreign software, and its related LaTeX projects are also hosted abroad. Therefore, directly accessing foreign traffic when downloading dependencies can save a lot of trouble. If you don’t have a VPN, you will need to specify a domestic source for each package manager, though sometimes the updates from domestic sources are not timely.\nBasic familiarity with Vim operations is useful, such as: how to enter insert mode, how to save and exit, how to exit without saving, etc.\nFull Deployment Process # Installing Linux # Search for a Linux distribution in the Windows App Store and download it. The author chose Kali. After installation, you can open it directly from the Start menu. Upon opening, a command-line window will pop up, and you will need to register with a username and password.\nAt this point, your command line should display a warning. This is because you haven’t installed WSL (Windows Subsystem for Linux).\nAlso, when entering the password, your input will not be displayed in the command line, but it has been recorded.\nWhy do you need a Linux system? Because OverLeaf\u0026rsquo;s ShareLaTeX model requires a Linux environment. It is said that OverLeaf runs more smoothly on Linux systems.\nInstalling WSL # To install WSL2, run the following in the Windows command line:\nwsl --install After installation, you can open it directly. Another warning will appear. At this point, you need to create a text file in the C:\\Users\\ASUS directory and rename it to .wslconfig.\nEnter the following content:\n[experimental] autoMemoryReclaim=gradual # gradual | dropcache | disabled networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true Installing Docker # Go to the Docker website to download Docker, which will be the container for the ShareLaTeX model. Docker is an open-source application container engine that includes images, containers, and repositories. Its purpose is to manage the lifecycle of application components, such as encapsulation, distribution, deployment, and operation, allowing users to \u0026ldquo;package once, run anywhere,\u0026rdquo; much like a container, developed and encapsulated by programmers, which users can directly move around.\nOnce Docker is installed, you can double-click to start it in the background. We will interact with Docker later via the command line.\nPulling the Image # Open Kali, and run the following command:\ngit clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit Then run:\ncd ./overleaf-toolkit bin/init vim ./config/variables.env At this point, you should be in the document interface of the Vim text editor. Vim has many shortcuts, and pressing the \u0026quot;I\u0026quot; key will enter insert mode for text editing. Press \u0026quot;esc\u0026quot; to return to normal mode. In insert mode, type: OVERLEAF_SITE_LANGUAGE=zh-CN.\nAfter typing, press \u0026quot;esc\u0026quot; to return to normal mode, then type :wq to \u0026ldquo;save and quit.\u0026rdquo; If you make a mistake, type :e! to discard all changes and start over. This step will set your OverLeaf interface to Chinese.\nAfter successfully saving and quitting, return to the familiar Kali command-line interface and run bin/up. This will pull the ShareLaTeX image and related network tools. There will be a large amount of data transfer, so ensure that your network is stable (your VPN should be reliable!).\nConfiguring the User # Once the previous command finishes, run bin/start. At this point, open Docker and enter the ShareLaTeX container. You should see code \u0026ldquo;flashing.\u0026rdquo; If there are no red messages, everything is running normally.\nNow open a browser and visit http://localhost/launchpad.\nAfter registering an Administrator Account, you will be redirected to http://localhost/project. The basic OverLeaf webpage should now be displayed. If you compile now, it will most likely report an error ᕕ( ᐛ )ᕗ.\nThis is because ShareLaTeX is missing many required packages🙃\u0026quot;\nInstalling Extension Packages # Open Kali, navigate to the appropriate directory, and run bin/shell. Then execute the following one by one:\ncd /usr/local/texlive # Download and run the upgrade script wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh sh update-tlmgr-latest.sh -- --upgrade # Change the TeX Live download source tlmgr option repository https://mirrors.sustech.edu.cn/CTAN/systems/texlive/tlnet/ # Upgrade tlmgr tlmgr update --self --all # Install the full TeX Live package (this will take time, so don’t let the shell disconnect) tlmgr install scheme-full # Exit the ShareLaTeX command-line interface exit # Restart the ShareLaTeX container docker restart sharelatex After restarting, enter the shell again and run:\napt update # Install fonts apt install --no-install-recommends ttf-mscorefonts-installer fonts-noto texlive-fonts-recommended tex-gyre fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted fonts-texgyre # Install pygments apt install python3-pygments # Install Beamer and others apt install texlive-latex-recommended apt install texlive-latex-extra # Install English fonts echo \u0026#34;yes\u0026#34; | apt install -y --reinstall ttf-mscorefonts-installer # Install Chinese fonts apt install -y latex-cjk-all texlive-lang-chinese texlive-lang-english cp fonts/* /usr/share/fonts/zh-cn/ cd /usr/share/fonts fc-cache -fv # Update font cache fc-list :lang=zh-cn fc-match Arial Finally, in the shell directory, run:\nvim /usr/local/texlive/2023/texmf.cnf Open the configuration file and add shell_escape = t at the bottom.\nI’m not sure what this does, but it was passed down by the predecessors 🤔 Note, if the TeX Live version (the official name for extension packages) differs, the directory path may also change. You will need to adjust the path based on the actual version, for example, change 2023 to 2024.\nYou can use ls -l in the Linux command line to view all files in the current directory. Successful Deployment # Now you can happily use your local OverLeaf version without worrying about compilation timeouts~\nIf you\u0026rsquo;re lucky and happen to be a CQUer, here’s a graduation thesis template from Chongqing University, super user-friendly: CQUThesis\n","date":"12 July 2024","externalUrl":null,"permalink":"/en/blog/localoverleaf/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eBackground Overview \n \u003cdiv id=\"background-overview\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#background-overview\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eYou should know how to interact with the computer via the command line, including but not limited to: how to open the command line/terminal in Windows, when a running command ends, etc.\u003c/p\u003e","title":"Local OverLeaf Deployment","type":"blog"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/authors/","section":"Authors List","summary":"","title":"Authors List","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/blog/","section":"Blogs","summary":"","title":"Blogs","type":"blog"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":" Hi, welcome to my info page. 👋 # Basic Info # My casual English name is Morethan because it resembles my Chinese name. 🙃\nNow I\u0026rsquo;m a university student in China. ᕕ( ᐛ )ᕗ Nothing more to say. 🫠\nBlog Focus # Personal Knowledge Base: to store frequently-used operations and valuable experience.\nMicro Paper Stack: to store inspirations for my Graduation Thesis, usually serious and logical, attempt to follow the standard thesis working stream.\nKnowledge Outlet: to put what I leant into practice.\nFinal # If you find the content is useful, click a like please at the beginning of that page. 🤗\nIf you want to share the content, cite this website please. 🫡\nIf you find some bug, push an issue on the GitHub please. 🥰\n","date":"10 January 2025","externalUrl":null,"permalink":"/en/authors/morethan/","section":"Authors List","summary":"\u003ch1 class=\"relative group\"\u003eHi, welcome to my info page. 👋 \n \u003cdiv id=\"hi-welcome-to-my-info-page-\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#hi-welcome-to-my-info-page-\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e\n\n\n\u003ch2 class=\"relative group\"\u003eBasic Info \n \u003cdiv id=\"basic-info\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#basic-info\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eMy casual English name is Morethan because it resembles my Chinese name. 🙃\u003c/p\u003e","title":"Morethan","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/operation/","section":"Seires","summary":"","title":"Operation","type":"series"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/","section":"Seires","summary":"\u003chr\u003e","title":"Seires","type":"series"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"\u003chr\u003e","title":"Tags","type":"tags"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/","section":"Welcome to More's website","summary":"\u003c!-- \u003cdiv class=\"flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900\"\u003e\n \u003cspan class=\"flex items-center ltr:pr-3 rtl:pl-3 text-primary-400\"\u003e\n \n \n \u003cspan class=\"relative inline-block align-text-bottom icon\"\u003e\n \u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003cpath fill=\"currentColor\" d=\"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"/\u003e\u003c/svg\u003e\n \n \u003c/span\u003e\n \n\n \u003c/span\u003e\n \u003cspan class=\"flex items-center justify-between grow dark:text-neutral-300\"\u003e\n \u003cspan class=\"prose dark:prose-invert\"\u003eThis is a demo of the \u003ccode id=\"layout\"\u003ebackground\u003c/code\u003e layout.\u003c/span\u003e\n \u003cbutton\n id=\"switch-layout-button\"\n class=\"px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700\"\n \u003e\n Switch layout \u0026orarr;\n \u003c/button\u003e\n \u003c/span\u003e\n\u003c/div\u003e --\u003e","title":"Welcome to More's website","type":"page"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/%E5%8D%9A%E5%AE%A2/","section":"Tags","summary":"","title":"博客","type":"tags"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/series/%E6%8A%80%E6%9C%AF%E6%B5%81%E7%A8%8B/","section":"系列","summary":"","title":"技术流程","type":"series"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/%E6%8A%A5%E5%91%8A/","section":"Tags","summary":"","title":"报告","type":"tags"},{"content":"","date":"7 January 2025","externalUrl":null,"permalink":"/en/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/series/casual-essay/","section":"Seires","summary":"","title":"Casual Essay","type":"series"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/tags/experience/","section":"Tags","summary":"","title":"Experience","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/tags/%E7%BB%8F%E5%8E%86/","section":"标签","summary":"","title":"经历","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/series/%E9%9A%8F%E7%AC%94/","section":"系列","summary":"","title":"随笔","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/series/ai%E9%81%90%E6%83%B3/","section":"系列","summary":"","title":"AI遐想","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/imagination/","section":"Tags","summary":"","title":"Imagination","type":"tags"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/series/wild-imagination-of-ai/","section":"Seires","summary":"","title":"Wild Imagination of AI","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/%E9%81%90%E6%83%B3/","section":"标签","summary":"","title":"遐想","type":"tags"},{"content":"This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. \u0026#x1f680;\nYou can also use these content pages to define Hugo metadata like titles and descriptions that will be used for SEO and other purposes.\n","date":"12 September 2024","externalUrl":null,"permalink":"/en/tags/cumcm/","section":"Tags","summary":"\u003cp\u003eThis is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. \u0026#x1f680;\u003c/p\u003e","title":"CUMCM","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/tags/math/","section":"Tags","summary":"","title":"Math","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/series/mathmodel/","section":"Seires","summary":"","title":"MathModel","type":"series"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/series/%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1/","section":"系列","summary":"","title":"数学建模","type":"series"},{"content":"","date":"10 August 2024","externalUrl":null,"permalink":"/en/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"","date":"5 August 2024","externalUrl":null,"permalink":"/en/tags/matlab/","section":"Tags","summary":"","title":"MATLAB","type":"tags"},{"content":"","date":"12 July 2024","externalUrl":null,"permalink":"/en/tags/latex/","section":"Tags","summary":"","title":"LaTeX","type":"tags"},{"content":"","date":"12 July 2024","externalUrl":null,"permalink":"/en/tags/overleaf/","section":"Tags","summary":"","title":"Overleaf","type":"tags"},{"content":"","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}] \ No newline at end of file +[{"content":" Familiarizing oneself with the project analysis process, this is a practical analysis report. After I had completed my small plugin, I realized that there doesn\u0026rsquo;t seem to be a one-click solution in the note-to-blog field. So, I wrote this article to analyze whether it would make sense to create a new project to fill this gap.\nThere is no such thing as a \u0026ldquo;better\u0026rdquo; or \u0026ldquo;worse\u0026rdquo; project; there is only whether it is suitable or not. The evaluation criteria in this article are based on whether they meet the requirements of a blog website. Therefore, some projects may not be suitable for creating a blog site, but this does not diminish their value.\nField Definition # Before we begin the analysis, it\u0026rsquo;s important to have a clear understanding of the note-to-blog field.\nNotes: In this context, \u0026ldquo;notes\u0026rdquo; specifically refers to the notes in Obsidian, which use Obsidian Flavored Markdown. This adds certain complexities to the process of converting notes to a webpage.\nBlog: A blog, by definition, is a means to gain traffic. Creators spend time writing notes, and then using conversion software, generate beautifully formatted, feature-rich blog websites.\nEvaluation criteria are as follows:\nPrivacy:\nDoes it run locally? Is it open-source? Usability:\nHow well does it adapt to Obsidian\u0026rsquo;s syntax? How complex is the service deployment? How detailed is the documentation? How easy is it to customize settings? Web Functionality:\nDoes the default web template include all essential functions (search, day/night mode, etc.)? How visually appealing is the default webpage? Does it support SEO? How smoothly does it convert Obsidian\u0026rsquo;s native syntax (for example, are there untranslatable code blocks in internal links, or does it discard some Obsidian syntax features)? Project Overview # In my vision, this project would be an Obsidian plugin that seamlessly exports Obsidian notes into Hugo blog webpages, supporting all of Obsidian\u0026rsquo;s basic core features.\nResult: It greatly reduces the cost of creating a blog webpage, allowing anyone who can use Obsidian to have their own blog.\nMarket and User Feasibility Analysis # Market Demand Analysis # Overview # Basic Needs: The demand to build a personal website and continuously produce content, including for self-improvement, self-expression, and creating a unique and comprehensive personal skill showcase (for corporate recruitment), etc.\nTarget User Group: Heavy Obsidian users who want to share notes; knowledge creators who want to build a personal blog but have abandoned the idea due to technical difficulty.\nRelevant Data # Flowershow: As of October 2024, the plugin had been downloaded 3,355 times; by January 2025, this number had risen to 4,594, while the most downloaded plugin had reached 3,211,992 downloads. Quartz: As of January 2025, Quartz had accumulated 7.7k stars on GitHub. Existing Solutions # Quartz (Hugo) # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥\nIntroduction # Quartz is a toolset that converts Obsidian notes into web pages. The latest version, v4, has undergone a complete rewrite compared to v3, removing its dependency on Hugo and optimizing the user customization experience. The v4 version is now primarily built with TypeScript, and the original Hugo templates have been replaced with JSX.\nAs a result, Quartz in its current form is almost entirely disconnected from Hugo. However, much of the information available in Internet still advertises Quartz as being built on top of Hugo.\nOfficial example website: Welcome to Quartz 4\nReview # Pros:\nExtremely complete functionality The only toolset that successfully handles display wiki links Detailed documentation Cons:\nVirtually no drawbacks, but one notable limitation is the lack of Chinese documentation. Summary: An excellent project, where the styles displayed in Obsidian are the same as those displayed on the webpage. It has garnered the most stars on GitHub among all available solutions.\nFlowershow # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥🩶\nIntroduction # Flowershow is an overall publishing service based on Obsidian, which can convert your Obsidian notes into an online digital garden website with directory structure. Vercel is a cloud service for front-end deployment, enabling serverless front-end deployment via GitHub. Each content submission triggers automatic deployment. For domestic users, Netlify is an alternative.\nSubjectively, the development team behind Flowershow is very passionate and mission-driven. Their core philosophies are detailed in their About page.\nObjectively, Flowershow\u0026rsquo;s positioning as a blog webpage generation platform based on Obsidian is spot-on, and the final result is very good both from a front-end and back-end perspective.\nReview # Pros:\nClear positioning and a straightforward workflow Comprehensive feature support Professional team behind maintenance and operations Highly customizable, suitable for creators who enjoy personalizing their setup Cons (as of January 2025):\nSome Obsidian features are not handled, such as display wiki links. At least this section is omitted in the documentation. A reverse link feature is mentioned on the homepage, but it’s unclear in the site’s details. Summary: Overall, the project is well done, but some details still need improvement. This solution is suitable for creators who don\u0026rsquo;t require high support for Obsidian syntax.\nOfficial Publish # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\nIntroduction # Examples of websites using Obsidian\u0026rsquo;s official publishing service:\nObsidian Chinese Tutorial - A Chinese tutorial website, using the official Obsidian publishing service. Digital 3D Garden - Deep front-end customizations. Mister Chad - A simple, neat site with rich content. Discrete Structures for Computer Science - Official simple style. Review # Pros:\nThe official publish service offers top-notch support for Obsidian’s internal representations, ensuring all Obsidian features are correctly displayed on the webpage. Continuous maintenance ensures quick adaptation to updates from Obsidian. Highly customizable settings for users with coding experience, and a wide range of themes from other developers. Privacy settings, password protection, and access control for internal document management. SEO support and mobile platform adaptation for greater potential traffic. Cons:\nCosts $8 per month. Since personal websites typically have very little traffic initially, this can become a significant expense over time. This is the major drawback of the official service. If you stop paying, the website becomes inaccessible. Limited support in certain regions, with traffic constraints in China. Summary: The official service is suitable for users with sufficient funds and moderate customization needs.\nDigital Garden # Recommendation: ❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\nIntroduction # Digital Garden is an Obsidian plugin that exports notes as webpages and hosts them on GitHub, with deployment via Vercel or Netlify.\nExample sites:\nDigital Garden - Official example Aaron Youn - Created by an individual user John\u0026rsquo;s Digital Galaxy - Rich content showcasing Digital Garden’s features, including display links. Review # Pros:\nComprehensive feature support Supports Obsidian theme migration Cons:\nNot friendly with Chinese paths Web interface customization requires direct handling of source code (HTML, JavaScript, CSS), and the default interface is not very visually appealing. Summary: The workflow is simple, and the feature support is extensive. However, the interface requires effort to improve, and creators who care less about aesthetics can jump straight into using it.\nPerlite # Recommendation: ❤️‍🔥❤️‍🔥🩶🩶🩶\nIntroduction # Perlite is an open-source alternative to Obsidian\u0026rsquo;s official publishing service, providing a browser\n-based file reader with an interface nearly identical to Obsidian’s.\nReview # Pros:\nSupports almost all Obsidian features. Classic native interface, offering a familiar experience for users. Cons:\nIt is not a blog page but a \u0026ldquo;file reader\u0026rdquo; instead. Requires Docker, which can result in slower startup times compared to the simplicity of a plugin experience. Summary: Perlite is best suited for those who need a browser-based Obsidian experience, rather than as a public-facing blog.\nJekyll + Netlify + GitHub Pages # Recommendation: ❤️‍🔥❤️‍🔥🩶🩶🩶\nIntroduction # This method is derived from obsidian\u0026rsquo;s most perfect free publishing solution.\nExample website by the author: oldwinter’s Digital Garden\nReview # Pros:\nSimple configuration Highly customizable Cons:\nDoes not support certain Obsidian features like callout syntax No dark mode support No search functionality Summary: A good solution for converting Obsidian to a blog, but missing some core features, making it unsuitable for creators seeking a complete web experience.\nTiddlyWiki # Recommendation: ❤️‍🔥🩶🩶🩶🩶\nIntroduction # TiddlyWiki is an older note-taking framework that remains very active today, with developers continuously enhancing it.\nReview # Pros:\nExtremely simple and lightweight Widely used with a strong user base Domestic services available with no need for VPNs Cons:\nThe simplicity might result in a somewhat primitive interface. Not a full-fledged personal blog; lacks SEO and is difficult to access via search engines, limiting traffic potential. Summary: TiddlyWiki is ideal for personal note storage but not for creators seeking a blog that attracts traffic.\nConclusion # Before conducting a thorough analysis, I was unaware of the actual landscape in the note-to-blog field, which led me to consider creating a simplified plugin. 💡\nHowever, after systematic research, I must admit that Quartz stands out as the best project in this space. Whether it\u0026rsquo;s the adaptation to Obsidian\u0026rsquo;s syntax, ease of configuration, front-end aesthetics, customization options, or backend blog creation, there is very little room for improvement.\nThus, there is no need for me to initiate a project to duplicate what’s already been done. I salute all the teams involved in the note-to-blog field, whether mentioned in this article or not. 🫡\nThere are no \u0026ldquo;better\u0026rdquo; or \u0026ldquo;worse\u0026rdquo; projects, only those that are suitable or not. The evaluation criteria in this article focus on whether the solution meets the requirements for a blog webpage, and thus, some projects may not be ideal for blogging but still offer great value.\nSaluting open-source pioneers! 🫡🫡🫡\n","date":"10 January 2025","externalUrl":null,"permalink":"/en/blog/note-to-blog-report/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n Familiarizing oneself with the project analysis process, this is a practical analysis report.\n\u003c/div\u003e\n\n\u003cp\u003eAfter I had completed my \u003ca href=\"https://morethan987.github.io/en/blog/plugin-writing-experience/\"\u003esmall plugin\u003c/a\u003e, I realized that there doesn\u0026rsquo;t seem to be a one-click solution in the \u003cstrong\u003enote-to-blog\u003c/strong\u003e field. So, I wrote this article to analyze whether it would make sense to create a new project to fill this gap.\u003c/p\u003e","title":"Analysis Report on the Note-to-Blog Project","type":"blog"},{"content":" A blog website journey, from hand-coding to Hugo, a story of twists and turns. Why Hugo? # It all started with hearing that Hugo could generate webpages and that it was incredibly efficient at compiling static pages. I decided to dive into the research—Hugo is said to be the fastest static site generator in the world, as claimed on its official website.\nOf course, words are just words, so here’s the output I got when I compiled and ran Hugo locally without the public folder at the beginning:\nZH-CN EN Pages 53 51 Paginator pages 0 0 Non-page files 13 13 Static files 7 7 Processed images 3 0 Aliases 18 17 Cleaned 0 0 Built in 872 ms\nIn total, compiling 104 pages (both Chinese and English) took just 0.872 seconds, including the time to build the local server. That speed is hard to criticize. And the local server can listen for changes to the source code in real time and do incremental refactoring, depending on the size of the change, usually around 0.03 seconds.\nI haven\u0026rsquo;t used other page generators for setting up blogs, so I can\u0026rsquo;t compare Hugo\u0026rsquo;s speed with others. References # Here are all the resources I used during the blog setup process:\n莱特雷-letere This is a blogger’s site also built with Hugo. It contains a lot of tutorials on other web tools as well. The series is also available on Bilibili video tutorial. Blowfish This is the Hugo theme I used, and the documentation is excellent. I’ve never seen such a patient author. Official Hugo Website Hugo Themes Full Deployment Process # Setting Up Hugo # This part is covered in detail in the webpage and video tutorial by the blogger. If you don’t like reading text, you can follow the video tutorial. 😝\nHonestly, setting up Hugo is one of the easiest setups I\u0026rsquo;ve ever seen, no exaggeration. You simply download Hugo from the official website, place it in a folder, and unzip it. You’ll find just one file, hugo.exe—it’s that simple.\nHugo is really convenient. I tried Hexo before, but the Node.js setup turned me away. Even now, I have no idea why it failed to compile. 😢 The only slight difficulty is adding the directory containing hugo.exe to your environment variables.\nCreating a Template System # Open the terminal in the folder where hugo.exe is located and run the command hugo new site your-site-name. You’ll see a new folder appear in the current directory.\nThe template system sounds advanced, but it’s just a special folder structure created in the same directory as hugo.exe. You can’t arbitrarily modify its contents because each folder has a specific purpose.\nName Purpose asset Stores images, icons, and other assets used by the website config Website configuration folder (may not exist initially; some themes require it) hugo.toml One of the website configuration files content All content goes here public The folder containing the fully compiled website (empty initially) themes Stores your website’s themes Basic Theme Configuration # Hugo has a lot of themes, and you can browse them on Hugo Themes. You can download the theme you like and place it in the themes folder. The process might sound abstract, but you can check out the video tutorial for more guidance.\nHere’s one important tip: most themes come with a sample site located in the exampleSite folder. If you don’t want to configure everything from scratch, you can just use the sample configuration.\nAfter configuring the theme, you’ll need to customize it. I highly recommend the Blowfish theme, which is fantastic, and I truly respect the author 🫡.\nBlowfish Theme # The Blowfish official documentation is incredibly detailed, so I won’t repeat it here. Any additional words would be disrespectful to such a comprehensive guide 🫡.\nHowever, there are some issues you might encounter, and I’ll briefly mention them below. You should carefully read the official documentation to fully understand these points 🤔.\nWhy does the \u0026ldquo;Recent Articles\u0026rdquo; section still show up even if params.homepage.showRecent = false is set? If you face this issue, it’s likely because, like me, you lazily used the exampleSite configuration. This is because the homepage layout is controlled by more than one interface, and another one is located in the layouts\\partials\\home\\custom.html file.\nIf you don’t mind, just ignore it. But if you care (like I did 🤪), you can comment out the following code in the file:\n\u0026lt;section\u0026gt; {{ partial \u0026#34;recent-articles-demo.html\u0026#34; . }} \u0026lt;/section\u0026gt; Why doesn’t the logo change between day and night modes when I use an svg logo? This is a bug I discovered, and I’ve already submitted an improvement to the theme author. See code improvement.\nWhy does the small icon in the browser window still show the blowfish logo even after I change the site’s logo? This is mentioned in the official documentation, but it’s buried deep. You can find it under Partials Documentation for Blowfish.\nTo be honest, the official documentation is excellent. 👍 After going through the entire process, I only encountered a few minor issues that were not easy to understand 😋.\nPlugins I Use # I prefer using Obsidian for writing articles. However, the format used by Obsidian and the one used by Blowfish is quite different, so converting between the two can be a hassle 🤔.\nAfter searching around, I found that there weren’t any suitable plugins! So, I developed my own plugin: Hugo-Blowfish-Exporter.\nWhile the plugin is simple, it covers almost all of my needs, including:\n- Callouts (supports all official callout names, with additional icons) - Inline math formulas (Blowfish supports block-level formulas)\n- Mermaid (supports Mermaid diagrams)\n- Image embedding (automatically exports images)\n- Wiki-style links (only support the none-displayed link 😢)\nThe none-displayed link is simply exported as normal hyperlink in the HTML file;\nThe displayed link is more complex: change(override) the source code of Blowfish to support the file injection through the shortcode, mdimporter; every Obsidian file should includes a meta data slug to tag the folder that contains the target markdown file in your website repository.\nThe overriding of the theme\u0026rsquo;s source code can be found in the mdimporter and the stripFrontMatter used to remove metadata from the injected files\u0026rsquo; headers. For overriding the directory, refer to the configuration on GitHub.\nI put a lot of effort into this plugin, even though it only took a few days 🤔. But those few days were quite exhausting 😵‍💫.\nIf this plugin helps you, feel free to share it! If you’re not happy with the functionality, you can submit an issue on GitHub 🫡. If you\u0026rsquo;re familiar with the code, you can modify it directly; the code is well-commented and quite standard 🤗.\nAnd if you modify and upgrade the code, I’d be very grateful if you share your changes with me (via a pull request on GitHub)! ☺️\nFinal Thoughts # Setting up a blog site is just the first step in a long journey; the real challenge is filling it with content.\nAs I mentioned in An experience of writing plugins, many personal blogs fade into obscurity in as little as a year, from the initial burst of excitement to the eventual silence.\nIn this fast-paced world, most meaningless and inefficient things are eventually replaced by efficiency, and the original enthusiasm and dreams often compromise with reality. I too no longer have the passion I once had, and my actions have become more like those of a real adult.\nBut there\u0026rsquo;s still a bit of unwillingness in me. This website is a form of resistance, and I’ll do my best to maintain it. That’s also why I developed the plugin—to make updating the blog easier.\nI hope this tutorial helps anyone planning to set up their own blog. Let’s keep moving forward, together 🫡.\n","date":"7 January 2025","externalUrl":null,"permalink":"/en/blog/hugo-blog/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n A blog website journey, from hand-coding to Hugo, a story of twists and turns.\n\u003c/div\u003e\n\n\n\n\u003ch2 class=\"relative group\"\u003eWhy Hugo? \n \u003cdiv id=\"why-hugo\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#why-hugo\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eIt all started with hearing that Hugo could generate webpages and that it was incredibly efficient at compiling static pages. I decided to dive into the research—Hugo is said to be the \u003cstrong\u003efastest static site generator\u003c/strong\u003e in the world, as claimed on its official website.\u003c/p\u003e","title":"Hugo Blog Setup","type":"blog"},{"content":" A Reflection on Writing a Plugin and What I Learned from the Experience. The Beginning # It all started with my blog website. I stumbled upon an article on WeChat about building a blog with Hugo, and since I wanted to revamp my old, simple site, I decided to give it a try. My original site was extremely rudimentary, and the whole writing process involved jumping between HTML, JS, and CSS in a rather awkward manner. On top of that, I had always admired the blog of a great tech guru, Lilian Weng, which was also built with Hugo. This further strengthened my resolve to change my site\u0026rsquo;s underlying platform.\nSo, I quickly started diving into Hugo.\nTo my surprise, the results were extraordinary! My old webpage took me nearly a month to build, but with Hugo, I was able to finish everything in less than half a day. What shocked me even more was that Hugo, a program written in Go, didn’t require users to set up a Go environment! 😮\nAt the same time, I discovered an incredibly well-documented Hugo theme—Blowfish. This was by far the most detailed documentation I had ever seen for any project, bar none (๑•̀ㅂ•́)و✧.\nWith Hugo and Blowfish working in tandem, my small site quickly took shape. Of course, I’m not great at designing, so I just used the default layout from Blowfish, as I felt any changes would ruin the beauty of the page.\nTo be honest, after all this work, I didn’t have any strong emotional reactions, except for deep respect for the coding skills of the authors of Hugo and Blowfish.\nThat was until I wanted to upload the massive amount of notes I had in Obsidian to my new blog.\nThe Bitter Taste of Originality # I soon realized that there wasn’t a plugin available to directly convert the format of my Obsidian notes to fit the Blowfish theme. Fueled by the earlier \u0026ldquo;pleasant experience,\u0026rdquo; I decided to write a plugin myself! (😄 Although, I would soon stop laughing 😢)\nThe rest of the experience wasn’t anything particularly exciting—just endless switching between webpages, searching through API documentation, and never-ending conversations with AI bots. After countless revisions, I finally ended up with something exceedingly simple: a plugin that identifies specific patterns in documents and performs content replacement.\nIt was quite laughable. Compared to the few hours it took to set up the website, the nearly forty hours I spent writing that plugin felt almost negligible. At one point, I seriously considered just deleting my few hundred lines of code.\nYes, such a simple plugin drained me mentally and physically. I truly tasted the bitterness of originality.\nNow, looking back at Hugo and Blowfish, I feel deeply shocked by their complexity and the effort required to implement all of those features. If they were getting paid for this work, I could at least understand the level of effort involved. But they were both open-source, relying entirely on user goodwill and appreciation.\nI saw the last update of the Blowfish author’s blog, which was in March 2024, and I fell into deep thought.\nSentiments and Idealism # I imagine that the author of Blowfish must have paused the development of the theme for some reason—perhaps due to life circumstances. After all, this project didn’t bring in much real income.\nSuddenly, I remembered the changes I had noticed before—those GitHub profiles, once full of green squares, gradually becoming sparse, and eventually disappearing. Beneath this peaceful change, there might be a shift in someone\u0026rsquo;s life. Whether it\u0026rsquo;s because of busy work or the gradual fading of motivation, the original passionate drive eventually drowns in silence. I can\u0026rsquo;t stop this from happening, but I understand the reasons behind it.\nOpen-source is driven by passion, but passion doesn’t pay the bills. People need to live in the present.\nI recalled a tech YouTuber, Ma Nong Gao Tian, a core Python developer who humorously complained about the harsh realities of open-source life. His prematurely graying hair made me feel a pang of empathy—he had spent most of his life writing code and yet found himself out of work, surviving on a few extra bucks from his videos.\nIn Conclusion # Life is rarely as we wish. Once again, I looked at my forty-plus hours of work and couldn’t help but laugh and shake my head.\nAfter writing this, I’m off to bed. It’s now 1:48 AM on January 6, 2025, and I still haven’t reviewed for my English final exam tomorrow.\nLooking at this blog again, I laughed and shook my head.\nSuch is life.\n","date":"6 January 2025","externalUrl":null,"permalink":"/en/blog/plugin-writing-experience/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n A Reflection on Writing a Plugin and What I Learned from the Experience.\n\u003c/div\u003e\n\n\n\n\u003ch3 class=\"relative group\"\u003eThe Beginning \n \u003cdiv id=\"the-beginning\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#the-beginning\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003eIt all started with my blog website. I stumbled upon an article on WeChat about building a blog with \u003ccode\u003eHugo\u003c/code\u003e, and since I wanted to revamp my old, simple site, I decided to give it a try. My original site was extremely rudimentary, and the whole writing process involved jumping between \u003ccode\u003eHTML\u003c/code\u003e, \u003ccode\u003eJS\u003c/code\u003e, and \u003ccode\u003eCSS\u003c/code\u003e in a rather awkward manner. On top of that, I had always admired the \u003ca href=\"https://lilianweng.github.io/\" target=\"_blank\"\u003eblog\u003c/a\u003e of a great tech guru, \u003ccode\u003eLilian Weng\u003c/code\u003e, which was also built with \u003ccode\u003eHugo\u003c/code\u003e. This further strengthened my resolve to change my site\u0026rsquo;s underlying platform.\u003c/p\u003e","title":"An experience of writing plugin","type":"blog"},{"content":"Morethan\u0026rsquo;s dummy blog page~\n","date":"3 January 2025","externalUrl":null,"permalink":"/en/blog/moravecs-paradox/","section":"Blogs","summary":"\u003cp\u003eMorethan\u0026rsquo;s dummy blog page~\u003c/p\u003e","title":"The reflection of Moravec's paradox","type":"blog"},{"content":" Preface # This article is primarily a review and summary of the entire process of CUMCM 2024.\nOur team was formed in the winter of 2023, and CUMCM 2024 was our first participation in the \u0026ldquo;Mathematical Modeling\u0026rdquo; competition. After numerous mock contests, we finally made it to the national competition. After submitting the final paper, we won the first prize at the provincial level and were recommended for the first prize at the national level, ultimately receiving the second prize at the national level.\nThere were moments of excitement and surprise, as well as disappointment; we must have done some things right in the competition, which is why we won a national award in our first attempt; but there are definitely shortcomings, after all, there must be a reason for going from \u0026ldquo;recommended for the first prize at the national level\u0026rdquo; to \u0026ldquo;second prize at the national level\u0026rdquo;.\nIn short, this experience is truly unforgettable, and it is even more worth summarizing and learning from the experience to prepare for next year\u0026rsquo;s competition.\nCUMCM stands for Chinese Undergraduate Mathematical Contest in Modeling; it is commonly referred to as the \u0026ldquo;National Mathematical Modeling Competition\u0026rdquo;. Terminology Explanation # Term Explanation Computational System The traditional modeling process, encapsulating a large function Optimization System A system used to optimize the adjustable parameters in the computational system to generate the best parameter configuration Computational Flow The process of handling input data in the computational system Computational Flow Node A key intermediate step in the workflow Optimization Flow The main logic of the optimization system Main Body of the Paper Includes the abstract, restatement, descriptions of computational and optimization flows, results presentation and analysis, that is, all content before the conclusion of the paper Conclusion of the Paper Includes sensitivity analysis and model extension Objective Conditions # Task Division # Although there were many topics to choose from for the competition, our group chose to focus on optimization problems, which is Topic A.\nMe: Modeling + Coding + Part of Paper Writing CL: Modeling + Paper Writing + Part of Coding HWJ: Paper Beautification Workflow # The coding part of the entire Topic A can be roughly divided into two systems:\nComputational System: Function: Accept input data and parameters, return the required results Nature: Directly determined by the problem, different topics have different computational systems, which need to be constructed temporarily Optimization System: Function: Accept the computational system as the target function to be optimized, execute its own optimization logic, and finally return the computational results Nature: The method system is relatively mature and can be prepared in advance of the competition with various optimization systems The paper writing part is divided into:\nOverall Framework: Determined by the LaTeX template Main Content Filling: Clear description of the workflow and optimization flow Typesetting and Beautification: Adjust the details of each part, with illustrative images (flowcharts, schematics) Concluding Content Pre-Modeling # Objective: Under the premise of accurately understanding the problem, quickly carry out preliminary modeling, basically determine the direction of modeling and calculation methods;\nEstimated Time: 3 hours\nWork: All team members conduct a web search to see if there are any literature materials that basically hit the topic.\nHit Successful: The most ideal situation, at this time, you can directly study the papers and collect ideas; Hit Unsuccessful: Although there are no ready-made materials for reference, some ideas have been accumulated in the process of literature review. Early Modeling # Overall Objective: Construct a precise and optimization method adaptable computational system\nModeling: Clarify the operations between input data and each computational flow node Coding: Implement the computational flow with code and achieve data visualization Paper: Fill in the content of the first question and initially typeset Estimated Time: 30 hours\nWork:\nAll team members model together, first clarify the modeling ideas, and provide a complete mathematical derivation process Me and CL: Code implementation and paper content filling are carried out simultaneously HWJ: Draw more vivid schematic diagrams that cannot be generated by code Mid-Modeling # Overall Objective: Construct a suitable optimization system\nModeling: According to the particularity of the computational system, choose the most matching optimization system Coding: Make minor changes in the implementation of the optimization system to match the computational system Paper: Complete the main part of the paper and start local detail fine-tuning Estimated Time: 20 hours\nWork: Similar to the previous, but the focus of work has shifted from code writing to paper writing\nSimplify the paper, at this time, the paper is very bloated Fine-tune the logic of the paper to make the context more closely related Beautify the typesetting, reduce text, increase images Late Modeling # The basic modeling is completed, and all members check for loopholes: Conventional checks such as typos, inaccurate expressions, formula spelling errors, etc. Optimize code comments to make them more readable Focus on checking personal information Personal information must not be retained in the competition paper, including file paths in the code, such as C:\\Users\\Morethan; retaining personal information is a very serious mistake! Actual Combat Effectiveness # When we applied the above strategies to the actual combat process, that is, the formal competition of CUMCM 2024, the results were as follows:\nEffective Time: The total duration of the competition is three days, a total of 72 hours The team works from seven in the morning to eight in the evening, excluding meal times, with an effective time of 12 hours a day Time utilization rate is \\(50\\%\\) (quite low in comparison🤔) Completed Work: The main body of the paper is 28 A4 pages The code part is 35 A4 pages, excluding the reused code between each sub-question, there should be about 20 pages A total of 25 illustrations in the paper The above data is after the paper has been streamlined, with the initial draft of the paper being nearly 50 pages Uncompleted Work: The final result calculation, due to the large amount of calculation (the code efficiency is not high), the code was finished two hours in advance, but there was not enough time to calculate the results😭😭 The calculation accuracy of the model is not enough, the accuracy is 1s which does not meet the standard answer\u0026rsquo;s precision The conclusion part of the paper was not actually completed Strengths # Topic Selection # Focused on Topic A, accumulated sufficient experience in mock contests, and polished a set of efficient workflows\nThe methodology for Topic A is relatively well-constructed\nWorkflow # The workflow is relatively clear, and the efficiency is high\nGuided by the final paper, modeling, paper, and code are carried out simultaneously, ensuring sufficient content in the paper\nDivision of Labor # Adopted a blurred division of labor, each team member has a main job and a secondary job, can work independently on their main job, and can also complete some work on the secondary job, greatly improving time utilization\nThe team members are very capable, as handling two division tasks means more learning costs\nWeaknesses # Workflow # The plan is perfect, but some necessary links were not well done in practice\nEffective time ratio: finishing work at eight in the evening is too early! More time should be taken to model trial and error to ensure the correctness and accuracy of the model\nDivision of Labor # The code writing, code debugging, code visualization, result calculation, and result visualization involve too much code, which is difficult for one person to handle;\nTask overlap caused by blurred division of labor increases collaboration costs\nModeling # Topic understanding accuracy: This time, there was a significant deviation in our understanding of the topic, which led to wasting a lot of time on model correction; Code # Code efficiency: Due to no time limit before, there was insufficient preparation for \u0026ldquo;very long\u0026rdquo; code, no experience with code parallelism;\nResult precision: The initial modeling was too rough, and a bad characteristic was used: setting the time step to 1, and using it as an array index, which made it difficult to reduce the time step later, resulting in insufficient precision of the final results\nImprovement Plans # Carefully select the venue, increasing effective time✨is the most important✨ Division of Labor # Slightly change the division of labor, increase the investment of human resources in coding\nIncrease learning input in each main and secondary division to increase work efficiency\nModeling # Focus more on understanding the topic, don\u0026rsquo;t rush; correcting modeling errors is not worth the loss Code # Build a set of effective code collaboration plans to enhance code writing speed\nStart building code writing standards:\nVariable naming Documentation at the beginning of the file Code writing process standards Code parallelization: Add some parallelizable code to the code to increase running speed\nAll code improvements must be implemented in a document! Not just slogans! Paper # Study excellent papers\nPay attention to its paper framework Pay attention to its language style, text readability, detail, illustration logic, and image readability Improve ourselves\nOptimize the paper\u0026rsquo;s main logic framework, refine the content of each section Improvements in language style, text readability, detail, illustration logic, and image readability, etc. The results are fixed in the form of comments in the LaTeX template! Summary # A test paper without full marks is more rewarding than one with full marks!\nAccumulating knowledge of applied mathematics, enhancing paper writing skills, and improving the ability to discover problems are more meaningful than the competition itself. 🫡\nCUMCM, every MathModeler can benefit from it. 🤗\n","date":"12 September 2024","externalUrl":null,"permalink":"/en/blog/cumcm2024/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003ePreface \n \u003cdiv id=\"preface\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#preface\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eThis article is primarily a review and summary of the entire process of CUMCM 2024.\u003c/p\u003e","title":"CUMCM 2024 Summary","type":"blog"},{"content":" Virtual Env # Creat # Some tipical code 👇\n# creat a virtual env named \u0026#34;your_env_name\u0026#34; python -m venv your_env_name # assign the version of python, make sure your python in default direction python -m venv your_env_name --python=python3.11 # simply list the absolute direction of python, simple and efficient D:/PythonPython311/python.exe -m venv your_env_name More parameters you may need for a customized virtual env. 🤔\nParams Meaning --system-site-packages Give the virtual environment access to the system site-packages dir. --clear Delete the contents of the environment directory if it already exists, before environment creation. --version print the python version of the env All the detailed expaination of the parameters can be got by the code python -m venv -h. No need to search everywhere~😆 Activate # The virtual env is defaulted not active. In the direction your_env_name/Scripts/ will be a file named activate. Run it with your cmd.\n# activate virtual env your_env_name/Scripts/activate ","date":"10 August 2024","externalUrl":null,"permalink":"/en/blog/pytips/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eVirtual Env \n \u003cdiv id=\"virtual-env\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#virtual-env\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\n\n\u003ch3 class=\"relative group\"\u003eCreat \n \u003cdiv id=\"creat\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#creat\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003eSome tipical code 👇\u003c/p\u003e","title":"Python Tpis","type":"blog"},{"content":" Reference # Honestly, I\u0026rsquo;m not familiar with BayesianOPT, the opinions mentioned stem from the below. 👇\n【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\n一文详解贝叶斯优化(Bayesian Optimization)原理\n贝叶斯优化(BayesianOptimization)\n超参数优\u0026mdash;贝叶斯优化及其改进(PBT优化)\n贝叶斯优化 (Bayesian Optimization)\nMATLAB Offical Document\nAdvantages \u0026amp; Algorithm Principle # Here we are going to talk about the advantages \u0026amp; algorithm principle of BayesianOPT. If you only want to konw how to use it, you can read the #Advantage section, then go to the #MATLAB Practice\nAdvantages # Algorithm Principle # MATLAB Practice # Well, we can put Bayesian Optimization into practice even though we don\u0026rsquo;t understand it, using the predefined function of MATLAB, the bayesopt. Here is the official guidance of the function: bayesopt\nFinal code display # % define the obj function function y = objectiveFcn(x) y = (1 - x.x1)^2 + 100 * (x.x2 - x.x1^2)^2; end % define the variables vars = [optimizableVariable(\u0026#39;x1\u0026#39;, [-2, 2]) optimizableVariable(\u0026#39;x2\u0026#39;, [-2, 2])]; % conduce the optimizer results = bayesopt(@objectiveFcn, vars, ... \u0026#39;AcquisitionFunctionName\u0026#39;, \u0026#39;expected-improvement-plus\u0026#39;, ... \u0026#39;MaxObjectiveEvaluations\u0026#39;, 30, ... \u0026#39;IsObjectiveDeterministic\u0026#39;, true, ... \u0026#39;Verbose\u0026#39;, 1); % get result bestPoint = results.XAtMinObjective; bestObjective = results.MinObjective; % result output fprintf(\u0026#39;最优解 x1: %.4f, x2: %.4f\\n\u0026#39;, bestPoint.x1, bestPoint.x2); fprintf(\u0026#39;最优目标值: %.4f\\n\u0026#39;, bestObjective); I\u0026rsquo;d commit that the code is generated by AI. 🥲 AI is a better coder, at least when comparing with me. 🫠 Parameters Explaination # Params Meaning AcquisitionFunctionName select a Acquisition Function, which determines the method how bayesopt choose the next acquisition point MaxObjectiveEvaluations the maximize evalu turns IsObjectiveDeterministic If the obj function contains noise, set to true ; Otherwise, set to false Verbose Determine the detailing extend of console output, the complete output includes many figures. Want more detailed information? Refer to the Offical document: bayesopt. It\u0026rsquo;s more completed and with amount of examples.\nIt\u0026rsquo;s basic for every MathModeler to read the offical document. 😝 ","date":"5 August 2024","externalUrl":null,"permalink":"/en/blog/bayesianopt/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eReference \n \u003cdiv id=\"reference\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#reference\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eHonestly, I\u0026rsquo;m not familiar with BayesianOPT, the opinions mentioned stem from the below. 👇\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://blog.csdn.net/qq_27590277/article/details/115451660\" target=\"_blank\"\u003e【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\u003c/a\u003e\u003c/p\u003e","title":"Bayesian Optimization","type":"blog"},{"content":" Background Overview # You should know how to interact with the computer via the command line, including but not limited to: how to open the command line/terminal in Windows, when a running command ends, etc.\nA little knowledge of bypassing internet censorship is helpful. OverLeaf is foreign software, and its related LaTeX projects are also hosted abroad. Therefore, directly accessing foreign traffic when downloading dependencies can save a lot of trouble. If you don’t have a VPN, you will need to specify a domestic source for each package manager, though sometimes the updates from domestic sources are not timely.\nBasic familiarity with Vim operations is useful, such as: how to enter insert mode, how to save and exit, how to exit without saving, etc.\nFull Deployment Process # Installing Linux # Search for a Linux distribution in the Windows App Store and download it. The author chose Kali. After installation, you can open it directly from the Start menu. Upon opening, a command-line window will pop up, and you will need to register with a username and password.\nAt this point, your command line should display a warning. This is because you haven’t installed WSL (Windows Subsystem for Linux).\nAlso, when entering the password, your input will not be displayed in the command line, but it has been recorded.\nWhy do you need a Linux system? Because OverLeaf\u0026rsquo;s ShareLaTeX model requires a Linux environment. It is said that OverLeaf runs more smoothly on Linux systems.\nInstalling WSL # To install WSL2, run the following in the Windows command line:\nwsl --install After installation, you can open it directly. Another warning will appear. At this point, you need to create a text file in the C:\\Users\\ASUS directory and rename it to .wslconfig.\nEnter the following content:\n[experimental] autoMemoryReclaim=gradual # gradual | dropcache | disabled networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true Installing Docker # Go to the Docker website to download Docker, which will be the container for the ShareLaTeX model. Docker is an open-source application container engine that includes images, containers, and repositories. Its purpose is to manage the lifecycle of application components, such as encapsulation, distribution, deployment, and operation, allowing users to \u0026ldquo;package once, run anywhere,\u0026rdquo; much like a container, developed and encapsulated by programmers, which users can directly move around.\nOnce Docker is installed, you can double-click to start it in the background. We will interact with Docker later via the command line.\nPulling the Image # Open Kali, and run the following command:\ngit clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit Then run:\ncd ./overleaf-toolkit bin/init vim ./config/variables.env At this point, you should be in the document interface of the Vim text editor. Vim has many shortcuts, and pressing the \u0026quot;I\u0026quot; key will enter insert mode for text editing. Press \u0026quot;esc\u0026quot; to return to normal mode. In insert mode, type: OVERLEAF_SITE_LANGUAGE=zh-CN.\nAfter typing, press \u0026quot;esc\u0026quot; to return to normal mode, then type :wq to \u0026ldquo;save and quit.\u0026rdquo; If you make a mistake, type :e! to discard all changes and start over. This step will set your OverLeaf interface to Chinese.\nAfter successfully saving and quitting, return to the familiar Kali command-line interface and run bin/up. This will pull the ShareLaTeX image and related network tools. There will be a large amount of data transfer, so ensure that your network is stable (your VPN should be reliable!).\nConfiguring the User # Once the previous command finishes, run bin/start. At this point, open Docker and enter the ShareLaTeX container. You should see code \u0026ldquo;flashing.\u0026rdquo; If there are no red messages, everything is running normally.\nNow open a browser and visit http://localhost/launchpad.\nAfter registering an Administrator Account, you will be redirected to http://localhost/project. The basic OverLeaf webpage should now be displayed. If you compile now, it will most likely report an error ᕕ( ᐛ )ᕗ.\nThis is because ShareLaTeX is missing many required packages🙃\u0026quot;\nInstalling Extension Packages # Open Kali, navigate to the appropriate directory, and run bin/shell. Then execute the following one by one:\ncd /usr/local/texlive # Download and run the upgrade script wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh sh update-tlmgr-latest.sh -- --upgrade # Change the TeX Live download source tlmgr option repository https://mirrors.sustech.edu.cn/CTAN/systems/texlive/tlnet/ # Upgrade tlmgr tlmgr update --self --all # Install the full TeX Live package (this will take time, so don’t let the shell disconnect) tlmgr install scheme-full # Exit the ShareLaTeX command-line interface exit # Restart the ShareLaTeX container docker restart sharelatex After restarting, enter the shell again and run:\napt update # Install fonts apt install --no-install-recommends ttf-mscorefonts-installer fonts-noto texlive-fonts-recommended tex-gyre fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted fonts-texgyre # Install pygments apt install python3-pygments # Install Beamer and others apt install texlive-latex-recommended apt install texlive-latex-extra # Install English fonts echo \u0026#34;yes\u0026#34; | apt install -y --reinstall ttf-mscorefonts-installer # Install Chinese fonts apt install -y latex-cjk-all texlive-lang-chinese texlive-lang-english cp fonts/* /usr/share/fonts/zh-cn/ cd /usr/share/fonts fc-cache -fv # Update font cache fc-list :lang=zh-cn fc-match Arial Finally, in the shell directory, run:\nvim /usr/local/texlive/2023/texmf.cnf Open the configuration file and add shell_escape = t at the bottom.\nI’m not sure what this does, but it was passed down by the predecessors 🤔 Note, if the TeX Live version (the official name for extension packages) differs, the directory path may also change. You will need to adjust the path based on the actual version, for example, change 2023 to 2024.\nYou can use ls -l in the Linux command line to view all files in the current directory. Successful Deployment # Now you can happily use your local OverLeaf version without worrying about compilation timeouts~\nIf you\u0026rsquo;re lucky and happen to be a CQUer, here’s a graduation thesis template from Chongqing University, super user-friendly: CQUThesis\n","date":"12 July 2024","externalUrl":null,"permalink":"/en/blog/localoverleaf/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003eBackground Overview \n \u003cdiv id=\"background-overview\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#background-overview\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eYou should know how to interact with the computer via the command line, including but not limited to: how to open the command line/terminal in Windows, when a running command ends, etc.\u003c/p\u003e","title":"Local OverLeaf Deployment","type":"blog"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/authors/","section":"Authors List","summary":"","title":"Authors List","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/blog/","section":"Blogs","summary":"","title":"Blogs","type":"blog"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":" Hi, welcome to my info page. 👋 # Basic Info # My casual English name is Morethan because it resembles my Chinese name. 🙃\nNow I\u0026rsquo;m a university student in China. ᕕ( ᐛ )ᕗ Nothing more to say. 🫠\nBlog Focus # Personal Knowledge Base: to store frequently-used operations and valuable experience.\nMicro Paper Stack: to store inspirations for my Graduation Thesis, usually serious and logical, attempt to follow the standard thesis working stream.\nKnowledge Outlet: to put what I leant into practice.\nFinal # If you find the content is useful, click a like please at the beginning of that page. 🤗\nIf you want to share the content, cite this website please. 🫡\nIf you find some bug, push an issue on the GitHub please. 🥰\n","date":"10 January 2025","externalUrl":null,"permalink":"/en/authors/morethan/","section":"Authors List","summary":"\u003ch1 class=\"relative group\"\u003eHi, welcome to my info page. 👋 \n \u003cdiv id=\"hi-welcome-to-my-info-page-\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#hi-welcome-to-my-info-page-\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e\n\n\n\u003ch2 class=\"relative group\"\u003eBasic Info \n \u003cdiv id=\"basic-info\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#basic-info\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003eMy casual English name is Morethan because it resembles my Chinese name. 🙃\u003c/p\u003e","title":"Morethan","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/operation/","section":"Seires","summary":"","title":"Operation","type":"series"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/","section":"Seires","summary":"\u003chr\u003e","title":"Seires","type":"series"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"\u003chr\u003e","title":"Tags","type":"tags"},{"content":" ","date":"10 January 2025","externalUrl":null,"permalink":"/en/","section":"Welcome to More's website","summary":"\u003c!-- \u003cdiv class=\"flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900\"\u003e\n \u003cspan class=\"flex items-center ltr:pr-3 rtl:pl-3 text-primary-400\"\u003e\n \n \n \u003cspan class=\"relative inline-block align-text-bottom icon\"\u003e\n \u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003cpath fill=\"currentColor\" d=\"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"/\u003e\u003c/svg\u003e\n \n \u003c/span\u003e\n \n\n \u003c/span\u003e\n \u003cspan class=\"flex items-center justify-between grow dark:text-neutral-300\"\u003e\n \u003cspan class=\"prose dark:prose-invert\"\u003eThis is a demo of the \u003ccode id=\"layout\"\u003ebackground\u003c/code\u003e layout.\u003c/span\u003e\n \u003cbutton\n id=\"switch-layout-button\"\n class=\"px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700\"\n \u003e\n Switch layout \u0026orarr;\n \u003c/button\u003e\n \u003c/span\u003e\n\u003c/div\u003e --\u003e","title":"Welcome to More's website","type":"page"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/%E5%8D%9A%E5%AE%A2/","section":"Tags","summary":"","title":"博客","type":"tags"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/series/%E6%8A%80%E6%9C%AF%E6%B5%81%E7%A8%8B/","section":"系列","summary":"","title":"技术流程","type":"series"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/tags/%E6%8A%A5%E5%91%8A/","section":"Tags","summary":"","title":"报告","type":"tags"},{"content":"","date":"7 January 2025","externalUrl":null,"permalink":"/en/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/series/casual-essay/","section":"Seires","summary":"","title":"Casual Essay","type":"series"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/tags/experience/","section":"Tags","summary":"","title":"Experience","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/tags/%E7%BB%8F%E5%8E%86/","section":"标签","summary":"","title":"经历","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/series/%E9%9A%8F%E7%AC%94/","section":"系列","summary":"","title":"随笔","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/series/ai%E9%81%90%E6%83%B3/","section":"系列","summary":"","title":"AI遐想","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/imagination/","section":"Tags","summary":"","title":"Imagination","type":"tags"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/series/wild-imagination-of-ai/","section":"Seires","summary":"","title":"Wild Imagination of AI","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/%E9%81%90%E6%83%B3/","section":"标签","summary":"","title":"遐想","type":"tags"},{"content":"This is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. \u0026#x1f680;\nYou can also use these content pages to define Hugo metadata like titles and descriptions that will be used for SEO and other purposes.\n","date":"12 September 2024","externalUrl":null,"permalink":"/en/tags/cumcm/","section":"Tags","summary":"\u003cp\u003eThis is the advanced tag. Just like other listing pages in Blowfish, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. \u0026#x1f680;\u003c/p\u003e","title":"CUMCM","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/tags/math/","section":"Tags","summary":"","title":"Math","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/series/mathmodel/","section":"Seires","summary":"","title":"MathModel","type":"series"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/series/%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1/","section":"系列","summary":"","title":"数学建模","type":"series"},{"content":"","date":"10 August 2024","externalUrl":null,"permalink":"/en/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"","date":"5 August 2024","externalUrl":null,"permalink":"/en/tags/matlab/","section":"Tags","summary":"","title":"MATLAB","type":"tags"},{"content":"","date":"12 July 2024","externalUrl":null,"permalink":"/en/tags/latex/","section":"Tags","summary":"","title":"LaTeX","type":"tags"},{"content":"","date":"12 July 2024","externalUrl":null,"permalink":"/en/tags/overleaf/","section":"Tags","summary":"","title":"Overleaf","type":"tags"},{"content":"","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}] \ No newline at end of file diff --git a/index.json b/index.json index 8554966..4fec578 100644 --- a/index.json +++ b/index.json @@ -1,4 +1,4 @@ -[{"content":" 熟悉项目分析流程,是一个练手性质的分析报告 我在初步完成自己的小插件之后才发现:笔记转博客这个领域似乎没有一个一键式解决方案,为此我写了这篇文章来分析是否要创建一个新的项目来填补这个空白。\n项目没有优劣之分,只有合适与否,这篇文章中涉及的评价标准都是围绕是否符合博客网页要求进行的,因此可能有些项目并不适合做博客网页,但是这丝毫不影响项目本身的价值。\n领域定义 # 在所有分析开始之前,需要对于笔记转博客这个领域有一个清晰的界定。\n笔记:此处的笔记特指 Obsidian 中的笔记,含有 Obsidian Flavored Markdown,这对笔记向网页转换的过程提出了不小的要求。\n博客:博客,顾名思义是一种获得流量的手段,创作者花费时间创作笔记,然后经由转换软件,生成排版精美、功能丰富的博客网页\n评价细则如下:\n隐私方面\n是否本地运行 是否开源 使用舒适性\n与 Obsidian 语法的适配程度 服务部署复杂程度 帮助文档撰写详细程度 个性化调整复杂设置 网页功能完整性\n默认配套网页的核心功能是否齐全(搜索、日间/夜间模式等) 默认网页美观程度 是否支持 SEO 对 Obsidian 原生语法的转化效果是否生硬(例如:展示性链接内是否存在不能翻译的代码块、是否舍弃部分 Obsidian 语法特性等) 项目概述 # 在我的设想中,这个项目的功能就是构建一个 Obsidian 插件,实现从 Obsidian 笔记到 Hugo 博客网页的无缝导出,支持 Obsidian 的所有基本核心功能。\n成效:大大降低了创建博客网页的成本,只要能够使用 Obsidian 就能够拥有属于自己的博客网页。\n市场和用户可行性分析 # 市场需求分析 # 概述 # 基本需求:搭建个人网站并持续输出的需求,包括自我提升、自我表达、创造独特全面的个人能力展示平台(对接企业招聘)等等\n目标用户群:重度 Obsidian 用户且有分享笔记的需求;想要搭建个人博客但是因为技术难度而放弃的知识创作者\n相关数据 # Flowershow:截至 2024 年 10 月插件下载量为 3355;截至 2025 年 1 月插件下载量为 4594,同时最高下载量的插件有 3211992 的下载量; Quartz 截至 2025 年 1 月收获 GitHub start 数量为 7.7k 已有方案 # Quartz(Hugo) # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥\n介绍 # Quartz 是一个利用 Hugo 将 Obsidian 笔记转化为网页的工具集,最新版本优化了用户自定义的体验。\n官方样例网站:Welcome to Quartz 4\n评述 # 优点\n功能非常非常完整 所有相关套件中唯一成功解决了展示性 wiki 链接的一个 配套文档很详细 缺点\n几乎没有缺点,唯一一个值得提点的地方就是没有中文的文档 总结:非常优秀的项目,所有在 Obsidian 内显示的样式就是网页中显示的样式,确实也收获了所有现成方案中最多的 GitHub start 数量\nFlowershow # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥🩶\n介绍 # Flowershow 是一个基于 Obsidian 的整体发布服务,它可以将你的 Obsidian 笔记按照目录结构,转换为一个在线的数字花园网站。而 Vercel 是一个针对前端的云服务,它实现了通过 Github 免服务器快速部署前端服务,每次提交内容都会触发一次自动部署。Flowershow 的官方部署文件中需要使用 Vercel,国内使用可以考虑 Netlify 替换\n参考教程:Flowershow:免费的 Obsidian 笔记发布服务,实现你的数字花园网站\n主观上来讲,这个项目的主创团队是一支很有激情和使命感的队伍,关于 Flowershow 的简介里面包含了很多主创团队的核心理念。\n客观上来讲,Flowershow 的项目定位非常准确,就是一个基于 Obsidian 的博客网页生成平台,因此最终效果从前端和后端两个角度来说都是非常好的。\n评述 # 优点\n定位清晰,工作流程简洁明了 功能支持较为全面 背后有专业的团队进行运维 允许高度的自定义,适合喜欢个性化的创作者 缺点(一下信息均来自 2025 年 1 月)\n部分 Obsidian 的功能并没有处理,例如展示性的 wiki 链接并没有处理,至少介绍文档中跳过了这部分内容 仔细翻找了网站并没有发现反向链接的说明,但是首页信息显示能够支持反向链接 总结:总体上项目做的还是挺好,但是项目还在进行中,部分细节并不到位,对于 Obsidian 语法支持没有那么高要求的创作者就可以采用这个方案了\n官方发布 # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\n介绍 # 下面是几个样例网站:\nObsidian中文教程一个中文教程网站,使用了 Obsidian 官方的发布服务,里面里面可以体现一些功能,例如对于展示性链接的处理 Digital 3D Garden 有深度的前端界面自定义 mister chad 非常简洁工整的小站,内容很充实 Discrete Structures for Computer Science 神似官方的朴素风格 评述 # 优势\n官方发布的网页对于 Obsidian 内部表达的适配效果是一流的,Obsidian 内部所有的功能都能够成功在网页中展示;但是不清楚插件功能如何在网页中展示 有持续的维护服务,能够第一时间适配 Obsidian 的更新 支持高度的个性化设置,如果具有充足的代码经验,可以开发出相当精美的网页;同时还有大量的其他开发者开发的主题 隐私设置,网站能够设置密码,控制访问人员,可能用于企业内部文档管理 有 SEO 加持和移动平台适配,流量可能会更大一些 劣势\n每个月需要支付 8 美元,由于个人网站的流量相当小需要长期持有才会有明显的收益,因此这笔支出不是小数目,这是官方发布服务的致命缺陷 停止付费之后网页将不能被访问 国内的服务支持不佳,流量受限 总结:官方发布适合资金充裕,并且对于网站的自定义开发没有那么高需求的用户。\nDigital Garden # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\n介绍 # Digital Garden 是一款 Obsidian 插件,可以将笔记导出为网页并托管在 GitHub 上,然后再使用 Vercel 或者 Netlify 进行网页的发布。具体操作教程见 Digital Garden教程\n这里是几个样例网站:\nDigital Garden 官方样例 Aaron Youn 民间自制 John\u0026rsquo;s Digital Galaxy 非常丰富的内容,可以详细展示所有 Digital Garden 涉及的特性,特别是展示性链接循环嵌套 评述 # 优点\n功能支持较为全面 支持 Obsidian 的主题迁移 缺点\n对于中文路径不友好 网页界面自定义需要直接处理网页源码,即 HTML JavsScript CSS,并且默认配套的界面不太好看 总结:工作流程非常的简单,功能支持相当的全面,作为插件嵌入 Obsidian 更加轻便。虽然界面美化需要花些功夫,但如果对于界面美观与否并不在意,可以直接上手。\nPerlite # 推荐指数:❤️‍🔥❤️‍🔥🩶🩶🩶\n介绍 # Perlite 是一款网页版 Obsidian 文件阅读器,是 Obsidian 官方发布服务的开源平替。Obsidian Publish的开源替代品Perlite 这是微信公众号上的一个教程文本。\n这款开源平替最大的特点就是:其网页 UI 几乎和 Obsidian 的界面完全相同,提供近乎原生的浏览服务。\n评述 # 优点\n很好地支持几乎所有的 Obsidian 的功能 原生经典界面,给用户提供熟悉感 缺点\n不算是一个博客页面,官方对于项目的定位也确实不是博客网页而是一个“文件阅读器” 需要使用 Docker,启动缓慢,不如插件的那样的轻巧简洁的体验感 总结:Perlite 的定位决定了其并不适合直接用作展示性的博客页面,其界面实在是有点单调,对于访客的视觉吸引力其实并不强。更适合于作为一款网页版的 Obsidian,在上面进行文件的编辑可以更加专注,效果也更好\njekyll+Netlify+GitHub Pages # 推荐指数:❤️‍🔥❤️‍🔥🩶🩶🩶\n介绍 # 方法流程来源于 obsidian 目前最完美的免费发布方案 渐进式教程,教程内容很详细,既有基本的对比评价,也有详细的指导教程\n这是作者构建的例子网站:oldwinterの数字花园\n评述 # 优点\n配置简单 允许高度自定义 缺点\n部分 Obsidian 特色语法不支持,比如 callout 语法 不支持暗色模式 不支持搜索 总结:整体上是一个非常好的 Obsidian 转换为博客网页的实践,但是因为部分核心功能缺失因此并不适合想要完整的网页体验的创作者\nTiddlyWiki # 推荐指数:❤️‍🔥🩶🩶🩶🩶\n介绍 # TiddlyWiki 是一个历史悠久的笔记框架,至今依然有很强的生命力,许多开发者活跃在这个领域中。国内也有相关站点可以供访问:太微舞,以及配套教程:[太微中文教程](https://tw-cn.netlify.app /);国内的开发者在近年推出的衍生版本 TidGi(太记);\n利用Tiddlywiki发布Obsidian库这是一个将 Obsidian 发布到 TiddlyWiki 的流程性教程\n此外还有一些散落在互联网上的介绍和样例:\n了不起的“活笔记”系统:TiddlyWiki(太微笔记) - 少数派非常好的一片笔记文章,真正意义上的一文秒懂 TiddlyWiki;文章作者自己的笔记网站:MRIWiki.cn — 磁共振百科知识太微笔记 [太微中文教程](https://tw-cn.netlify.app /)教程本身就是利用 TiddlyWiki 编写的,可以查看 TiddlyWiki 的使用效果 评述 # 优势\n极致的简洁性与轻量化,可以说没有任何其他的个人网页比它更简单! 经过历史的筛选,拥有广泛的用户群体 成熟的国内服务,不需要科学上网就能够访问 劣势\n由于极致的简洁,导致网页看上去可能有点原始 不算完全的个人博客,其完全不迎合主流搜索引擎,直接靠搜索根本无法访问,难以获得流量(也是我撰写这篇文章之前从未听闻的原因😢) 总结:TiddlyWiki 的确是一个非常简洁和轻量化的笔记框架,这也吸引了很多的用户;但也正是因为其定位并非博客网页,所以导致用户的内容封闭在 TiddlyWiki 社区内部,甚至是封闭在创作者自己手中,无法转化为流量,并不适合有流量需求的创作者,而更加适合作为一个简单纯粹的笔记存储库\n结论 # 在经过完整的分析之前,我并不了解笔记转博客这个领域内部的实际情况,因此萌生了想做一个简化插件项目的想法💡\n但是经过系统性的调查研究,我必须承认 Quartz 确实是这个领域内出类拔萃的项目,无论从 Obsidian 语法适配性、配置流程便捷程度、前端配套界面美观程度、前端界面自定义便捷程度、后端撰写博客便捷程度等等各种方面,几乎都没有上升空间了。\n因此也就不需要我再去启动一个项目来做重复的事情了。在这里向所有笔记转博客领域内的相关项目的开发团队致敬🫡不管是否在文章中提及。\n项目没有优劣之分,只有合适与否,这篇文章中涉及的评价标准都是围绕是否符合博客网页要求进行的,因此可能有些项目并不适合做博客网页,但是这丝毫不影响项目本身的价值。\n向开源先锋致敬🫡🫡🫡\n","date":"2025-01-10","externalUrl":null,"permalink":"/blog/note-to-blog-report/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 熟悉项目分析流程,是一个练手性质的分析报告\n\u003c/div\u003e\n\n\u003cp\u003e我在初步完成自己的\u003ca href=\"https://morethan987.github.io/blog/plugin-writing-experience/\"\u003e小插件\u003c/a\u003e之后才发现:\u003cstrong\u003e笔记转博客\u003c/strong\u003e这个领域似乎没有一个一键式解决方案,为此我写了这篇文章来分析是否要创建一个新的项目来填补这个空白。\u003c/p\u003e","title":"笔记转博客项目分析报告","type":"blog"},{"content":" 博客网站折腾日志,从手搓到 Hugo 的曲折经历。 为什么 Hugo # 最初也只是因为偶然间听说了 Hugo 可以做网页,并且听说编译静态页面非常高效,于是才去搜集的相关资料——据说 Hugo 是世界上最快的静态页面生成器,官方网站也是这么写的。\n当然,口说无凭,下面就是我初次本地编译运行 Hugo 得到的输出,即在完全没有 public 文件夹的情况下的输出:\nZH-CN EN Pages 53 51 Paginator pages 0 0 Non-page files 13 13 Static files 7 7 Processed images 3 0 Aliases 18 17 Cleaned 0 0 Built in 872 ms\n中英文总共 104 个网页页面花费时间 0.872 秒,并且包含构建本地服务的时间,这个速度确实没什么好挑剔的了。并且本地的服务能够实时监听源代码的改动并进行增量重构,这个增量重构的时间取决于改动的多少,一般在 0.03 秒左右。\n我并没有用别的网页生成工具搭建过博客,因此无法给出其他生成器的实际生成速度 参考引用 # 下面是我在搭建博客的过程中所用到的所有资源链接:\n莱特雷-letere 这是一位博主的网页,也是用 Hugo 搭建的,里面同时也有很多其他的网页工具的教程;这是他在 B 站上发布的系列视频教程 Blowfish 这是我使用的一款 Hugo 主题,文档写的相当的好,真的没见过如此耐心的作者。 Hugo官方网页 Hugo Themes 部署全流程 # 搭建 Hugo 环境 # 这一部分在那位博主的网页和视频教程中都有非常详细的讲解,不喜欢看文字的可以去看视频😝\n说实话,Hugo 的环境搭建真的是我见过的最简单的,没有之一。你只需要到 Hugo官方网页去把 Hugo 下载下来,然后存放到合适的文件夹里面,然后解压就完成了,解压之后的文件夹内也只有一个 hugo.exe 文件,简直不要太简单。\nHugo 真的是太方便了,我曾经尝试过 Hexo 但是 Node.js 的配置就把我拒之门外了,到现在我也不知道为什么会编译报错😢 稍微需要那么一点点🤏难度的工作其实就是把 hugo.exe 所在的目录添加到环境变量里面去。\n生成模版系统 # 在 hugo.exe 的目录中打开终端,然后输入命令 hugo new site your-site-name,然后就可以看到一个新的文件夹📂出现在了当前文件夹里面。\n模板系统听着很高级,其实就是在你的 hugo.exe 的同级目录下面建一个文件夹,但是里面的所有文件夹都有特殊的含义,不能随便改动。\n名称 含义 asset 存放网站结构用到的图片,图标等资产 config 网站配置文件夹(初始时可能没有,有些主题需要) hugo.toml 网站配置文件之一 content 所有内容都在这里面 public 是编译后生成的完整网页,一开始没有 themes 存放你的网站主题 主题配置基本操作 # Hugo 的网站主题很多,具体参考 Hugo Themes 你可以选一款你喜欢的主题,然后下载之后就放在 themes 文件夹里面就行。这一部分文字描述非常抽象,见视频教程\n这里有一个重点是:基本上每一个主题都会配置一个样例网站,一般在文件夹 exampleSite 里面,如果实在不想跟着网站文档自己配置,直接用这个样例网站的配置也是可以的。\n每一个不同的主题基本配置完成之后都要进行个性化配置。这里我重点推荐重点推荐一下我使用的主题 Blowfish 相当好的一款主题,向作者致敬🫡\nBlowfish 主题 # Blowfish 官方文档上面已经有了非常非常详细的指导文档,不再过多赘述。任何一个多余的字都是对于如此详细的指导文档的不尊重🫡\n我这里简要说明一些可能出现的问题,下面的内容你可能需要仔细阅读官方文档之后才能明白其中含义🤔\n在 params.homepage.showRecent = false 的情况下,为什么还会显示\u0026quot;最近文章\u0026quot;? 如果遇到这个问题,说明你跟我一样懒惰🤪直接套用了 exampleSite 的代码。这是因为控制主页面的接口不止这一个,还有一个在 layouts\\partials\\home\\custom.html 文件中。\n如果你不介意那么直接忽略就行,如果你介意(跟我一样🤪),那就把文件中的下面的代码注释掉👇\n\u0026lt;section\u0026gt; {{ partial \u0026#34;recent-articles-demo.html\u0026#34; . }} \u0026lt;/section\u0026gt; 为什么我使用 svg 格式的 logo 无法完成(日间/夜间)模式的切换? 这是我发现的一个 bug,已经给主题作者推送我改进的代码了,详见代码改进或 [SVG 支持]((https://github.com/morethan987/hugo_main/blob/main/assets/js/appearance.js)\n为什么浏览器窗口上的小图标一直都是 blowfish,即使改换了 logo 也不行? 官方文档其实是有写的,但藏的太深了,见局部模板(Partials) · Blowfish\n说实话,官方文档写的真的好👍一套完整流程走下来竟然只有这么点不太容易理解的错误😋\n配套插件 # 我日常习惯使用 Obsidian 来写文章,由于 Obsidian 的格式与 Blowfish 的格式还是有较为明显的区别,二者的格式转换非常麻烦🤔\n在查询了一圈之后,发现根本就没有适合的插件!于是,我自己开发了一个插件:Hugo-Blowfish-Exporter\n虽然插件功能很简单,但是也已经覆盖了我自己绝大部分的使用功能,包括:\n- callout(支持所有官方的 callout 名称,需要新增图标)\n- 内联数学公式(Blowfish 支持块级公式)\n- mermaid(支持 mermaid 图表)\n- 图片插入(能够自动导出图片)\n- Wiki链接导出(并不支持展示性链接😢)\n非展示性链接简单处理为网页超链接形式\n展示性链接较为复杂:需要覆写 Blowfish 主题的源代码,通过 mdimporter 这个 shortcode 来进行文件注入;同时为了方便链接,每一个文件都需要设置 slug 属性来标记网站中存放 markdown 文件的文件夹\n对于主题源代码的覆写详见 mdimporter 以及用于去除注入文件开头元数据的 stripFrontMatter;覆写目录参考 GitHub 上的配置\n这个插件也是投入了我巨大的精力,虽然也只有几天时间🤔但是那几天还是挺累的😵‍💫\n如果这个插件帮助了你,还请转发分享;如果你对于这个插件的功能不满意,你也可以在 GitHub 上向我提交 Issue🫡或者熟悉代码的朋友可以直接把源码拿去修改,注释很完整,代码比较规范🤗\n如果你能把你亲自修改升级的代码也分享给我(在 GitHub 上提交 Pull Request)那更是万分感谢!☺️\n写在最后 # 一个博客网站的搭建只是万里长征的第一步,真正困难的还是博客内容的填充。\n正如我在一次写插件的经历中所写,很多个人博客网站从一开始的火热到最终的沉寂可能只需要短短一年的时间。\n在这个生活节奏越来越快的时代,无意义、无效率的事情大多都会向高效让步,曾经的初心与梦想往往会向生活妥协。我自己也早已经没有了当初的热情,行为方式上也更加的像一个真正的成年人。\n但是我仍然是有些不甘心,这个网站就是一种抗争吧,我会尽力维护下去,这也是我写插件方便我更新博客的目的所在。\n因此希望这篇教程所提供的内容能够帮助到正在准备搭建自己的博客网站的你,你我共勉🫡\n","date":"2025-01-07","externalUrl":null,"permalink":"/blog/hugo-blog/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 博客网站折腾日志,从手搓到 Hugo 的曲折经历。\n\u003c/div\u003e\n\n\n\n\u003ch2 class=\"relative group\"\u003e为什么 Hugo \n \u003cdiv id=\"%E4%B8%BA%E4%BB%80%E4%B9%88-hugo\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E4%B8%BA%E4%BB%80%E4%B9%88-hugo\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e最初也只是因为偶然间听说了 Hugo 可以做网页,并且听说编译静态页面非常高效,于是才去搜集的相关资料——据说 Hugo 是\u003cstrong\u003e世界上最快\u003c/strong\u003e的静态页面生成器,官方网站也是这么写的。\u003c/p\u003e","title":"Hugo博客搭建","type":"blog"},{"content":" 记一次写插件的经历,以及从中收获的一些感想。 缘由 # 事情起源于我这个博客网站。我在微信公众号上偶然间浏览到了关于用 Hugo 建立博客网站的信息,正好我也想翻新一下我那简陋的小网站。我原来的小网站非常非常的原始,整个写作流程都需要在 HTML JS 和 CSS 之间狼狈地切换。并且我非常崇拜的大佬 Lilian Weng 的 博客 也是用 Hugo 搭建的,这也更加坚定了我换底层的决心。\n于是我便迅速开始了对于 Hugo 的接触。\n结果真的出乎意料!我原来的网页花费了我将近一个月的时间,用 Hugo 竟然不到一上午就搞定了。更令我惊讶的是 Hugo 作为一个用 Go 编写的程序,其竟然不需要用户搭建 Go 环境!😮\n同时,我也发现了一个非常用心的 Hugo 主题 Blowfish 。这真的是我见过的文档配置最为详细的一个项目,没有之一(๑•̀ㅂ•́)و✧\n在 Hugo 和 Blowfish 的强力驱动下,我的小网站竟然变得像模像样的了。当然请原谅我并不擅长美化页面,所以我就直接套用了 Blowfish 官方网站的界面设置,因为我觉得任何的改动都会让这个精美的页面变得不协调。\n说实话,做完这一切我并没有什么特别的情绪波动,除了敬佩 Hugo 和 Blowfish 的作者们强悍的编码能力。\n直到我想将我在 Obsidian 中大量的笔记都上传到这个博客网站。\n原创的苦涩 # 我发现在 Obsidian 中并没有现成的可以直接适配 Blowfish 主题的格式转换插件。于是在前面那“愉快体验”的助推下,我决定自己写一个插件!(😄虽然过一会儿就笑不出来了😢)\n后面的经历实在是没什么好描述的,一遍又一遍地在网页之间来回切换,不停地搜索各种API文档,与AI机器人的沟通也从未停止。经过了无数次修改,我终于写出来了一个再简单不过的东西:识别文档中的固定模式然后进行内容替换。\n令人哭笑不得,相比于创建网站那短短的几个小时,我这将近四十个小时的工作几乎可以说微不足道。有那么一瞬间我真的想直接删掉我那几百行的代码。\n是的,就这么一个简单的插件就让我心力交瘁,疲惫不堪。我亲口品尝到了原创的苦涩。\n现在让我回头看 Hugo 和 Blowfish 我感受到了深深的震撼,如此复杂的功能实现不知道要消耗多少精力。如果说他们的工作都是付费的,那我还能心安理得地接受如此的工作量。然而他们都是开源的,有没有收入全凭用户喜好。\n我看着 Blowfish 作者那停滞在2024年3月的博客,我陷入了沉思。\n情怀与理想 # 我猜想 Blowfish 的作者肯定是因为别的什么事情暂时放缓了对于这个主题的维护,毕竟这个项目并没有带来多少实际的收入。\n突然之间我回想起了之前那些被我忽略的现象,一些 GitHub 达人主页上满满的绿色瓷砖慢慢变得稀疏,最后消失。在这平静如水的变化之下,或许是一个人生活的转变。或因生活工作忙碌,或因开发动力逐渐衰减,但最后原本的热血初心都淹没在了寂静之中。我无法阻止这样的现象发生,但我理解这背后的原因。\n开源是情怀,但是情怀不能当饭吃。人总是要活在当下的。\n我想起来 bilibili 上的一位博主 码农高天 ,一位 Python 的核心开发者,用幽默诙谐的段子吐槽开源人的悲惨待遇。他那年纪轻轻就已经花白的头发让人不经感慨“生活真是不容易啊”——写了大半辈子的代码,现在竟然还是待业在家,靠着发发视频赚点外快。\n写在最后 # 人生不如意,十之八九。我又一次看着那四十多小时的工作成功,笑着摇了摇头。\n写完这一句,我就睡觉去了,现在是2025年1月6日凌晨1:48,明天还有英语的期末考试,还没复习呢。\n我看着这篇博客,又一次笑着摇了摇头。\n这就是生活。\n","date":"2025-01-06","externalUrl":null,"permalink":"/blog/plugin-writing-experience/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 记一次写插件的经历,以及从中收获的一些感想。\n\u003c/div\u003e\n\n\n\n\u003ch3 class=\"relative group\"\u003e缘由 \n \u003cdiv id=\"%E7%BC%98%E7%94%B1\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E7%BC%98%E7%94%B1\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003e事情起源于我这个博客网站。我在微信公众号上偶然间浏览到了关于用 \u003ccode\u003eHugo\u003c/code\u003e 建立博客网站的信息,正好我也想翻新一下我那简陋的小网站。我原来的小网站非常非常的原始,整个写作流程都需要在 \u003ccode\u003eHTML\u003c/code\u003e \u003ccode\u003eJS\u003c/code\u003e 和 \u003ccode\u003eCSS\u003c/code\u003e 之间狼狈地切换。并且我非常崇拜的大佬 \u003ccode\u003eLilian Weng\u003c/code\u003e 的 \u003ca href=\"https://lilianweng.github.io/\" target=\"_blank\"\u003e博客\u003c/a\u003e 也是用 \u003ccode\u003eHugo\u003c/code\u003e 搭建的,这也更加坚定了我换底层的决心。\u003c/p\u003e","title":"一次写插件经历","type":"blog"},{"content":" 某些问题机器能够非常容易解决,而对于人类而言非常复杂;反之亦然。\n这种反常悖论似乎来源于知识的可概括性,某些知识具有良好的可压缩性,但另外一些则不具有。有一个更加准确的概念叫做[[计算可约性#定义|计算可约性]]\n一个很简单的例子:考试,从逻辑上来说全部都是基于最基本的知识推理而来的对吧?讲道理,考试应该能够完全通过逻辑推理来解决所有问题。但是事实上,考过试的都知道,从阅读题目到形成解题思路的过程貌似并不那么“有逻辑”,甚至可以说是没有什么技巧可言,纯粹就是一种做题的感觉。\n两类知识 # 在现有知识的基础上,能够通过有限的符号逻辑表达式得到的知识;其特点就是精确,高度概括;问题边界明确,能够清晰定义已知条件有什么、通过什么样的方法、得出什么样的结果;在明确的已知条件下能够精准预测问题结果的规律(在问题的考虑范围内没有“概率”这个概念的容身之处) 对于那些难以根据已知条件,通过精确的逻辑推理得到结果的问题,我们采用统计性的尝试,得出的有一定价值的规律;特点是基于大量尝试,难以定义问题的边界,甚至难以获取需要的已知条件,就是这种恶劣的条件下,强行匹配已知条件与结果的联系,进而得出的规律,其结果具有波动性、不确定性、局部正确性。 两类知识的占比 # 明显可概括的知识远远少于不可概括的知识;可概括的知识从某种意义上来说是不可概括知识的特殊情况;\n不可概括向可概括转化的趋势 # 不可概括知识的特点决定了其获取的难度(大量尝试消耗大量能量,这一步不可避免),运转不可概括性知识的能量消耗极高(知识难以概括就会占用大量的资源来维持运转),不可概括的知识难以跨过人类个体生命的边界(不可概括的知识往往会随着个体生命的消散而丢失,因为其难以概括从而难以以任何媒介形式流传,但机器智能似乎在这方面有本质的区别);人类个体的能量十分有限,难以完全依靠不可概括知识来应对外部世界,因此会有从不可概括知识向可概括知识转化的特点,尽管这个过程对于个体而言相当困难、极其耗费能量(本身就是一个不可概括的知识),但从整个人类的角度上来说节省了海量的能量;\n可接受功率决定了智能的上限 # 在这里似乎可以给出另外一个划分智能等级的标准:个体接受功率输入的级别,级别越高其,个体能掌握的不可概括知识越多;由于能量总是有限的(我们人类能消耗的能源级别可能是这个地球上面的资源,但是机器智能的消耗可能是恒星级别的),因此总会有一定程度上的知识概括,但是由于不可概括知识的固有性质,高等级智能的可概括知识对于低等级智能来说并不是可概括的;知识的可概括性具有相对性;\n从这里可以看出,可接受功率对于一个智能系统来说具有关键意义。从另一个角度来说,或许我们能够人为降低机器智能可消耗功率的上限来观察不可概括知识向可概括知识转化的过程\n","date":"2025-01-03","externalUrl":null,"permalink":"/blog/moravecs-paradox/","section":"Blogs","summary":"\u003cblockquote\u003e\n\u003cp\u003e某些问题机器能够非常容易解决,而对于人类而言非常复杂;反之亦然。\u003c/p\u003e","title":"关于莫拉维克悖论的思考","type":"blog"},{"content":" 前言 # 这篇文章主要是对于 CUMCM 2024 的比赛全过程进行一个梳理和总结。\n我们的队伍是在 2023 年的冬天组起来的,CUMCM 2024 也是我们第一次参与“数学建模”比赛。经过了大大小小的模拟赛,最终进入了全国的比赛。在提交最终论文之后获得省级一等奖并推荐国家级一等奖,最终获得国家级二等奖。\n整个过程有振奋惊喜,也有失落遗憾;我们在比赛中应该是做对了一部分事情,因此我们初次参赛就获得了国家级奖项;但不足肯定是有的,毕竟从“推荐国家级一等奖”变成“国家级二等奖”总是有理由的。\n总之,这次经历着实是令人难忘,更加值得梳理和总结经验,为明年的比赛作准备。\nCUMCM 全称为 Chinese Undergraduate Mathmatical Contest in Modeling;民间称呼为“数模国赛” 用词说明 # 用词 说明 计算系统 传统意义上的建模过程,即封装一个超大的函数 优化系统 用于优化计算系统中可调参数的系统,生成最优参数配置 计算流 计算系统中输入数据的处理过程 计算流结点 工作流中关键性的中间步骤 优化流 优化系统的主体逻辑 论文主体内容 包括摘要、重述、计算流和优化流的描述、结果展示与分析,也就是论文收尾之前的所有内容 论文收尾 包括灵敏度分析和模型推广 客观情况 # 任务分工 # 虽然比赛有很多个选题可供选择,但是我们小组选择专攻优化类问题,也就是 A 题。\n我:建模 + 代码 + 部分论文撰写 CL:建模 + 论文撰写 + 部分代码 HWJ:论文美化 工作流程 # 整个 A 题的代码部分大致可以分为两个系统:\n计算系统: 功能:接受输入数据与参数,返回需要的结果 性质:直接由题目决定,不同题目有不同的计算系统,需要临时构建 优化系统: 功能: 接受计算系统并将其作为可优化的目标函数,执行自身的优化逻辑,最后返回计算结果 性质:方法体系较为成熟,可以在比赛前就进行多种优化系统的准备 论文撰写部分分为:\n整体框架:由 LaTeX 模板决定 主体内容填充:对工作流和优化流的清晰描述 排版和美化:调整各个部分的详略,搭配说明性的图片(流程图,示意图) 收尾内容 预建模 # 目标:在精确理解题目的前提条件下,迅速进行初步的建模,基本确定建模方向、计算方法;\n预计用时:3h\n工作:队伍所有成员都进行全网资料查询,看看有没有基本命中题目的文献资料\n命中成功:最理想的情况,这个时候直接研读论文,收集思路即可; 命中失败:虽然没有现成的资料可供参考,但是在查阅文献的过程中或多或少也积累了一定的思路 建模初期 # 总目标:构建足够精确的、适配优化方法的计算系统\n建模:明确输入数据在各个计算流结点之间的操作 代码:用代码实现计算流,实现数据可视化 论文:填充第一个小问的内容,并初步排版 预计用时:30h\n工作:\n所有队员一起进行建模,优先明确建模思路,给出完整的数学推导过程 我和 CL:代码实现与论文内容填充同步进行 HWJ:绘制无法用代码生成的更加生动的示意图 建模中期 # 总目标:构建合适的优化系统\n建模:根据计算系统的特殊性,选择最为匹配的优化系统 代码:在实现优化系统的过程中进行微小改动,匹配计算系统 论文:完成论文的主体部分,开始进行局部细节微调 预计用时:20h\n工作:与前面类似只不过工作的中心从代码编写转到了论文撰写\n精简论文,此时的论文非常臃肿 微调论文的逻辑,使得上下文关联度更高 美化排版,减少文字,增加图片 建模后期 # 基本建模完成了,全员进行漏洞的检查: 错别字、不准确的表述、公式拼写错误等常规检查 优化代码中的注释,让其更加易读 重点检查个人信息 比赛论文中不能保留任何个人信息,包括代码中的文件路径,例如 C:\\Users\\Morethan ;保留个人信息是非常严重的错误! 实战效果 # 当我们将上述策略应用于实战过程中,也就是 CUMCM 2024 的正式比赛中,得到的效果如下:\n有效用时: 比赛总时长三天,共计 72 小时 队伍从早上七点到晚上八点,除开吃饭用时,一天的有效时间为 12 个小时 时间利用率为 \\(50\\%\\)(对比之下很低🤔) 最终完成工作: 论文主体 28 页 A4 纸 代码部分 35 页 A4 纸,除开每一个小题之间的复用代码,应该有 20 页左右 全文配图共计 25 张 以上数据是论文精简之后的,初稿论文将近 50 页 未完成工作: 最终结果的计算,由于计算量过大(代码效率并不高),最终提前两个小时写完所有代码,但并没有足够的时间运算出结果😭😭 模型的计算精度不够,精度为 1s 没有达到标准答案给出的精度 论文的收尾部分其实并没有完成 优点 # 选题 # 专注于 A 题,在模拟赛中积累了充分的经验,磨合出了一套高效的工作流程\n对于 A 题的方法论构建比较完善\n工作流程 # 工作流程相对清晰,效率较高\n以最终论文为导向,建模、论文、代码三线同时进行,保证了论文内容的充足\n分工 # 采用模糊分工,每个队员都有一个主要分工和次要分工,在各自的主要分工上能够独立工作,在其他的次要分工上面也能够完成一定的工作,大大提高了时间利用率\n队员很给力,因为同时兼顾两个分工任务意味着更多的学习成本\n不足 # 工作流程 # 计划很完美,但是在实践中还是有些必要的环节没有做好\n有效时间占比:晚上八点收工太早了!应该占用更多的时间来进行建模试错,保证模型的正确性和精确性\n分工 # 代码的编写、代码的调试、代码的可视化、结果的计算、结果的可视化所涉及的代码量太大,一人难以搞定;\n因为模糊分工所引起的任务重叠,增加了协同成本\n建模 # 题目理解准确度:这次我们对于题目的理解出现了较大的偏差,导致我们浪费了挺多时间在模型修正上面; 代码 # 代码的效率:之前由于没有时间的限制,导致对于“超长”代码的准备不足,没有代码并行的经验;\n结果精度:一开始建模过于粗糙,并且用了一个不好的特性:将时间步长设置为 1 ,并且将作为数组索引,导致后期难以将时间的步长减小,导致最后结果的精确度不够\n改进方案 # 精心挑选场地,增加有效时间✨是最重要的✨ 分工 # 略微改动人员分工,增加代码方面的人力投入\n在各自的主要分工和次要分工上增加学习投入,增加工作效率\n建模 # 更专注于题目的理解,不能太着急;建模错误再修正是得不偿失的 代码 # 构建一套行之有效的代码协同方案,增强代码编写速度\n着手构建代码编写规范:\n变量命名 文件开头的说明文档 代码编写流程规范 代码并行化:在代码中添加一些可并行的代码,提高运行速度\n所有代码方面的改进最终落实为一个文档!不能光喊口号! 论文 # 研究优秀论文\n关注其论文框架 关注其语言风格、文本可读性、详略、配图逻辑、图片可读性 改进自身\n优化论文主体逻辑框架,细化每一块的内容 语言风格、文本可读性、详略、配图逻辑、图片可读性等等细节的改进 成果以 LaTeX 模板中注释的形式固定! 总结 # 一份没有满分的答卷比一份满分的答卷更有收获!\n积累应用数学的知识,增强论文撰写能力,提高发现问题的能力,这是比比赛本身更有意义的东西🫡\nCUMCM,每一个数模人都能从中受益🤗\n","date":"2024-09-12","externalUrl":null,"permalink":"/blog/cumcm2024/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e前言 \n \u003cdiv id=\"%E5%89%8D%E8%A8%80\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%89%8D%E8%A8%80\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e这篇文章主要是对于 CUMCM 2024 的比赛全过程进行一个梳理和总结。\u003c/p\u003e","title":"CUMCM 2024总结","type":"blog"},{"content":" 创建虚拟环境 # 创建 # 一些常规的代码例子如下👇\n# 创建虚拟环境 python -m venv your_env_name # 指定python版本创建虚拟环境,如果你的python是默认安装路径 python -m venv your_env_name --python=python3.11 # python是自定义的安装路径 D:\\Python\\Python311\\python.exe -m venv your_env_name 下面有一些可选参数用于创建自定义的虚拟环境:\n参数名 含义 --system-site-packages 创建的虚拟环境将包含全局Python环境中的包,这可以避免重复安装一些常用的包 --clear 如果指定的虚拟环境目录已经存在,这会清除目录中的所有内容,然后重新创建虚拟环境 --version 用于确认虚拟环境中 Python 的版本 所有的参数说明都可以通过运行 python -m venv -h 来获得;不用到处查文档了~😆 激活 # 默认情况下,虚拟环境处于非激活状态。在“your_env_name/Scripts/”目录下将有一个名为“activate”的文件,用命令行运行即可。\n# 激活虚拟环境 your_env_name/Scripts/activate ","date":"2024-08-10","externalUrl":null,"permalink":"/blog/pytips/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e创建虚拟环境 \n \u003cdiv id=\"%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\n\n\u003ch3 class=\"relative group\"\u003e创建 \n \u003cdiv id=\"%E5%88%9B%E5%BB%BA\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%88%9B%E5%BB%BA\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003e一些常规的代码例子如下👇\u003c/p\u003e","title":"Python小技巧","type":"blog"},{"content":" 引用文献 # 我对于贝叶斯优化的理解也并不多,主要参考下面的内容👇\n【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\n一文详解贝叶斯优化(Bayesian Optimization)原理\n贝叶斯优化(BayesianOptimization)\n超参数优\u0026mdash;贝叶斯优化及其改进(PBT优化)\n贝叶斯优化 (Bayesian Optimization)\nMATLAB官方文档\n优点和算法原理 # 这里重点描述贝叶斯优化的优点以及其算法原理。如果你只关注“怎么用”,可以先了解贝叶斯优化的优点,然后跳转到#MATLAB用法\n优点 # 算法原理 # MATLAB用法 # 代码一览 # % 定义目标函数 function y = objectiveFcn(x) y = (1 - x.x1)^2 + 100 * (x.x2 - x.x1^2)^2; end % 定义优化变量 vars = [optimizableVariable(\u0026#39;x1\u0026#39;, [-2, 2]) optimizableVariable(\u0026#39;x2\u0026#39;, [-2, 2])]; % 执行贝叶斯优化 results = bayesopt(@objectiveFcn, vars, ... \u0026#39;AcquisitionFunctionName\u0026#39;, \u0026#39;expected-improvement-plus\u0026#39;, ... \u0026#39;MaxObjectiveEvaluations\u0026#39;, 30, ... \u0026#39;IsObjectiveDeterministic\u0026#39;, true, ... \u0026#39;Verbose\u0026#39;, 1); % 查看结果 bestPoint = results.XAtMinObjective; bestObjective = results.MinObjective; fprintf(\u0026#39;最优解 x1: %.4f, x2: %.4f\\n\u0026#39;, bestPoint.x1, bestPoint.x2); fprintf(\u0026#39;最优目标值: %.4f\\n\u0026#39;, bestObjective); 参数说明 # Params Meaning AcquisitionFunctionName 选择采集函数,这决定了算法在每次采样之后如何选取下一个采样点 MaxObjectiveEvaluations 最大迭代轮次 IsObjectiveDeterministic 如果目标函数是确定的,不包含噪声,则设置为 true ;否则设置为 false Verbose 决定了结果输出的详细程度,所有的输出可能包含多张图表 每个参数具体的可选值见官方文档: bayesopt;官方写的相当细致,还有很多样例。\n数学建模人必会技能之一就是读文档😝 ","date":"2024-08-05","externalUrl":null,"permalink":"/blog/bayesianopt/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e引用文献 \n \u003cdiv id=\"%E5%BC%95%E7%94%A8%E6%96%87%E7%8C%AE\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%BC%95%E7%94%A8%E6%96%87%E7%8C%AE\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e我对于贝叶斯优化的理解也并不多,主要参考下面的内容👇\u003c/p\u003e","title":"贝叶斯优化","type":"blog"},{"content":" 背景提要 # 你应该知道如何通过命令行与电脑交互,包括但不限于:Windows如何唤出命令行/终端,正在运行中的命令什么时候结束\u0026hellip;\u0026hellip;\n懂一点点翻墙的技术,OverLeaf是个国外的软件,与之硬相关的latex项目也是国外的,因此下载相关依赖的时候能够直接接受国外流量会省掉很多麻烦。如果你没有VPN的话就需要为每一个包管理工具指定一个国内源,但有时候国内源更新并不及时。\n懂一些Vim的基本操作,比如:如何开启插入模式,如何保存退出,不保存退出等\n部署全流程 # 安装Linux # 在 Windows App Store 里面直接搜索一个Linux发行版本并下载,笔者选择的是Kali。安装完成后可以在开始菜单中直接打开,打开后会跳出命令行窗口,初次打开需要填写需要用户名与密码进行注册。\n此时你的命令行应该有一个 Warning 提示。这是因为你还没有安装 WSL(Windows Subsystem for Linux);同时,在填写密码的时候你的输入不会显示在命令行,但已经被记录了 为什么需要一个Linux系统?因为OverLeaf的sharelatex模型需要Linux环境。也正因如此,据说在Linux系统上运行的OverLeaf更加流畅。\n安装WSL # 安装WSL2,直接在Windows命令行中运行:\nwsl --install 这个程序安装后也可以直接打开,打开后也有一个Warning提示。这时候需要在 C:\\Users\\ASUS 目录下面写入一个text文件,然后重命名为 .wslconfig;\n写入内容为:\n[experimental] autoMemoryReclaim=gradual # gradual | dropcache | disabled networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true 安装Docker # 进入Docker官网下载Docker,这是sharelatex模型运行的容器。Docker是一个开源的应用容器引擎,其中包括,镜像、容器、仓库,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品及其环境能够做到“一次封装,到处运行”。就像一个集装箱,由程序员开发并封装,用户使用时就直接把整个集装箱搬过去。\nDocker安装完成后就可以双击启动放后台了,我们后面通过命令行来操作Docker;\n拉取镜像 # 打开Kali,直接运行\ngit clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit 然后连续运行:\ncd ./overleaf-toolkit bin/init vim ./config/variables.env 此时你应该已经进入了一个文档界面,这就是Vim文本编辑器的界面。Vim有很多快捷键,其中按下\u0026quot;I\u0026quot;键即可开启插入模式,进行文本编辑,按下\u0026quot;esc\u0026quot;即可返回常规模式。在插入模式下输入:OVERLEAF_SITE_LANGUAGE=zh-CN\n输入完成后按下\u0026quot;esc\u0026quot;返回常规模式,直接键入 :wq 这是“保存并退出”,如果你不小心输错了可以 :e! 放弃所有更改重头再来。这一步是让你的OverLeaf界面显示为中文。\n当你成功保存并退出,回到熟悉的Kali命令行界面后运行 bin/up 此时正在拉取sharelatex镜像以及相关的网络工具。这时会有大量的数据传输,要保证网络通畅(梯子要稳!)\n配置用户 # 当上一个命令成功结束之后,运行 bin/start ;此时你打开Docker点进sharelatex,你应该可以看到代码“爆闪”,如果没有红色的消息,那应该是正常运行了。\n这时打开浏览器访问网址 http://localhost/launchpad\n按照提示注册Administrator Account之后,就会跳转到 http://localhost/project ;这时基本的OverLeaf网页已经可以显示了。\n但现在你丢一个文件进去编译多半是会报错的 ᕕ( ᐛ )ᕗ ;因为此时 sharelatex 里面的宏包严重不足,不是红包「手动狗头」 安装扩展包 # 打开Kali进入对应目录运行 bin/shell 然后逐条执行:\ncd /usr/local/texlive # 下载并运行升级脚本 wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh sh update-tlmgr-latest.sh -- --upgrade # 更换texlive的下载源 tlmgr option repository https://mirrors.sustech.edu.cn/CTAN/systems/texlive/tlnet/ # 升级tlmgr tlmgr update --self --all # 安装完整版texlive(时间比较长,不要让shell断开) tlmgr install scheme-full # 退出sharelatex的命令行界面 exit # 重启sharelatex容器 docker restart sharelatex 重启后再次进入shell,运行:\napt update # 安装字体 apt install --no-install-recommends ttf-mscorefonts-installe fonts-noto texlive-fonts-recommended tex-gyre fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted fonts-texgyre # 安装pygments apt install python3-pygments # 安装beamer之类的 apt install texlive-latex-recommended apt install texlive-latex-extra # 安装英文字体 echo \u0026#34;yes\u0026#34; | apt install -y --reinstall ttf-mscorefonts-installer # 安装中文字体 apt install -y latex-cjk-all texlive-lang-chinese texlive-lang-english cp fonts/* /usr/share/fonts/zh-cn/ cd /usr/share/fonts fc-cache -fv # 更新字体缓存 fc-list :lang=zh-cn fc-match Arial 最后在shell目录里面运行:\nvim /usr/local/texlive/2023/texmf.cnf 进入配置文件,在最底下加入一句 shell_escape = t\n我也不知道这有什么用,属于是前辈传承了🤔 注意,如果Texlive(扩展包的官名)版本不同的话,目录地址也会有所变化,因此需要根据实际的地址来填写,例如将2023改成2024。\n在Linux命令行中可以用 ls -l 来查看当前目录下所有的文件 部署成功 # 现在你就可以愉快地使用本地版OverLeaf了,没有编译超时的困扰~\n如果非常巧合,你也是个CQUer,这里附赠一份重庆大学的毕业论文模板,炒鸡的亲民哦:CQUThesis\n","date":"2024-07-12","externalUrl":null,"permalink":"/blog/localoverleaf/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e背景提要 \n \u003cdiv id=\"%E8%83%8C%E6%99%AF%E6%8F%90%E8%A6%81\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E8%83%8C%E6%99%AF%E6%8F%90%E8%A6%81\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e你应该知道如何通过命令行与电脑交互,包括但不限于:Windows如何唤出命令行/终端,正在运行中的命令什么时候结束\u0026hellip;\u0026hellip;\u003c/p\u003e","title":"本地 OverLeaf 部署","type":"blog"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/blog/","section":"Blogs","summary":"","title":"Blogs","type":"blog"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/hugo/","section":"标签","summary":"","title":"Hugo","type":"tags"},{"content":" 欢迎来到我的信息页面 👋 # 基本信息 # Morethan 是我随手起的一个英文名字,因为这个词语的发音和我的中文名字实在是太像了🙃\n我现在还是一个本科生 ᕕ( ᐛ )ᕗ 其他的没什么好写的🫠\n博客定位 # 个人知识库:用来存放一些固定的技术流程和有意义的经历\n微型论文栈:尽可能按照标准论文流程来编写一些博客,为毕业论文做准备\n知识输出平台:将我所学尽可能清晰地表达出来\n最后 # 如果你觉得有内容帮助了你,请点击文章开头的“喜欢” 🤗\n如果你想分享某些内容,请标注援引自此网站 🫡\n如果你找到了一些错误之处,请在 GitHub 上提交一个Issue 🥰\n","date":"2025-01-10","externalUrl":null,"permalink":"/authors/morethan/","section":"作者列表","summary":"\u003ch1 class=\"relative group\"\u003e欢迎来到我的信息页面 👋 \n \u003cdiv id=\"%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BF%A1%E6%81%AF%E9%A1%B5%E9%9D%A2-\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BF%A1%E6%81%AF%E9%A1%B5%E9%9D%A2-\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e\n\n\n\u003ch2 class=\"relative group\"\u003e基本信息 \n \u003cdiv id=\"%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eMorethan\u003c/code\u003e 是我随手起的一个英文名字,因为这个词语的发音和我的中文名字实在是太像了🙃\u003c/p\u003e","title":"Morethan","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/operation/","section":"Seires","summary":"","title":"Operation","type":"series"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/%E6%8A%A5%E5%91%8A/","section":"标签","summary":"","title":"报告","type":"tags"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/tags/","section":"标签","summary":"\u003chr\u003e","title":"标签","type":"tags"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/%E5%8D%9A%E5%AE%A2/","section":"标签","summary":"","title":"博客","type":"tags"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/","section":"欢迎来到Morethan的小站","summary":"\u003c!-- \u003cdiv class=\"flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900\"\u003e\n \u003cspan class=\"flex items-center ltr:pr-3 rtl:pl-3 text-primary-400\"\u003e\n \n \n \u003cspan class=\"relative inline-block align-text-bottom icon\"\u003e\n \u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003cpath fill=\"currentColor\" d=\"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"/\u003e\u003c/svg\u003e\n \n \u003c/span\u003e\n \n\n \u003c/span\u003e\n \u003cspan class=\"flex items-center justify-between grow dark:text-neutral-300\"\u003e\n \u003cspan class=\"prose dark:prose-invert\"\u003e 这是 \u003ccode id=\"layout\"\u003ebackground\u003c/code\u003e 的样式示例。\u003c/span\u003e\n \u003cbutton\n id=\"switch-layout-button\"\n class=\"px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700\"\n \u003e\n 切换 layout \u0026orarr;\n \u003c/button\u003e\n \u003c/span\u003e\n\u003c/div\u003e --\u003e","title":"欢迎来到Morethan的小站","type":"page"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/series/%E6%8A%80%E6%9C%AF%E6%B5%81%E7%A8%8B/","section":"系列","summary":"","title":"技术流程","type":"series"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/series/","section":"系列","summary":"\u003chr\u003e","title":"系列","type":"series"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/authors/","section":"作者列表","summary":"","title":"作者列表","type":"authors"},{"content":"","date":"7 January 2025","externalUrl":null,"permalink":"/en/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/series/casual-essay/","section":"Seires","summary":"","title":"Casual Essay","type":"series"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/tags/experience/","section":"Tags","summary":"","title":"Experience","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/tags/%E7%BB%8F%E5%8E%86/","section":"标签","summary":"","title":"经历","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/series/%E9%9A%8F%E7%AC%94/","section":"系列","summary":"","title":"随笔","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/ai/","section":"标签","summary":"","title":"AI","type":"tags"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/series/ai%E9%81%90%E6%83%B3/","section":"系列","summary":"","title":"AI遐想","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/imagination/","section":"Tags","summary":"","title":"Imagination","type":"tags"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/series/wild-imagination-of-ai/","section":"Seires","summary":"","title":"Wild Imagination of AI","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/%E9%81%90%E6%83%B3/","section":"标签","summary":"","title":"遐想","type":"tags"},{"content":"CUMCM 英文全称为 Chinese Undergraduate Mathmatical Contest in Modeling,中文全称为“全国大学生数学建模竞赛”\n由于这个比赛并不能直接参与国家级总决赛,而是要经过校赛省赛的选拔,然后你的论文才会被交给全国的专家进行评审。因此这个比赛民间细分为三个,即数模校赛,数模省赛和数模国赛。\n","date":"2024-09-12","externalUrl":null,"permalink":"/tags/cumcm/","section":"标签","summary":"\u003cp\u003e\u003ccode\u003eCUMCM\u003c/code\u003e 英文全称为 Chinese Undergraduate Mathmatical Contest in Modeling,中文全称为“全国大学生数学建模竞赛”\u003c/p\u003e","title":"CUMCM","type":"tags"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/tags/math/","section":"标签","summary":"","title":"Math","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/series/mathmodel/","section":"Seires","summary":"","title":"MathModel","type":"series"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/series/%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1/","section":"系列","summary":"","title":"数学建模","type":"series"},{"content":"","date":"2024-08-10","externalUrl":null,"permalink":"/tags/python/","section":"标签","summary":"","title":"Python","type":"tags"},{"content":"","date":"2024-08-05","externalUrl":null,"permalink":"/tags/matlab/","section":"标签","summary":"","title":"MATLAB","type":"tags"},{"content":"","date":"2024-07-12","externalUrl":null,"permalink":"/tags/latex/","section":"标签","summary":"","title":"LaTeX","type":"tags"},{"content":"","date":"2024-07-12","externalUrl":null,"permalink":"/tags/overleaf/","section":"标签","summary":"","title":"Overleaf","type":"tags"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}] \ No newline at end of file +[{"content":" 熟悉项目分析流程,是一个练手性质的分析报告 我在初步完成自己的小插件之后才发现:笔记转博客这个领域似乎没有一个一键式解决方案,为此我写了这篇文章来分析是否要创建一个新的项目来填补这个空白。\n项目没有优劣之分,只有合适与否,这篇文章中涉及的评价标准都是围绕是否符合博客网页要求进行的,因此可能有些项目并不适合做博客网页,但是这丝毫不影响项目本身的价值。\n领域定义 # 在所有分析开始之前,需要对于笔记转博客这个领域有一个清晰的界定。\n笔记:此处的笔记特指 Obsidian 中的笔记,含有 Obsidian Flavored Markdown,这对笔记向网页转换的过程提出了不小的要求。\n博客:博客,顾名思义是一种获得流量的手段,创作者花费时间创作笔记,然后经由转换软件,生成排版精美、功能丰富的博客网页\n评价细则如下:\n隐私方面\n是否本地运行 是否开源 使用舒适性\n与 Obsidian 语法的适配程度 服务部署复杂程度 帮助文档撰写详细程度 个性化调整复杂设置 网页功能完整性\n默认配套网页的核心功能是否齐全(搜索、日间/夜间模式等) 默认网页美观程度 是否支持 SEO 对 Obsidian 原生语法的转化效果是否生硬(例如:展示性链接内是否存在不能翻译的代码块、是否舍弃部分 Obsidian 语法特性等) 项目概述 # 在我的设想中,这个项目的功能就是构建一个 Obsidian 插件,实现从 Obsidian 笔记到 Hugo 博客网页的无缝导出,支持 Obsidian 的所有基本核心功能。\n成效:大大降低了创建博客网页的成本,只要能够使用 Obsidian 就能够拥有属于自己的博客网页。\n市场和用户可行性分析 # 市场需求分析 # 概述 # 基本需求:搭建个人网站并持续输出的需求,包括自我提升、自我表达、创造独特全面的个人能力展示平台(对接企业招聘)等等\n目标用户群:重度 Obsidian 用户且有分享笔记的需求;想要搭建个人博客但是因为技术难度而放弃的知识创作者\n相关数据 # Flowershow:截至 2024 年 10 月插件下载量为 3355;截至 2025 年 1 月插件下载量为 4594,同时最高下载量的插件有 3211992 的下载量; Quartz 截至 2025 年 1 月收获 GitHub start 数量为 7.7k 已有方案 # Quartz # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥\n介绍 # Quartz 是一个将 Obsidian 笔记转化为网页的工具集。Quartz 的最新版本是 v4 版本,相较于 v3 版本, v4 版本从底层完全重构了代码,去除了对于 Hugo 的依赖,优化了用户自定义的体验。目前 v4 版本主要使用 TypeScript 构建,原本 hugo 的 template 也改用 JSX 替换。\n因此,现在的 Quartz 几乎可以说和 Hugo 没什么关系了,但是目前国内的很多信息还是宣传 Quartz 的底层是 Hugo\n官方样例网站:Welcome to Quartz 4\n评述 # 优点\n功能非常非常完整 所有相关套件中唯一成功解决了展示性 wiki 链接的一个 配套文档很详细 缺点\n几乎没有缺点,唯一一个值得提点的地方就是没有中文的文档 总结:非常优秀的项目,所有在 Obsidian 内显示的样式就是网页中显示的样式,确实也收获了所有现成方案中最多的 GitHub start 数量\nFlowershow # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥🩶\n介绍 # Flowershow 是一个基于 Obsidian 的整体发布服务,它可以将你的 Obsidian 笔记按照目录结构,转换为一个在线的数字花园网站。而 Vercel 是一个针对前端的云服务,它实现了通过 Github 免服务器快速部署前端服务,每次提交内容都会触发一次自动部署。Flowershow 的官方部署文件中需要使用 Vercel,国内使用可以考虑 Netlify 替换\n参考教程:Flowershow:免费的 Obsidian 笔记发布服务,实现你的数字花园网站\n主观上来讲,这个项目的主创团队是一支很有激情和使命感的队伍,关于 Flowershow 的简介里面包含了很多主创团队的核心理念。\n客观上来讲,Flowershow 的项目定位非常准确,就是一个基于 Obsidian 的博客网页生成平台,因此最终效果从前端和后端两个角度来说都是非常好的。\n评述 # 优点\n定位清晰,工作流程简洁明了 功能支持较为全面 背后有专业的团队进行运维 允许高度的自定义,适合喜欢个性化的创作者 缺点(一下信息均来自 2025 年 1 月)\n部分 Obsidian 的功能并没有处理,例如展示性的 wiki 链接并没有处理,至少介绍文档中跳过了这部分内容 仔细翻找了网站并没有发现反向链接的说明,但是首页信息显示能够支持反向链接 总结:总体上项目做的还是挺好,但是项目还在进行中,部分细节并不到位,对于 Obsidian 语法支持没有那么高要求的创作者就可以采用这个方案了\n官方发布 # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\n介绍 # 下面是几个样例网站:\nObsidian中文教程一个中文教程网站,使用了 Obsidian 官方的发布服务,里面里面可以体现一些功能,例如对于展示性链接的处理 Digital 3D Garden 有深度的前端界面自定义 mister chad 非常简洁工整的小站,内容很充实 Discrete Structures for Computer Science 神似官方的朴素风格 评述 # 优势\n官方发布的网页对于 Obsidian 内部表达的适配效果是一流的,Obsidian 内部所有的功能都能够成功在网页中展示;但是不清楚插件功能如何在网页中展示 有持续的维护服务,能够第一时间适配 Obsidian 的更新 支持高度的个性化设置,如果具有充足的代码经验,可以开发出相当精美的网页;同时还有大量的其他开发者开发的主题 隐私设置,网站能够设置密码,控制访问人员,可能用于企业内部文档管理 有 SEO 加持和移动平台适配,流量可能会更大一些 劣势\n每个月需要支付 8 美元,由于个人网站的流量相当小需要长期持有才会有明显的收益,因此这笔支出不是小数目,这是官方发布服务的致命缺陷 停止付费之后网页将不能被访问 国内的服务支持不佳,流量受限 总结:官方发布适合资金充裕,并且对于网站的自定义开发没有那么高需求的用户。\nDigital Garden # 推荐指数:❤️‍🔥❤️‍🔥❤️‍🔥🩶🩶\n介绍 # Digital Garden 是一款 Obsidian 插件,可以将笔记导出为网页并托管在 GitHub 上,然后再使用 Vercel 或者 Netlify 进行网页的发布。具体操作教程见 Digital Garden教程\n这里是几个样例网站:\nDigital Garden 官方样例 Aaron Youn 民间自制 John\u0026rsquo;s Digital Galaxy 非常丰富的内容,可以详细展示所有 Digital Garden 涉及的特性,特别是展示性链接循环嵌套 评述 # 优点\n功能支持较为全面 支持 Obsidian 的主题迁移 缺点\n对于中文路径不友好 网页界面自定义需要直接处理网页源码,即 HTML JavsScript CSS,并且默认配套的界面不太好看 总结:工作流程非常的简单,功能支持相当的全面,作为插件嵌入 Obsidian 更加轻便。虽然界面美化需要花些功夫,但如果对于界面美观与否并不在意,可以直接上手。\nPerlite # 推荐指数:❤️‍🔥❤️‍🔥🩶🩶🩶\n介绍 # Perlite 是一款网页版 Obsidian 文件阅读器,是 Obsidian 官方发布服务的开源平替。Obsidian Publish的开源替代品Perlite 这是微信公众号上的一个教程文本。\n这款开源平替最大的特点就是:其网页 UI 几乎和 Obsidian 的界面完全相同,提供近乎原生的浏览服务。\n评述 # 优点\n很好地支持几乎所有的 Obsidian 的功能 原生经典界面,给用户提供熟悉感 缺点\n不算是一个博客页面,官方对于项目的定位也确实不是博客网页而是一个“文件阅读器” 需要使用 Docker,启动缓慢,不如插件的那样的轻巧简洁的体验感 总结:Perlite 的定位决定了其并不适合直接用作展示性的博客页面,其界面实在是有点单调,对于访客的视觉吸引力其实并不强。更适合于作为一款网页版的 Obsidian,在上面进行文件的编辑可以更加专注,效果也更好\njekyll+Netlify+GitHub Pages # 推荐指数:❤️‍🔥❤️‍🔥🩶🩶🩶\n介绍 # 方法流程来源于 obsidian 目前最完美的免费发布方案 渐进式教程,教程内容很详细,既有基本的对比评价,也有详细的指导教程\n这是作者构建的例子网站:oldwinterの数字花园\n评述 # 优点\n配置简单 允许高度自定义 缺点\n部分 Obsidian 特色语法不支持,比如 callout 语法 不支持暗色模式 不支持搜索 总结:整体上是一个非常好的 Obsidian 转换为博客网页的实践,但是因为部分核心功能缺失因此并不适合想要完整的网页体验的创作者\nTiddlyWiki # 推荐指数:❤️‍🔥🩶🩶🩶🩶\n介绍 # TiddlyWiki 是一个历史悠久的笔记框架,至今依然有很强的生命力,许多开发者活跃在这个领域中。国内也有相关站点可以供访问:太微舞,以及配套教程:[太微中文教程](https://tw-cn.netlify.app /);国内的开发者在近年推出的衍生版本 TidGi(太记);\n利用Tiddlywiki发布Obsidian库这是一个将 Obsidian 发布到 TiddlyWiki 的流程性教程\n此外还有一些散落在互联网上的介绍和样例:\n了不起的“活笔记”系统:TiddlyWiki(太微笔记) - 少数派非常好的一片笔记文章,真正意义上的一文秒懂 TiddlyWiki;文章作者自己的笔记网站:MRIWiki.cn — 磁共振百科知识太微笔记 [太微中文教程](https://tw-cn.netlify.app /)教程本身就是利用 TiddlyWiki 编写的,可以查看 TiddlyWiki 的使用效果 评述 # 优势\n极致的简洁性与轻量化,可以说没有任何其他的个人网页比它更简单! 经过历史的筛选,拥有广泛的用户群体 成熟的国内服务,不需要科学上网就能够访问 劣势\n由于极致的简洁,导致网页看上去可能有点原始 不算完全的个人博客,其完全不迎合主流搜索引擎,直接靠搜索根本无法访问,难以获得流量(也是我撰写这篇文章之前从未听闻的原因😢) 总结:TiddlyWiki 的确是一个非常简洁和轻量化的笔记框架,这也吸引了很多的用户;但也正是因为其定位并非博客网页,所以导致用户的内容封闭在 TiddlyWiki 社区内部,甚至是封闭在创作者自己手中,无法转化为流量,并不适合有流量需求的创作者,而更加适合作为一个简单纯粹的笔记存储库\n结论 # 在经过完整的分析之前,我并不了解笔记转博客这个领域内部的实际情况,因此萌生了想做一个简化插件项目的想法💡\n但是经过系统性的调查研究,我必须承认 Quartz 确实是这个领域内出类拔萃的项目,无论从 Obsidian 语法适配性、配置流程便捷程度、前端配套界面美观程度、前端界面自定义便捷程度、后端撰写博客便捷程度等等各种方面,几乎都没有上升空间了。\n因此也就不需要我再去启动一个项目来做重复的事情了。在这里向所有笔记转博客领域内的相关项目的开发团队致敬🫡不管是否在文章中提及。\n项目没有优劣之分,只有合适与否,这篇文章中涉及的评价标准都是围绕是否符合博客网页要求进行的,因此可能有些项目并不适合做博客网页,但是这丝毫不影响项目本身的价值。\n向开源先锋致敬🫡🫡🫡\n","date":"2025-01-10","externalUrl":null,"permalink":"/blog/note-to-blog-report/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 熟悉项目分析流程,是一个练手性质的分析报告\n\u003c/div\u003e\n\n\u003cp\u003e我在初步完成自己的\u003ca href=\"https://morethan987.github.io/blog/plugin-writing-experience/\"\u003e小插件\u003c/a\u003e之后才发现:\u003cstrong\u003e笔记转博客\u003c/strong\u003e这个领域似乎没有一个一键式解决方案,为此我写了这篇文章来分析是否要创建一个新的项目来填补这个空白。\u003c/p\u003e","title":"笔记转博客项目分析报告","type":"blog"},{"content":" 博客网站折腾日志,从手搓到 Hugo 的曲折经历。 为什么 Hugo # 最初也只是因为偶然间听说了 Hugo 可以做网页,并且听说编译静态页面非常高效,于是才去搜集的相关资料——据说 Hugo 是世界上最快的静态页面生成器,官方网站也是这么写的。\n当然,口说无凭,下面就是我初次本地编译运行 Hugo 得到的输出,即在完全没有 public 文件夹的情况下的输出:\nZH-CN EN Pages 53 51 Paginator pages 0 0 Non-page files 13 13 Static files 7 7 Processed images 3 0 Aliases 18 17 Cleaned 0 0 Built in 872 ms\n中英文总共 104 个网页页面花费时间 0.872 秒,并且包含构建本地服务的时间,这个速度确实没什么好挑剔的了。并且本地的服务能够实时监听源代码的改动并进行增量重构,这个增量重构的时间取决于改动的多少,一般在 0.03 秒左右。\n我并没有用别的网页生成工具搭建过博客,因此无法给出其他生成器的实际生成速度 参考引用 # 下面是我在搭建博客的过程中所用到的所有资源链接:\n莱特雷-letere 这是一位博主的网页,也是用 Hugo 搭建的,里面同时也有很多其他的网页工具的教程;这是他在 B 站上发布的系列视频教程 Blowfish 这是我使用的一款 Hugo 主题,文档写的相当的好,真的没见过如此耐心的作者。 Hugo官方网页 Hugo Themes 部署全流程 # 搭建 Hugo 环境 # 这一部分在那位博主的网页和视频教程中都有非常详细的讲解,不喜欢看文字的可以去看视频😝\n说实话,Hugo 的环境搭建真的是我见过的最简单的,没有之一。你只需要到 Hugo官方网页去把 Hugo 下载下来,然后存放到合适的文件夹里面,然后解压就完成了,解压之后的文件夹内也只有一个 hugo.exe 文件,简直不要太简单。\nHugo 真的是太方便了,我曾经尝试过 Hexo 但是 Node.js 的配置就把我拒之门外了,到现在我也不知道为什么会编译报错😢 稍微需要那么一点点🤏难度的工作其实就是把 hugo.exe 所在的目录添加到环境变量里面去。\n生成模版系统 # 在 hugo.exe 的目录中打开终端,然后输入命令 hugo new site your-site-name,然后就可以看到一个新的文件夹📂出现在了当前文件夹里面。\n模板系统听着很高级,其实就是在你的 hugo.exe 的同级目录下面建一个文件夹,但是里面的所有文件夹都有特殊的含义,不能随便改动。\n名称 含义 asset 存放网站结构用到的图片,图标等资产 config 网站配置文件夹(初始时可能没有,有些主题需要) hugo.toml 网站配置文件之一 content 所有内容都在这里面 public 是编译后生成的完整网页,一开始没有 themes 存放你的网站主题 主题配置基本操作 # Hugo 的网站主题很多,具体参考 Hugo Themes 你可以选一款你喜欢的主题,然后下载之后就放在 themes 文件夹里面就行。这一部分文字描述非常抽象,见视频教程\n这里有一个重点是:基本上每一个主题都会配置一个样例网站,一般在文件夹 exampleSite 里面,如果实在不想跟着网站文档自己配置,直接用这个样例网站的配置也是可以的。\n每一个不同的主题基本配置完成之后都要进行个性化配置。这里我重点推荐重点推荐一下我使用的主题 Blowfish 相当好的一款主题,向作者致敬🫡\nBlowfish 主题 # Blowfish 官方文档上面已经有了非常非常详细的指导文档,不再过多赘述。任何一个多余的字都是对于如此详细的指导文档的不尊重🫡\n我这里简要说明一些可能出现的问题,下面的内容你可能需要仔细阅读官方文档之后才能明白其中含义🤔\n在 params.homepage.showRecent = false 的情况下,为什么还会显示\u0026quot;最近文章\u0026quot;? 如果遇到这个问题,说明你跟我一样懒惰🤪直接套用了 exampleSite 的代码。这是因为控制主页面的接口不止这一个,还有一个在 layouts\\partials\\home\\custom.html 文件中。\n如果你不介意那么直接忽略就行,如果你介意(跟我一样🤪),那就把文件中的下面的代码注释掉👇\n\u0026lt;section\u0026gt; {{ partial \u0026#34;recent-articles-demo.html\u0026#34; . }} \u0026lt;/section\u0026gt; 为什么我使用 svg 格式的 logo 无法完成(日间/夜间)模式的切换? 这是我发现的一个 bug,已经给主题作者推送我改进的代码了,详见代码改进或 [SVG 支持]((https://github.com/morethan987/hugo_main/blob/main/assets/js/appearance.js)\n为什么浏览器窗口上的小图标一直都是 blowfish,即使改换了 logo 也不行? 官方文档其实是有写的,但藏的太深了,见局部模板(Partials) · Blowfish\n说实话,官方文档写的真的好👍一套完整流程走下来竟然只有这么点不太容易理解的错误😋\n配套插件 # 我日常习惯使用 Obsidian 来写文章,由于 Obsidian 的格式与 Blowfish 的格式还是有较为明显的区别,二者的格式转换非常麻烦🤔\n在查询了一圈之后,发现根本就没有适合的插件!于是,我自己开发了一个插件:Hugo-Blowfish-Exporter\n虽然插件功能很简单,但是也已经覆盖了我自己绝大部分的使用功能,包括:\n- callout(支持所有官方的 callout 名称,需要新增图标)\n- 内联数学公式(Blowfish 支持块级公式)\n- mermaid(支持 mermaid 图表)\n- 图片插入(能够自动导出图片)\n- Wiki链接导出(并不支持展示性链接😢)\n非展示性链接简单处理为网页超链接形式\n展示性链接较为复杂:需要覆写 Blowfish 主题的源代码,通过 mdimporter 这个 shortcode 来进行文件注入;同时为了方便链接,每一个文件都需要设置 slug 属性来标记网站中存放 markdown 文件的文件夹\n对于主题源代码的覆写详见 mdimporter 以及用于去除注入文件开头元数据的 stripFrontMatter;覆写目录参考 GitHub 上的配置\n这个插件也是投入了我巨大的精力,虽然也只有几天时间🤔但是那几天还是挺累的😵‍💫\n如果这个插件帮助了你,还请转发分享;如果你对于这个插件的功能不满意,你也可以在 GitHub 上向我提交 Issue🫡或者熟悉代码的朋友可以直接把源码拿去修改,注释很完整,代码比较规范🤗\n如果你能把你亲自修改升级的代码也分享给我(在 GitHub 上提交 Pull Request)那更是万分感谢!☺️\n写在最后 # 一个博客网站的搭建只是万里长征的第一步,真正困难的还是博客内容的填充。\n正如我在一次写插件的经历中所写,很多个人博客网站从一开始的火热到最终的沉寂可能只需要短短一年的时间。\n在这个生活节奏越来越快的时代,无意义、无效率的事情大多都会向高效让步,曾经的初心与梦想往往会向生活妥协。我自己也早已经没有了当初的热情,行为方式上也更加的像一个真正的成年人。\n但是我仍然是有些不甘心,这个网站就是一种抗争吧,我会尽力维护下去,这也是我写插件方便我更新博客的目的所在。\n因此希望这篇教程所提供的内容能够帮助到正在准备搭建自己的博客网站的你,你我共勉🫡\n","date":"2025-01-07","externalUrl":null,"permalink":"/blog/hugo-blog/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 博客网站折腾日志,从手搓到 Hugo 的曲折经历。\n\u003c/div\u003e\n\n\n\n\u003ch2 class=\"relative group\"\u003e为什么 Hugo \n \u003cdiv id=\"%E4%B8%BA%E4%BB%80%E4%B9%88-hugo\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E4%B8%BA%E4%BB%80%E4%B9%88-hugo\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e最初也只是因为偶然间听说了 Hugo 可以做网页,并且听说编译静态页面非常高效,于是才去搜集的相关资料——据说 Hugo 是\u003cstrong\u003e世界上最快\u003c/strong\u003e的静态页面生成器,官方网站也是这么写的。\u003c/p\u003e","title":"Hugo博客搭建","type":"blog"},{"content":" 记一次写插件的经历,以及从中收获的一些感想。 缘由 # 事情起源于我这个博客网站。我在微信公众号上偶然间浏览到了关于用 Hugo 建立博客网站的信息,正好我也想翻新一下我那简陋的小网站。我原来的小网站非常非常的原始,整个写作流程都需要在 HTML JS 和 CSS 之间狼狈地切换。并且我非常崇拜的大佬 Lilian Weng 的 博客 也是用 Hugo 搭建的,这也更加坚定了我换底层的决心。\n于是我便迅速开始了对于 Hugo 的接触。\n结果真的出乎意料!我原来的网页花费了我将近一个月的时间,用 Hugo 竟然不到一上午就搞定了。更令我惊讶的是 Hugo 作为一个用 Go 编写的程序,其竟然不需要用户搭建 Go 环境!😮\n同时,我也发现了一个非常用心的 Hugo 主题 Blowfish 。这真的是我见过的文档配置最为详细的一个项目,没有之一(๑•̀ㅂ•́)و✧\n在 Hugo 和 Blowfish 的强力驱动下,我的小网站竟然变得像模像样的了。当然请原谅我并不擅长美化页面,所以我就直接套用了 Blowfish 官方网站的界面设置,因为我觉得任何的改动都会让这个精美的页面变得不协调。\n说实话,做完这一切我并没有什么特别的情绪波动,除了敬佩 Hugo 和 Blowfish 的作者们强悍的编码能力。\n直到我想将我在 Obsidian 中大量的笔记都上传到这个博客网站。\n原创的苦涩 # 我发现在 Obsidian 中并没有现成的可以直接适配 Blowfish 主题的格式转换插件。于是在前面那“愉快体验”的助推下,我决定自己写一个插件!(😄虽然过一会儿就笑不出来了😢)\n后面的经历实在是没什么好描述的,一遍又一遍地在网页之间来回切换,不停地搜索各种API文档,与AI机器人的沟通也从未停止。经过了无数次修改,我终于写出来了一个再简单不过的东西:识别文档中的固定模式然后进行内容替换。\n令人哭笑不得,相比于创建网站那短短的几个小时,我这将近四十个小时的工作几乎可以说微不足道。有那么一瞬间我真的想直接删掉我那几百行的代码。\n是的,就这么一个简单的插件就让我心力交瘁,疲惫不堪。我亲口品尝到了原创的苦涩。\n现在让我回头看 Hugo 和 Blowfish 我感受到了深深的震撼,如此复杂的功能实现不知道要消耗多少精力。如果说他们的工作都是付费的,那我还能心安理得地接受如此的工作量。然而他们都是开源的,有没有收入全凭用户喜好。\n我看着 Blowfish 作者那停滞在2024年3月的博客,我陷入了沉思。\n情怀与理想 # 我猜想 Blowfish 的作者肯定是因为别的什么事情暂时放缓了对于这个主题的维护,毕竟这个项目并没有带来多少实际的收入。\n突然之间我回想起了之前那些被我忽略的现象,一些 GitHub 达人主页上满满的绿色瓷砖慢慢变得稀疏,最后消失。在这平静如水的变化之下,或许是一个人生活的转变。或因生活工作忙碌,或因开发动力逐渐衰减,但最后原本的热血初心都淹没在了寂静之中。我无法阻止这样的现象发生,但我理解这背后的原因。\n开源是情怀,但是情怀不能当饭吃。人总是要活在当下的。\n我想起来 bilibili 上的一位博主 码农高天 ,一位 Python 的核心开发者,用幽默诙谐的段子吐槽开源人的悲惨待遇。他那年纪轻轻就已经花白的头发让人不经感慨“生活真是不容易啊”——写了大半辈子的代码,现在竟然还是待业在家,靠着发发视频赚点外快。\n写在最后 # 人生不如意,十之八九。我又一次看着那四十多小时的工作成功,笑着摇了摇头。\n写完这一句,我就睡觉去了,现在是2025年1月6日凌晨1:48,明天还有英语的期末考试,还没复习呢。\n我看着这篇博客,又一次笑着摇了摇头。\n这就是生活。\n","date":"2025-01-06","externalUrl":null,"permalink":"/blog/plugin-writing-experience/","section":"Blogs","summary":"\u003cdiv class=\"lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl\"\u003e\n 记一次写插件的经历,以及从中收获的一些感想。\n\u003c/div\u003e\n\n\n\n\u003ch3 class=\"relative group\"\u003e缘由 \n \u003cdiv id=\"%E7%BC%98%E7%94%B1\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E7%BC%98%E7%94%B1\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003e事情起源于我这个博客网站。我在微信公众号上偶然间浏览到了关于用 \u003ccode\u003eHugo\u003c/code\u003e 建立博客网站的信息,正好我也想翻新一下我那简陋的小网站。我原来的小网站非常非常的原始,整个写作流程都需要在 \u003ccode\u003eHTML\u003c/code\u003e \u003ccode\u003eJS\u003c/code\u003e 和 \u003ccode\u003eCSS\u003c/code\u003e 之间狼狈地切换。并且我非常崇拜的大佬 \u003ccode\u003eLilian Weng\u003c/code\u003e 的 \u003ca href=\"https://lilianweng.github.io/\" target=\"_blank\"\u003e博客\u003c/a\u003e 也是用 \u003ccode\u003eHugo\u003c/code\u003e 搭建的,这也更加坚定了我换底层的决心。\u003c/p\u003e","title":"一次写插件经历","type":"blog"},{"content":" 某些问题机器能够非常容易解决,而对于人类而言非常复杂;反之亦然。\n这种反常悖论似乎来源于知识的可概括性,某些知识具有良好的可压缩性,但另外一些则不具有。有一个更加准确的概念叫做[[计算可约性#定义|计算可约性]]\n一个很简单的例子:考试,从逻辑上来说全部都是基于最基本的知识推理而来的对吧?讲道理,考试应该能够完全通过逻辑推理来解决所有问题。但是事实上,考过试的都知道,从阅读题目到形成解题思路的过程貌似并不那么“有逻辑”,甚至可以说是没有什么技巧可言,纯粹就是一种做题的感觉。\n两类知识 # 在现有知识的基础上,能够通过有限的符号逻辑表达式得到的知识;其特点就是精确,高度概括;问题边界明确,能够清晰定义已知条件有什么、通过什么样的方法、得出什么样的结果;在明确的已知条件下能够精准预测问题结果的规律(在问题的考虑范围内没有“概率”这个概念的容身之处) 对于那些难以根据已知条件,通过精确的逻辑推理得到结果的问题,我们采用统计性的尝试,得出的有一定价值的规律;特点是基于大量尝试,难以定义问题的边界,甚至难以获取需要的已知条件,就是这种恶劣的条件下,强行匹配已知条件与结果的联系,进而得出的规律,其结果具有波动性、不确定性、局部正确性。 两类知识的占比 # 明显可概括的知识远远少于不可概括的知识;可概括的知识从某种意义上来说是不可概括知识的特殊情况;\n不可概括向可概括转化的趋势 # 不可概括知识的特点决定了其获取的难度(大量尝试消耗大量能量,这一步不可避免),运转不可概括性知识的能量消耗极高(知识难以概括就会占用大量的资源来维持运转),不可概括的知识难以跨过人类个体生命的边界(不可概括的知识往往会随着个体生命的消散而丢失,因为其难以概括从而难以以任何媒介形式流传,但机器智能似乎在这方面有本质的区别);人类个体的能量十分有限,难以完全依靠不可概括知识来应对外部世界,因此会有从不可概括知识向可概括知识转化的特点,尽管这个过程对于个体而言相当困难、极其耗费能量(本身就是一个不可概括的知识),但从整个人类的角度上来说节省了海量的能量;\n可接受功率决定了智能的上限 # 在这里似乎可以给出另外一个划分智能等级的标准:个体接受功率输入的级别,级别越高其,个体能掌握的不可概括知识越多;由于能量总是有限的(我们人类能消耗的能源级别可能是这个地球上面的资源,但是机器智能的消耗可能是恒星级别的),因此总会有一定程度上的知识概括,但是由于不可概括知识的固有性质,高等级智能的可概括知识对于低等级智能来说并不是可概括的;知识的可概括性具有相对性;\n从这里可以看出,可接受功率对于一个智能系统来说具有关键意义。从另一个角度来说,或许我们能够人为降低机器智能可消耗功率的上限来观察不可概括知识向可概括知识转化的过程\n","date":"2025-01-03","externalUrl":null,"permalink":"/blog/moravecs-paradox/","section":"Blogs","summary":"\u003cblockquote\u003e\n\u003cp\u003e某些问题机器能够非常容易解决,而对于人类而言非常复杂;反之亦然。\u003c/p\u003e","title":"关于莫拉维克悖论的思考","type":"blog"},{"content":" 前言 # 这篇文章主要是对于 CUMCM 2024 的比赛全过程进行一个梳理和总结。\n我们的队伍是在 2023 年的冬天组起来的,CUMCM 2024 也是我们第一次参与“数学建模”比赛。经过了大大小小的模拟赛,最终进入了全国的比赛。在提交最终论文之后获得省级一等奖并推荐国家级一等奖,最终获得国家级二等奖。\n整个过程有振奋惊喜,也有失落遗憾;我们在比赛中应该是做对了一部分事情,因此我们初次参赛就获得了国家级奖项;但不足肯定是有的,毕竟从“推荐国家级一等奖”变成“国家级二等奖”总是有理由的。\n总之,这次经历着实是令人难忘,更加值得梳理和总结经验,为明年的比赛作准备。\nCUMCM 全称为 Chinese Undergraduate Mathmatical Contest in Modeling;民间称呼为“数模国赛” 用词说明 # 用词 说明 计算系统 传统意义上的建模过程,即封装一个超大的函数 优化系统 用于优化计算系统中可调参数的系统,生成最优参数配置 计算流 计算系统中输入数据的处理过程 计算流结点 工作流中关键性的中间步骤 优化流 优化系统的主体逻辑 论文主体内容 包括摘要、重述、计算流和优化流的描述、结果展示与分析,也就是论文收尾之前的所有内容 论文收尾 包括灵敏度分析和模型推广 客观情况 # 任务分工 # 虽然比赛有很多个选题可供选择,但是我们小组选择专攻优化类问题,也就是 A 题。\n我:建模 + 代码 + 部分论文撰写 CL:建模 + 论文撰写 + 部分代码 HWJ:论文美化 工作流程 # 整个 A 题的代码部分大致可以分为两个系统:\n计算系统: 功能:接受输入数据与参数,返回需要的结果 性质:直接由题目决定,不同题目有不同的计算系统,需要临时构建 优化系统: 功能: 接受计算系统并将其作为可优化的目标函数,执行自身的优化逻辑,最后返回计算结果 性质:方法体系较为成熟,可以在比赛前就进行多种优化系统的准备 论文撰写部分分为:\n整体框架:由 LaTeX 模板决定 主体内容填充:对工作流和优化流的清晰描述 排版和美化:调整各个部分的详略,搭配说明性的图片(流程图,示意图) 收尾内容 预建模 # 目标:在精确理解题目的前提条件下,迅速进行初步的建模,基本确定建模方向、计算方法;\n预计用时:3h\n工作:队伍所有成员都进行全网资料查询,看看有没有基本命中题目的文献资料\n命中成功:最理想的情况,这个时候直接研读论文,收集思路即可; 命中失败:虽然没有现成的资料可供参考,但是在查阅文献的过程中或多或少也积累了一定的思路 建模初期 # 总目标:构建足够精确的、适配优化方法的计算系统\n建模:明确输入数据在各个计算流结点之间的操作 代码:用代码实现计算流,实现数据可视化 论文:填充第一个小问的内容,并初步排版 预计用时:30h\n工作:\n所有队员一起进行建模,优先明确建模思路,给出完整的数学推导过程 我和 CL:代码实现与论文内容填充同步进行 HWJ:绘制无法用代码生成的更加生动的示意图 建模中期 # 总目标:构建合适的优化系统\n建模:根据计算系统的特殊性,选择最为匹配的优化系统 代码:在实现优化系统的过程中进行微小改动,匹配计算系统 论文:完成论文的主体部分,开始进行局部细节微调 预计用时:20h\n工作:与前面类似只不过工作的中心从代码编写转到了论文撰写\n精简论文,此时的论文非常臃肿 微调论文的逻辑,使得上下文关联度更高 美化排版,减少文字,增加图片 建模后期 # 基本建模完成了,全员进行漏洞的检查: 错别字、不准确的表述、公式拼写错误等常规检查 优化代码中的注释,让其更加易读 重点检查个人信息 比赛论文中不能保留任何个人信息,包括代码中的文件路径,例如 C:\\Users\\Morethan ;保留个人信息是非常严重的错误! 实战效果 # 当我们将上述策略应用于实战过程中,也就是 CUMCM 2024 的正式比赛中,得到的效果如下:\n有效用时: 比赛总时长三天,共计 72 小时 队伍从早上七点到晚上八点,除开吃饭用时,一天的有效时间为 12 个小时 时间利用率为 \\(50\\%\\)(对比之下很低🤔) 最终完成工作: 论文主体 28 页 A4 纸 代码部分 35 页 A4 纸,除开每一个小题之间的复用代码,应该有 20 页左右 全文配图共计 25 张 以上数据是论文精简之后的,初稿论文将近 50 页 未完成工作: 最终结果的计算,由于计算量过大(代码效率并不高),最终提前两个小时写完所有代码,但并没有足够的时间运算出结果😭😭 模型的计算精度不够,精度为 1s 没有达到标准答案给出的精度 论文的收尾部分其实并没有完成 优点 # 选题 # 专注于 A 题,在模拟赛中积累了充分的经验,磨合出了一套高效的工作流程\n对于 A 题的方法论构建比较完善\n工作流程 # 工作流程相对清晰,效率较高\n以最终论文为导向,建模、论文、代码三线同时进行,保证了论文内容的充足\n分工 # 采用模糊分工,每个队员都有一个主要分工和次要分工,在各自的主要分工上能够独立工作,在其他的次要分工上面也能够完成一定的工作,大大提高了时间利用率\n队员很给力,因为同时兼顾两个分工任务意味着更多的学习成本\n不足 # 工作流程 # 计划很完美,但是在实践中还是有些必要的环节没有做好\n有效时间占比:晚上八点收工太早了!应该占用更多的时间来进行建模试错,保证模型的正确性和精确性\n分工 # 代码的编写、代码的调试、代码的可视化、结果的计算、结果的可视化所涉及的代码量太大,一人难以搞定;\n因为模糊分工所引起的任务重叠,增加了协同成本\n建模 # 题目理解准确度:这次我们对于题目的理解出现了较大的偏差,导致我们浪费了挺多时间在模型修正上面; 代码 # 代码的效率:之前由于没有时间的限制,导致对于“超长”代码的准备不足,没有代码并行的经验;\n结果精度:一开始建模过于粗糙,并且用了一个不好的特性:将时间步长设置为 1 ,并且将作为数组索引,导致后期难以将时间的步长减小,导致最后结果的精确度不够\n改进方案 # 精心挑选场地,增加有效时间✨是最重要的✨ 分工 # 略微改动人员分工,增加代码方面的人力投入\n在各自的主要分工和次要分工上增加学习投入,增加工作效率\n建模 # 更专注于题目的理解,不能太着急;建模错误再修正是得不偿失的 代码 # 构建一套行之有效的代码协同方案,增强代码编写速度\n着手构建代码编写规范:\n变量命名 文件开头的说明文档 代码编写流程规范 代码并行化:在代码中添加一些可并行的代码,提高运行速度\n所有代码方面的改进最终落实为一个文档!不能光喊口号! 论文 # 研究优秀论文\n关注其论文框架 关注其语言风格、文本可读性、详略、配图逻辑、图片可读性 改进自身\n优化论文主体逻辑框架,细化每一块的内容 语言风格、文本可读性、详略、配图逻辑、图片可读性等等细节的改进 成果以 LaTeX 模板中注释的形式固定! 总结 # 一份没有满分的答卷比一份满分的答卷更有收获!\n积累应用数学的知识,增强论文撰写能力,提高发现问题的能力,这是比比赛本身更有意义的东西🫡\nCUMCM,每一个数模人都能从中受益🤗\n","date":"2024-09-12","externalUrl":null,"permalink":"/blog/cumcm2024/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e前言 \n \u003cdiv id=\"%E5%89%8D%E8%A8%80\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%89%8D%E8%A8%80\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e这篇文章主要是对于 CUMCM 2024 的比赛全过程进行一个梳理和总结。\u003c/p\u003e","title":"CUMCM 2024总结","type":"blog"},{"content":" 创建虚拟环境 # 创建 # 一些常规的代码例子如下👇\n# 创建虚拟环境 python -m venv your_env_name # 指定python版本创建虚拟环境,如果你的python是默认安装路径 python -m venv your_env_name --python=python3.11 # python是自定义的安装路径 D:\\Python\\Python311\\python.exe -m venv your_env_name 下面有一些可选参数用于创建自定义的虚拟环境:\n参数名 含义 --system-site-packages 创建的虚拟环境将包含全局Python环境中的包,这可以避免重复安装一些常用的包 --clear 如果指定的虚拟环境目录已经存在,这会清除目录中的所有内容,然后重新创建虚拟环境 --version 用于确认虚拟环境中 Python 的版本 所有的参数说明都可以通过运行 python -m venv -h 来获得;不用到处查文档了~😆 激活 # 默认情况下,虚拟环境处于非激活状态。在“your_env_name/Scripts/”目录下将有一个名为“activate”的文件,用命令行运行即可。\n# 激活虚拟环境 your_env_name/Scripts/activate ","date":"2024-08-10","externalUrl":null,"permalink":"/blog/pytips/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e创建虚拟环境 \n \u003cdiv id=\"%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%88%9B%E5%BB%BA%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\n\n\u003ch3 class=\"relative group\"\u003e创建 \n \u003cdiv id=\"%E5%88%9B%E5%BB%BA\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%88%9B%E5%BB%BA\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h3\u003e\n\u003cp\u003e一些常规的代码例子如下👇\u003c/p\u003e","title":"Python小技巧","type":"blog"},{"content":" 引用文献 # 我对于贝叶斯优化的理解也并不多,主要参考下面的内容👇\n【机器学习】一文看懂贝叶斯优化/Bayesian Optimization\n一文详解贝叶斯优化(Bayesian Optimization)原理\n贝叶斯优化(BayesianOptimization)\n超参数优\u0026mdash;贝叶斯优化及其改进(PBT优化)\n贝叶斯优化 (Bayesian Optimization)\nMATLAB官方文档\n优点和算法原理 # 这里重点描述贝叶斯优化的优点以及其算法原理。如果你只关注“怎么用”,可以先了解贝叶斯优化的优点,然后跳转到#MATLAB用法\n优点 # 算法原理 # MATLAB用法 # 代码一览 # % 定义目标函数 function y = objectiveFcn(x) y = (1 - x.x1)^2 + 100 * (x.x2 - x.x1^2)^2; end % 定义优化变量 vars = [optimizableVariable(\u0026#39;x1\u0026#39;, [-2, 2]) optimizableVariable(\u0026#39;x2\u0026#39;, [-2, 2])]; % 执行贝叶斯优化 results = bayesopt(@objectiveFcn, vars, ... \u0026#39;AcquisitionFunctionName\u0026#39;, \u0026#39;expected-improvement-plus\u0026#39;, ... \u0026#39;MaxObjectiveEvaluations\u0026#39;, 30, ... \u0026#39;IsObjectiveDeterministic\u0026#39;, true, ... \u0026#39;Verbose\u0026#39;, 1); % 查看结果 bestPoint = results.XAtMinObjective; bestObjective = results.MinObjective; fprintf(\u0026#39;最优解 x1: %.4f, x2: %.4f\\n\u0026#39;, bestPoint.x1, bestPoint.x2); fprintf(\u0026#39;最优目标值: %.4f\\n\u0026#39;, bestObjective); 参数说明 # Params Meaning AcquisitionFunctionName 选择采集函数,这决定了算法在每次采样之后如何选取下一个采样点 MaxObjectiveEvaluations 最大迭代轮次 IsObjectiveDeterministic 如果目标函数是确定的,不包含噪声,则设置为 true ;否则设置为 false Verbose 决定了结果输出的详细程度,所有的输出可能包含多张图表 每个参数具体的可选值见官方文档: bayesopt;官方写的相当细致,还有很多样例。\n数学建模人必会技能之一就是读文档😝 ","date":"2024-08-05","externalUrl":null,"permalink":"/blog/bayesianopt/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e引用文献 \n \u003cdiv id=\"%E5%BC%95%E7%94%A8%E6%96%87%E7%8C%AE\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%BC%95%E7%94%A8%E6%96%87%E7%8C%AE\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e我对于贝叶斯优化的理解也并不多,主要参考下面的内容👇\u003c/p\u003e","title":"贝叶斯优化","type":"blog"},{"content":" 背景提要 # 你应该知道如何通过命令行与电脑交互,包括但不限于:Windows如何唤出命令行/终端,正在运行中的命令什么时候结束\u0026hellip;\u0026hellip;\n懂一点点翻墙的技术,OverLeaf是个国外的软件,与之硬相关的latex项目也是国外的,因此下载相关依赖的时候能够直接接受国外流量会省掉很多麻烦。如果你没有VPN的话就需要为每一个包管理工具指定一个国内源,但有时候国内源更新并不及时。\n懂一些Vim的基本操作,比如:如何开启插入模式,如何保存退出,不保存退出等\n部署全流程 # 安装Linux # 在 Windows App Store 里面直接搜索一个Linux发行版本并下载,笔者选择的是Kali。安装完成后可以在开始菜单中直接打开,打开后会跳出命令行窗口,初次打开需要填写需要用户名与密码进行注册。\n此时你的命令行应该有一个 Warning 提示。这是因为你还没有安装 WSL(Windows Subsystem for Linux);同时,在填写密码的时候你的输入不会显示在命令行,但已经被记录了 为什么需要一个Linux系统?因为OverLeaf的sharelatex模型需要Linux环境。也正因如此,据说在Linux系统上运行的OverLeaf更加流畅。\n安装WSL # 安装WSL2,直接在Windows命令行中运行:\nwsl --install 这个程序安装后也可以直接打开,打开后也有一个Warning提示。这时候需要在 C:\\Users\\ASUS 目录下面写入一个text文件,然后重命名为 .wslconfig;\n写入内容为:\n[experimental] autoMemoryReclaim=gradual # gradual | dropcache | disabled networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true 安装Docker # 进入Docker官网下载Docker,这是sharelatex模型运行的容器。Docker是一个开源的应用容器引擎,其中包括,镜像、容器、仓库,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品及其环境能够做到“一次封装,到处运行”。就像一个集装箱,由程序员开发并封装,用户使用时就直接把整个集装箱搬过去。\nDocker安装完成后就可以双击启动放后台了,我们后面通过命令行来操作Docker;\n拉取镜像 # 打开Kali,直接运行\ngit clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit 然后连续运行:\ncd ./overleaf-toolkit bin/init vim ./config/variables.env 此时你应该已经进入了一个文档界面,这就是Vim文本编辑器的界面。Vim有很多快捷键,其中按下\u0026quot;I\u0026quot;键即可开启插入模式,进行文本编辑,按下\u0026quot;esc\u0026quot;即可返回常规模式。在插入模式下输入:OVERLEAF_SITE_LANGUAGE=zh-CN\n输入完成后按下\u0026quot;esc\u0026quot;返回常规模式,直接键入 :wq 这是“保存并退出”,如果你不小心输错了可以 :e! 放弃所有更改重头再来。这一步是让你的OverLeaf界面显示为中文。\n当你成功保存并退出,回到熟悉的Kali命令行界面后运行 bin/up 此时正在拉取sharelatex镜像以及相关的网络工具。这时会有大量的数据传输,要保证网络通畅(梯子要稳!)\n配置用户 # 当上一个命令成功结束之后,运行 bin/start ;此时你打开Docker点进sharelatex,你应该可以看到代码“爆闪”,如果没有红色的消息,那应该是正常运行了。\n这时打开浏览器访问网址 http://localhost/launchpad\n按照提示注册Administrator Account之后,就会跳转到 http://localhost/project ;这时基本的OverLeaf网页已经可以显示了。\n但现在你丢一个文件进去编译多半是会报错的 ᕕ( ᐛ )ᕗ ;因为此时 sharelatex 里面的宏包严重不足,不是红包「手动狗头」 安装扩展包 # 打开Kali进入对应目录运行 bin/shell 然后逐条执行:\ncd /usr/local/texlive # 下载并运行升级脚本 wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh sh update-tlmgr-latest.sh -- --upgrade # 更换texlive的下载源 tlmgr option repository https://mirrors.sustech.edu.cn/CTAN/systems/texlive/tlnet/ # 升级tlmgr tlmgr update --self --all # 安装完整版texlive(时间比较长,不要让shell断开) tlmgr install scheme-full # 退出sharelatex的命令行界面 exit # 重启sharelatex容器 docker restart sharelatex 重启后再次进入shell,运行:\napt update # 安装字体 apt install --no-install-recommends ttf-mscorefonts-installe fonts-noto texlive-fonts-recommended tex-gyre fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra fonts-noto-ui-core fonts-noto-ui-extra fonts-noto-unhinted fonts-texgyre # 安装pygments apt install python3-pygments # 安装beamer之类的 apt install texlive-latex-recommended apt install texlive-latex-extra # 安装英文字体 echo \u0026#34;yes\u0026#34; | apt install -y --reinstall ttf-mscorefonts-installer # 安装中文字体 apt install -y latex-cjk-all texlive-lang-chinese texlive-lang-english cp fonts/* /usr/share/fonts/zh-cn/ cd /usr/share/fonts fc-cache -fv # 更新字体缓存 fc-list :lang=zh-cn fc-match Arial 最后在shell目录里面运行:\nvim /usr/local/texlive/2023/texmf.cnf 进入配置文件,在最底下加入一句 shell_escape = t\n我也不知道这有什么用,属于是前辈传承了🤔 注意,如果Texlive(扩展包的官名)版本不同的话,目录地址也会有所变化,因此需要根据实际的地址来填写,例如将2023改成2024。\n在Linux命令行中可以用 ls -l 来查看当前目录下所有的文件 部署成功 # 现在你就可以愉快地使用本地版OverLeaf了,没有编译超时的困扰~\n如果非常巧合,你也是个CQUer,这里附赠一份重庆大学的毕业论文模板,炒鸡的亲民哦:CQUThesis\n","date":"2024-07-12","externalUrl":null,"permalink":"/blog/localoverleaf/","section":"Blogs","summary":"\u003ch2 class=\"relative group\"\u003e背景提要 \n \u003cdiv id=\"%E8%83%8C%E6%99%AF%E6%8F%90%E8%A6%81\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E8%83%8C%E6%99%AF%E6%8F%90%E8%A6%81\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e你应该知道如何通过命令行与电脑交互,包括但不限于:Windows如何唤出命令行/终端,正在运行中的命令什么时候结束\u0026hellip;\u0026hellip;\u003c/p\u003e","title":"本地 OverLeaf 部署","type":"blog"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/blog/","section":"Blogs","summary":"","title":"Blogs","type":"blog"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/hugo/","section":"标签","summary":"","title":"Hugo","type":"tags"},{"content":" 欢迎来到我的信息页面 👋 # 基本信息 # Morethan 是我随手起的一个英文名字,因为这个词语的发音和我的中文名字实在是太像了🙃\n我现在还是一个本科生 ᕕ( ᐛ )ᕗ 其他的没什么好写的🫠\n博客定位 # 个人知识库:用来存放一些固定的技术流程和有意义的经历\n微型论文栈:尽可能按照标准论文流程来编写一些博客,为毕业论文做准备\n知识输出平台:将我所学尽可能清晰地表达出来\n最后 # 如果你觉得有内容帮助了你,请点击文章开头的“喜欢” 🤗\n如果你想分享某些内容,请标注援引自此网站 🫡\n如果你找到了一些错误之处,请在 GitHub 上提交一个Issue 🥰\n","date":"2025-01-10","externalUrl":null,"permalink":"/authors/morethan/","section":"作者列表","summary":"\u003ch1 class=\"relative group\"\u003e欢迎来到我的信息页面 👋 \n \u003cdiv id=\"%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BF%A1%E6%81%AF%E9%A1%B5%E9%9D%A2-\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BF%A1%E6%81%AF%E9%A1%B5%E9%9D%A2-\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h1\u003e\n\n\n\u003ch2 class=\"relative group\"\u003e基本信息 \n \u003cdiv id=\"%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF\" class=\"anchor\"\u003e\u003c/div\u003e\n \n \u003cspan\n class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\"\n style=\"text-decoration-line: none !important;\" href=\"#%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n \u003c/span\u003e \n \n\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eMorethan\u003c/code\u003e 是我随手起的一个英文名字,因为这个词语的发音和我的中文名字实在是太像了🙃\u003c/p\u003e","title":"Morethan","type":"authors"},{"content":"","date":"10 January 2025","externalUrl":null,"permalink":"/en/series/operation/","section":"Seires","summary":"","title":"Operation","type":"series"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/%E6%8A%A5%E5%91%8A/","section":"标签","summary":"","title":"报告","type":"tags"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/tags/","section":"标签","summary":"\u003chr\u003e","title":"标签","type":"tags"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/tags/%E5%8D%9A%E5%AE%A2/","section":"标签","summary":"","title":"博客","type":"tags"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/","section":"欢迎来到Morethan的小站","summary":"\u003c!-- \u003cdiv class=\"flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900\"\u003e\n \u003cspan class=\"flex items-center ltr:pr-3 rtl:pl-3 text-primary-400\"\u003e\n \n \n \u003cspan class=\"relative inline-block align-text-bottom icon\"\u003e\n \u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003cpath fill=\"currentColor\" d=\"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"/\u003e\u003c/svg\u003e\n \n \u003c/span\u003e\n \n\n \u003c/span\u003e\n \u003cspan class=\"flex items-center justify-between grow dark:text-neutral-300\"\u003e\n \u003cspan class=\"prose dark:prose-invert\"\u003e 这是 \u003ccode id=\"layout\"\u003ebackground\u003c/code\u003e 的样式示例。\u003c/span\u003e\n \u003cbutton\n id=\"switch-layout-button\"\n class=\"px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700\"\n \u003e\n 切换 layout \u0026orarr;\n \u003c/button\u003e\n \u003c/span\u003e\n\u003c/div\u003e --\u003e","title":"欢迎来到Morethan的小站","type":"page"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/series/%E6%8A%80%E6%9C%AF%E6%B5%81%E7%A8%8B/","section":"系列","summary":"","title":"技术流程","type":"series"},{"content":" ","date":"2025-01-10","externalUrl":null,"permalink":"/series/","section":"系列","summary":"\u003chr\u003e","title":"系列","type":"series"},{"content":"","date":"2025-01-10","externalUrl":null,"permalink":"/authors/","section":"作者列表","summary":"","title":"作者列表","type":"authors"},{"content":"","date":"7 January 2025","externalUrl":null,"permalink":"/en/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/series/casual-essay/","section":"Seires","summary":"","title":"Casual Essay","type":"series"},{"content":"","date":"6 January 2025","externalUrl":null,"permalink":"/en/tags/experience/","section":"Tags","summary":"","title":"Experience","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/tags/%E7%BB%8F%E5%8E%86/","section":"标签","summary":"","title":"经历","type":"tags"},{"content":"","date":"2025-01-06","externalUrl":null,"permalink":"/series/%E9%9A%8F%E7%AC%94/","section":"系列","summary":"","title":"随笔","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/ai/","section":"标签","summary":"","title":"AI","type":"tags"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/series/ai%E9%81%90%E6%83%B3/","section":"系列","summary":"","title":"AI遐想","type":"series"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/tags/imagination/","section":"Tags","summary":"","title":"Imagination","type":"tags"},{"content":"","date":"3 January 2025","externalUrl":null,"permalink":"/en/series/wild-imagination-of-ai/","section":"Seires","summary":"","title":"Wild Imagination of AI","type":"series"},{"content":"","date":"2025-01-03","externalUrl":null,"permalink":"/tags/%E9%81%90%E6%83%B3/","section":"标签","summary":"","title":"遐想","type":"tags"},{"content":"CUMCM 英文全称为 Chinese Undergraduate Mathmatical Contest in Modeling,中文全称为“全国大学生数学建模竞赛”\n由于这个比赛并不能直接参与国家级总决赛,而是要经过校赛省赛的选拔,然后你的论文才会被交给全国的专家进行评审。因此这个比赛民间细分为三个,即数模校赛,数模省赛和数模国赛。\n","date":"2024-09-12","externalUrl":null,"permalink":"/tags/cumcm/","section":"标签","summary":"\u003cp\u003e\u003ccode\u003eCUMCM\u003c/code\u003e 英文全称为 Chinese Undergraduate Mathmatical Contest in Modeling,中文全称为“全国大学生数学建模竞赛”\u003c/p\u003e","title":"CUMCM","type":"tags"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/tags/math/","section":"标签","summary":"","title":"Math","type":"tags"},{"content":"","date":"12 September 2024","externalUrl":null,"permalink":"/en/series/mathmodel/","section":"Seires","summary":"","title":"MathModel","type":"series"},{"content":"","date":"2024-09-12","externalUrl":null,"permalink":"/series/%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1/","section":"系列","summary":"","title":"数学建模","type":"series"},{"content":"","date":"2024-08-10","externalUrl":null,"permalink":"/tags/python/","section":"标签","summary":"","title":"Python","type":"tags"},{"content":"","date":"2024-08-05","externalUrl":null,"permalink":"/tags/matlab/","section":"标签","summary":"","title":"MATLAB","type":"tags"},{"content":"","date":"2024-07-12","externalUrl":null,"permalink":"/tags/latex/","section":"标签","summary":"","title":"LaTeX","type":"tags"},{"content":"","date":"2024-07-12","externalUrl":null,"permalink":"/tags/overleaf/","section":"标签","summary":"","title":"Overleaf","type":"tags"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"}] \ No newline at end of file