MagicLen Me

Xin-Rong Li

(Ron Li)

Born in 1993, I have been learning programming languages since 2008 and have expertise in developing websites, web services, specialized tools and Android applications. Moreover, I have become a heavy GNU/Linux user these days. In 2014, I established magiclen.org to share my knowledge and experience, and have written more than a thousand of articles related to various subjects.


Expe­rience

Webmaster of magiclen.org

magiclen.org
2014 – Present

Substitute Military Service at Taiwan Taoyuan International Airport

Aviation Police Bureau Security Agent
2015 – 2016

Webmaster of it-easy.tw

it-easy.tw
2008 – 2012

Education

National Taiwan University of Science and Technology

Bachelor's Degree, Computer Science & Information Engineering

Overall GPA is 3.89 / 4.00.

2011 – 2015

National Taichung Industrial High School

Department Of Computer Science
2008 – 2011

Certifi­cations

TOEIC 860 (L: 445, R: 415)

Educational Testing Service (ETS)

19080039

2019

LPIC-2

Linux Professional Institute (LPI)

msa48y42xg

Validate

Open Image

2019

Oracle Certified Professional, Java SE 8 Programmer

Oracle

227127085OCPJSE8

Validate

Open Image

2016

Oracle Certified Associate, Java SE 8 Programmer

Oracle

227127085OCAJSE8

Validate

Open Image

2016

LPIC-1

Linux Professional Institute (LPI)

3fyc8948ab

Validate

Open Image

2016

ITE Linux System Operation IT Expert

Computer Skills Foundation (CSF)

321160300000030

2016

TQC+ Java Programming Expert

Computer Skills Foundation (CSF)

111140600000

2014

Level B Technician for Computer Hardware Fabrication

Skill Evaluation Center of Workforce Development Agency

120-021063

2011

Level C Technician for Computer Hardware Fabrication

Skill Evaluation Center of Workforce Development Agency

120-173814

2010

GEPT (General English Proficiency Test) Elementary

The Language Training & Testing Center (LTTC)

E476009

2010

Level C Technician for Web Page Design

Skill Evaluation Center of Workforce Development Agency

173-103670

2009

Skills

Programming Languages
  • Experienced with: Rust, JavaScript
  • Familiar with: Java, C, PHP, Golang, Bash
Operating Systems
  • GNU/Linux, Android
Web Frameworks & Libraries & Packages
  • PHP: WordPress, phpBB
  • Node.js: TypeScript, Webpack, NestJS, Fastify, Express
  • Rust: Rocket, axum
  • Front-end websites: Vite, Vue.js, Pinia, Bootstrap, jQuery, Handlebars, Tera, Sass
  • Web Servers: Nginx, Apache httpd
  • Container: Docker
Databases
  • SQL: MySQL, SQLite, Oracle, SQL Server
  • NoSQL: MongoDB, Redis
Natural Languages
  • Mandarin (native)
  • English (intermediate)
Other Skills
  • Computer hardware fabrication

Interests

  • Recitation of Chinese poems
  • Writing
  • Piano and digital music
  • Photographing
  • Jogging
  • Mountain climbing
  • Mathematics (developing...)

Active Projects

adblock-checker
JS
Check if the current web browser has any ad blockers (AdBlock, Adblock Plus, uBlock, AdGuard, ...) enabled.
2023
date-differencer
Rust
JS
Calculate the time interval between two DateTime instances and output the result in years plus months plus days plus hours plus minutes plus seconds plus nanoseconds (instead of representing the same duration in different units). This library is useful for lifespan check and age calculation.

View The Article

2023
fit-html-text
JS
Fit text into its surrounding container.
2023
input-time-helper
JS
Intuitively (by using local time) get/set the value of a date- or time-based HTML input element.
2023
tw-nhi-icc
JS
Read Taiwan NHI cards in JavaScript/TypeScript.
2023
tw-nhi-icc-service
Rust
Read Taiwan NHI cards via HTTP API.
2023
year-helper
Rust
JS
This library provides some useful functions to deal with years.

View The Article

2023
Recitation Master
Rust
Customize your own Telegram robot. Help you become a recitation master!

View The Article

2022
run-with-node-env
JS
Set the NODE_ENV variable on all platforms.

View The Article

2022
tw-id-num
Rust
JS
Check or generate Taiwan ID numbers.

View The Article

2022
utf8-builder
Rust
Build and validate UTF-8 data from chunks. Each chunk doesn't have to be a complete UTF-8 data.

View The Article

2022
entity-tag
Rust
This crate provides a EntityTag structure and functions to deal with the ETag header field of HTTP.

View The Article

2021
manifest-dir-macros
Rust
This crate provides function-like macros to check or operate paths relative to CARGO_MANIFEST_DIR at compile time.

View The Article

2021
url-escape
Rust
This library is for encoding/escaping special characters in URLs and decoding/unescaping URLs as well.

View The Article

2021
Wait Service
Rust
Wait Service is a pure rust program to test and wait on the availability of multiple services.

View The Article

2021
word-dictionary
Rust
This crate provides a data structure for word mapping. It can be used for language translation.

View The Article

2021
concat-with
Rust
While the concat! macro in std is useful to create a static string slice (&'static str) from literals, it cannot set a separator for those. This crate therefore provides another concat! macro to deal with that situation.

View The Article

2020
execute
Rust
This library is used for extending Command in order to execute programs more easily.

View The Article

2020
html-auto-p
Rust
This library provides a function like wpautop in Wordpress. It uses a group of regex replaces used to identify text formatted with newlines and replace double line-breaks with HTML paragraph tags.

View The Article

2020
html-escape
Rust
This library is for encoding/escaping special characters in HTML and decoding/unescaping HTML entities as well.

View The Article

2020
html-outliner
Rust
Outline HTML documents for better SEO.

View The Article

2020
Image Resizer
Rust
It helps you resize or just shrink images and sharpen them appropriately.

View The Article

2020
lrc
Rust
A pure Rust implementation of LyRiCs which is a computer file format that synchronizes song lyrics with an audio file.

View The Article

2020
mprober-lib
Rust
This crate aims to quickly collect Linux system information including hostname, kernel version, uptime, RTC time, load average, CPU, memory, network interfaces, block devices and processes.

View The Article

2020
Nginx Cache Purge
Rust
An alternative way to do proxy_cache_purge or fastcgi_cache_purge for Nginx.

View The Article

2020
paginator
Rust
JS
This crate is used for generating pagination bar.

View The Article

2020
random-number
Rust
Generate random numbers quickly.

View The Article

2020
rocket-jwt-authorization
Rust
This crate provides a procedural macro to create request guards used for authorization.

View The Article

2020
same-content
Rust
Determine whether data from different sources are the same.

View The Article

2020
sorted-insert
Rust
This crate provides traits to insert elements to a sorted collection and keep the order.

View The Article

2020
trim-in-place
Rust
This crate is used for extending String in order to do in-place trimming.

View The Article

2020
unicode-blocks
Rust
This crate contains a list of all unicode blocks and provides some functions to search across them.

View The Article

2020
utf8-width
Rust
To determine the width of a UTF-8 character by providing its first byte.

View The Article

2020
words-count
Rust
This crate can the words and characters, with or without whitespaces.

View The Article

2020
benchmarking
Rust
This crate can be used to execute something and measure the execution time. It does not output anything to screens and filesystems.

View The Article

2019
boyer-moore-magiclen
Rust
This crate can be used to search substrings in a string or search any sub-sequences in any sequence by using boyer-moore-magiclen (which is sometimes faster than boyer-moore and boyer-moore-horspool).

View The Article

2019
bulls-and-cows
Rust
This crate provides a framework for building bulls-and-cows games (1A2B) for any data type and any stages.

View The Article

2019
cidr-utils
Rust
This crate provides functions for working with IPv4 CIDRs and IPv6 CIDRs.

View The Article

2019
debug-helper
Rust
This crate provides declarative macros to help you implement the Debug trait manually.

View The Article

2019
educe
Rust
This crate provides procedural macros to help you implement Rust-built-in traits quickly.

View The Article

2019
Favicon Generator
Rust
It helps you generate favicons with different formats and sizes.

View The Article

2019
Image Interlacer
Rust
It helps you interlace an image or multiple images for web-page usage.

View The Article

2019
M Prober
Rust
JS
This program aims to collect Linux system information including hostname, kernel version, uptime, RTC time, load average, CPU, memory, network interfaces, block devices and processes. It can be used not only as a normal CLI tool, but also a web application with a front-end webpage and useful HTTP APIs.

View The Article

2019
rc-u8-reader
Rust
This crate provides RcU8Reader, RcRefCellU8Reader, ArcU8Reader and ArcMutexU8Reader structures to wrap Rc<T>, Rc<RefCell<T>>, Arc<T> and Arc<Mutex<T>> respectively where T is implemented AsRef<u8> in order to let them have the Read trait.

View The Article

2019
rocket-include-tera
Rust
This is a crate which provides macros tera_resources_initialize! and tera_response! to statically include Tera files from your Rust project and make them be the HTTP response sources quickly.

View The Article

2019
rocket-recaptcha-v3
Rust
This crate can help you use reCAPTCHA v3 (v2 is backward compatible) in your Rocket web application.

View The Article

2019
rocket-simple-authorization
Rust
This crate provides a request guard builder used for authorization.

View The Article

2019
scanner-rust
Rust
This crate provides Java-like Scanners which can parse primitive types and strings using UTF-8 or ASCII.

View The Article

2019
str-utils
Rust
This crate provides data structures and functions to deal with IPv4 CIDRs and IPv6 CIDRs.

View The Article

2019
user-agent-parser
Rust
A parser to get the product, OS, device, cpu, and engine information from a user agent, inspired by https://github.com/faisalman/ua-parser-js and https://github.com/ua-parser/uap-core

View The Article

2019
alphanumeric-sort
Rust
This crate can help you sort order for files and folders whose names contain numerals.

View The Article

2018
base64-stream
Rust
To encode/decode large data with the standard Base64 encoding.

View The Article

2018
base64-stream
Rust
Base64 encode, decode, escape and unescape for URL applications.

View The Article

2018
base64-stream
Rust
Use bc in the Rust Programming Language.

View The Article

2018
byte-unit
Rust
A library for interaction with units of bytes.

View The Article

2018
chinese-lunisolar-calendar
Rust
This library allows you to seamlessly convert dates between the Lunisolar Calendar and the Solar Calendar, compute the Ba Zi (八字) weight, and also convert dates to Chinese text strings. Furthermore, it enables parsing of Chinese text strings into dates in both Simplified Chinese and Traditional Chinese.

View The Article

2018
chinese-number
Rust
Convert primitive numbers to Chinese numbers, or parse Chinese numbers to primitive numbers.

View The Article

2018
crc-any
Rust
To compute CRC values by providing the length of bits, expression, reflection, an initial value and a final xor value. It has many built-in CRC functions.

View The Article

2018
enum-ordinalize
Rust
This library enables enums to not only obtain the ordinal values of their variants but also allows for the construction of enums from an ordinal value.

View The Article

2018
FFmpeg Screen Recorder
Rust
This program is a gadget which helps you use FFmpeg to record your screen on Linux. The video record can be saved as a file, or be streamed via RTMP.

View The Article

2018
html-minifier
Rust
This library can help you generate and minify your HTML code at the same time. It also supports to minify JS and CSS in <style>, <script> elements, and ignores the minification of <pre>, <code> and <textarea> elements.

View The Article

2018
image-convert
Rust
This crate is a high level library using MagickWand (ImageMagick) for image identification, conversion, interlacing and high quality resizing.

View The Article

2018
json-gettext
Rust
This is a library for getting text from JSON usually for internationalization.

View The Article

2018
lazy-static-include
Rust

This crate provides lazy_static_include_bytes and lazy_static_include_str macros to replace include_bytes and include_str macros.

lazy_static_include_bytes and lazy_static_include_str macros include data from files into the compiled executable binary file only when you are using the release profile. Be careful when you distribute your program.

View The Article

2018
leveled-hash-map
Rust
LeveledHashMap is a structure to separate values into different levels with keys. Every key-value entry which is not at the top level has a parent key at the superior level. Keys at the same level are unique, no matter what parent keys they have.

View The Article

2018
map-to-javascript-html
Rust
This is a library for serializing a map to JavaScript code in HTML, usually for dynamically generating strings on web pages.

View The Article

2018
Markdown to HTML Converter
Rust
Markdown to HTML Converter is a free tool for converting a Markdown file to a single HTML file with built-in CSS and JS.

View The Article

2018
mongo-file-center
Rust
This crate aims to build an easy-to-use and no-redundant file storage based on MongoDB.

View The Article

2018
number-as
Rust
Extend primitive number types to make them have a number_as method.

View The Article

2018
opencc-rust
Rust
Open Chinese Convert (OpenCC) binding for the Rust language for conversion between Traditional Chinese and Simplified Chinese.

View The Article

2018
passwords
Rust
This crate provides useful tools to generate multiple readable passwords, as well as analyze and score them.

View The Article

2018
path-absolutize
Rust
This is a library for extending Path and PathBuf in order to get an absolute path and remove the containing dots.

View The Article

2018
path-dedot
Rust
This is a library for extending Path and PathBuf in order to parse the path which contains dots.

View The Article

2018
Pipe Logger
Rust
A tool for storing, rotating, compressing process logs.

View The Article

2018
pipe-logger-lib
Rust
A library for storing, rotating, compressing process logs.

View The Article

2018
qrcode-generator
Rust
This crate provides functions to generate QR Code matrices and images in RAW, PNG and SVG formats.

View The Article

2018
random-pick
Rust
Pick an element or elements from a slice or slices randomly by given weights.

View The Article

2018
rc-writer
Rust
A tiny implement for writing data to a reference counted instance.

View The Article

2018
rocket-accept-language
Rust
This crate provides a request guard used for getting the accept-language header.

View The Article

2018
rocket-cache-response
Rust
This crate provides a response struct used for HTTP cache control.

View The Article

2018
rocket-client-addr
Rust
This crate provides two request guards used for getting an IP address from a client.

View The Article

2018
rocket-download-response
Rust
This crate provides a response struct used for client downloading.

View The Article

2018
rocket-etag-if-none-match
Rust
This crate provides a request guard used for getting if-none-match header.

View The Article

2018
rocket-etagged-raw-response
Rust
This crate provides a response struct used for responding raw data with Etag cache.

View The Article

2018
rocket-include-handlebars
Rust
This is a crate which provides macros handlebars_resources_initialize! and handlebars_response! to statically include HBS (Handlebars) files from your Rust project and make them be the HTTP response sources quickly.

View The Article

2018
rocket-include-static-resources
Rust
This is a crate which provides macros static_resources_initialize! and static_response! to statically include files from your Rust project and make them be the HTTP response sources quickly.

View The Article

2018
rocket-json-response
Rust
This is a crate which provides JSONResponse and JSONResponseWithoutData structs to response JSON format data with an additional code integer value.

View The Article

2018
rocket-mongo-file-center-download-response
Rust
This crate provides a response struct used for client downloading from the File Center on MongoDB.

View The Article

2018
rocket-mongo-file-center-raw-response
Rust
This crate provides a response struct used for responding raw data from from the File Center on MongoDB with Etag cache.

View The Article

2018
rocket-multipart-form-data
Rust
This crate provides a multipart parser for the Rocket framework.

View The Article

2018
rocket-raw-response
Rust
This crate provides a response struct used for responding raw data.

View The Article

2018
s2tw
Rust
A simple tool for converting Simple Chinese to Traditional Chinese(TW).

View The Article

2018
ShortCrypt
Rust
JS
ShortCrypt is a very simple encryption library, which aims to encrypt any data into something random at first glance. Even if these data are similar, the ciphers are still pretty different. The most important thing is that a cipher is only 4 bits larger than its plaintext so that it is suitable for data used in an URL or a QR Code. Besides these, it is also an ideal candidate for serial number generation.

View The Article

2018
Simple SSL with ACME and CloudFlare
Rust
Simple SSL with ACME and CloudFlare is a tool to simply apply SSL certificates by using OpenSSL and ACME via CloudFlare DNS.

View The Article

2018
slash-formatter
Rust
This crate provides functions to deal with slashes and backslashes in strings.

View The Article

2018
synchronized-writer
Rust
A tiny implement for synchronously writing data.

View The Article

2018
tw2s
Rust
A simple tool for converting Traditional Chinese(TW) to Simple Chinese.

View The Article

2018
url-prefix
Rust
This crate can be used to create URL prefix strings by inputting a protocol, a domain, a port number and a path without additional parsing.

View The Article

2018
validators
Rust
This is a library for validating and modeling user input.

View The Article

2018
vcard
Rust
This is a library for validating and modeling user input.

View The Article

2018
whois-rust
Rust
This is a WHOIS client library for Rust, inspired by https://github.com/hjr265/node-whois

View The Article

2018
XCompress
Rust
XCompress is a free file archiver utility on Linux, providing multi-format archiving to and extracting from ZIP, Z, GZIP, BZIP2, LZ, XZ, LZMA, 7ZIP, TAR, RAR and ZSTD.

View The Article

2018
zbar-rust
Rust
High-level and low-level ZBar binding for the Rust language.

View The Article

2018
fast-string-search
Rust
JS
Fast search substrings in a string on Node.js by using N-API and boyer-moore-magiclen.

View The Article

2017
node-crc
Rust
JS
To compute CRC values by providing the length of bits, expression, reflection, an initial value and a final xor value. It has many built-in CRC functions.

View The Article

2017
node-int32
Rust
JS
Use Rust to compute 32-bit signed integers and wrap around at the boundary in Node.js.

View The Article

2017
node-int64
Rust
JS
Use N-API to compute 64 bits integers on Node.js.

View The Article

2017
node-meminfo
Rust
JS
Get memory information on Node.js on Linux.

View The Article

2017
node-qr-code
Rust
JS
Encode QR Code by using N-API on Node.js.

View The Article

2017
node-stringbuilder
C
JS
An easy and fast in-memory string builder for Node.js.

View The Article

2017
node-sysconf
Rust
JS
Get configurable system variables on Node.js.

View The Article

2017
Ant Text Creator
Java
You can convert any text to ant text or convert any ant text to original text.

View The Article

2016
Text Hider
Java
You can quickly hide any text into another text composed of A-Z characters or recover it by String Hider.

View The Article

2016
IP Viewer
Java
Rust
See your public IP and test the speed and stability of your network connection in an easy way.

View The Article

2015
MagicLen
Java
Rust
Publish a wide variety of original articles, including programming languages, applications of websites, introduce of software and hardware, operating system, travel, interview, brainstorming problems, literature, experience, and works.

View The Article

2015
MagicCrypt
Java
PHP
JS
Rust
MagicCrypt is a Java/PHP/NodeJS/Rust library to encrypt/decrpyt strings, files, or data, using Data Encryption Standard(DES) or Advanced Encryption Standard(AES) algorithms. It supports CBC block cipher mode, PKCS5 padding and 64, 128, 192 or 256-bits key length. If the encrypted data is a string, it will be formatted automatically to Base64.

View The Article

2014
magiclen.org
Rust
JS

MagicLen (magiclen.org) is a series of websites built with Rust. It has a wide variety of original articles on its main site including software (especially open-source software), Internet, websites, operating systems, programming languages, travels, expedition, humanistic geography, science, food, entertainment, art, literature, natural languages, military and puzzles.

The sub-sites list:

  • img.magiclen.org: It can display uploaded images classified according to folder names and generate HTML text for embedding each image.
  • file.magiclen.org: It can hide the real positions of files on the server and generate download pages for each files.
  • tool.magiclen.org: It provides some web pages with specific functions such as contact, link exchange and IP addresses fetching.
  • api.magiclen.org: It provides the APIs of MagicLen's web services.
  • url.magiclen.org: It can redirect a URL to another URL.
  • me.magiclen.org: It collates the webmaster's profile and also supports multi-languages.
  • cloud.magiclen.org: It provides many free cloud tools and also supports multi-languages.
  • phrases.magiclen.org: It is a English learning website mainly used for Chinese learners of English language to review the most common phrases and sentence patterns.
2014
Skiing Snowman
C#

In the wilderness of ice and snow, our lord commiserate this land, and he shines a ray of limelight. Like magic, the light gives this ground life.

There are four small snowmen, which wear hats of different color. They sing their own Christmas song to fight for lord's love and warm. That light is our lord's kindness of this world. That is life, and is future, too.

More importantly, that is the energy for eternal life. To live forever, snowmen will fight recklessly to grab the limelight, even push other snowman down.

Will they become the snowman that lord gives a true life to? It will up to you!

View The Article

Open Video

2013

Others

Electric Works
  • Smart Raspberry Pi Car: Use Raspberry Pi to manipulate the car's motors and LEDs driven by L293D and 7407 buffers. This car has a digital camera and the power source is a power bank. People can use applications on smartphones or computers to control this car to move forward, move backward, rotate, turn right/left, take pictures, flash turn signal, and even send some special commands to let this car do stunts.