# linsnotes.com > Kuibin Lin's personal blog, on raspberry pi, networking, homelab and AI ## Pages - [Categories](https://linsnotes.com/categories/) - [Tags](https://linsnotes.com/tags/) - [Archives](https://linsnotes.com/archives/) - [Projects](https://linsnotes.com/projects/) - [About](https://linsnotes.com/about/) ## Posts - [Welcome to My Blog](https://linsnotes.com/posts/welcome-to-my-blog/): A short introduction to who I am and what you'll find here — notes on AI, self-hosting, and whatever I'm learning next. - [How to Add Newsletter Subscribe Feature to Jekyll Chirpy with Brevo](https://linsnotes.com/posts/how-to-add-newsletter-subscribe-feature-to-jekyll-chirpy-with-brevo/): A complete guide to adding a newsletter subscribe feature to a Jekyll Chirpy blog, with a sidebar button, a dedicated subscribe page, and a Brevo email backend. - [Customize Chirpy Mobile View to Show Full Sidebar Menu Including a Posts Tab](https://linsnotes.com/posts/customise-chirpy-mobile-sidebar-posts-tab/): A step by step guide to replacing Chirpy's mobile topbar with a full screen sidebar menu and adding a POSTS toggle, using CSS and JavaScript only. - [Python List vs Linked List](https://linsnotes.com/posts/python-list-vs-linked-list/): A visual, operation-by-operation comparison of Python list and linked list with Big-O analysis, code examples, and ASCII diagrams. - [Block Ads on Every Device in Your Home Network with Pi-hole](https://linsnotes.com/posts/block-ads-on-every-device-in-your-home-network-with-pi-hole/): Learn how to set up Pi-hole on a Raspberry Pi to block ads, trackers, and telemetry across all devices on your home Wi-Fi without installing anything on each device. - [Run Your Own VPN at Home with PiVPN](https://linsnotes.com/posts/run-your-own-vpn-at-home-with-pivpn/): A step-by-step guide to setting up PiVPN with WireGuard on a Raspberry Pi for secure remote access to your home network. - [A JSON Viewer for Claude Code Config Files](https://linsnotes.com/posts/a-json-viewer-for-claude-code-config-files/): Visualize Claude Code's nested JSON config files with a browser-based viewer for easier understanding of settings. - [Building an AI Playground with Hugging Face Inference API & Cloudflare Workers](https://linsnotes.com/posts/building-an-ai-playground-with-hugging-face-and-cloudflare-workers/): Build browser-based AI demos using Hugging Face API proxied through Cloudflare Workers without server code. - [How to Add Interactive Charts to Jekyll Chirpy with Chart.js](https://linsnotes.com/posts/how-to-add-interactive-charts-to-jekyll-chirpy-with-chartjs/): Add interactive Chart.js visualizations to Jekyll Chirpy with CSV data or inline config for line, bar, and doughnut charts. - [RLHF Explained: How Reinforcement Learning from Human Feedback Works](https://linsnotes.com/posts/rlhf-explained-how-reinforcement-learning-from-human-feedback-works/): Understand the RLHF pipeline that transforms LLMs from next-word predictors into helpful assistants through human feedback. - [How to Add Animated Subtitle Effects to Jekyll Chirpy Theme](https://linsnotes.com/posts/how-to-add-animated-subtitle-effects-to-jekyll-chirpy-theme/): Add typewriter and decode animation effects to Chirpy theme subtitles with extensible registry pattern. - [How to Add Interactive Maps to Jekyll Using Leaflet and OpenStreetMap](https://linsnotes.com/posts/how-to-add-interactive-maps-to-jekyll-using-leaflet-and-openstreetmap/): Embed interactive Leaflet maps with OpenStreetMap in Jekyll using front matter config and a Liquid tag. - [Mapping Singapore’s Top Places Using Leaflet and OpenStreetMap](https://linsnotes.com/posts/mapping-singapore-top-places-using-leaflet-and-openstreetmap/): Interactive map of Singapore’s top attractions including Marina Bay Sands, Changi Airport, and Gardens by the Bay. - [Open WebUI Self-Hosted Setup Guide (Docker + Ollama + PostgreSQL on Ubuntu)](https://linsnotes.com/posts/open-webui-self-hosted-setup-guide/): Run Open WebUI on Ubuntu with Docker Compose, Ollama on host, and PostgreSQL backend for a self-hosted LLM interface. - [SSH Connections to Private GitLab and GitHub](https://linsnotes.com/posts/ssh-connections-to-private-gitlab-and-github/): Secure your Git workflow with SSH key setup, RSA vs Ed25519, and managing multiple accounts for GitHub and GitLab. - [A Beginner's Guide to Contributing on GitHub](https://linsnotes.com/posts/a-beginners-guide-to-contributing-on-github/): Learn open-source contribution basics through a community cookbook analogy, covering forks, pull requests, and workflows. - [Python Logging Setup for Data Science and Machine Learning](https://linsnotes.com/posts/python-logging-setup-data-science-machine-learning/): Configure Python logging properly for data science projects to control library noise and maintain consistent output. - [Machine Learning Algorithms Explained End-to-End Pipeline Guide](https://linsnotes.com/posts/machine-learning-algorithms-explained-end-to-end-pipeline-guide/): Comprehensive guide to machine learning models in scikit-learn with beginner-friendly explanations and practical examples. - [Deploying n8n AI Starter Kit on Raspberry Pi](https://linsnotes.com/posts/deploying-n8n-ai-starter-kit-on-raspberry-pi/): Deploy n8n AI Starter Kit on Raspberry Pi using Docker and Portainer with CPU-only Ollama support. - [How to Safely Backup and Restore Nginx Proxy Manager in Docker](https://linsnotes.com/posts/how-to-safely-backup-and-restore-nginx-proxy-manager-in-docker/): Back up and restore Nginx Proxy Manager Docker containers with SSL certificates and configurations safely. - [How to Set Up Raspberry Pi with Docker, Portainer & iptables](https://linsnotes.com/posts/how-to-set-up-raspberry-pi-with-docker-portainer-iptables/): Set up Raspberry Pi as a Docker homelab server with Portainer management interface and iptables firewall rules. - [Full custom HTML page with GoatCounter](https://linsnotes.com/posts/full-custom-html-page-with-goatcounter/): Create standalone HTML pages in Jekyll with custom CSS/JS while preserving GoatCounter analytics tracking. - [if __name__ == "__main__" in Python](https://linsnotes.com/posts/name-eq-main-in-python/): Learn how if __name__ == "__main__" runs code only when your Python script executes directly, not when imported. - [Dunder Methods in Python](https://linsnotes.com/posts/dunder-methods-in-python/): Master Python's dunder methods to make your custom classes work with built-in functions and operators. - [Virtualenv vs Conda: Choosing the Right Python Environment Tool](https://linsnotes.com/posts/virtualenv-vs-conda-choosing-the-right-python-environment-tool/): Understand the differences between virtualenv and Conda to choose the right Python environment management tool. - [What Is Programming? Compiled vs Interpreted Languages – What Beginners Need to Know](https://linsnotes.com/posts/what-is-programming-compiled-vs-interpreted-languages-a-beginners-guide/): Learn the fundamentals of programming by comparing compiled and interpreted languages using beginner-friendly analogies. - [Setting up a Travel Router with VPN Back to Your Home Network](https://linsnotes.com/posts/setting-up-a-travel-router-with-vpn-back-to-your-home-network/): Configure GL.iNet travel router with WireGuard VPN to securely route traffic through your home network while travelling. - [Sending Email from Raspberry Pi Using msmtp with Gmail OAuth 2.0](https://linsnotes.com/posts/sending-email-from-raspberry-pi-using-msmtp-with-gmail-oauth2/): Set up msmtp on Raspberry Pi to send emails via Gmail using OAuth 2.0 instead of deprecated app passwords. - [Machine Learning Lifecycle and Pipeline](https://linsnotes.com/posts/machine-learning-lifecycle-and-pipeline/): Overview of the ML lifecycle stages from problem definition through model deployment, including data preprocessing. - [Setting Up Ruby, RubyGems, and Build-Essential for Jekyll](https://linsnotes.com/posts/setting-up-ruby-rubygems-and-build-essential-for-jekyll/): Complete setup guide for Ruby, RubyGems, and build tools needed to run Jekyll on Linux for static site generation. - [Fixing Push and Pull Errors - Behind Tips, Reconciling Divergent Branches](https://linsnotes.com/posts/fixing-push-and-pull-errors-behind-tips-reconciling-divergent-branches/): Troubleshoot common Git push/pull errors and learn how to reconcile divergent branches with merge, rebase, or fast-forward. - [A Simple Guide to Using Git](https://linsnotes.com/posts/a-simple-guide-to-using-git/): Beginner-friendly Git guide covering version control basics, branching, and collaborative workflows. - [Miniconda Installation on Linux - Should You Enable Auto Initialization?](https://linsnotes.com/posts/miniconda-installation-on-linux-should-you-enable-auto-initialization/): Understand Miniconda auto-initialization options during installation and how to adjust conda startup behavior on Linux. - [Simple Guide for Ubuntu/Debian Configuration](https://linsnotes.com/posts/guide-for-debian-configuration/): Essential Ubuntu/Debian configuration guide covering firewall setup, SSH key generation, and sshd security. - [Guide to Install a Binary on Linux and Create a Systemd Service](https://linsnotes.com/posts/install-binary-on-linux-and-create-a-systemd-service/): Download, install Linux binaries, and create systemd services to manage them automatically. Example uses Cloudflared. - [Guide to Setting Up a Repository in Debian Linux](https://linsnotes.com/posts/guide-to-setup-repository-in-debian-linux/): Step-by-step guide to adding custom package repositories in Debian Linux, including GPG key setup. - [Sending Email from Raspberry Pi using MSMTP and MUTT](https://linsnotes.com/posts/sending-email-from-raspberry-pi-using-msmtp-and-mutt/): Configure MSMTP and Mutt on Raspberry Pi to send system notification emails via Gmail's SMTP server. - [Understanding Email Protocols - POP, SMTP, and IMAP](https://linsnotes.com/posts/understanding-email-protocols-pop-smtp-imap/): Learn the differences between POP, SMTP, and IMAP email protocols, plus mail agents like MTA, MDA, and MUA. - [Install and Configure UFW on a Raspberry Pi](https://linsnotes.com/posts/install-and-configure-ufw-on-a-raspberry-pi/): Set up UFW firewall on Raspberry Pi with practical rules to secure SSH and control network traffic. - [Manage Multiple SSH keys in Windows](https://linsnotes.com/posts/manage-multiple-ssh-keys-in-windows/): Configure Windows SSH to use different keys for different hosts, enabling seamless multi-server connections. - [Securing SSHD on Debian-based Linux Systems](https://linsnotes.com/posts/securing-sshd-on-debian-based-linux-systems/): Harden SSH security on Debian Linux by adding sudo users, generating key pairs, and implementing secure authentication. - [Guide to creating an SSH alias on Windows](https://linsnotes.com/posts/guide-to-creating-an-ssh-alias-on-windows/): Create SSH aliases on Windows to simplify connecting to remote servers without typing full credentials. - [Implementing Version Control for Dot Files using Symbolic Links](https://linsnotes.com/posts/implementing-version-control-for-dot-files-using-symbolic-links/): Manage your Linux dotfiles with version control using git and symbolic links for easy configuration syncing. - [How to Build a Personal Website Using Jekyll](https://linsnotes.com/posts/how-to-build-a-personal-website-using-jekyll/): Step-by-step guide to creating a static personal website with Jekyll and Ruby on Windows. - [理科生理中客,文科生屁股人?](https://linsnotes.com/posts/%E7%90%86%E7%A7%91%E7%94%9F%E7%90%86%E4%B8%AD%E5%AE%A2-%E6%96%87%E7%A7%91%E7%94%9F%E5%B1%81%E8%82%A1%E4%BA%BA/): 理科生和文科生的本质区别:理科生重逻辑,文科生重表述,各有其优劣。 - [从学渣到博士:一个学习方法改变我的命运,自创2.0版费曼学习法](https://linsnotes.com/posts/%E4%BB%8E%E5%AD%A6%E6%B8%A3%E5%88%B0%E5%8D%9A%E5%A3%AB/): 从学渣到博士:用费曼学习法2.0版轻松掌握任何知识,改变你的学习命运。 - [Logical Fallacies](https://linsnotes.com/posts/logical-fallacies/): Learn to identify common logical fallacies to strengthen critical thinking and rational argumentation skills. - [Barbara Oakley | Learning How to Learn | Talks at Google](https://linsnotes.com/posts/barbara-oakley/): Discover effective learning techniques with neuroscientist Barbara Oakley's insights on how the brain learns best. - [梁文福新谣歌曲](https://linsnotes.com/posts/%E6%A2%81%E6%96%87%E7%A6%8F-%E6%96%B0%E8%B0%A3%E6%AD%8C%E6%9B%B2/): Liang Wenfu's Singapore new wave songs featuring "Fine as Time Flows" and humorous satirical compositions. - [Beyond经典粤语歌曲](https://linsnotes.com/posts/beyond-%E7%BB%8F%E5%85%B8%E7%B2%A4%E8%AF%AD%E6%AD%8C%E6%9B%B2/): Collection of Beyond's iconic Cantonese rock songs including "Sea and Sky," "No More Hesitation," and "Glorious Years." - [许知远对话王赓武](https://linsnotes.com/posts/%E8%AE%B8%E7%9F%A5%E8%BF%9C%E5%AF%B9%E8%AF%9D%E7%8E%8B%E8%B5%93%E6%AD%A6/): Interview between Xu Zhiyuan and historian Wang Gungwu discussing identity reinvention amid change. - [Text and Typography](https://linsnotes.com/posts/text-and-typography/): Comprehensive guide to Markdown syntax rendering and typography features in the Chirpy Jekyll theme. ## Contacts - [Github](https://github.com/kuibinlin) - [Linkedin](https://www.linkedin.com/in/kuibinlin) - [Email](mailto:hello@linsnotes.com) - [Popular Posts](https://linsnotes.com/popular-posts/)