Illustration

LADSPA Stereo Frequency Splitter & Bass Booster

During the Chinese Spring Festival, my dad gave me an Edifier M120 Bluetooth speaker. This speaker is not one of these high-end models featuring dedicated bass speakers or professional Bluetooth audio codecs such as aptX and LDAC; it's just a unit with two ordinary speakers.With that said, I doubt I can hear any difference with those advanced codecs on a portable speaker anyway.But when I played some music with my phone connected to it, I realized that it does have some bass output. Speaking of bass, I'm impressed by a JBL Charge 4 speaker bought by one of my classmates. As a portable speaker that costs 150,ithasadedicatedbassunitwithastonishingpower.ThenIbegantothinkthat,althoughmyspeakercostsamere150, it has a dedicated bass unit with astonishing power. Then I began to think that,...

(Almost) Lossless Archival with Modern Formats - H265 and HEIF

Many people keep their inventory of photos and videos for their travels, parties, or whatever important moments of their lives. If you are into taking photos and recording videos and like keeping all of them, you will likely fill up hard drives after hard drives. If you don't want to keep adding more drives to your collection, you may also try to compress your photos and videos.Speaking of compression, a common method is to reduce the resolution of images. I've used the good old Microsoft Office Picture Manager (that comes with Office 2003) and its built-in one-key image compression. Behind the scenes, it's actually downsampling images to JPEG files of around 1024x768. One major drawback is that a lot of the details are completely lost....
Illustration

OS/2 Warp 4: Trying out & Installing Firefox

OS/2 is an operating system initially developed by IBM and Microsoft and later maintained by IBM. Back in the 1990s, OS/2 was a competitive rival to Windows, but later OS/2 was defeated by the Windows series, and IBM finally shut down OS/2 Warp 4's tech support on Dec 31, 2006.But this does not mark the death of OS/2. After official tech support ended, Senerity System took over OS/2's development and continued it under the name eComStation. In 2015, another company, Arca Noae LLC, produced an OS/2 based distribution called ArcaOS, and sold it as a commercial product.At the same time, the open-source community is providing some support to OS/2. They cross-compiled common Unix tools (including ls, rm, etc.), RPM/YUM package manager, and a series of libraries on OS/2....

Cyclone IV FPGA Development Log

Last semester, the school offered a digital systems course, which involves development on FPGAs. At the end of the course, we need to gather in groups and achieve some complicated functionality with the flexible architecture of FPGA, such as creating a game or running a convoluted neural network. We are free to add extra functionalities as we wish.Our group has done a game similar to Raiden, or controlling a fighter jet and attacking enemies with bullets. In addition to course requirements, we implemented these extra functionalities:A 640x480 VGA framebuffer with 16-bit color depth, stored on SRAM chipNaturally, Simplified Chinese fonts are included (full UTF-8 Chinese range, but without punctuation marks, since they are out of that range and we're kinda lazy)...

Running Anycast DNS with Docker in DN42

2020-03-16 NotesThere is an updated scheme compared to this post, see Sharing Network Namespace Among Docker Containers for Bird Anycasting.It is suggested to read only the concept explanations in this post, and use the above scheme instead for deployment.What's AnycastThe commonly used routing protocol on Internet, the BGP, works like this:I own an IP range, 172.22.76.104/29, on DN42.With a BGP software like BIRD, I "announce" that my server has access to IP range 172.22.76.104/29.Servers with peering to me will record this message: "Over this path, I can access 172.22.76.104/29 which is 1 step away."These servers continue to announce to others with peering to them: "This server is 1 step away from the source of 172.22.76.104/29."Similarly, other servers announce that they are 2, 3, 4......
Illustration

Bird-lg in Go (Bird Looking Glass)

What's BIRD? And What's Bird-lg?BIRD is a popular BGP routing software used on Linux. I mainly use Bird in the DN42 network, to establish connections with other users.Bird-lg is a Python 2 based program developed by GitHub user sileht. It provides a web interface to show the status of BIRD routing software on each server, as well as query routes to specified IPs.Why Rewrite in Go?Bird-lg is based on Python 2 and Flask and takes more memory (20-30MB).Bird-lgproxy also takes around 20MB and is required on every server. On the 512MB VPS where this site is hosted, there had been multiple cases where memory ran out, and the on-disk SWAP was too slow. In this case, Docker, Nginx, MySQL, PHP would crash one after one, and a reboot would be necessary.The rewritten version in Go takes only 6 MB....
Illustration

Writing Stories in Traceroute

2020-10-11 UpdateNow a better way exists that doesn't involve a bunch of Docker containers. Please refer to Writing Stories in Traceroute, Elegantly.IntroTraceroute is one of the popular tools for network inspection. It shows the IP addresses of routers on the route from your computer to a destination server, similar to:Domains are shown on the last 2 hops, which is the IP's reverse DNS record. Reverse DNS records exist as PTR records in the format of 4.3.2.1.in-addr.arpa. For more information, you may refer to Setting IP Reverse Records in DN42 (Chinese Only).However, PTR records need not be real domains. They can be any string that "looks like" a domain. With this, we can write one sentence on each hop of a Traceroute path to make a story:This story is set up in DN42....
Illustration

Registering Domain in DN42

DN42, aka Decentralized Network 42, is a large VPN network. Unlike traditional VPNs, DN42 uses a lot of technology involved in Internet backbones (such as BGP) and is a great simulation of a realistic network environment.In a previous post (Chinese only), I joined DN42 and connected most of my VPSes to it. (The ones left are OpenVZ VPSes without Tun/Tap support.) I knew from the beginning that DN42 has its own domain name system. For example, DN42's wiki (https://wiki.dn42.us/Home) can be accessed as https://internal.dn42 in DN42. I didn't register a domain back then since I didn't have time, and I didn't have much knowledge of DN42. I finished the registration this month and would like to share my experience....

RoboMaster Development Log (Updated 2018-05-28)

Our school organized a RoboMaster team and planned to attend the competition this year. Since we are all new students at a new campus, we do not have any reference materials available from previous students, and we have to figure out bugs after bugs on our own.This post describes some of the problems we met during software development.Hardware: RoboMaster Official Development BoardMCU Model: STM32F427IIHxSoftware: ChibiOS 18.2.0Board Has 12 MHz HSE Clock Instead of Commonly Seen 8MHzThe pitfall is that neither the manual nor the hardware schematics mentioned the clock frequency.Due to this problem, the actual frequency we programmatically set with STM32CubeMX or other software is much higher than expected. This caused the following problems:...

Support WebP on IE and Firefox

I wrote a PHP snippet to fetch high-resolution images from the website of the Himawari 8 satellite and combine them into one high-resolution image. The way to fetch satellite images is available here.However... The combined 4d resolution PNG image (2200x2200) is over 7 MB in size, and due to the bad connectivity between China and the US, it takes over a minute to load the image (from my server).Way too slow!Google provided a solution: the WebP image format. WebP is famous for its high compression ratio on lossless compression scenarios.After converting the 7 MB earth photo PNG file to WebP, the resulting file size is less than 700 KB. For a photo with resolution 2200x2200, this is pretty small.But... Some browsers, including IE and Firefox, don't support WebP,...