About Me

Hello there, I am kxxt 👋, a senior undergraduate from Shandong University (Weihai Campus).

I major in data science and AI at the School of Mathematics and Statistics. But I also always have a good passion for anything related to computers.

I am a native Chinese speaker but I also use English.

Now I am a senior intern at PLCT lab working on software packaging for RISCV64 Arch Linux.

Tech Stacks

I learned to program in C/C++/C# when I was in junior and senior high school. At first, I started learning the C/C++ programming language, but I could only write some simple console programs. Later, I tried to learn Windows application development, but MFC and the Windows API were both too difficult for me at the time. Later, I learned C#, and this time I learned how to use the WinForm and WPF frameworks to write Windows desktop applications.

As I grew older, I learned

  • Python for Web Scrapers, Backend, Data Science, Computer Vision, AI and more.
  • HTML/CSS/JavaScript for doing frontend works.
  • A little bit of Unity3D for game development.

I have some experience with React, Vue, Next.js and TypeScript. I have a lot of experience with Gatsby.js as you can see that my personal website is powered by Gatsby. By the way, I also uses SCSS to some extent. I have fallen in love with Rust since I learned it for the third time (I gave up twice due to its steep learning curve).

While attending university, I learned to use OpenCV, pytorch and numpy, etc. I also learned to write programs for Arduino-compatible boards. I learned R and Matlab for course purpose but I do not use them for my side projects so I might have forgotten some details and quirks of them. By the way, I know just enough about Mathematica to do some simple symbolic calculations and plots.

I do have some experience with Java(solving algorithm problems) but I haven’t practiced it in any serious scenario. Now I even rarely use C# because I often use linux now.

I learned to write Thunderbird add-ons in JavaScript and Obsidian plugins in TypeScript.

I tried to learn Haskell but gave up. I learned F# but I haven’t practiced it much.

Other Skills

  • I have a good understanding of the Linux operating system and I have been using it as my primary operating system for more than 3 years.
  • I use Git for version control.
  • I use Docker to build and run containers and have basic knowledge of Kubernetes(But I haven’t got a chance to practice it).
  • I have some experience with Makefiles.
  • I am familiar with writing LaTeX equations inside Markdown files. But I do not have too much expertise in authoring LaTeX docs.
  • I have some experience with writing shell scripts but I am not good at it.
  • I possess a working knowledge and some fundamental experience in packaging software for Arch Linux and Debian1.

Software that I use

Here are some extraordinary applications that keep me happy and productive.

Operating Systems

  • Garuda Linux(Primary): Garuda Linux is a rolling distribution based on the Arch Linux operating system.
    • I use it for my daily work and it works perfectly.
  • Windows: Now I only use it for gaming and tasks that require Windows or when I want to use my laptop as a tablet PC.
  • Debian: I use it on my server due to its stability.
  • LineageOS: I use it on my phone.

Browsers

  • Firefox: I use it as my primary browser.
  • Chromium: I use it for some websites that are not compatible with Firefox and for debugging purpose.

IDEs

  • Visual Studio Code: I use it for most of my projects.
  • Visual Studio: I use it for C# projects.
  • PyCharm: Sometimes I use it for Python projects.

Other Software

  • Obsidian: I use it to manage my notes and knowledge.
  • Thunderbird: I use it to manage my emails and calendars.
  • Typora: I use it to write markdown files.
  • Steam, Epic, Ubisoft: For gaming.
  • Zsh: I use it as my shell.
  • Slidev: I use it to write slides in Markdown.

My Hobbies

Except for programming, I also have some other hobbies. Here are some of them.

  • Gaming: I love Assassin’s Creed series.
  • Reading: I love reading books and blogs, here is my reading list.
  • Listening to light music and podcasts.
  • Riding my bike.

Open Source

I am a big fan of open source software and I have contributed to some projects and wrote some of my own.

Here are some cool projects of mine: (Click on the picture to view the full picture)

aspeak help text

aspeak

A simple text-to-speech client for Azure TTS API.

From May 1, 2022, still maintained

ttsazurerustclipython

The Azure Text-to-Speech demo shows how powerful Azure TTS API is and it was once very popular on the web. A lot of people invented their own ways(e.g. User Scripts) to utilize the demo page to download the synthesized audio.

aspeak was created to make it easier to use Azure TTS API in the command-line. It was originally written in Python, but I have rewritten it in Rust to practice my Rust skills.

Category Manager

Category Manager

A thunderbird extension to manage categories of your contacts.

From Sep 26, 2022, still maintained

thunderbirdadd-onjavascriptwebextension

At first, I made some pull requests to EAS-4-TbSync and TbSync to fix the calendar sync issue caused by incompatibility with Thunderbird 102.

Later, the author of the two add-ons, John Bieling, sponsored me to rewrite his Category Manager add-on for Thunderbird 102.

By rewriting the add-on, I learned a lot about Thunderbird add-on development and the web extension API.

An example

chatgpt-action

Let ChatGPT review PRs for you.

From Dec 7, 2022 to Dec 13, 2022, Unmaintained.

code-reviewaigithub-actionjavascriptchatgpt

When ChatGPT went viral, I was inspired to create a GitHub Action that uses ChatGPT to automatically review PRs.

At that time, I don't know how to author a GitHub Action. So I read the documentation roughly and wrote a GitHub Action that just works. Code quality is not a focus for this project. I just wanted to create a prototype to see if ChatGPT can be used to review PRs. And to my surprise, it works to some extent!

Here are some demos:
Command palette showing the commands of Advanced Paste Plugin for Obsidian

Advanced Paste Plugin for Obsidian

This plugin provides advanced paste commands and enables you to create custom transforms for pasting.

From Jan 16, 2023, still maintained

obsidianplugintypescriptjavascript

I use Obsidian as my second brain. I have a lot of notes in Obsidian. I often copy and paste text from other applications to Obsidian. And I found that pasting from PDF is a pain and pasting from web pages often result in excessive blank lines. So I created this plugin to solve these problems and enable the users to create their own custom transforms for pasting.

A screenshot of my personal website

My Personal Website

The website you are visiting right now.

From Nov 28, 2021, actively maintained

gatsby.jsreactsassmdxbulma

When I take my personal website seriously, I decided to use Gatsby to rebuild it because I love the principles of Gatsby.

MDX is an amazing technology that allows me to write blog posts in Markdown and embed custom React components in the posts. The page you are visiting right now is also written in MDX and the card you are looking at is a React component.

I also use Bulma as the CSS framework because I love the feel and look of it.

A screenshot of WSL Disk Shrinker

WSL Disk Shrinker

Reduce WSL disk usage.

From May 24, 2021, finished

C#WPFWSLwindows

When I use WSL, I found that the disk usage of WSL is always growing. Inspired by this blog post, I created this GUI tool to help me shrink the disk usage of WSL.

A screenshot of the directory listing and a slide.

Slidev Template Repo

A template repo for slidev slides with automatic GitHub Pages deployment and directory listing generation.

From Feb 27, 2023, still maintained

slidevtemplate-repogithub-actions

Slidev is a great tool for creating slides in Markdown and Vue. I usually use it as a replacement for PowerPoint.

I created this template repo to make it easier to deploy multiple slidev slides to their respective sub-routes on GitHub Pages.

By the way, this template repo also generates a nice directory listing for GitHub Pages.

Course Projects

And here are some course projects that I have done or collaborated on:

(Click on the picture to view the full picture)

A screenshot of CFPS report website

CFPS Report

Course project for front-end development.

From Nov 23, 2021 to Jan 2, 2022

websitevuedata-visualizationecharts.jsjavascript

China Family Panel Studies (CFPS) is a survey designed to collect individual-, family-, and community-level longitudinal data in contemporary China. The studies focus on the economic, as well as the non-economic, wellbeing of the Chinese population, with a wealth of information covering such topics as economic activities, education outcomes, family dynamics and relationships, migration, and health.

Our mentor asked us to analyze the CFPS dataset and create a beautiful and responsive report website about the difference between the rural and urban areas in China and the problems in the rural areas. He also asked us to use echarts.js for data visualization.

I used Vue.js for front-end development and Python for data analysis. And bulma was chosen as our CSS framework because I am familiar with it.

A screenshot of our platform.

CFPS Data Analysis and Visualization Platform

Course project for front-end development and database.

From Jan 12, 2022 to Feb 12, 2022

jupyterhubnext.jsdata-visualizationecharts.jsdockerjupyter-notebookfastapijavascriptpythonmysqldockernginxlinux

Our mentor asked us to create a data visualization platform for CFPS dataset. He provided us with two choices: JupyterHub or a website.

We chose JupyterHub because it is more convenient for data analysis and visualization. I used Next.js for front-end development and FastAPI for OAuth2 server implementation. We also used MySQL to store the CFPS dataset and Nginx for reverse proxy. I deployed the platform on my cloud server.

To solve the problem of echarts.js loading issues when a jupyter notebook is shared between different users of our platform, I wrote a Jupyter lab plugin named jupyterlab-cfps-preload.

I take security seriously. I use Let's Encrypt for HTTPS and all the users' jupyter lab instance are running in an isolated docker container and users can only access the CFPS database via a read-only user.

Besides security, I also take the user experience seriously. We have set up the jupyter lab to automatically load common libraries and set up the database connection.

We created twenty-three kinds of data visualization on our platform. The notebook source files are available at https://github.com/lie-flat/cfps-jupyterhub/tree/master/notebooks

Our robotic arm

Robotic Arm

Course project for PCB and more.

From Apr 9, 2021 to Jul 12, 2021

roboticsraspberry-pimanjaro-armcomputer-visionface-recognitionhand-recognitionvoice-recognitionmediapipepythonspeech-synthesisservosimulation

We were asked to create a robotic arm with a camera as end-effector. The robotic arm should be able to recognize faces and hands and keep its camera centering on the human face. My team members designed the mechanical structure of the robotic arm using SolidWorks and draw the PCB layout. I wrote the programs for the robotic arm with some help from my teammates.

I used Raspberry Pi 4B with Manjaro ARM operating system as the main controller of the robotic arm. And I used google's famous mediapipe library to implement face and hand recognition. I also used vosk for voice recognition and pyttsx3 for speech synthesis. BTW, I set up an simulation environment for the robotic arm so that you can test the program without a real robotic arm.

Check out the bilibili video to see the robotic arm in action and learn about how it works.

Our car, road and one of the traffic signs

smart-car-deep-learning

Course project for summer research training program.

From July 2022 to Aug 28, 2022

esp32arduinoplatform-iodeep-learningcomputer-visionpythonc++object-detectionopencv

We were asked to create a smart car that can drive itself(which means that the car can follow the lane) and recognize traffic signs.

The car is powered by an ESP32 board and an ESP32 camera. All the deep learning workloads are done on my wirelessly connected laptop.

We write Arduino programs in C++ using PlatformIO IDE and flash them into the ESP32 board/camera. We trained lane segmentation and traffic sign detection models using PaddlePaddle. In the end, we used OpenCV to do lane following and visualization.

Showcase of the self-parking process.

smart-car-auto-parking

Course project for Computer Vision.

From Nov 3, 2022 to Feb 9, 2023

esp32arduinoplatform-ioreinforcement-learningcomputer-visionpythonc++opencvpybulletArUco

This is the continuation of our previous course project. This time, our mentor asked us to create a smart car that can park itself.

We used the same hardware as the previous project. We use a single android phone as the only camera to determine the position and rotation of the car. As you can see, we used an ArUco board for pose estimation. We also used OpenCV to do the visualization that you see in the picture.

We trained our car agent using stable-baselines3 and pybullet. In the end, the car agent can park itself whether it is in simulation or in reality.

Learn more about how we did it by watching the bilibili videos.

Other Experience

I learned ROS(Robot Operating System) in a school course. I am planning to learn Zig programming language.

I have participated in Open-Source OS Training Comp 2022 but I haven’t finished the second stage yet. I have learned a lot about operating system development and riscv64 architecture from this project.

I have participated in some CTF competitions and I have learned a lot on information security from them.

Foot notes

Footnotes

  1. I have packaged some software for raspberry pi: https://github.com/piculator (No longer maintained)