<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>timerring</title><link>https://blogs.timerring.com/</link><description>Recent content on timerring</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 15 Sep 2026 01:37:52 +0800</lastBuildDate><atom:link href="https://blogs.timerring.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Stop Slop English writing skill</title><link>https://blogs.timerring.com/posts/stop-slop/</link><pubDate>Tue, 15 Sep 2026 01:37:52 +0800</pubDate><guid>https://blogs.timerring.com/posts/stop-slop/</guid><description>&lt;p>&lt;a href="https://github.com/hardikpandya/stop-slop/tree/main" target="_blank" rel="nofollow noopener">&lt;strong>Stop Slop&lt;/strong>&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup> is a lightweight, open-source prompt skill for editing English prose that exhibits predictable LLM writing patterns. It provides Markdown instructions and examples for making generated or revised text more direct, concrete, and editorially restrained.&lt;/p></description></item><item><title>human-writing：让中文写作有点“活人感”</title><link>https://blogs.timerring.com/posts/human-writing-chinese-writing-skill/</link><pubDate>Mon, 14 Sep 2026 22:22:54 +0800</pubDate><guid>https://blogs.timerring.com/posts/human-writing-chinese-writing-skill/</guid><description>&lt;p>让 AI 写中文，有时候会得到一篇很工整的文章。句子通顺，段落也齐全，就是读着有点累，像在看一份说明书。最近看到一个专门处理这类问题的 Skill，叫 &lt;a href="https://github.com/KKKKhazix/human-writing" target="_blank" rel="nofollow noopener">&lt;code>human-writing&lt;/code>&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup>，中文名是“活人感写作”。里面主要是 Markdown 写作规则，还有一个 Python 检查脚本。&lt;/p></description></item><item><title>How to Subscribe to Gemini Pro Outside the US</title><link>https://blogs.timerring.com/posts/how-to-subscribe-to-gemini-pro-outside-the-us/</link><pubDate>Thu, 29 Jan 2026 10:03:20 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-subscribe-to-gemini-pro-outside-the-us/</guid><description>&lt;p>If you&amp;rsquo;re located outside the United States and trying to subscribe to Gemini Pro, you might have encountered the frustrating &amp;ldquo;Not available in your region&amp;rdquo; message. This guide explains why this happens and how to fix it.&lt;/p></description></item><item><title>Vim Cheatsheet</title><link>https://blogs.timerring.com/posts/vim-cheatsheet/</link><pubDate>Tue, 13 Jan 2026 17:38:50 +0800</pubDate><guid>https://blogs.timerring.com/posts/vim-cheatsheet/</guid><description>&lt;p>Vim is a powerful command-line text editor that&amp;rsquo;s been around for decades, and it&amp;rsquo;s still widely used today. Whether you&amp;rsquo;re SSH-ing into a remote server or just prefer the keyboard-centric workflow, Vim is often the go-to choice. The learning curve can be steep at first — I remember the first time I opened Vim and couldn&amp;rsquo;t even figure out how to quit. But once you get the hang of it, the efficiency gains are real. This cheatsheet covers the essentials I use most often, and I’m trying to condense them.&lt;/p></description></item><item><title>ERC 8004 Trustless Agents</title><link>https://blogs.timerring.com/posts/erc-8004-trustless-agents/</link><pubDate>Thu, 16 Oct 2025 02:23:05 +0800</pubDate><guid>https://blogs.timerring.com/posts/erc-8004-trustless-agents/</guid><description>&lt;p>This article is my understanding of the ERC-8004: Trustless Agents, which is a standard for Identity Registry, Reputation Registry and Verification Registry. And refer to the Ethereum Improvement Proposals &lt;a href="https://eips.ethereum.org/EIPS/eip-8004" target="_blank" rel="nofollow noopener">ERC-8004: Trustless Agents&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup>.&lt;/p></description></item><item><title>Fix the Ghost Notification of Github</title><link>https://blogs.timerring.com/posts/fix-the-ghost-notification-of-github/</link><pubDate>Mon, 13 Oct 2025 19:06:52 +0800</pubDate><guid>https://blogs.timerring.com/posts/fix-the-ghost-notification-of-github/</guid><description>&lt;p>I ran into a stubborn GitHub notification blue dot that wouldn’t go away even though the Notifications page showed nothing. Here’s the quick, safe way I found to resolve it, plus a few alternatives and notes on why it happens.&lt;/p></description></item><item><title>Disable SIP on Macos</title><link>https://blogs.timerring.com/posts/disable-SIP-on-Macos/</link><pubDate>Sun, 12 Oct 2025 19:39:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/disable-SIP-on-Macos/</guid><description>&lt;p>System Integrity Protection (SIP) is a security layer that limits even the &lt;code>root&lt;/code> user from modifying protected parts of the system. Apple introduced it in OS X El Capitan to reduce the blast radius of malware and accidental system damage. In practice, SIP blocks writes to system locations, prevents runtime injection into protected processes, and restricts some kernel/system-level operations.&lt;/p>
&lt;p>Sometimes I run a command and see &amp;lsquo;Operation not permitted&amp;rsquo; despite &lt;code>sudo&lt;/code>, SIP is often the reason. So I need to disable SIP temporarily.&lt;/p></description></item><item><title>How to Partially Clone</title><link>https://blogs.timerring.com/posts/how-to-partially-clone/</link><pubDate>Thu, 21 Aug 2025 21:56:10 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-partially-clone/</guid><description>&lt;p>Sometimes you encounter a large repository but only need a few directories from it. Cloning the entire repo wastes both time and disk space. Git&amp;rsquo;s sparse checkout solves this problem by letting you pull only the parts you need.&lt;/p></description></item><item><title>The Tips of Macos Automator</title><link>https://blogs.timerring.com/posts/the-tips-of-macos-automator/</link><pubDate>Sun, 22 Jun 2025 14:27:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-tips-of-macos-automator/</guid><description>&lt;p>The Automator is a powerful tool for automating tasks on macOS. It allows you to create custom workflows that can be triggered by various events, such as opening a file, pasting text, or receiving an email. This article will share my common usages of Automator.&lt;/p></description></item><item><title>Mainland Network Circuits</title><link>https://blogs.timerring.com/posts/mainland-network-circuits/</link><pubDate>Thu, 19 Jun 2025 22:24:36 +0800</pubDate><guid>https://blogs.timerring.com/posts/mainland-network-circuits/</guid><description>&lt;p>The performance and reliability of internet connectivity to and from mainland China are determined by a complex web of different network circuits, each with its own characteristics.&lt;/p>
&lt;p>We will explore the crucial differences between the standard &lt;em>public network&lt;/em> backbones, like the workhorse 163 network, and premium, optimized lines like CN2. We&amp;rsquo;ll also explain what &lt;em>dedicated networks&lt;/em> such as IPLC are and why they offer a completely different level of performance and privacy. By the end of this article, you&amp;rsquo;ll have a clear framework for understanding these circuits, helping you make more informed decisions whether you&amp;rsquo;re choosing a hosting provider, diagnosing network issues, or are simply curious about how the internet infrastructure in mainland China operates.&lt;/p></description></item><item><title>Cloudflare Warp</title><link>https://blogs.timerring.com/posts/cloudflare-warp/</link><pubDate>Fri, 06 Jun 2025 14:52:52 +0800</pubDate><guid>https://blogs.timerring.com/posts/cloudflare-warp/</guid><description>&lt;p>Frankly speaking, the first time I heard about Cloudflare is the service so called Cloudflare WARP which is provided by Cloudflare. Nowadays, you must have heard the fastest and private network can be provided by Cloudflare. If I say Cloudflare achieves the fastest object by the first step to visiting any website, the world’s fastest public DNS &lt;code>1.1.1.1&lt;/code>. You can probably guess the private provider, yes, that is Cloudflare &lt;code>WARP&lt;/code>. So this article I will introduce the Cloudflare WARP further zero trust and how to use it.&lt;/p></description></item><item><title>The principle of Cloudflare SaaS Optimization</title><link>https://blogs.timerring.com/posts/the-principle-of-cloudflare-saas-optimization/</link><pubDate>Wed, 04 Jun 2025 11:23:44 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-principle-of-cloudflare-saas-optimization/</guid><description>&lt;p>In common situation, when you use the cloudflare to resolve your domain name, and you choose to use the &lt;code>cloudflare proxy&lt;/code>(the yellow cloud icon), then cloudflare would probably get your domain resources into their CDN, that could be a good thing, but as we know, the network in mainland has some special rules, so for the free tier user, the access to the resources in the CDN would be somehow worse, even &lt;code>rest&lt;/code>. That means, if the user connect to the node which has high latency, the request will experience worse. So this article will introduce some methods to help your resources access to the cloudflare nodes which are optimized for the mainland.&lt;/p></description></item><item><title>The MitM and HTTPS Capturing</title><link>https://blogs.timerring.com/posts/the-mitm-and-https-capturing/</link><pubDate>Tue, 03 Jun 2025 16:03:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-mitm-and-https-capturing/</guid><description>&lt;p>Do you really know what is the network activity on your phone? Have you ever wondered how to capture the https packages on your phone? In this article, I will introduce you to the &lt;code>MitM&lt;/code> and how to capture the https traffic on your phone.&lt;/p></description></item><item><title>How to Keep Your MAC Always Awake</title><link>https://blogs.timerring.com/posts/how-to-keep-your-mac-always-awake/</link><pubDate>Fri, 30 May 2025 22:01:25 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-keep-your-mac-always-awake/</guid><description>&lt;p>Here are some common scenarios: You&amp;rsquo;re about to step away from your Mac for a period, or you&amp;rsquo;re downloading large files and want to keep your Mac from going to sleep. (If you use an external display, you likely understand what I mean. Sometimes, after waking from sleep mode, your Mac fails to power on the external display.) That&amp;rsquo;s why I highly recommend &lt;code>Amphetamine&lt;/code> to you. I&amp;rsquo;ve often heard that macOS boasts excellent power management, but lacking in-depth knowledge myself, I&amp;rsquo;ve sought out the answer.&lt;/p></description></item><item><title>The Way to Get Cookie</title><link>https://blogs.timerring.com/posts/the-way-to-get-cookie/</link><pubDate>Sun, 25 May 2025 13:34:21 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-way-to-get-cookie/</guid><description>&lt;p>本文介绍获取 Cookie 最直接常用的方法。&lt;/p></description></item><item><title>How to Choose the Right Software and Creative License</title><link>https://blogs.timerring.com/posts/how-to-choose-the-right-software-and-creative-license/</link><pubDate>Sat, 24 May 2025 20:06:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-choose-the-right-software-and-creative-license/</guid><description>&lt;p>Normally, there are many types of software licenses, each with different terms and conditions. Choosing the right license for your project can be a daunting task. In this article, we will discuss the different types of software licenses and how to choose the right one for your project. And in the end, I make a simple website &lt;a href="https://license.timerring.com" target="_blank" rel="nofollow noopener">https://license.timerring.com&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup> to help you choose exactly the license you need.&lt;/p></description></item><item><title>Add Live Photo Effect to Hugo</title><link>https://blogs.timerring.com/posts/0516-add-live-photo-effect-to-hugo/</link><pubDate>Fri, 16 May 2025 16:15:56 +0800</pubDate><guid>https://blogs.timerring.com/posts/0516-add-live-photo-effect-to-hugo/</guid><description>&lt;p>Live Photos 作为最早 Apple 在2015年9月发布的 &lt;code>iPhone6s&lt;/code> 和 &lt;code>6s Plus&lt;/code> 中引入的特色功能，很快就在手机摄影领域独树一帜，收获了无数忠实用户，Live Photo 的特色在于，它不仅仅是一张静态的照片，用户在拍摄实况照片时，iPhone会录下拍照前后各 1.5 秒所发生的一切。在 24 年下半年，随着微信宣布支持实况照片，Live Photo 再次成为了各大应用以及手机厂商的焦点，在短时间内无法实现更好的 AI 叙事的当下，不少手机厂商将 Live photo 适配各大社交媒体视为这个季度的业绩救赎，最近我也在思考，是否可以在博客中添加这个 feature，以便可以更好地展示照片的内容，在经过一番仔细搜索之后，发现网上完全没有关于 Hugo 支持 Live photo 的任何讨论，因此我决定自己动手实现这个 feature，也就有了本篇文章。&lt;/p></description></item><item><title>The Practice of Resolving Domain</title><link>https://blogs.timerring.com/posts/the-practice-of-resolving-domain/</link><pubDate>Sun, 11 May 2025 11:10:46 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-practice-of-resolving-domain/</guid><description>&lt;p>According to the last article about 
 &lt;a href="https://blogs.timerring.com/posts/a-brief-introduction-to-dns/">A Brief Introduction to DNS&lt;/a>, you may have a basic understanding of DNS. In this article, I will show you how to resolve domain name to IP address or other information in practice.&lt;/p></description></item><item><title>Hidden Markov Models</title><link>https://blogs.timerring.com/posts/hidden-markov-models/</link><pubDate>Mon, 21 Apr 2025 14:49:15 +0800</pubDate><guid>https://blogs.timerring.com/posts/hidden-markov-models/</guid><description>&lt;p>This is a lecture note of Hidden Markov Models.&lt;/p></description></item><item><title>Markov Chains</title><link>https://blogs.timerring.com/posts/markov-chains/</link><pubDate>Sun, 20 Apr 2025 18:38:25 +0800</pubDate><guid>https://blogs.timerring.com/posts/markov-chains/</guid><description>&lt;p>This is the notes for the lecture of Markov Chains.&lt;/p></description></item><item><title>Markov Processes</title><link>https://blogs.timerring.com/posts/markov-processes/</link><pubDate>Sun, 20 Apr 2025 15:35:34 +0800</pubDate><guid>https://blogs.timerring.com/posts/markov-processes/</guid><description>&lt;p>This is a summary of the lecture notes of Markov Processes.&lt;/p></description></item><item><title>Find the Formula Rendering Issue of Hugo</title><link>https://blogs.timerring.com/posts/0418-find-the-formula-rendering-issue-of-hugo/</link><pubDate>Fri, 18 Apr 2025 13:47:15 +0800</pubDate><guid>https://blogs.timerring.com/posts/0418-find-the-formula-rendering-issue-of-hugo/</guid><description>&lt;p>最近在写数学相关的博客的时候，发现 &lt;code>mathjax&lt;/code> 的渲染效果不尽人意，经常会在渲染的时候出现非预期的渲染效果，虽然只是极个别的公式，对整体影响并不大，当然我可以放着不解决，继续进行接下来的事情，或者简单将公式通过截图的形式放在文章里，也无伤大雅。但是凡事得想长远，想本质，今天大可以为了这一个公式采用省事的方法解决，那么它不会是我写的最后一个公式，未来可能还会有更多，因为这是一个长期的问题，如果放任不管，可能下次遇到类似的问题，我可能还是会采用省事的方法解决，那么这个问题就会一直存在，所以我认为放下手头的事，集中解决这个问题是值得的。&lt;/p></description></item><item><title>Multi Platform Builds Docker</title><link>https://blogs.timerring.com/posts/multi-platform-builds-docker/</link><pubDate>Wed, 09 Apr 2025 16:39:42 +0800</pubDate><guid>https://blogs.timerring.com/posts/multi-platform-builds-docker/</guid><description>&lt;p>This is a viable build record. The multi platform builds are supported by &lt;a href="https://docs.docker.com/build/building/multi-platform/" target="_blank" rel="nofollow noopener">&lt;code>docker buildx&lt;/code>&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup>, which is related to &lt;code>binfmt_misc&lt;/code> and &lt;code>QEMU&lt;/code>.&lt;/p></description></item><item><title>The Invitation Only Mechanism: From Clubhouse to Manus</title><link>https://blogs.timerring.com/posts/0404-The-invitation-only-mechanism-from-clubhouse-to-manus/</link><pubDate>Fri, 04 Apr 2025 11:40:39 +0800</pubDate><guid>https://blogs.timerring.com/posts/0404-The-invitation-only-mechanism-from-clubhouse-to-manus/</guid><description>&lt;p>虽然自小就听到过会员制的概念，但是也仅限于超市或者药店作为一种鼓励积分的方式，亦或是理发店等固定销售半径的捆绑销售的手段。不同于现在人们所谈论“邀请会员制”的概念，关于“邀请会员制”，我认为英文中有一个非常有意思的词，叫做 &lt;strong>exclusive&lt;/strong>，意思是“只，仅仅”，但是在礼物等场景中 exclusive 尝尝用来形容“特定的，独家的”，追根溯源，本质上都是一种排他性(exclusivity)的文化覆盖。&lt;/p></description></item><item><title>How to Use Git Submodule</title><link>https://blogs.timerring.com/posts/how-to-use-git-submodule/</link><pubDate>Fri, 28 Mar 2025 15:44:52 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-use-git-submodule/</guid><description>&lt;p>&lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules" target="_blank" rel="nofollow noopener">Git submodule&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup> is a feature of Git that allows you to include a Git repository as a subdirectory of another Git repository. It is often used to manage dependencies between projects.&lt;/p></description></item><item><title>Live Streaming infra and protocols</title><link>https://blogs.timerring.com/posts/live-streaming-infra-and-protocols/</link><pubDate>Mon, 24 Mar 2025 23:02:26 +0800</pubDate><guid>https://blogs.timerring.com/posts/live-streaming-infra-and-protocols/</guid><description>&lt;p>In our daily life, you may always see the live streaming on the internet, such as the live streaming of the video conference, the live streaming of the sports event, the live streaming of the online course, etc. And sometimes you even start your own live streaming, but we all get used to just clicking the button on the screen to start the live streaming, do you know what is happening behind the scene?&lt;/p></description></item><item><title>Implement danmaku rendering algorithm from scratch</title><link>https://blogs.timerring.com/posts/implement-danmaku-rendering-algorithm-from-scratch/</link><pubDate>Sat, 22 Mar 2025 13:13:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/implement-danmaku-rendering-algorithm-from-scratch/</guid><description>&lt;p>This article presents a comprehensive implementation of a danmaku rendering algorithm from the ground up, along with a thorough analysis of the danmaku rendering algorithm. The source code is available on &lt;a href="https://github.com/timerring/DanmakuConvert" target="_blank" rel="nofollow noopener">GitHub&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup>.&lt;/p></description></item><item><title>Is There an Rss Renaissance in the AI Era?</title><link>https://blogs.timerring.com/posts/is-there-an-rss-renaissance-in-the-ai-era/</link><pubDate>Fri, 21 Mar 2025 13:34:19 +0800</pubDate><guid>https://blogs.timerring.com/posts/is-there-an-rss-renaissance-in-the-ai-era/</guid><description>&lt;p>RSS: RDF Site Summary or Really Simple Syndication。&lt;/p>
&lt;p>如果说 search 是信息 pull 的代表，那毫无疑问，RSS 就是信息 push 的代表。简单地讲，就是一种信息聚合的服务，通过一种标准化的消息来源的格式规范，聚合多个网站的内容更新并且通知订阅者。尽管听起来很复杂，但是 RSS 本质上只需要两步，从目标网站上找到 RSS 链接，并把它添加到自己内容收取的服务里。&lt;/p></description></item><item><title>Stock Prices</title><link>https://blogs.timerring.com/posts/stock-prices/</link><pubDate>Thu, 20 Mar 2025 15:16:35 +0800</pubDate><guid>https://blogs.timerring.com/posts/stock-prices/</guid><description>&lt;p>This is a tutorial for stock prices in the context of random processes.&lt;/p></description></item><item><title>Possion Processes</title><link>https://blogs.timerring.com/posts/possion-processes/</link><pubDate>Wed, 19 Mar 2025 22:01:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/possion-processes/</guid><description>&lt;p>This article is mainly about the Poisson processes in the book &amp;ldquo;Random Processes&amp;rdquo; by Gregory F. Lawler.&lt;/p></description></item><item><title>Docker With GPU</title><link>https://blogs.timerring.com/posts/docker-with-gpu/</link><pubDate>Tue, 18 Mar 2025 12:21:21 +0800</pubDate><guid>https://blogs.timerring.com/posts/docker-with-gpu/</guid><description>&lt;p>This post is to introduce how to use gpu in docker, which also covers the basic usage of gpu on the host machine.&lt;/p></description></item><item><title>Stochastic Processes</title><link>https://blogs.timerring.com/posts/stochastic-processes/</link><pubDate>Sat, 15 Mar 2025 19:30:50 +0800</pubDate><guid>https://blogs.timerring.com/posts/stochastic-processes/</guid><description>&lt;p>Compared to deterministic model, which is specified by a set of equations that describe exactly how the system will evolve over time. In a stochastic model, the evolution is at least partially random and if the process is run several times, it will not give identical results.&lt;/p></description></item><item><title>Some Useful Tools</title><link>https://blogs.timerring.com/posts/some-useful-tools/</link><pubDate>Thu, 13 Mar 2025 15:13:51 +0800</pubDate><guid>https://blogs.timerring.com/posts/some-useful-tools/</guid><description>&lt;p>Some useful tools for developers.&lt;/p>
&lt;p>Note: This post will be updated regularly.&lt;/p></description></item><item><title>A Shopping Experience in Pang Donglai Supermarket</title><link>https://blogs.timerring.com/posts/a-shopping-experience-in-pangdonglai-supermarket/</link><pubDate>Fri, 07 Mar 2025 14:09:23 +0800</pubDate><guid>https://blogs.timerring.com/posts/a-shopping-experience-in-pangdonglai-supermarket/</guid><description>&lt;p>前天在广州找朋友时发现附近有一家永辉超市，它是去年年末自主改调的“胖东来”超市，我一下子来了兴致，之前虽然也去过河南很多城市，但是没有去过许昌和新乡(New York)，而胖东来又不在河南之外开店，所以一直缺少体验的机会。在胖东来仔细转了一遍后，我对胖东来的服务有了更进一步的理解和感受。&lt;/p></description></item><item><title>Langchain and RAG Best Practices</title><link>https://blogs.timerring.com/posts/langchain-and-rag-best-practices/</link><pubDate>Wed, 05 Mar 2025 00:05:24 +0800</pubDate><guid>https://blogs.timerring.com/posts/langchain-and-rag-best-practices/</guid><description>&lt;p>This is a quick-start essay for LangChain and RAG which mainly refers to the &lt;a href="https://learn.deeplearning.ai/courses/langchain-chat-with-your-data/lesson/snupv/introduction?courseName=langchain-chat-with-your-data" target="_blank" rel="nofollow noopener">Langchain chat with your data&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup> course which are taught by Harrison Chase and Andrew Ng.&lt;/p></description></item><item><title>Random Walks</title><link>https://blogs.timerring.com/posts/random-walks/</link><pubDate>Tue, 18 Feb 2025 22:14:11 +0800</pubDate><guid>https://blogs.timerring.com/posts/random-walks/</guid><description>&lt;p>This article is a summary of the random walks in the book &amp;ldquo;Random Processes&amp;rdquo; by Gregory F. Lawler.&lt;/p></description></item><item><title>Sequences of Random Variables</title><link>https://blogs.timerring.com/posts/sequences-of-random-variables/</link><pubDate>Sun, 02 Feb 2025 20:56:05 +0800</pubDate><guid>https://blogs.timerring.com/posts/sequences-of-random-variables/</guid><description/></item><item><title>Parameter Estimation</title><link>https://blogs.timerring.com/posts/parameter-estimation/</link><pubDate>Sun, 02 Feb 2025 14:55:34 +0800</pubDate><guid>https://blogs.timerring.com/posts/parameter-estimation/</guid><description>&lt;p>This is the notes for the lecture of Parameter Estimation.&lt;/p></description></item><item><title>Two Random Variables</title><link>https://blogs.timerring.com/posts/two-random-variables/</link><pubDate>Sat, 01 Feb 2025 23:55:24 +0800</pubDate><guid>https://blogs.timerring.com/posts/two-random-variables/</guid><description>&lt;p>This article is about the two random variables and their properties.&lt;/p></description></item><item><title>Further Understanding of Proc</title><link>https://blogs.timerring.com/posts/further-understanding-of-proc/</link><pubDate>Sat, 01 Feb 2025 20:49:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/further-understanding-of-proc/</guid><description>&lt;p>The &lt;code>/proc&lt;/code> in Linux is a kind of Pseudo file system (also known as Virtual File System), what it saves is a series of special files that store the current running state of the kernel, and the user can check the hardware info and the runnning processes via the files, even adjust some files to change the state of running kernel. The files in &lt;code>/proc&lt;/code> will be refresh in RAM, so the files&amp;rsquo; size is 0 bytes.&lt;/p></description></item><item><title>The Iftop</title><link>https://blogs.timerring.com/posts/the-iftop/</link><pubDate>Thu, 30 Jan 2025 23:57:06 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-iftop/</guid><description>&lt;p>I frequently use &lt;code>ifconfig&lt;/code> and &lt;code>cat /proc/net/dev&lt;/code> to examine network information. However, today, my cloud server crashed unexpectedly. I reached out to the cloud support for assistance. The engineer utilized &lt;code>iftop&lt;/code> to analyze the situation. After the issue was resolved, I started to consider using this tool. Now, let&amp;rsquo;s take a closer look at this powerful utility.&lt;/p></description></item><item><title>Some Useful Commands to Share</title><link>https://blogs.timerring.com/posts/some-useful-commands-to-share/</link><pubDate>Thu, 30 Jan 2025 23:38:01 +0800</pubDate><guid>https://blogs.timerring.com/posts/some-useful-commands-to-share/</guid><description>&lt;p>Some good commands to share.&lt;/p>
&lt;p>Note: This post will be updated regularly.&lt;/p></description></item><item><title>Random Variables</title><link>https://blogs.timerring.com/posts/random-variables/</link><pubDate>Tue, 28 Jan 2025 22:15:30 +0800</pubDate><guid>https://blogs.timerring.com/posts/random-variables/</guid><description>&lt;p>This article introduces the common distribution functions both continuous and discrete. Besides, the basic knowledge of conditional distribution such as total probability and Bayes&amp;rsquo; Theorem is also introduced. The most important part are the Normal Approximation and Poisson Approximation of the Binomial Random Variable.&lt;/p></description></item><item><title>Repeated Trials</title><link>https://blogs.timerring.com/posts/repeated-trials/</link><pubDate>Tue, 28 Jan 2025 15:08:44 +0800</pubDate><guid>https://blogs.timerring.com/posts/repeated-trials/</guid><description>&lt;p>This article is mainly about Bernoulli Trials and its properties.&lt;/p></description></item><item><title>Probability and Its Axioms</title><link>https://blogs.timerring.com/posts/probability-and-its-axioms/</link><pubDate>Mon, 27 Jan 2025 19:54:20 +0800</pubDate><guid>https://blogs.timerring.com/posts/probability-and-its-axioms/</guid><description>&lt;p>This article is about the probability and its axioms.&lt;/p></description></item><item><title>Reflections on Trending Topics</title><link>https://blogs.timerring.com/posts/reflections-on-trending-topics/</link><pubDate>Sat, 25 Jan 2025 15:42:49 +0800</pubDate><guid>https://blogs.timerring.com/posts/reflections-on-trending-topics/</guid><description>&lt;p>一次制造热点帖子引发的思考与总结。&lt;/p></description></item><item><title>CPU can only see the threads</title><link>https://blogs.timerring.com/posts/cpu-can-only-see-the-threads/</link><pubDate>Thu, 23 Jan 2025 23:36:22 +0800</pubDate><guid>https://blogs.timerring.com/posts/cpu-can-only-see-the-threads/</guid><description>&lt;p>In python, due to the GIL (Global Interpreter Lock), which is a mutex and ensures only one thread can execute at a time, so the multiple threads parallel execution is not supported under the CPython interpreter. But what about the multiple processes? What is the difference between them? How to choose the right method? Do you know the coroutine? Let&amp;rsquo;s explore it together.&lt;/p></description></item><item><title>Go Common Test</title><link>https://blogs.timerring.com/posts/go-common-test/</link><pubDate>Wed, 22 Jan 2025 17:08:47 +0800</pubDate><guid>https://blogs.timerring.com/posts/go-common-test/</guid><description>&lt;p>The test methods in Go mainly include three types: unit test, benchmark test, and example test.&lt;/p></description></item><item><title>Go Concurrency and Parallelism</title><link>https://blogs.timerring.com/posts/go-concurrency-and-parallelism/</link><pubDate>Wed, 22 Jan 2025 14:00:45 +0800</pubDate><guid>https://blogs.timerring.com/posts/go-concurrency-and-parallelism/</guid><description/></item><item><title>Go Cheatsheet</title><link>https://blogs.timerring.com/posts/go-cheatsheet/</link><pubDate>Tue, 21 Jan 2025 18:30:07 +0800</pubDate><guid>https://blogs.timerring.com/posts/go-cheatsheet/</guid><description/></item><item><title>Video Technology 101</title><link>https://blogs.timerring.com/posts/video-technology-101/</link><pubDate>Mon, 20 Jan 2025 11:01:09 +0800</pubDate><guid>https://blogs.timerring.com/posts/video-technology-101/</guid><description>&lt;p>Do you really understand the video technology? What is the &lt;code>frame rate&lt;/code>, &lt;code>resolution&lt;/code>, &lt;code>bit rate&lt;/code> and their relationships? Do you know the parameters &lt;code>p&lt;/code> and &lt;code>K&lt;/code> in the terminology &lt;code>1080p&lt;/code> and &lt;code>4K&lt;/code>? Do you know how to describe the video quality? What is the &lt;code>Blu-ray Disc&lt;/code> on earth? What the difference between the codec such as &lt;code>H.264/AVC&lt;/code>, &lt;code>H.265/HEVC&lt;/code>, &lt;code>AV1&lt;/code>? You may notice the &lt;code>Apple ProRes&lt;/code> in apple, so do you really understand what it for? Do you know the &lt;code>HDR&lt;/code> and &lt;code>Dolby Vision&lt;/code>? So why there are so many tailers such as &lt;code>.mp4&lt;/code>, &lt;code>.mkv&lt;/code>, &lt;code>.flv&lt;/code>, etc?&lt;/p>
&lt;p>Now this Video Technology 101 will introduce them to you.&lt;/p></description></item><item><title>The Main Kind of Message Queue</title><link>https://blogs.timerring.com/posts/the-main-kind-of-message-queue/</link><pubDate>Sun, 19 Jan 2025 20:15:13 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-main-kind-of-message-queue/</guid><description>&lt;p>Message queues are a form of asynchronous service-to-service communication. They are important in enhancing a system&amp;rsquo;s scalability, reliability, and maintainability.&lt;/p></description></item><item><title>The Method to Manage Traffic</title><link>https://blogs.timerring.com/posts/the-method-to-manage-traffic/</link><pubDate>Sun, 19 Jan 2025 17:33:27 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-method-to-manage-traffic/</guid><description>&lt;p>Do you know the basic method to manage the traffic? There are four methods: Load Balancers, Reverse Proxies, Forward Proxies, and API Gateways. And they have different features and usage scenarios.&lt;/p></description></item><item><title>The Different Kind of API Design</title><link>https://blogs.timerring.com/posts/the-different-kind-of-api-design/</link><pubDate>Sun, 19 Jan 2025 14:42:18 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-different-kind-of-api-design/</guid><description>&lt;p>In the daily life, we often hear about different kind of API, such as REST API, GraphQL API, WebSocket, Webhook, RPC and gRPC even the SOAP, so do you know the difference between them? How to choose the right API for your project?&lt;/p></description></item><item><title>The Encode and Decode in Python</title><link>https://blogs.timerring.com/posts/the-encode-and-decode-in-python/</link><pubDate>Sun, 19 Jan 2025 13:07:49 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-encode-and-decode-in-python/</guid><description>&lt;p>Do you really know the encode and decode in Python?&lt;/p></description></item><item><title>About the Systemd</title><link>https://blogs.timerring.com/posts/about-the-systemd/</link><pubDate>Sat, 18 Jan 2025 22:06:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/about-the-systemd/</guid><description>&lt;p>It has been a long time since the linux used &lt;code>init&lt;/code> to manage the startup process, such as &lt;code>sudo /etc/init.d/apache2 start&lt;/code> or &lt;code>service apache2 start&lt;/code>, but the &lt;code>init&lt;/code> is serial. To address this issue, the &lt;code>systemd&lt;/code> was born. The d is the abbreviation of &lt;code>daemon&lt;/code>, which means the &lt;code>systemd&lt;/code> is a daemon manager. The systemd substitutes the initd and becomes the default main process &lt;code>PID 1&lt;/code>.&lt;/p></description></item><item><title>The Tips About Dockerfile</title><link>https://blogs.timerring.com/posts/the-tips-about-dockerfile/</link><pubDate>Sat, 18 Jan 2025 21:05:23 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-tips-about-dockerfile/</guid><description>&lt;p>Normally, we often write a &lt;code>Dockerfile&lt;/code> in the current directory.&lt;/p>
&lt;ul>
&lt;li>The &lt;code>Dockerfile&lt;/code> is a configuration file that describes how to build the image. You can refer to the &lt;a href="https://docs.docker.com/reference/dockerfile/" target="_blank" rel="nofollow noopener">official documentation&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup> for more details.&lt;/li>
&lt;li>If you list &lt;strong>more than one&lt;/strong> &lt;code>CMD&lt;/code>, only the last one takes effect. So if you have multiple commands to run, you better write them in a script file.&lt;/li>
&lt;li>Docker is not the VMware, there is no &lt;code>systemd&lt;/code> in the container. Its startup program is the container application process. The container exists for the main process. Once the main process exits, the container loses its meaning of existence and thus exits. So when you execute multiple commands and if they are blocking, you better write the previous commands in nohup and the last command in the blocking command. (never use the command such as &lt;code>CMD service nginx start&lt;/code>, the CMD only will execute as &lt;code>CMD [ &amp;quot;sh&amp;quot;, &amp;quot;-c&amp;quot;, &amp;quot;service nginx start&amp;quot;]&lt;/code>, when the sh is executed, the container will exit, the correct way is run it directly &lt;code>CMD [&amp;quot;nginx&amp;quot;, &amp;quot;-g&amp;quot;, &amp;quot;daemon off;&amp;quot;]&lt;/code>)&lt;/li>
&lt;/ul></description></item><item><title>Docker Cheatsheet</title><link>https://blogs.timerring.com/posts/docker-cheatsheet/</link><pubDate>Fri, 17 Jan 2025 10:06:35 +0800</pubDate><guid>https://blogs.timerring.com/posts/docker-cheatsheet/</guid><description>&lt;p>This is a cheatsheet of docker.&lt;/p>
&lt;p>Note: the docs will be updated from time to time.&lt;/p></description></item><item><title>Docker 101</title><link>https://blogs.timerring.com/posts/docker-101/</link><pubDate>Thu, 16 Jan 2025 22:33:49 +0800</pubDate><guid>https://blogs.timerring.com/posts/docker-101/</guid><description>&lt;p>Docker is a practical tool for everyday use, and like &lt;code>Git&lt;/code>, you can learn it in just 30 minutes.&lt;/p></description></item><item><title>The Instance Class Static Magic Method in Python</title><link>https://blogs.timerring.com/posts/the-instance-class-static-magic-method-in-python/</link><pubDate>Tue, 14 Jan 2025 21:51:24 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-instance-class-static-magic-method-in-python/</guid><description>&lt;p>So what is the difference between the Instance method, the Class method and the Static method?&lt;/p></description></item><item><title>The Review and Plan for Bilive</title><link>https://blogs.timerring.com/posts/the-review-and-plan-for-bilive/</link><pubDate>Fri, 10 Jan 2025 19:24:37 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-review-and-plan-for-bilive/</guid><description>&lt;p>从 12 月 10 号正式上线生产版本的 &lt;code>bilive&lt;/code> 到现在，已经过去了一个月了。目前 &lt;code>bilive&lt;/code> 的 star 数已经突破了 300，实际用户数应该在 20 ～ 30 之间。当然 star 的数据本身没有什么意义，我真正追求的是使用者，但是 star 数据能够反映出项目实际浏览量，与其他工具类项目相比，我对于 &lt;code>bilive&lt;/code> 的定位更像是一个产品，如何让这个产品积累足够多的用户和反馈，是我目前主要面临的问题。&lt;/p></description></item><item><title>The Overview of Security</title><link>https://blogs.timerring.com/posts/the-overview-of-security/</link><pubDate>Wed, 08 Jan 2025 20:42:43 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-overview-of-security/</guid><description>&lt;p>In today&amp;rsquo;s digital age, security is paramount. As we increasingly rely on technology for communication, commerce, and data storage, understanding the fundamentals of security becomes essential. This article provides an overview of key security concepts, including encryption, digest algorithms, and digital signatures. By exploring these topics, we aim to equip you with the knowledge to protect your digital assets and ensure the integrity and confidentiality of your information. Whether you&amp;rsquo;re a tech enthusiast or a professional in the field, this guide will offer valuable insights into the mechanisms that safeguard our digital world.&lt;/p></description></item><item><title>How to Publish Your Code as a Pip Module</title><link>https://blogs.timerring.com/posts/how-to-publish-your-code-as-a-pip-module/</link><pubDate>Tue, 07 Jan 2025 20:46:08 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-publish-your-code-as-a-pip-module/</guid><description>&lt;p>Last week, I have made a python cli tool. To make it more convenient to use, I want to publish it as a pip module, so I have made some research and mistakes, and finally succeeded.&lt;/p></description></item><item><title>Git Cheatsheet</title><link>https://blogs.timerring.com/posts/git-cheatsheet/</link><pubDate>Tue, 07 Jan 2025 20:39:35 +0800</pubDate><guid>https://blogs.timerring.com/posts/git-cheatsheet/</guid><description>&lt;p>This is a Git cheatsheet that distills my years of experience.&lt;/p>
&lt;ul>
&lt;li>Workspace: The directory of the repository. The working directory is independent of each branch.&lt;/li>
&lt;li>Staging Area (Index): A temporary area for data, similar to a cache before writing from the working directory to the repository. The staging area is independent of each branch.&lt;/li>
&lt;li>Repository: Stores all code versions that have been committed to the local repository.&lt;/li>
&lt;li>Version Structure: A tree structure where each node represents a code version.&lt;/li>
&lt;/ul></description></item><item><title>Some Good Things to Share About the Packages</title><link>https://blogs.timerring.com/posts/some-good-things-to-share-about-the-packages/</link><pubDate>Mon, 06 Jan 2025 19:59:20 +0800</pubDate><guid>https://blogs.timerring.com/posts/some-good-things-to-share-about-the-packages/</guid><description>&lt;p>As a developer, I have been using many packages in my projects. Sometimes I may even forget the existence of the packages. When I changed my devices or some one else asked me, it&amp;rsquo;s hard for me to remember everything to recommend. Thus I will try to list the things which I think are very helpful and useful to share with you. Maybe we can even make an &amp;ldquo;Annual Oscar Awards ceremony&amp;rdquo; for the things.&lt;/p>
&lt;p>Note: This post will be updated regularly.&lt;/p></description></item><item><title>Introduction to the HTTP and HTTPS Protocol</title><link>https://blogs.timerring.com/posts/introduction-to-the-http-and-https-protocol/</link><pubDate>Sat, 04 Jan 2025 15:15:31 +0800</pubDate><guid>https://blogs.timerring.com/posts/introduction-to-the-http-and-https-protocol/</guid><description>&lt;p>HTTP protocol is the foundation of the Internet, and HTTPS is the secure version of HTTP. HTTP is an application layer protocol based on TCP/IP protocol. It does not involve packet (packet) transmission, mainly specifying the communication format between the client and the server, and the default port is 80.&lt;/p></description></item><item><title>Mail Service and Protocol</title><link>https://blogs.timerring.com/posts/mail-service-and-protocol/</link><pubDate>Sat, 04 Jan 2025 10:53:02 +0800</pubDate><guid>https://blogs.timerring.com/posts/mail-service-and-protocol/</guid><description>&lt;p>Recently, I have been working on DNS of my domain name. And then I need to set up the mail service of my domain name. When I tried many times, I always failed to receive the mail on my phone. Suddenly, I remembered that I didn&amp;rsquo;t set up IMAP service. So let&amp;rsquo;s review the mail service and protocol.&lt;/p></description></item><item><title>How to Add Commits to Someone Else's Pull Request</title><link>https://blogs.timerring.com/posts/how-to-add-commits-to-someone-elses-pull-request/</link><pubDate>Fri, 03 Jan 2025 17:06:19 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-add-commits-to-someone-elses-pull-request/</guid><description>&lt;p>Most of time, we need to reply the commiter to adjust some code, sometimes it&amp;rsquo;s not efficient. Instead, we can directly add the commit to the PR.&lt;/p></description></item><item><title>How to Merge Multiple Commit to the One</title><link>https://blogs.timerring.com/posts/how-to-merge-multiple-commit-to-the-one/</link><pubDate>Fri, 03 Jan 2025 17:05:15 +0800</pubDate><guid>https://blogs.timerring.com/posts/how-to-merge-multiple-commit-to-the-one/</guid><description>&lt;p>Sometimes we make too many small commits during development, and it&amp;rsquo;s better to squash them into one clean commit before pushing. Here&amp;rsquo;s how to use &lt;code>git rebase -i&lt;/code> to merge multiple commits.&lt;/p></description></item><item><title>Understanding Clash Through Configuration</title><link>https://blogs.timerring.com/posts/understanding-clash-through-configuration/</link><pubDate>Thu, 02 Jan 2025 15:11:55 +0800</pubDate><guid>https://blogs.timerring.com/posts/understanding-clash-through-configuration/</guid><description>&lt;p>We can learn the proxy process of clash through the configuration file.&lt;/p></description></item><item><title>Thinking About Advertisement from an Open Source Perspective</title><link>https://blogs.timerring.com/posts/thinking-about-advertisement-from-an-open-source-perspective/</link><pubDate>Fri, 27 Dec 2024 15:17:09 +0800</pubDate><guid>https://blogs.timerring.com/posts/thinking-about-advertisement-from-an-open-source-perspective/</guid><description>&lt;p>我在本科期间听到过很多关于广告论调，仍记得某位教授对于短视频所代表的互联网深恶痛绝，在课堂上批判广告的价值，抨击广告行业的浮躁。我身边的同学也大抵持相同的观点，认为互联网广告就是智商税，广告的目的是为了卖课，卖课的目的是为了收割。可事实真的如此吗？&lt;/p></description></item><item><title>A Brief Introduction to DNS</title><link>https://blogs.timerring.com/posts/a-brief-introduction-to-dns/</link><pubDate>Thu, 26 Dec 2024 21:10:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/a-brief-introduction-to-dns/</guid><description>&lt;p>In my mind, DNS is the key of the internet. I always believe if you control the DNS, you control the Internet world. So let us get started to know the DNS.&lt;/p></description></item><item><title>Real Computer Network</title><link>https://blogs.timerring.com/posts/real-computer-network/</link><pubDate>Mon, 23 Dec 2024 20:06:18 +0800</pubDate><guid>https://blogs.timerring.com/posts/real-computer-network/</guid><description>&lt;p>For the computer network, I believe that most people have learned it in the course of university or college. No matter whether you are familiar with it or not, this article will give you a different perspective of the network. It can really help you a lot.&lt;/p></description></item><item><title>Python Generator Iterator and Decorator</title><link>https://blogs.timerring.com/posts/python-generator-iterator-and-decorator/</link><pubDate>Mon, 23 Dec 2024 19:19:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-generator-iterator-and-decorator/</guid><description>&lt;p>This article will review the basic knowledge of Python, including generator, iterator, and decorator.&lt;/p></description></item><item><title>Python Underlying Mechanism</title><link>https://blogs.timerring.com/posts/python-underlying-mechanism/</link><pubDate>Mon, 23 Dec 2024 19:12:31 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-underlying-mechanism/</guid><description>&lt;p>This article will review the underlying mechanism of Python, including data types and derivation operations.&lt;/p></description></item><item><title>Python Files Exceptions and Modules</title><link>https://blogs.timerring.com/posts/python-files-exceptions-and-modules/</link><pubDate>Mon, 23 Dec 2024 19:02:35 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-files-exceptions-and-modules/</guid><description>&lt;p>This article will review the basic knowledge of Python, including files, exceptions, and modules.&lt;/p></description></item><item><title>Python Object Oriented Programming</title><link>https://blogs.timerring.com/posts/python-object-oriented-programming/</link><pubDate>Mon, 23 Dec 2024 18:23:06 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-object-oriented-programming/</guid><description>&lt;p>This article will review the object-oriented programming of Python. Mainly about the class, inheritance, and polymorphism.&lt;/p></description></item><item><title>Python Cheatsheet</title><link>https://blogs.timerring.com/posts/python-cheatsheet/</link><pubDate>Sun, 22 Dec 2024 00:09:26 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-cheatsheet/</guid><description/></item><item><title>Python Function Parameter</title><link>https://blogs.timerring.com/posts/python-function-parameter/</link><pubDate>Sat, 21 Dec 2024 22:09:09 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-function-parameter/</guid><description>&lt;p>This blog will review the function parameter of Python. Mainly about the parameter passing, Keyword and Position Parameter, Anonymous Function, and unit test with &lt;code>assert&lt;/code>.&lt;/p></description></item><item><title>Python Control Structure</title><link>https://blogs.timerring.com/posts/python-control-structure/</link><pubDate>Sat, 21 Dec 2024 20:26:15 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-control-structure/</guid><description>&lt;p>This blog will review the control structure of Python.&lt;/p></description></item><item><title>Python Composite Data Type</title><link>https://blogs.timerring.com/posts/python-composite-data-type/</link><pubDate>Sat, 21 Dec 2024 19:38:25 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-composite-data-type/</guid><description>&lt;p>This article will review the composite data type in Python, such as &lt;code>list&lt;/code>, &lt;code>tuple&lt;/code>, &lt;code>dictionary&lt;/code>, and &lt;code>set&lt;/code>.&lt;/p></description></item><item><title>Python Basic Data Type</title><link>https://blogs.timerring.com/posts/python-basic-data-type/</link><pubDate>Sat, 21 Dec 2024 16:51:57 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-basic-data-type/</guid><description>&lt;p>This article will explore data types and common methods for them in Python.
The content of this review is as follows: &lt;code>number type&lt;/code>, &lt;code>string type&lt;/code>, &lt;code>boolean type&lt;/code> and &lt;code>type conversion&lt;/code>.&lt;/p></description></item><item><title>Python Basic Syntax Elements</title><link>https://blogs.timerring.com/posts/python-basic-syntax-elements/</link><pubDate>Fri, 20 Dec 2024 23:19:25 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-basic-syntax-elements/</guid><description>&lt;p>Sometimes you may forget about the basic of Python, so let us take a look at the summary of Python basic summary. The content of this review is as follows: &lt;code>data type&lt;/code>, &lt;code>variable&lt;/code>, &lt;code>control flow&lt;/code>, &lt;code>input &amp;amp; output&lt;/code>, &lt;code>PEP8 format&lt;/code>.&lt;/p></description></item><item><title>Deploy Github Pages With GPG Signing</title><link>https://blogs.timerring.com/posts/deploy-github-pages-with-gpg-signing/</link><pubDate>Wed, 18 Dec 2024 23:25:21 +0800</pubDate><guid>https://blogs.timerring.com/posts/deploy-github-pages-with-gpg-signing/</guid><description>&lt;p>I have been busy migrating my blog this week. Coincidentally, I learned that there may be cases of commit forgery on GitHub. Therefore, for security reasons, I added a GPG signature. However, when deploying Hugo, I encountered many problems regarding whether GPG signatures can also be used. Fortunately, I finally solved them.&lt;/p></description></item><item><title>GPG 101</title><link>https://blogs.timerring.com/posts/gpg-101/</link><pubDate>Tue, 17 Dec 2024 20:26:57 +0800</pubDate><guid>https://blogs.timerring.com/posts/gpg-101/</guid><description>&lt;blockquote>
&lt;p>GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880(also known as PGP). GnuPG allows you to encrypt and sign your data and communications; it features a versatile key management system, along with access modules for all kinds of public key directories. GnuPG, also known as GPG, is a command line tool with features for easy integration with other applications.&lt;/p>
&lt;/blockquote>
&lt;p>This article I will introduce the basic usage of GPG.&lt;/p></description></item><item><title>Housewarming 2024</title><link>https://blogs.timerring.com/posts/housewarming-2024/</link><pubDate>Sat, 14 Dec 2024 14:53:36 +0800</pubDate><guid>https://blogs.timerring.com/posts/housewarming-2024/</guid><description>&lt;p>So after a long time, I decide to restart my blog program. In my daily development, I have a lot of thoughts and ideas, thus I will write some documents to record them. But I believe that sharing is the best way to learn. A specific example is &lt;code>cryptography&lt;/code>, which means the closing source algorithm is never the safest. Only algorithms that have been vetted by the public are truly secure.&lt;/p></description></item><item><title>The macOS Cheatsheet</title><link>https://blogs.timerring.com/posts/the-macos-cheatsheet/</link><pubDate>Wed, 28 Aug 2024 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/the-macos-cheatsheet/</guid><description>&lt;p>整理常用的 macOS 键盘快捷键与触控板操作。这里的 &lt;code>⌘&lt;/code> 表示 Command，&lt;code>⌥&lt;/code> 表示 Option，&lt;code>⌃&lt;/code> 表示 Control；有些组合键的效果取决于当前应用及系统设置。&lt;/p></description></item><item><title>Building a RAG Chatbot with NVIDIA AI Endpoints</title><link>https://blogs.timerring.com/posts/nvidia-rag-chatbot/</link><pubDate>Sun, 18 Aug 2024 10:15:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/nvidia-rag-chatbot/</guid><description>&lt;p>基于 NVIDIA AI Endpoint、LangChain 和 FAISS 构建 RAG 智能对话机器人，实践商品问答与检索增强生成。&lt;/p></description></item><item><title>Python Linear Algebra</title><link>https://blogs.timerring.com/posts/python-d2l-linear-algebra/</link><pubDate>Sun, 14 Jul 2024 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-d2l-linear-algebra/</guid><description>&lt;h3 id="scalar">
 Scalar
 &lt;a class="anchor" href="#scalar">#&lt;/a>
&lt;/h3>
&lt;p>Scalar variables are denoted by ordinary lowercase letters (for example, $x$, $y$, and $z$). $\mathbb{R}$ denotes the space of all (continuous) &lt;em>real-valued&lt;/em> scalars, and $x\in\mathbb{R}$ is the formal way to say that $x$ is a real-valued scalar. &lt;strong>A scalar is represented by a tensor with only one element&lt;/strong>.&lt;/p></description></item><item><title>Python Data Preprocessing</title><link>https://blogs.timerring.com/posts/python-d2l-data-preprocessing/</link><pubDate>Fri, 12 Jul 2024 23:17:46 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-d2l-data-preprocessing/</guid><description>&lt;h3 id="reading-the-dataset">
 Reading the Dataset
 &lt;a class="anchor" href="#reading-the-dataset">#&lt;/a>
&lt;/h3>
&lt;p>The data is stored in the CSV (comma-separated values) file &lt;code>../data/house_tiny.csv&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">makedirs&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;..&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;data&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">exist_ok&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data_file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;..&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;data&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;house_tiny.csv&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;NumRooms,Alley,Price&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># Column names&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;NA,Pave,127500&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># Each row represents one data sample&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;2,NA,106000&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;4,NA,178100&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;NA,NA,140000&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># To load the raw dataset from the CSV file we created, import `pandas` and call `read_csv`.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># !pip install pandas&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">pandas&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">pd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read_csv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_file&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NumRooms Alley Price&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 0 NaN Pave 127500&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1 2.0 NaN 106000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2 4.0 NaN 178100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3 NaN NaN 140000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Python Data Manipulation</title><link>https://blogs.timerring.com/posts/python-d2l-data-manipulation/</link><pubDate>Fri, 12 Jul 2024 22:58:44 +0800</pubDate><guid>https://blogs.timerring.com/posts/python-d2l-data-manipulation/</guid><description>&lt;p>&lt;strong>An $n$-dimensional array is also called a &lt;em>tensor&lt;/em>.&lt;/strong> Regardless of the deep learning framework, its &lt;em>tensor class&lt;/em> (&lt;code>ndarray&lt;/code> in MXNet and &lt;code>Tensor&lt;/code> in PyTorch and TensorFlow) is similar to NumPy&amp;rsquo;s &lt;code>ndarray&lt;/code>.
During deep learning training, we usually do not read images one at a time. Instead, we might read 128 images at once. This is a batch, represented by a four-dimensional array.
&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20240712225844.png" alt="" />
Deep learning frameworks also offer important features beyond NumPy&amp;rsquo;s &lt;code>ndarray&lt;/code>:&lt;/p>
&lt;ol>
&lt;li>Strong &lt;strong>support for GPU-accelerated computation&lt;/strong>, while NumPy supports only CPU computation;&lt;/li>
&lt;li>&lt;strong>Automatic differentiation in tensor classes&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>A tensor with one axis corresponds to a mathematical &lt;em>vector&lt;/em>;
A tensor with two axes corresponds to a mathematical &lt;em>matrix&lt;/em>.&lt;/p>
&lt;/blockquote></description></item><item><title>My Must Haves for Macos Memo</title><link>https://blogs.timerring.com/posts/my-must-haves-for-macos-memo/</link><pubDate>Sat, 22 Jun 2024 15:53:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/my-must-haves-for-macos-memo/</guid><description>&lt;p>This article will share my must-haves for Macos in order to make my Macos more efficient and comfortable.&lt;/p></description></item><item><title>Data Export</title><link>https://blogs.timerring.com/posts/04-data-export/</link><pubDate>Sun, 25 Feb 2024 19:47:10 +0800</pubDate><guid>https://blogs.timerring.com/posts/04-data-export/</guid><description>&lt;h2 id="1-export-data">
 1. Export data
 &lt;a class="anchor" href="#1-export-data">#&lt;/a>
&lt;/h2>
&lt;p>Since R is mainly used for data analysis, import files are more commonly used than export files, but sometimes we also need to export data or analysis results. The functions &lt;code>write.table( )&lt;/code> and &lt;code>write.csv( )&lt;/code> can export data to a .txt file and a .csv file, respectively.&lt;/p>
&lt;p>In addition, the function &lt;code>save( )&lt;/code> can save the specified object in the workspace as an R data file with the extension &lt;code>.rdata&lt;/code>. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-R" data-lang="R">&lt;span class="line">&lt;span class="cl">&lt;span class="n">ID&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="m">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sex&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;male&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;female&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;male&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;female&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;male&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">age&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="m">25&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">34&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">38&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">28&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">52&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pain&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">3&lt;/span>&lt;span class="p">)&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pain.f&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pain&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">levels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="m">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;mild&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;medium&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;severe&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">patients&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">data.frame&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ID&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">age&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">pain.f&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">save&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">patients&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;patients.rdata&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># IMPORT DATA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">load&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;patients.rdata&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>the rdata format file takes up less space and loads quickly with R. Therefore, it is recommended that users ** save data in rdata format ** after importing and organizing data in other formats. To import data in this format, simply call the &lt;code>load( )&lt;/code> function.&lt;/p></description></item><item><title>Strategies for Processing Large Datasets</title><link>https://blogs.timerring.com/posts/09-strategies-for-large-datasets/</link><pubDate>Sun, 25 Feb 2024 19:47:08 +0800</pubDate><guid>https://blogs.timerring.com/posts/09-strategies-for-large-datasets/</guid><description>&lt;p>In real-world problems, data analysts may face datasets with hundreds of thousands of records and hundreds of variables. Processing such large datasets requires a relatively large amount of computer memory, so &lt;strong>use a 64-bit operating system and a device with relatively large memory whenever possible&lt;/strong>. Otherwise, data analysis may take too long or may even be impossible to carry out. In addition, &lt;strong>effective strategies for processing data&lt;/strong> can greatly improve analysis efficiency.&lt;/p></description></item><item><title>11 Multithreading and Locks</title><link>https://blogs.timerring.com/posts/java-11-multithreading-and-locks/</link><pubDate>Sat, 13 Jan 2024 19:57:43 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-11-multithreading-and-locks/</guid><description>&lt;h3 id="111-multithreading">
 11.1 Multithreading
 &lt;a class="anchor" href="#111-multithreading">#&lt;/a>
&lt;/h3>
&lt;h4 id="1111-implementing-multithreading">
 11.1.1 Implementing Multithreading
 &lt;a class="anchor" href="#1111-implementing-multithreading">#&lt;/a>
&lt;/h4>
&lt;p>Approach 1: Extend the Thread class.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">class&lt;/span> &lt;span class="nc">Worker&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">extends&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Override&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">run&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello! &amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">getName&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">try&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">1000&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">InterruptedException&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">throw&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">RuntimeException&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Worker&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">worker1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Worker&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Worker&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">worker2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Worker&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">worker1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">setName&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;thread-1&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">worker2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">setName&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;thread-2&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">worker1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">start&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">worker2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">start&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>10 Annotations and Reflection</title><link>https://blogs.timerring.com/posts/java-10-annotations-and-reflection/</link><pubDate>Fri, 12 Jan 2024 21:32:06 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-10-annotations-and-reflection/</guid><description>&lt;h3 id="101-annotations">
 10.1 Annotations
 &lt;a class="anchor" href="#101-annotations">#&lt;/a>
&lt;/h3>
&lt;p>(1) Annotations, also called metadata, describe packages, methods, fields, constructors, local variables, and other program elements.&lt;br>
(2) Annotations do not affect program logic, but can be processed at compile time or runtime.&lt;br>
(3) In Java SE, annotations serve relatively simple purposes, such as marking obsolete features or suppressing warnings. In Java EE, they play a more important role, such as configuring aspects of an application in place of the verbose code and XML configuration left over from older Java EE versions.&lt;/p></description></item><item><title>09 Exception Handling</title><link>https://blogs.timerring.com/posts/java-09-exception-handling/</link><pubDate>Thu, 11 Jan 2024 11:37:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-09-exception-handling/</guid><description>&lt;h4 id="1-differences-between-error-and-exception">
 1. Differences Between Error and Exception
 &lt;a class="anchor" href="#1-differences-between-error-and-exception">#&lt;/a>
&lt;/h4>
&lt;p>An Error is a failure that a program cannot handle, such as OutOfMemoryError or ThreadDeath. When these occur, the Java Virtual Machine (JVM) generally terminates the thread. Such failures are fatal to the program and cannot be caught and handled.&lt;/p>
&lt;p>An Exception is an exceptional condition that the program itself can handle. Exceptions fall into two categories: runtime and non-runtime exceptions. Programs should handle these exceptions whenever possible.&lt;/p></description></item><item><title>08 Common Containers</title><link>https://blogs.timerring.com/posts/java-08-common-containers/</link><pubDate>Wed, 10 Jan 2024 20:49:57 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-08-common-containers/</guid><description>&lt;h4 id="81-list">
 8.1 List
 &lt;a class="anchor" href="#81-list">#&lt;/a>
&lt;/h4>
&lt;p>Interface: &lt;code>java.util.List&amp;lt;&amp;gt;&lt;/code>.&lt;/p>
&lt;p>Implementations:&lt;/p>
&lt;ul>
&lt;li>&lt;code>java.util.ArrayList&amp;lt;&amp;gt;&lt;/code>: resizable array&lt;/li>
&lt;li>&lt;code>java.util.LinkedList&amp;lt;&amp;gt;&lt;/code>: doubly linked list&lt;/li>
&lt;/ul>
&lt;p>Methods:&lt;/p>
&lt;ul>
&lt;li>&lt;code>add()&lt;/code>: add an element at the end&lt;/li>
&lt;li>&lt;code>clear()&lt;/code>: clear the list&lt;/li>
&lt;li>&lt;code>size()&lt;/code>: return its length&lt;/li>
&lt;li>&lt;code>isEmpty()&lt;/code>: check whether it is empty&lt;/li>
&lt;li>&lt;code>get(i)&lt;/code>: get the &lt;code>i&lt;/code>th element&lt;/li>
&lt;li>&lt;code>set(i, val)&lt;/code>: set the &lt;code>i&lt;/code>th element to &lt;code>val&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Loop syntax:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Standard&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">size&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w"> 
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">));&lt;/span>&lt;span class="w"> 
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">// Enhanced&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">integer&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w"> 
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">integer&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w"> 
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>07 Classes and Interfaces</title><link>https://blogs.timerring.com/posts/java-07-classes-and-interfaces/</link><pubDate>Tue, 09 Jan 2024 22:24:11 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-07-classes-and-interfaces/</guid><description>&lt;h4 id="71-classes-and-objects">
 7.1 Classes and Objects
 &lt;a class="anchor" href="#71-classes-and-objects">#&lt;/a>
&lt;/h4>
&lt;p>A class defines an entirely new data type containing a group of variables and functions; an object is an instance of that class.&lt;/p>
&lt;blockquote>
&lt;p>Defining &lt;code>Student&lt;/code> as a class represents the abstract concept of a “student.” Each student is then an object (instance) of the &lt;code>Student&lt;/code> class.&lt;/p>
&lt;/blockquote></description></item><item><title>06 Functions</title><link>https://blogs.timerring.com/posts/java-06-functions/</link><pubDate>Mon, 08 Jan 2024 19:18:32 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-06-functions/</guid><description>&lt;h2 id="function-basics">
 Function Basics
 &lt;a class="anchor" href="#function-basics">#&lt;/a>
&lt;/h2>
&lt;p>A typical function definition includes the following parts: modifiers, return type, function name, a list of zero or more parameters, and the function body.&lt;/p></description></item><item><title>05 Strings</title><link>https://blogs.timerring.com/posts/java-05-strings/</link><pubDate>Sun, 07 Jan 2024 21:53:46 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-05-strings/</guid><description>&lt;h4 id="1-characters-and-integers--ascii-codes">
 1. Characters and Integers — ASCII Codes
 &lt;a class="anchor" href="#1-characters-and-integers--ascii-codes">#&lt;/a>
&lt;/h4>
&lt;p>Each commonly used character corresponds to a number in &lt;code>-128 ~ 127&lt;/code>, and the two can be converted to each other. Note: currently, negative numbers have no corresponding characters.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.util.Arrays&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">66&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Common ASCII values: &lt;code>'A'- 'Z'&lt;/code> are &lt;code>65 ~ 90&lt;/code>, &lt;code>'a' - 'z'&lt;/code> are &lt;code>97 - 122&lt;/code>, and &lt;code>0 - 9&lt;/code> are &lt;code>48 - 57&lt;/code>.&lt;/p>
&lt;p>In Java, &lt;strong>character literals must be enclosed in single quotes&lt;/strong> and &lt;strong>string literals in double quotes&lt;/strong>. They are distinct. (Python and JS do not make this distinction.)&lt;/p>
&lt;p>Characters can participate in arithmetic; they are treated as integers during operations:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.util.Arrays&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;B&amp;#39;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;B&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="sc">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c1">// 1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>04 Arrays</title><link>https://blogs.timerring.com/posts/java-04-arrays/</link><pubDate>Sat, 06 Jan 2024 20:36:19 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-04-arrays/</guid><description>&lt;h4 id="one-dimensional-arrays">
 One-Dimensional Arrays
 &lt;a class="anchor" href="#one-dimensional-arrays">#&lt;/a>
&lt;/h4>
&lt;h5 id="defining-arrays">
 Defining Arrays
 &lt;a class="anchor" href="#defining-arrays">#&lt;/a>
&lt;/h5>
&lt;p>Array definitions are similar to variable definitions.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">	 &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="c1">// Definition: define an array a&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">		&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c1">// Initialization: initialize a as an array of length 10, meaning a contains 10 int variables; equivalent to =&amp;gt;int[] a = new int[10]// Define and initialize at the same time&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">33&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">double&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">double&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">123&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">21&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c1">// Arrays can be defined for more than just primitive data types; String arrays can also be defined&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">strs&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[&lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="c1">// This array contains 10 String variables&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>03 Loops</title><link>https://blogs.timerring.com/posts/java-03-loops/</link><pubDate>Fri, 05 Jan 2024 22:07:53 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-03-loops/</guid><description>&lt;p>Use &lt;code>==&lt;/code> to compare primitive data types for equality; for other types (such as strings and functions), use equals to compare them.&lt;/p></description></item><item><title>02 Conditional Statements</title><link>https://blogs.timerring.com/posts/java-02-conditional-statements/</link><pubDate>Thu, 04 Jan 2024 19:42:08 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-02-conditional-statements/</guid><description>&lt;h2 id="if-statements">
 If Statements
 &lt;a class="anchor" href="#if-statements">#&lt;/a>
&lt;/h2>
&lt;p>&lt;code>if-else&lt;/code> statements can also contain other &lt;code>if-else&lt;/code> statements.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.util.Scanner&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Scanner&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Scanner&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">in&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">nextInt&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">nextInt&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">nextInt&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Chained &lt;code>if-else&lt;/code> statements&lt;/p>
&lt;p>Enter a score between 0 and 100.&lt;br>
If it is at least 85, output A;&lt;br>
if it is at least 70 but less than 85, output B;&lt;br>
if it is at least 60 but less than 70, output C;&lt;br>
if it is less than 60, output D.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.util.Scanner&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Main&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Scanner&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Scanner&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">in&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">sc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">nextInt&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">85&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;A&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">70&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;B&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">60&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;C&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;D&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>01 Variables, Operators, Expressions, Input and Output</title><link>https://blogs.timerring.com/posts/java-01-variables-operators-expressions-input-output/</link><pubDate>Wed, 03 Jan 2024 21:14:37 +0800</pubDate><guid>https://blogs.timerring.com/posts/java-01-variables-operators-expressions-input-output/</guid><description>&lt;h2 id="syntax-basics">
 Syntax Basics
 &lt;a class="anchor" href="#syntax-basics">#&lt;/a>
&lt;/h2>
&lt;h3 id="variables">
 Variables
 &lt;a class="anchor" href="#variables">#&lt;/a>
&lt;/h3>
&lt;ol>
&lt;li>In Java, outputting a variable without assigning it a value causes an error.&lt;/li>
&lt;li>Built-in data types&lt;/li>
&lt;/ol>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Type&lt;/th>
 &lt;th style="text-align: left">Bytes&lt;/th>
 &lt;th style="text-align: left">Example&lt;/th>
 &lt;th style="text-align: left">Additional notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">byte&lt;/td>
 &lt;td style="text-align: left">1&lt;/td>
 &lt;td style="text-align: left">123&lt;/td>
 &lt;td style="text-align: left">&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">short&lt;/td>
 &lt;td style="text-align: left">2&lt;/td>
 &lt;td style="text-align: left">12345&lt;/td>
 &lt;td style="text-align: left">$2^{16}=65536$&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">int&lt;/td>
 &lt;td style="text-align: left">4&lt;/td>
 &lt;td style="text-align: left">123456789&lt;/td>
 &lt;td style="text-align: left">$2^{32}=2147483648≈2.1*10^9$&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">long&lt;/td>
 &lt;td style="text-align: left">8&lt;/td>
 &lt;td style="text-align: left">1234567891011L&lt;/td>
 &lt;td style="text-align: left">$2^{64}≈10^{18}$&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">float&lt;/td>
 &lt;td style="text-align: left">4&lt;/td>
 &lt;td style="text-align: left">1.2F&lt;/td>
 &lt;td style="text-align: left">About 6 or 7 significant decimal digits; subsequent digits are imprecise approximations. To explicitly denote a float, append f or F.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">double&lt;/td>
 &lt;td style="text-align: left">8&lt;/td>
 &lt;td style="text-align: left">1.2, 1.2D&lt;/td>
 &lt;td style="text-align: left">About 15 or 16 significant decimal digits; subsequent digits are imprecise approximations. To explicitly denote a double, append d or D.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">boolean&lt;/td>
 &lt;td style="text-align: left">1&lt;/td>
 &lt;td style="text-align: left">true, false&lt;/td>
 &lt;td style="text-align: left">&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">char&lt;/td>
 &lt;td style="text-align: left">2&lt;/td>
 &lt;td style="text-align: left">‘A’&lt;/td>
 &lt;td style="text-align: left">ASCII code correspondences: a-97 A-65 0-48&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Density Plotting</title><link>https://blogs.timerring.com/posts/density-plotting/</link><pubDate>Thu, 31 Aug 2023 22:19:04 +0800</pubDate><guid>https://blogs.timerring.com/posts/density-plotting/</guid><description>&lt;p>Seaborn&amp;rsquo;s &lt;code>kdeplot() &lt;/code> function is one way to draw density plots in Python. At present, Matplotlib does not have a specific function for drawing density plots, and plotting is generally performed in combination with the result of the &lt;code>gaussian_kde()&lt;/code> function in the Scipy library.&lt;/p>
&lt;p>The &lt;code>neighbors.KernelDensity ()&lt;/code> module in Python&amp;rsquo;s scikit-learn library provides six kernel functions—Gaussian, Tophat, Epanechnikov, Exponential, Linear, and Cosine—for kernel density estimation calculations. Python&amp;rsquo;s KDEpy library provides as many as nine kernel functions, including Gaussian, Exponential, Box, Tri, Epa, Biweight, Triweight, Tricube,
Cosine.&lt;/p>
&lt;p>A schematic diagram of the nine kernel functions in the KDEpy library is shown below:&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230831221904.png" alt="" />&lt;/p></description></item><item><title>Types of Univariate Plots for Continuous Variables</title><link>https://blogs.timerring.com/posts/univariate-plots-for-continuous-variables/</link><pubDate>Tue, 29 Aug 2023 18:32:03 +0800</pubDate><guid>https://blogs.timerring.com/posts/univariate-plots-for-continuous-variables/</guid><description>&lt;p>A univariate plot (chart for one variable) refers to drawing a corresponding plot using one variable from a dataset. To visualize this variable, a plot must be drawn according to the different data variable types. Data variables are divided into continuous variables and discrete variables.&lt;/p></description></item><item><title>Message Queues and Kafka Basics</title><link>https://blogs.timerring.com/posts/message-queues-and-kafka-basics/</link><pubDate>Sun, 27 Aug 2023 21:57:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/message-queues-and-kafka-basics/</guid><description>&lt;h2 id="走进消息队列">
 走进消息队列
 &lt;a class="anchor" href="#%e8%b5%b0%e8%bf%9b%e6%b6%88%e6%81%af%e9%98%9f%e5%88%97">#&lt;/a>
&lt;/h2>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827215758.png" alt="" />&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827215841.png" alt="" />&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827215912.png" alt="" />&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827220047.png" alt="" />
面对存储行为服务崩溃的时候，可以采用解耦的方式，将记录加入消息队列中，然后作为生产者，此时存储服务作为一个消费者来消耗。&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827220224.png" alt="" />&lt;/p>
&lt;p>面对多个请求同时进行时，可以采用削峰的方式解决，将订单也加入消息队列中，然后每次只处理 10 个请求。&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827220359.png" alt="" />&lt;/p>
&lt;p>把发起订单的请求放入消息队列中，这时就可以通知客户下单成功了，然后将下面的三个请求异步地执行即可。&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827220559.png" alt="" />&lt;/p>
&lt;p>将日志放入消息队列中，然后通过日志的相关组件例如 ES 引擎等等，Kibana 展示平台进行分析。&lt;/p></description></item><item><title>TOS Object Storage: Fundamentals and Architecture</title><link>https://blogs.timerring.com/posts/tos-object-storage/</link><pubDate>Sun, 27 Aug 2023 17:20:40 +0800</pubDate><guid>https://blogs.timerring.com/posts/tos-object-storage/</guid><description>&lt;h2 id="抖音背后的存储">
 抖音背后的存储
 &lt;a class="anchor" href="#%e6%8a%96%e9%9f%b3%e8%83%8c%e5%90%8e%e7%9a%84%e5%ad%98%e5%82%a8">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>短视频生产/消费：片源系统-&amp;gt;审核系统-&amp;gt;推荐系统&lt;/li>
&lt;li>公共系统：客户端、账号系统、评论系统&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827172040.png" alt="" />&lt;/p>
&lt;p>处理流程：&lt;/p>
&lt;ol>
&lt;li>手机上传视频到片源服务，片源服务将视频存储。&lt;/li>
&lt;li>片源服务将视频发送抽帧服务和转码服务。&lt;/li>
&lt;li>抽帧服务将视频抽帧采样并存储。&lt;/li>
&lt;li>转码服务将原视频转换为不同清晰度、不同码率的视频并存储。&lt;/li>
&lt;li>抽帧后的图片被送往审核服务。&lt;/li>
&lt;li>机器或人工审核过后视频被传给推荐服务。&lt;/li>
&lt;li>用户可以获取推荐列表或下载推荐视频/图片。&lt;/li>
&lt;/ol>
&lt;p>存储量分析：&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230827172100.png" alt="" />&lt;/p>
&lt;p>因此存储要求：易用、海量、便宜。&lt;/p></description></item><item><title>SciencePlots Basics and Features</title><link>https://blogs.timerring.com/posts/scienceplots-basics-and-features/</link><pubDate>Sat, 26 Aug 2023 16:38:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/scienceplots-basics-and-features/</guid><description>&lt;p>Users sometimes need to customize layer properties such as fonts, tick axes, spines, and legends according to a journal&amp;rsquo;s figure-drawing requirements, which is time-consuming and can also easily cause users to overlook some layer-detail requirements.&lt;/p>
&lt;p>As a third-party extension toolkit specifically for drawing scientific-paper figures, SciencePlots provides Matplotlib plot styles (Matplotlib Styles) for mainstream English-language scientific journals (such as Nature, Science, and IEEE).&lt;/p>
&lt;p>The installation code for SciencePlots is as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">pip install SciencePlots
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>ProPlot Basics and Features</title><link>https://blogs.timerring.com/posts/proplot-basics-and-features/</link><pubDate>Fri, 25 Aug 2023 09:46:57 +0800</pubDate><guid>https://blogs.timerring.com/posts/proplot-basics-and-features/</guid><description>&lt;p>Figures for scientific papers impose higher requirements on the rendering conditions of multilayer elements (fonts, axes, legends, etc.), and we need to change multiple rendering parameters in Matplotlib and Seaborn, especially when drawing complex figures containing multiple subplots, which can easily make the plotting code verbose.&lt;/p>
&lt;p>As a concise Matplotlib wrapper, the ProPlot library is a high-level wrapper for Matplotlib&amp;rsquo;s object-oriented plotting method (object-oriented interface), integrating the &lt;strong>cartopy/Basemap mapping libraries&lt;/strong>, &lt;strong>xarray&lt;/strong>, and &lt;strong>pandas&lt;/strong>, and can compensate for some of Matplotlib&amp;rsquo;s shortcomings. ProPlot can give Matplotlib enthusiasts a smoother plotting experience.&lt;/p></description></item><item><title>Seaborn Basics and Features</title><link>https://blogs.timerring.com/posts/seaborn-basics-and-features/</link><pubDate>Thu, 24 Aug 2023 23:37:29 +0800</pubDate><guid>https://blogs.timerring.com/posts/seaborn-basics-and-features/</guid><description>&lt;p>Seaborn provides a more advanced encapsulation on top of Matplotlib, enabling users to use very little code to draw a visualization library for scientific paper figures with rich statistical information. Seaborn is based on Matplotlib, most parameters of plotting functions in Matplotlib can be used in Seaborn plotting functions, and it provides good support for other Python libraries (such as Numpy/Pandas/Scipy).&lt;/p>
&lt;p>Install Matplotlib&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">python -m pip install matplotlib
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Install Seaborn&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">pip install seaborn
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Foundations of Scientific Figure Design and Color</title><link>https://blogs.timerring.com/posts/foundations-of-scientific-figure-design-and-color/</link><pubDate>Wed, 23 Aug 2023 17:12:42 +0800</pubDate><guid>https://blogs.timerring.com/posts/foundations-of-scientific-figure-design-and-color/</guid><description>&lt;h2 id="fundamentals-of-drawing-scientific-paper-figures">
 Fundamentals of Drawing Scientific Paper Figures
 &lt;a class="anchor" href="#fundamentals-of-drawing-scientific-paper-figures">#&lt;/a>
&lt;/h2>
&lt;h3 id="drawing-specifications">
 Drawing Specifications
 &lt;a class="anchor" href="#drawing-specifications">#&lt;/a>
&lt;/h3>
&lt;h4 id="1classification-and-composition-of-scientific-paper-figures">
 1.Classification and Composition of Scientific Paper Figures
 &lt;a class="anchor" href="#1classification-and-composition-of-scientific-paper-figures">#&lt;/a>
&lt;/h4>
&lt;p>Example of the basic composition of a scientific paper figure&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230823171242.png" alt="" />&lt;/p></description></item><item><title>Plotting Tools and Their Key Features</title><link>https://blogs.timerring.com/posts/plotting-tools-and-key-features/</link><pubDate>Tue, 22 Aug 2023 18:41:14 +0800</pubDate><guid>https://blogs.timerring.com/posts/plotting-tools-and-key-features/</guid><description>&lt;p>Python has multiple third-party libraries, including the basic plotting library Matplotlib, the statistical analysis visualization library Seaborn, the scientific plotting library ProPlot, and the scientific plotting theme library SciencePlots.&lt;/p></description></item><item><title>Numerical Descriptive Analysis</title><link>https://blogs.timerring.com/posts/12-numerical-descriptive-analysis/</link><pubDate>Sun, 20 Aug 2023 22:56:22 +0800</pubDate><guid>https://blogs.timerring.com/posts/12-numerical-descriptive-analysis/</guid><description>&lt;p>Before the analysis, first convert the categorical variables low, race, smoke, ht, and ui in the birthwt dataset into factors.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-R" data-lang="R">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MASS&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">data&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">birthwt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">birthwt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">options&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">warn&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">-1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dplyr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">birthwt&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="n">birthwt&lt;/span> &lt;span class="o">%&amp;gt;%&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">mutate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">low&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">low&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;no&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;yes&amp;#34;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">race&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">race&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;white&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;black&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;other&amp;#34;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">smoke&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">smoke&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;no&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;yes&amp;#34;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ht&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ht&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;no&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;yes&amp;#34;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ui&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ui&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">labels&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">c&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;no&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;yes&amp;#34;&lt;/span>&lt;span class="p">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">birthwt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>ggplot2 and Other Plots</title><link>https://blogs.timerring.com/posts/11-ggplot2-and-other-plots/</link><pubDate>Sat, 19 Aug 2023 22:19:09 +0800</pubDate><guid>https://blogs.timerring.com/posts/11-ggplot2-and-other-plots/</guid><description>&lt;h2 id="1-getting-to-know-the-ggplot2-package">
 1. Getting to Know the ggplot2 Package
 &lt;a class="anchor" href="#1-getting-to-know-the-ggplot2-package">#&lt;/a>
&lt;/h2>
&lt;p>The ggplot2 package provides a plotting system based on a grammar of layers. It remedies the lack of consistency among functions in R&amp;rsquo;s base graphics system and raises R&amp;rsquo;s plotting capabilities to an entirely new level. The basic principles of the various data visualizations in ggplot2 are completely consistent: it maps mathematical space to the space of graphical elements. Imagine a blank canvas. On the canvas, we need to define the data to be visualized (data) and the mapping from data variables to graphical properties (mapping).&lt;/p></description></item><item><title>Plotting with R's Base Graphics System</title><link>https://blogs.timerring.com/posts/10-plotting-with-base-r/</link><pubDate>Sat, 19 Aug 2023 21:33:26 +0800</pubDate><guid>https://blogs.timerring.com/posts/10-plotting-with-base-r/</guid><description>&lt;p>R&amp;rsquo;s base graphics system was written by Ross Ihaka and is very powerful. It consists mainly of the graphics and grDevices packages, which are loaded automatically when R starts. There are two types of functions in the base graphics system: high-level plotting functions and low-level plotting functions.&lt;/p>
&lt;p>High-level plotting functions are functions used to produce plots directly, including plot( ), hist( ), boxplot( ), and pairs( ). Low-level plotting functions are functions used to add new graphics or elements to a plot drawn by a high-level plotting function, including points( ), lines( ), text( ), title( ), legend( ), and axis( ).&lt;/p></description></item><item><title>Handling Missing Values</title><link>https://blogs.timerring.com/posts/08-handling-missing-values/</link><pubDate>Sat, 19 Aug 2023 20:03:10 +0800</pubDate><guid>https://blogs.timerring.com/posts/08-handling-missing-values/</guid><description>&lt;h2 id="handling-missing-values">
 Handling Missing Values
 &lt;a class="anchor" href="#handling-missing-values">#&lt;/a>
&lt;/h2>
&lt;p>In actual data analysis, missing data are frequently encountered. Missing values usually occur because data were not collected or were not entered.&lt;/p>
&lt;p>For example, a missing age may be due to someone not providing his (her) age. Most statistical analysis methods assume that complete datasets are being processed. Therefore, apart from some specialized books, most statistics textbooks rarely address this issue. In fact, before conducting a formal analysis, we need to check whether the dataset contains missing values during the data preparation stage and use some methods to compensate for the loss caused by missing values.&lt;/p></description></item><item><title>Merging Data Frames</title><link>https://blogs.timerring.com/posts/07-merging-data-frames/</link><pubDate>Sat, 19 Aug 2023 14:19:21 +0800</pubDate><guid>https://blogs.timerring.com/posts/07-merging-data-frames/</guid><description>&lt;p>Sometimes datasets come from multiple places, and we need to merge two or more datasets into one dataset. Operations for merging data frames include vertical merging, horizontal merging, and merging by a shared variable.&lt;/p></description></item><item><title>Using the dplyr Package</title><link>https://blogs.timerring.com/posts/06-using-dplyr/</link><pubDate>Fri, 18 Aug 2023 21:35:27 +0800</pubDate><guid>https://blogs.timerring.com/posts/06-using-dplyr/</guid><description>&lt;p>This package handles data frames more efficiently with a unified specification. ** The first parameter of all functions that process data frames in the &lt;code>dplyr&lt;/code> package is the data frame name. **&lt;/p>
&lt;p>Taking the birthwt dataset in the MASS package as an example, the following describes the use of commonly used functions in the dplyr package. This data set comes from a case-control study of risk factors for low birth weight in newborns. Start by loading the dataset and viewing its related information.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-R" data-lang="R">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dplyr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">data&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">birthwt&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">package&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;MASS&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ??birthwt&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A total of 189 subjects and 10 variables were included in the dataset birthwt. where the outcome variable bwt is the weight of the newborn (unit: g) and the variable low is a binary classification variable that converts the value of bwt into 2500g points. The remaining 8 variables are predictors, including pregnant women&amp;rsquo;s age, race, smoking status, and history of hypertension (ht).&lt;/p></description></item><item><title>Using Base R</title><link>https://blogs.timerring.com/posts/05-using-base-r/</link><pubDate>Thu, 17 Aug 2023 23:05:23 +0800</pubDate><guid>https://blogs.timerring.com/posts/05-using-base-r/</guid><description>&lt;h2 id="using-base-r">
 Using Base R
 &lt;a class="anchor" href="#using-base-r">#&lt;/a>
&lt;/h2>
&lt;p>In actual data analysis, analysts often spend a lot of effort on data preparation, transforming data into the form required for analysis. Unfortunately, most statistics textbooks rarely address this important issue. Organizing data is one of the tasks of statistics. We started to focus on the most common data format in R - the basic operation of data frames. We will first process the data frames using the base package.&lt;/p>
&lt;p>Load a small dataset &lt;code>Familydata&lt;/code> in the &lt;code>epiDisplay&lt;/code> package first.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-R" data-lang="R">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">epiDisplay&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">data&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Familydata&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Data Acquisition</title><link>https://blogs.timerring.com/posts/03-data-acquisition/</link><pubDate>Thu, 17 Aug 2023 21:27:32 +0800</pubDate><guid>https://blogs.timerring.com/posts/03-data-acquisition/</guid><description>&lt;p>In fact, R has a large number of built-in datasets available for analysis and practice, and we can also create data in R that simulate specific distributions. In actual work, however, data analysts more often face external data from various data sources, namely data files with all kinds of extensions, such as .txt, .csv, .xlsx, .xls, and so on. Files with different extensions represent different file formats, which often causes trouble for analysts.&lt;/p>
&lt;p>R provides data import tools with a wide range of applications.&lt;/p></description></item><item><title>Organizing Code with Design Patterns</title><link>https://blogs.timerring.com/posts/organizing-code-with-design-patterns/</link><pubDate>Thu, 17 Aug 2023 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/organizing-code-with-design-patterns/</guid><description>&lt;p>好的设计模式方便对代码进行功能扩展/修改，降低耦合性，提高复用性。&lt;/p>
&lt;pre tabindex="0">&lt;code>from abc import abstractmethod, ABC
from typing import Callable, final, Tuple, List, Sequence, Dict
from random import choices, randrange
from functools import wraps
from numpy import ndarray
from pandas import DataFrame
from time import perf_counter, sleep
from datetime import datetime, timedelta
&lt;/code>&lt;/pre></description></item><item><title>Data Structures and Conversion</title><link>https://blogs.timerring.com/posts/02-data-structures-and-conversion/</link><pubDate>Wed, 16 Aug 2023 20:08:02 +0800</pubDate><guid>https://blogs.timerring.com/posts/02-data-structures-and-conversion/</guid><description>&lt;p>The first step in any data analysis is to create a dataset in the required format. In R, this task consists of two steps: first select a data structure to store the data, and then enter or import the data into this data structure. The following introduces the various data structures used to store data in R.&lt;/p></description></item><item><title>Dividing Functionality with Classes</title><link>https://blogs.timerring.com/posts/dividing-functionality-with-classes/</link><pubDate>Wed, 16 Aug 2023 17:15:09 +0800</pubDate><guid>https://blogs.timerring.com/posts/dividing-functionality-with-classes/</guid><description>&lt;p>理解类是运用设计模式的前提；运用类本身也能更好的组织代码，提升扩展性、可读性、复用性。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">typing&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Callable&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Tuple&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">List&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">Sequence&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pandas&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">DataFrame&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Writing Maintainable Code</title><link>https://blogs.timerring.com/posts/writing-maintainable-code/</link><pubDate>Wed, 16 Aug 2023 16:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/writing-maintainable-code/</guid><description>&lt;pre tabindex="0">&lt;code>from typing import Callable, Tuple, List
from pandas import DataFrame
&lt;/code>&lt;/pre>&lt;p>项目结构定好了，就开始着手写代码了；那编写代码有哪些注意点呢？&lt;/p></description></item><item><title>Introduction to R</title><link>https://blogs.timerring.com/posts/01-introduction-to-r/</link><pubDate>Tue, 15 Aug 2023 22:19:41 +0800</pubDate><guid>https://blogs.timerring.com/posts/01-introduction-to-r/</guid><description>&lt;h2 id="common-arithmetic-operators">
 Common Arithmetic Operators
 &lt;a class="anchor" href="#common-arithmetic-operators">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Operator&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">+&lt;/td>
 &lt;td style="text-align: left">Addition&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">−&lt;/td>
 &lt;td style="text-align: left">Subtraction&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">*&lt;/td>
 &lt;td style="text-align: left">Multiplication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">/&lt;/td>
 &lt;td style="text-align: left">Division&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">^ or **&lt;/td>
 &lt;td style="text-align: left">Exponentiation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">%%&lt;/td>
 &lt;td style="text-align: left">Remainder&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">%/%&lt;/td>
 &lt;td style="text-align: left">Integer division&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Note that R is case-sensitive.&lt;/p></description></item><item><title>Building a Project Structure</title><link>https://blogs.timerring.com/posts/project-structure/</link><pubDate>Tue, 15 Aug 2023 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/project-structure/</guid><description>&lt;p>在具体的数据科学场景下，按照项目结构→代码编写→功能划分→组织代码的顺序，组织高质量的代码。&lt;/p>
&lt;p>项目结构也可认为是目录结构，例如 &lt;br>

 
 &lt;div class="image-desc">
 &lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/rr8gfq6wcx.png" alt="Image Name" />
 &lt;i>Image Name&lt;/i>
 &lt;/div>&lt;/p>
&lt;p>我们将项目代码拆分成多个功能模块，固化成函数/类并写到不同的文件中，存放在不同的路径里，python 将每个 py 文件视作为一个模块，可以用 import 调用；例如在 &lt;code>main.py&lt;/code> 里调用 &lt;code>/db/db.py&lt;/code> 里的函数 &lt;code>create_conn&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">db.db&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">create_conn&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">conn&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">create_conn&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># create_conn创建了一个数据库的链接对象 &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>CUDA Matrix Multiplication and Transpose</title><link>https://blogs.timerring.com/posts/cuda-matrix-multiplication-and-transpose/</link><pubDate>Thu, 10 Aug 2023 11:59:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/cuda-matrix-multiplication-and-transpose/</guid><description>&lt;p>通过代码实践 CUDA 矩阵乘法与转置，理解 GPU 存储单元与并行计算。&lt;/p></description></item><item><title>CUDA Thread Indexing</title><link>https://blogs.timerring.com/posts/cuda-thread-indexing/</link><pubDate>Wed, 09 Aug 2023 10:19:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/cuda-thread-indexing/</guid><description>&lt;p>结合向量相加和图像处理，介绍 CPU 与 GPU 内存操作、线程索引以及 Grid 和 Block 的配置。&lt;/p>
&lt;p>我们要处理的问题&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230809101958.png" alt="" />&lt;/p>
&lt;p>如图，有离散型的，例如向量相加等等。有 local 卷积类型的，用其他一片的元素值求得一个元素。还有 All to All 类型的，类似于傅里叶变换。&lt;/p>
&lt;p>回顾一下 CUDA 程序的编写：
&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230809104417.png" alt="" />&lt;/p>
&lt;ol>
&lt;li>把输入数据从 CPU 内存复制到 GPU 显存&lt;/li>
&lt;li>在执行芯片上缓存数据，加载 GPU 程序并执行&lt;/li>
&lt;li>将计算结果从 GPU 显存中复制到 CPU 内存中&lt;/li>
&lt;/ol></description></item><item><title>Apache Thrift RPC and Matchmaking Service</title><link>https://blogs.timerring.com/posts/apache-thrift-rpc-and-matchmaking-service/</link><pubDate>Tue, 08 Aug 2023 21:11:31 +0800</pubDate><guid>https://blogs.timerring.com/posts/apache-thrift-rpc-and-matchmaking-service/</guid><description>&lt;p>&lt;code>thrift&lt;/code> 是一种接口描述语言和二进制通讯协议，它被用来定义和创建跨语言的服务。&lt;/p>
&lt;p>&lt;code>Thrift&lt;/code> 是 &lt;code>Facebook&lt;/code> 于 &lt;code>2007&lt;/code> 年开发的跨语言的 &lt;code>RPC&lt;/code>（Remote Procedure Call，远程过程调用）服务框架，提供&lt;strong>多语言&lt;/strong>的编译功能，并提供多种服务器工作模式；用户通过 &lt;code>Thrift&lt;/code> 的 &lt;code>IDL&lt;/code>（接口定义语言）来描述接口函数及数据类型，然后通过 &lt;code>Thrift&lt;/code> 的编译环境生成各种语言类型的接口文件，用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码,让不同语言构建的服务可以做到远程调用无缝对接。（它们的目的都是提供本地调用远程服务的能力）&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>RPC&lt;/code>（Remote Procedure Call，远程过程调用）是一个计算机通信协议，此协议允许进程间通信。简单来说，当机器 A 上的进程调用机器 B 上的进程时，A 上的调用进程被挂起，而 B 上的被调用进程开始执行。调用方可以通过参数将信息传送给被调用方，然后可以通过被调用方传回的结果得到返回&lt;br>
大部分的&lt;code>RPC&lt;/code>框架都遵循如下三个开发步骤：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>定义一个接口说明文件：描述了对象(结构体)、对象成员、接口方法等一系列信息；&lt;/strong>&lt;/li>
&lt;li>&lt;strong>通过&lt;code>RPC&lt;/code>框架所提供的编译器，将接口说明文件编译成具体的语言文件；&lt;/strong>&lt;/li>
&lt;li>&lt;strong>在客户端和服务器端分别引入&lt;code>RPC&lt;/code>编译器所生成的文件，即可像调用本地方法一样调用服务端代码；&lt;/strong>&lt;br>
&lt;code>RPC&lt;/code>是一种&lt;code>C/S&lt;/code>架构的服务模型，&lt;code>server&lt;/code>端提供接口供&lt;code>client&lt;/code>调用，&lt;code>client&lt;/code>端向&lt;code>server&lt;/code>端发送数据，&lt;code>server&lt;/code>端接收&lt;code>client&lt;/code>端的数据进行相关计算并将结果返回给&lt;code>client&lt;/code>端。&lt;/li>
&lt;/ol>
&lt;/blockquote></description></item><item><title>Go Practical Examples: Guessing Game, CLI Dictionary, and SOCKS5 Proxy</title><link>https://blogs.timerring.com/posts/go-practical-examples/</link><pubDate>Wed, 02 Aug 2023 21:36:33 +0800</pubDate><guid>https://blogs.timerring.com/posts/go-practical-examples/</guid><description>&lt;p>这篇文章完整整理自本地的 Go 语言实战入门笔记，依次练习猜数字、命令行词典和 SOCKS5 代理。保留原笔记的分步讲解、代码及外部图床图片。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>运行前注意&lt;/strong>：词典案例使用第三方接口，当前可用性及授权方式尚未验证。原笔记的浏览器令牌和 Cookie 已从代码中移除；运行前应从服务提供方取得合法凭据，并在本机环境变量 &lt;code>CAIYUN_DICT_TOKEN&lt;/code> 中设置，切勿将凭据提交到仓库。SOCKS5 示例没有认证，仅用于本机学习，请勿作为公网代理部署。图片链接指向原笔记的外部图床，是否可长期访问取决于图床。&lt;/p>
&lt;/blockquote></description></item><item><title>LaTex basic concepts</title><link>https://blogs.timerring.com/posts/latex-basic-concepts/</link><pubDate>Wed, 02 Aug 2023 16:50:13 +0800</pubDate><guid>https://blogs.timerring.com/posts/latex-basic-concepts/</guid><description>&lt;h2 id="tex">
 TEX
 &lt;a class="anchor" href="#tex">#&lt;/a>
&lt;/h2>
&lt;p>TEX is software developed by Donald E. Knuth for typesetting text and mathematical formulas. In 1977, while writing The Art of Computer Programming, Knuth realized that the steadily declining typesetting quality would affect the publication of his work. To reverse this situation, he began developing TEX, tapping into the potential of digital printing equipment that had just begun to be used in the publishing industry at the time. In 1982, Knuth released the TEX typesetting engine, and later improved it in 1989 to better support 8-bit characters and multilingual typesetting. TEX is renowned for its outstanding stability, cross-platform capabilities, and almost bug-free nature. Its version number continuously approaches π, and is currently 3.141592653.&lt;/p></description></item><item><title>Writing Your First CUDA Program</title><link>https://blogs.timerring.com/posts/cuda-first-program/</link><pubDate>Wed, 02 Aug 2023 11:53:41 +0800</pubDate><guid>https://blogs.timerring.com/posts/cuda-first-program/</guid><description>&lt;p>从第一个 CUDA 程序开始，实践 NVCC 编译、Makefile、多文件编译、线程索引和性能分析。&lt;/p></description></item><item><title>CUDA Programming Model</title><link>https://blogs.timerring.com/posts/cuda-programming-model/</link><pubDate>Fri, 28 Jul 2023 20:27:45 +0800</pubDate><guid>https://blogs.timerring.com/posts/cuda-programming-model/</guid><description>&lt;p>梳理 CUDA 异构计算、执行空间说明符、线程层次、NVCC 编译流程和 NVProf 性能分析。&lt;/p></description></item><item><title>GPU Hardware Architecture</title><link>https://blogs.timerring.com/posts/gpu-hardware-architecture/</link><pubDate>Fri, 28 Jul 2023 18:13:08 +0800</pubDate><guid>https://blogs.timerring.com/posts/gpu-hardware-architecture/</guid><description>&lt;p>介绍 CPU 与 GPU 的架构差异、GPU 硬件平台、Jetson 设备及 Amdahl 定律。&lt;/p></description></item><item><title>Introduction to CUDA and Linux Basics</title><link>https://blogs.timerring.com/posts/cuda-introduction-and-linux-basics/</link><pubDate>Mon, 24 Jul 2023 21:09:38 +0800</pubDate><guid>https://blogs.timerring.com/posts/cuda-introduction-and-linux-basics/</guid><description>&lt;p>从 CUDA 与 NVIDIA 技术生态入门，介绍 Ubuntu、Jetson 开发环境、权限管理、SSH 和 Makefile。&lt;/p></description></item><item><title>AI开发硬件环境综述</title><link>https://blogs.timerring.com/posts/ai-development-hardware-environment/</link><pubDate>Tue, 14 Mar 2023 17:55:58 +0800</pubDate><guid>https://blogs.timerring.com/posts/ai-development-hardware-environment/</guid><description>&lt;h2 id="笔记本选配">
 笔记本选配
 &lt;a class="anchor" href="#%e7%ac%94%e8%ae%b0%e6%9c%ac%e9%80%89%e9%85%8d">#&lt;/a>
&lt;/h2>
&lt;p>出于通勤等因素，建议型号&lt;/p>
&lt;ul>
&lt;li>
&lt;p>MacBook Air M1 16+ 256&lt;/p>
&lt;/li>
&lt;li>
&lt;p>MacBook Pro M1 16 + 256&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>M1芯片的mbp非常强大，发热不严重，甚至在Air版没风扇.&lt;/p></description></item><item><title>Overview of the AI Development Software Environment</title><link>https://blogs.timerring.com/posts/ai-development-software-environment/</link><pubDate>Tue, 14 Mar 2023 16:47:12 +0800</pubDate><guid>https://blogs.timerring.com/posts/ai-development-software-environment/</guid><description>&lt;p>Regarding software:&lt;/p>
&lt;ol>
&lt;li>Installation of the ubuntu operating system&lt;/li>
&lt;li>Abandon bash, embrace zsh&lt;/li>
&lt;li>Use of package managers,&lt;/li>
&lt;li>Install the NVIDIA GPU driver&lt;/li>
&lt;li>Software installation:Miniconda&lt;/li>
&lt;li>Software installation:Python IDE&lt;/li>
&lt;li>Software installation: ssh&lt;/li>
&lt;li>Software installation:Git&lt;/li>
&lt;li>Installation of other productivity software&lt;/li>
&lt;/ol></description></item><item><title>Nginx Basics and Minimal Configuration</title><link>https://blogs.timerring.com/posts/nginx-basics-and-minimal-configuration/</link><pubDate>Wed, 01 Mar 2023 20:35:29 +0800</pubDate><guid>https://blogs.timerring.com/posts/nginx-basics-and-minimal-configuration/</guid><description>&lt;h2 id="directory-structure">
 Directory Structure
 &lt;a class="anchor" href="#directory-structure">#&lt;/a>
&lt;/h2>
&lt;p>The Nginx root directory contains the following folders:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Folders ending in &lt;code>_temp&lt;/code> are used to store temporary files generated during operation.&lt;/p>
&lt;p>The other main folders are:&lt;/p>
&lt;ul>
&lt;li>conf: stores configuration-related files&lt;/li>
&lt;li>html: the default directory for static files such as HTML and CSS files&lt;/li>
&lt;li>sbin: the main Nginx executable&lt;/li>
&lt;li>logs: stores various logs. For example, &lt;code>access&lt;/code> records access-related information, &lt;code>error&lt;/code> records errors, and &lt;code>nginx.pid&lt;/code> records the service&amp;rsquo;s PID, that is, its process ID.&lt;/li>
&lt;/ul></description></item><item><title>Nginx Installation and Deployment</title><link>https://blogs.timerring.com/posts/nginx-installation-and-deployment/</link><pubDate>Tue, 28 Feb 2023 21:57:27 +0800</pubDate><guid>https://blogs.timerring.com/posts/nginx-installation-and-deployment/</guid><description>&lt;p>Virtual machine: VMware Workstation 16
Operating system: CentOS 7.4
Download URL: &lt;a href="https://vault.centos.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso" target="_blank" rel="nofollow noopener">https://vault.centos.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso&lt;/a>&lt;sup>&lt;a href="#ref-link-1" class="footnote-ref" id="ref-link-back-1">[1]&lt;/a>&lt;/sup>&lt;/p>
&lt;p>Recommended computer configuration:&lt;/p>
&lt;ul>
&lt;li>Memory: 8 GB or more is recommended&lt;/li>
&lt;li>Disk: An SSD is recommended&lt;/li>
&lt;li>CPU: Any mainstream CPU with four or more cores will suffice&lt;/li>
&lt;/ul></description></item><item><title>SQL Query Optimizers Explained</title><link>https://blogs.timerring.com/posts/sql-query-optimizers-explained/</link><pubDate>Fri, 05 Aug 2022 20:38:20 +0800</pubDate><guid>https://blogs.timerring.com/posts/sql-query-optimizers-explained/</guid><description>&lt;p>从 SQL 解析与执行流程出发，介绍基于规则和代价的查询优化、统计信息、执行计划枚举，以及 Apache Calcite 的开源实践。&lt;/p></description></item><item><title>Pipes, Environment Variables, and Common Commands</title><link>https://blogs.timerring.com/posts/pipes-environment-variables-and-common-commands/</link><pubDate>Wed, 27 Jul 2022 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/pipes-environment-variables-and-common-commands/</guid><description>&lt;p>管道类似于文件重定向，可以将前一个命令的&lt;code>stdout&lt;/code>重定向到下一个命令的&lt;code>stdin&lt;/code>。&lt;/p>
&lt;ol>
&lt;li>管道命令仅处理 &lt;code>stdout&lt;/code>，会忽略 &lt;code>stderr&lt;/code> （标准错误）。&lt;/li>
&lt;li>管道右边的命令必须能接受&lt;code>stdin&lt;/code>。&lt;/li>
&lt;li>多个管道命令可以串联。&lt;/li>
&lt;/ol></description></item><item><title>Tmux Common Commands</title><link>https://blogs.timerring.com/posts/tmux-common-commands/</link><pubDate>Tue, 26 Jul 2022 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/tmux-common-commands/</guid><description>&lt;p>A tmux instance can contain multiple sessions, a session can contain multiple windows, a window can contain multiple panes, and a shell dialog is opened in each pane.&lt;/p></description></item><item><title>Shell Scripting Fundamentals</title><link>https://blogs.timerring.com/posts/shell-scripting-fundamentals/</link><pubDate>Mon, 25 Jul 2022 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/shell-scripting-fundamentals/</guid><description>&lt;p>Shell is the language we use to communicate with the operating system through the command line.&lt;/p>
&lt;p>Shell scripts can run directly on the command line, or a set of logic can be organized into a file for reuse. The command line can be thought of as a “shell script executing line by line.”&lt;/p>
&lt;p>There are many common kinds of shell scripts in Linux, including:&lt;/p>
&lt;ul>
&lt;li>Bourne Shell (&lt;code>/usr/bin/sh&lt;/code> or &lt;code>/bin/sh&lt;/code>)&lt;/li>
&lt;li>Bourne Again Shell (&lt;code>/bin/bash&lt;/code>)&lt;/li>
&lt;li>C Shell (&lt;code>/usr/bin/csh&lt;/code>)&lt;/li>
&lt;li>K Shell (&lt;code>/usr/bin/ksh&lt;/code>)&lt;/li>
&lt;li>&lt;code>zsh&lt;/code>&lt;/li>
&lt;li>…&lt;/li>
&lt;/ul>
&lt;p>Linux systems generally use &lt;code>bash&lt;/code> by default.&lt;/p>
&lt;p>The file should begin with &lt;code>#! /bin/bash&lt;/code> to specify &lt;code>bash&lt;/code> as the script interpreter.&lt;/p></description></item><item><title>Introduction to CUDA</title><link>https://blogs.timerring.com/posts/introduction-to-cuda/</link><pubDate>Fri, 08 Jul 2022 11:58:01 +0800</pubDate><guid>https://blogs.timerring.com/posts/introduction-to-cuda/</guid><description>&lt;p>介绍 CUDA 的基本概念、支持的编程语言、发展历程及 GPU 加速计算的应用。&lt;/p></description></item><item><title>MySQL Cheatsheet</title><link>https://blogs.timerring.com/posts/mysql-cheatsheet/</link><pubDate>Tue, 15 Mar 2022 03:43:29 +0800</pubDate><guid>https://blogs.timerring.com/posts/mysql-cheatsheet/</guid><description>&lt;p>整理 MySQL 常用语法、函数、约束、多表查询和事务，并介绍存储引擎、索引、执行计划与 SQL 性能优化。 文中的密码仅作示例，实际使用时请独立生成。&lt;/p></description></item><item><title>Image Classification and Foundational Vision Models</title><link>https://blogs.timerring.com/posts/image-classification-and-foundational-vision-models/</link><pubDate>Mon, 07 Mar 2022 16:42:54 +0800</pubDate><guid>https://blogs.timerring.com/posts/image-classification-and-foundational-vision-models/</guid><description>&lt;h2 id="process">
 Process
 &lt;a class="anchor" href="#process">#&lt;/a>
&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Collect data&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Define the model&lt;/p>
&lt;p>Usually a function containing parameter variables: \(y=F_{\Theta}(X)\)&lt;/p>
&lt;p>Example: \(y=\sigma\left(\Theta^{T} X\right)\)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Train
Find the optimal parameters \(\Theta^{*}\) so that the model \(y=F_{\Theta^{*}}(X)\) achieves the highest accuracy on the training set&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Predict
For a new image \(\hat{X}\) , use the trained model to predict its class, namely \(\hat{y}=F_{\Theta^{*}}(\hat{X})\)&lt;/p>
&lt;/li>
&lt;/ol></description></item><item><title>SSH Remote Access and File Transfer</title><link>https://blogs.timerring.com/posts/ssh-remote-access-and-file-transfer/</link><pubDate>Sat, 12 Feb 2022 20:10:20 +0800</pubDate><guid>https://blogs.timerring.com/posts/ssh-remote-access-and-file-transfer/</guid><description>&lt;h2 id="log-in-to-the-server">
 Log In to the Server
 &lt;a class="anchor" href="#log-in-to-the-server">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">ssh user@hostname
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>user&lt;/code>: username&lt;/li>
&lt;li>&lt;code>hostname&lt;/code>: IP address or domain name&lt;/li>
&lt;/ul>
&lt;p>The first time you log in, you will see this prompt:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">The authenticity of host &lt;span class="s1">&amp;#39;123.57.47.211 (123.57.47.211)&amp;#39;&lt;/span> can&lt;span class="err">&amp;#39;&lt;/span>t be established.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ECDSA key fingerprint is SHA256:iy237yysfCe013/l+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Are you sure you want to &lt;span class="k">continue&lt;/span> connecting &lt;span class="o">(&lt;/span>yes/no/&lt;span class="o">[&lt;/span>fingerprint&lt;span class="o">])&lt;/span>?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Enter &lt;code>yes&lt;/code> and press Enter. This records the server&amp;rsquo;s information in &lt;code>~/.ssh/known_hosts&lt;/code>.&lt;/p>
&lt;p>Then enter the password to log in to the remote server.
The default login port is 22. To log in through a specific port:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">ssh user@hostname -p &lt;span class="m">22&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Introduction to Web APIs</title><link>https://blogs.timerring.com/posts/web-apis-introduction/</link><pubDate>Sat, 10 Jul 2021 21:28:31 +0800</pubDate><guid>https://blogs.timerring.com/posts/web-apis-introduction/</guid><description>&lt;p>Strictly speaking, most of what we learned in the JavaScript section belongs to ECMAScript. ECMAScript, or ES, defines language standards such as the syntax rules for variables, data types, expressions, statements, and functions. Browsers implement most of the ECMAScript specification and extend it with practical features. These extensions are called Web APIs.&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230710212831.png" alt="" />&lt;/p></description></item><item><title>JavaScript Data Types</title><link>https://blogs.timerring.com/posts/javascript-data-types/</link><pubDate>Fri, 09 Jul 2021 23:01:26 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-data-types/</guid><description>&lt;p>&lt;strong>JavaScript is a weakly typed, or dynamic, language&lt;/strong>. You do not need to declare a variable&amp;rsquo;s type in advance; its type is determined automatically while the program runs.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">age&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Number
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">areYouOk&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;yes&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// String
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>JavaScript has &lt;strong>dynamic types&lt;/strong>, meaning the same variable can be used for different types (its type can change).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// x is a number
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kd">var&lt;/span> &lt;span class="nx">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Bill&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// x is a string
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>JavaScript Objects</title><link>https://blogs.timerring.com/posts/javascript-objects/</link><pubDate>Fri, 09 Jul 2021 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-objects/</guid><description>&lt;p>Objects are a JavaScript data type. We have already learned about numbers, strings, booleans, and undefined. An object can be understood as a collection of data. It consists of properties and methods.&lt;/p></description></item><item><title>JavaScript Functions</title><link>https://blogs.timerring.com/posts/javascript-functions/</link><pubDate>Fri, 09 Jul 2021 16:58:16 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-functions/</guid><description>&lt;h3 id="declaration-definition">
 Declaration (Definition)
 &lt;a class="anchor" href="#declaration-definition">#&lt;/a>
&lt;/h3>
&lt;p>Declaring (defining) a complete function involves five parts: the keyword, function name, formal parameters, function body, and return value.&lt;/p>
&lt;p>&lt;img src="https://raw.githubusercontent.com/timerring/scratchpad2023/main/2023/20230709165816.png" alt="" />&lt;/p></description></item><item><title>JavaScript Arrays</title><link>https://blogs.timerring.com/posts/javascript-arrays/</link><pubDate>Fri, 09 Jul 2021 16:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-arrays/</guid><description>&lt;p>&lt;strong>Arrays:&lt;/strong> An array is a data type that stores data in order.&lt;/p></description></item><item><title>JavaScript Operators and Control Flow</title><link>https://blogs.timerring.com/posts/javascript-operators-and-control-flow/</link><pubDate>Fri, 09 Jul 2021 15:07:15 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-operators-and-control-flow/</guid><description>&lt;p>Commonly used operators in JavaScript include:&lt;/p>
&lt;ul>
&lt;li>Arithmetic operators&lt;/li>
&lt;li>Increment and decrement operators&lt;/li>
&lt;li>Comparison operators&lt;/li>
&lt;li>Logical operators&lt;/li>
&lt;li>Assignment operators&lt;/li>
&lt;/ul></description></item><item><title>JavaScript Fundamentals</title><link>https://blogs.timerring.com/posts/javascript-introduction/</link><pubDate>Wed, 07 Jul 2021 16:30:35 +0800</pubDate><guid>https://blogs.timerring.com/posts/javascript-introduction/</guid><description>&lt;p>Brendan Eich (born 1961) completed the design of JavaScript in 10 days.&lt;/p>
&lt;ul>
&lt;li>It was originally named LiveScript and was later renamed JavaScript after a collaboration with Sun.&lt;/li>
&lt;li>JavaScript is one of the world&amp;rsquo;s most popular languages. It is a scripting language that runs on the client side (&amp;ldquo;script&amp;rdquo; means a script), and now it can also be used for server-side programming with Node. Js technology.&lt;/li>
&lt;li>Scripting language: it does not need to be compiled; during execution, the js interpreter (js engine) interprets and executes it line by line.&lt;/li>
&lt;/ul></description></item><item><title>HTML Basics</title><link>https://blogs.timerring.com/posts/html-basics/</link><pubDate>Mon, 05 Jul 2021 20:00:00 +0800</pubDate><guid>https://blogs.timerring.com/posts/html-basics/</guid><description>&lt;p>A web page consists of three parts:&lt;/p>
&lt;ol>
&lt;li>Structure: written using HTML&lt;/li>
&lt;li>Presentation: CSS is used to set the styles of elements on the page&lt;/li>
&lt;li>Behavior: JavaScript is used to define the page&amp;rsquo;s behavior
HTML is HyperText Markup Language. It is responsible for the page&amp;rsquo;s structure and defines its various parts. HTML is written as plain text and uses HTML tags to identify the different parts of a page.&lt;/li>
&lt;/ol></description></item><item><title>About</title><link>https://blogs.timerring.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blogs.timerring.com/about/</guid><description>&lt;h2 id="about">
 About
 &lt;a class="anchor" href="#about">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>John Howe&lt;/li>
&lt;li>GPG Public: 
 &lt;a href="https://blogs.timerring.com/gpg-pubkey.asc.html">0x26FEE0805E6C9F71&lt;/a>&lt;/li>
&lt;li>Key fingerprint = &lt;code>B613 FBAF 0822 BEBD FABF 8F65 26FE E080 5E6C 9F71&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>If you want to know what this blog is about, here are some representative posts:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Network&lt;/code> 
 &lt;a href="https://blogs.timerring.com/posts/real-computer-network">Real Computer Network&lt;/a> | 
 &lt;a href="https://blogs.timerring.com/posts/a-brief-introduction-to-dns">A Brief Introduction to DNS&lt;/a> ｜ 
 &lt;a href="https://blogs.timerring.com/posts/introduction-to-the-http-and-https-protocol">Introduction to the HTTP and HTTPS Protocol&lt;/a>&lt;/li>
&lt;li>&lt;code>Develop&lt;/code> 
 &lt;a href="https://blogs.timerring.com/posts/cpu-can-only-see-the-threads">CPU can only see the threads&lt;/a> | 
 &lt;a href="https://blogs.timerring.com/tags/python">Python series&lt;/a>&lt;/li>
&lt;li>&lt;code>Audio and Video&lt;/code> 
 &lt;a href="https://blogs.timerring.com/posts/video-technology-101">Video Technology 101&lt;/a> | 
 &lt;a href="https://blogs.timerring.com/posts/implement-danmaku-rendering-algorithm-from-scratch">Implement danmaku rendering algorithm from scratch&lt;/a>&lt;/li>
&lt;li>&lt;code>Security&lt;/code> 
 &lt;a href="https://blogs.timerring.com/posts/the-overview-of-security">The Overview of Security&lt;/a> | 
 &lt;a href="https://blogs.timerring.com/posts/gpg-101">GPG 101&lt;/a>&lt;/li>
&lt;li>&lt;code>Container&lt;/code> 
 &lt;a href="https://blogs.timerring.com/posts/docker-101">Docker 101&lt;/a> | 
 &lt;a href="https://blogs.timerring.com/posts/docker-cheatsheet">Docker Cheatsheet&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="coffee-chat">
 Coffee chat
 &lt;a class="anchor" href="#coffee-chat">#&lt;/a>
&lt;/h2>
&lt;p>


 
 


&lt;a href="https://ko-fi.com/polls/What-is-the-custom-topic-for-the-next-month-C0C219LHQJ" target="_blank" rel="noopener" class="book-btn">
 blog topic and coffee chat
&lt;/a>




 
 


&lt;a href="https://ko-fi.com/timerring" target="_blank" rel="noopener" class="book-btn">
 buy me a coffee
&lt;/a>
&lt;/p></description></item><item><title>Bookmarks</title><link>https://blogs.timerring.com/bookmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blogs.timerring.com/bookmarks/</guid><description>&lt;section class="bookmark-index" data-bookmark-index>
 &lt;header class="bookmark-header">
 &lt;h1>Bookmarks&lt;/h1>
 &lt;p class="bookmark-intro">No need to copy someone else’s collection. The best things are the ones that stay with you.&lt;/p>
 &lt;/header>

 &lt;div class="bookmark-toolbar">
 &lt;div class="bookmark-search">
 &lt;label class="bookmark-search-label" for="bookmark-search">Search bookmarks&lt;/label>
 &lt;input id="bookmark-search" type="search" inputmode="search" autocomplete="off" placeholder="Search title, domain, notes, or tags…" data-bookmark-search>
 &lt;button type="button" data-bookmark-clear aria-label="Clear bookmark search" hidden>Clear&lt;/button>
 &lt;/div>
 &lt;div class="bookmark-toolbar-actions">
 &lt;div class="bookmark-date-range-mount" data-bookmark-date-range data-min="2026-09-09" data-max="2026-09-12">
 &lt;/div>
 &lt;/div>
 &lt;/div>

 &lt;div class="bookmark-filters" aria-label="Bookmark collections">
 &lt;button class="bookmark-filter is-active" type="button" data-bookmark-filter="all" aria-pressed="true">All &lt;span>4&lt;/span>&lt;/button>&lt;button class="bookmark-filter" type="button" data-bookmark-filter="product" aria-pressed="false">Product &lt;span>1&lt;/span>&lt;/button>&lt;button class="bookmark-filter" type="button" data-bookmark-filter="research" aria-pressed="false">Research &lt;span>1&lt;/span>&lt;/button>&lt;button class="bookmark-filter" type="button" data-bookmark-filter="skills" aria-pressed="false">Skills &lt;span>2&lt;/span>&lt;/button>
 &lt;/div>

 &lt;div class="bookmark-list" aria-live="polite">&lt;article class="bookmark-item" data-bookmark-item data-collection="skills" data-search="stop slop github.com a reusable skill for detecting and removing common ai-writing patterns from prose. skills skills writing ai 2026-09-12" data-added="2026-09-12" data-year="2026" data-month="09">
 &lt;div class="bookmark-item-content">
 &lt;div class="bookmark-heading">
 &lt;h2>Stop Slop&lt;/h2>
 &lt;div class="bookmark-actions" aria-label="Actions for Stop Slop">
 &lt;a class="bookmark-action is-website" href="https://github.com/hardikpandya/stop-slop/tree/main" target="_blank" rel="noopener noreferrer" title="Visit github.com" aria-label="Visit github.com">
 &lt;i class="bi bi-display" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;a class="bookmark-action is-x" href="https://x.com/timerringX/status/2098682730452263399" target="_blank" rel="noopener noreferrer" title="Open @timerringX on X" aria-label="X for Stop Slop">
 &lt;i class="bi bi-twitter-x" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;/div>
 &lt;/div>
 &lt;div class="bookmark-item-meta">
 &lt;time class="bookmark-added" datetime="2026-09-12">Sep 12, 2026&lt;/time>
 &lt;span aria-hidden="true">·&lt;/span>
 &lt;span class="bookmark-topic">Skills&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/article>&lt;article class="bookmark-item" data-bookmark-item data-collection="skills" data-search="human writing github.com a chinese writing and revision skill for making ai-assisted prose sound specific, natural, and human. skills skills writing ai 2026-09-12" data-added="2026-09-12" data-year="2026" data-month="09">
 &lt;div class="bookmark-item-content">
 &lt;div class="bookmark-heading">
 &lt;h2>Human Writing&lt;/h2>
 &lt;div class="bookmark-actions" aria-label="Actions for Human Writing">
 &lt;a class="bookmark-action is-website" href="https://github.com/KKKKhazix/human-writing" target="_blank" rel="noopener noreferrer" title="Visit github.com" aria-label="Visit github.com">
 &lt;i class="bi bi-display" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;a class="bookmark-action is-x" href="https://x.com/timerringX/status/2098684688110067993" target="_blank" rel="noopener noreferrer" title="Open @timerringX on X" aria-label="X for Human Writing">
 &lt;i class="bi bi-twitter-x" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;/div>
 &lt;/div>
 &lt;div class="bookmark-item-meta">
 &lt;time class="bookmark-added" datetime="2026-09-12">Sep 12, 2026&lt;/time>
 &lt;span aria-hidden="true">·&lt;/span>
 &lt;span class="bookmark-topic">Skills&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/article>&lt;article class="bookmark-item" data-bookmark-item data-collection="product" data-search="openai developers developers.openai.com developer articles, product updates, and engineering practices from openai. product ai openai 2026-09-09" data-added="2026-09-09" data-year="2026" data-month="09">
 &lt;div class="bookmark-item-content">
 &lt;div class="bookmark-heading">
 &lt;h2>OpenAI Developers&lt;/h2>
 &lt;div class="bookmark-actions" aria-label="Actions for OpenAI Developers">
 &lt;a class="bookmark-action is-website" href="https://developers.openai.com/blog/" target="_blank" rel="noopener noreferrer" title="Visit openai.com" aria-label="Visit openai.com">
 &lt;i class="bi bi-display" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;a class="bookmark-action is-x" href="https://x.com/timerringX" target="_blank" rel="noopener noreferrer" title="Open @timerringX on X" aria-label="X for OpenAI Developers">
 &lt;i class="bi bi-twitter-x" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;/div>
 &lt;/div>
 &lt;div class="bookmark-item-meta">
 &lt;time class="bookmark-added" datetime="2026-09-09">Sep 9, 2026&lt;/time>
 &lt;span aria-hidden="true">·&lt;/span>
 &lt;span class="bookmark-topic">Product&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/article>&lt;article class="bookmark-item" data-bookmark-item data-collection="research" data-search="google research research.google research progress across artificial intelligence and computer science. research ai google 2026-09-09" data-added="2026-09-09" data-year="2026" data-month="09">
 &lt;div class="bookmark-item-content">
 &lt;div class="bookmark-heading">
 &lt;h2>Google Research&lt;/h2>
 &lt;div class="bookmark-actions" aria-label="Actions for Google Research">
 &lt;a class="bookmark-action is-website" href="https://research.google/blog/" target="_blank" rel="noopener noreferrer" title="Visit research.google" aria-label="Visit research.google">
 &lt;i class="bi bi-display" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;a class="bookmark-action is-x" href="https://x.com/timerringX" target="_blank" rel="noopener noreferrer" title="Open @timerringX on X" aria-label="X for Google Research">
 &lt;i class="bi bi-twitter-x" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;a class="bookmark-action is-blog" href="https://blogs.timerring.com/tags/google/" title="Related writing tagged Google" aria-label="Blog for Google Research">
 &lt;i class="bi bi-journal-text" aria-hidden="true">&lt;/i>
 &lt;/a>
 &lt;/div>
 &lt;/div>
 &lt;div class="bookmark-item-meta">
 &lt;time class="bookmark-added" datetime="2026-09-09">Sep 9, 2026&lt;/time>
 &lt;span aria-hidden="true">·&lt;/span>
 &lt;span class="bookmark-topic">Research&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/article>
 &lt;/div>

 &lt;div class="bookmark-empty" data-bookmark-empty hidden>
 &lt;p>No bookmarks match this search.&lt;/p></description></item><item><title>Device Archive</title><link>https://blogs.timerring.com/devices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blogs.timerring.com/devices/</guid><description>&lt;section class="device-archive" aria-labelledby="device-archive-title">
 &lt;header class="device-hero">
 &lt;h1 id="device-archive-title">Device Archive&lt;/h1>
 &lt;div class="device-view-switch" role="group" aria-label="Switch archive view">
 &lt;button class="device-view-button is-active" type="button" data-view="warehouse" aria-pressed="true">&lt;i class="bi bi-grid-3x3-gap" aria-hidden="true">&lt;/i> Cabinet&lt;/button>
 &lt;button class="device-view-button" type="button" data-view="timeline" aria-pressed="false">&lt;i class="bi bi-distribute-vertical" aria-hidden="true">&lt;/i> Timeline&lt;/button>
 &lt;/div>
 &lt;/header>

 &lt;div class="device-index-bar">
 &lt;div class="device-tabs" role="tablist" aria-label="Device categories">
 &lt;button class="device-tab is-active" type="button" role="tab" aria-selected="true" data-filter="all">All &lt;span>39&lt;/span>&lt;/button>
 &lt;button class="device-tab" type="button" role="tab" aria-selected="false" data-filter="phone">Phones &lt;span>09&lt;/span>&lt;/button>
 &lt;button class="device-tab" type="button" role="tab" aria-selected="false" data-filter="computer">Computers &lt;span>07&lt;/span>&lt;/button>
 &lt;button class="device-tab" type="button" role="tab" aria-selected="false" data-filter="audio">Headphones &lt;span>08&lt;/span>&lt;/button>
 &lt;button class="device-tab" type="button" role="tab" aria-selected="false" data-filter="other">Other &lt;span>15&lt;/span>&lt;/button>
 &lt;/div>

 &lt;/div>

 &lt;div class="device-timeline is-warehouse" aria-live="polite">
 &lt;section class="device-year-group" data-year-group>
 &lt;div class="device-year-heading">
 &lt;h2>2026&lt;/h2>
 &lt;span>NOW&lt;/span>
 &lt;/div>

 &lt;article class="device-card" data-category="other" data-ownership="owned">
 &lt;div class="device-visual device-visual--photo device-visual--contain-medium">
 &lt;span class="device-status is-current">In Use&lt;/span>
 &lt;img src="https://m.media-amazon.com/images/I/71ooXQAGCkL._AC_UF1000%2C1000_QL80_.jpg" alt="WHOOP MG fitness tracker included with WHOOP Life" loading="lazy">
 &lt;/div>
 &lt;div class="device-card-body">
 &lt;div class="device-card-heading">&lt;div>&lt;p class="device-kind">Band&lt;/p>&lt;h3>WHOOP Life&lt;/h3>&lt;/div>&lt;/div>
 &lt;p class="device-period">&lt;i class="bi bi-calendar3" aria-hidden="true">&lt;/i> 2026 — Present&lt;/p>
 &lt;div class="device-specs">&lt;span>WHOOP MG&lt;/span>&lt;span>ECG&lt;/span>&lt;span>Screen-Free&lt;/span>&lt;/div>
 &lt;blockquote>“Remarkably accurate automatic activity recognition and recovery tracking.”&lt;/blockquote>
 &lt;/div>
 &lt;/article>

 &lt;article class="device-card" data-category="other" data-ownership="owned">
 &lt;div class="device-visual device-visual--photo device-visual--contain-large">
 &lt;span class="device-status is-current">In Use&lt;/span>
 &lt;img src="https://www.vytria.com/19311-superlarge_default/dita-lindstrum-dtx125-03-eyeglasses.jpg" alt="DITA Lindstrum DTX-125 eyeglasses" loading="lazy">
 &lt;/div>
 &lt;div class="device-card-body">
 &lt;div class="device-card-heading">&lt;div>&lt;p class="device-kind">Eyeglasses&lt;/p></description></item><item><title>Friends</title><link>https://blogs.timerring.com/friends/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blogs.timerring.com/friends/</guid><description>&lt;h1 id="followed-blogs">
 Followed blogs
 &lt;a class="anchor" href="#followed-blogs">#&lt;/a>
&lt;/h1>
&lt;p>


 
 


&lt;a href="https://research.google/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Google Research
&lt;/a>




 
 


&lt;a href="https://blog.cloudflare.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Cloudflare
&lt;/a>




 
 


&lt;a href="https://openai.com/news/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 OpenAI
&lt;/a>




 
 


&lt;a href="https://developers.openai.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 OpenAI Developers
&lt;/a>




 
 


&lt;a href="https://www.claude.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Claude
&lt;/a>




 
 


&lt;a href="https://cursor.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Cursor
&lt;/a>




 
 


&lt;a href="https://windsurf.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Windsurf
&lt;/a>




 
 


&lt;a href="https://www.perplexity.ai/hub/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Perplexity
&lt;/a>




 
 


&lt;a href="https://sourcegraph.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Sourcegraph
&lt;/a>




 
 


&lt;a href="https://www.cerebras.ai/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Cerebras
&lt;/a>




 
 


&lt;a href="https://www.mixedbread.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Mixedbread
&lt;/a>




 
 


&lt;a href="https://www.morphllm.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Morphllm
&lt;/a>




 
 


&lt;a href="https://www.tavily.com/blog/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 tavily
&lt;/a>
&lt;/p>
&lt;h1 id="friends-links">
 Friends links
 &lt;a class="anchor" href="#friends-links">#&lt;/a>
&lt;/h1>
&lt;p>


 
 


&lt;a href="https://www.nodeseek.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Nodeseek
&lt;/a>




 
 


&lt;a href="https://blog.skk.moe/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Sukka
&lt;/a>




 
 


&lt;a href="https://selfboot.cn/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Selfboot
&lt;/a>




 
 


&lt;a href="https://zu1k.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 zu1k
&lt;/a>




 
 


&lt;a href="https://spencerwoo.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Spencer Woo
&lt;/a>




 
 


&lt;a href="https://zhile.io/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 zhile.io
&lt;/a>




 
 


&lt;a href="https://www.52txr.cn/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 52txr
&lt;/a>




 
 


&lt;a href="https://colah.github.io/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Colah
&lt;/a>




 
 


&lt;a href="https://01.me/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Bojie Li
&lt;/a>




 
 


&lt;a href="https://bimu.live/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Bimu
&lt;/a>




 
 


&lt;a href="https://xiaozhou.net/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Timothy
&lt;/a>




 
 


&lt;a href="https://immmmm.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 immmmm
&lt;/a>




 
 


&lt;a href="https://harrychen.xyz/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Harry Chen
&lt;/a>




 
 


&lt;a href="https://qcrao.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Qcrao
&lt;/a>




 
 


&lt;a href="https://liam.page/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Liam
&lt;/a>




 
 


&lt;a href="https://blog.ishell.online/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 ishell
&lt;/a>




 
 


&lt;a href="https://dewx.top/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 dewx
&lt;/a>




 
 


&lt;a href="https://wiki.eryajf.net/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Eryajf
&lt;/a>




 
 


&lt;a href="https://darmau.co/zh/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Darmau
&lt;/a>




 
 


&lt;a href="https://gaoweix.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 gaoweix
&lt;/a>




 
 


&lt;a href="https://limbopro.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 limbopro
&lt;/a>




 
 


&lt;a href="https://yu-changqian.github.io/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Changqian Yu
&lt;/a>




 
 


&lt;a href="https://ice1000.org/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 ice1000
&lt;/a>




 
 


&lt;a href="https://lsvih.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 lsvih
&lt;/a>




 
 


&lt;a href="https://blog.zhheo.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 zhheo
&lt;/a>




 
 


&lt;a href="https://www.jiejoe.com/home/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 jiejoe
&lt;/a>




 
 


&lt;a href="https://shuyuej.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 shuyuej
&lt;/a>




 
 


&lt;a href="https://www.likun.tech/Bio/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 likun
&lt;/a>




 
 


&lt;a href="https://only.rs/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 only.rs
&lt;/a>




 
 


&lt;a href="https://aigonna.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 aigonna
&lt;/a>




 
 


&lt;a href="https://bulianglin.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 bulianglin
&lt;/a>




 
 


&lt;a href="https://greatdk.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 greatdk
&lt;/a>




 
 


&lt;a href="https://idoubi.cc/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 idoubi
&lt;/a>




 
 


&lt;a href="https://spaces.ac.cn/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Jianlin Su
&lt;/a>




 
 


&lt;a href="https://blog.axiaoxin.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 axiaoxin
&lt;/a>




 
 


&lt;a href="https://www.owenyoung.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 theowenyoung
&lt;/a>




 
 


&lt;a href="https://kyth.hedwig.pub/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 kyth
&lt;/a>




 
 


&lt;a href="https://zyzhang.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 zyzhang
&lt;/a>




 
 


&lt;a href="https://lifelonglearn.ing/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 naiba
&lt;/a>




 
 


&lt;a href="https://www.lixueduan.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 lixueduan
&lt;/a>




 
 


&lt;a href="https://www.gatesnotes.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 gatesnotes
&lt;/a>




 
 


&lt;a href="https://blog.ezyang.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 ezyang
&lt;/a>




 
 


&lt;a href="https://blog.yuanji.dev/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 yuanji
&lt;/a>




 
 


&lt;a href="https://taoshu.in/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 taoshu
&lt;/a>




 
 


&lt;a href="https://blog.tangwudi.com/cloudflaremap/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 tangwudi
&lt;/a>




 
 


&lt;a href="https://www.tisonkun.org/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 tisonkun
&lt;/a>




 
 


&lt;a href="https://vitalik.eth/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 vitalik
&lt;/a>




 
 


&lt;a href="https://blog.cmliussss.com/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 cmliussss
&lt;/a>




 
 


&lt;a href="https://substack.com/@rasbt/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Sebastian Raschka
&lt;/a>




 
 


&lt;a href="https://aresluna.org/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 Marcin Wichary
&lt;/a>




 
 


&lt;a href="https://yage.ai/?utm_source=blog.timerring.com" target="_blank" rel="noopener" class="book-btn">
 YaGe
&lt;/a>
&lt;/p></description></item></channel></rss>