Zeqian Li
@zeqianli.bsky.social
65 followers 21 following 21 posts
Senior Bioinformatics Scientist @BillionToOne. Formerly Seppe Kuehn Lab (UChicago)
Posts Media Videos Starter Packs
zeqianli.bsky.social
It supports Ns (genome.ucsc.edu/FAQ/FAQforma...), but I can see it being problematic when more letters are needed. But (a) it seems fixable given how long it's been around? (b) A good proportion of research is aligning short reads to reference DNA so those applications could have been more efficient
Genome Browser FAQ
genome.ucsc.edu
zeqianli.bsky.social
I wonder why the 2bit format wasn't more popular. It's been around for a while. It's fantastic for reference genome random access in tgv.
Reposted by Zeqian Li
zeqianli.bsky.social
tgv 0.1.0 release: github.com/zeqianli/tgv
- Rich CIGAR and base visualization
- Allele frequency visualization
- VCF and BED file support
- Mouse dragging and hovering
- Filter alignment

Now 90% of what I need from IGV can be done in the terminal.

Some interesting behind-the-scenes:
zeqianli.bsky.social
If you want to learn Rust, contributing to tgv is a great way! A genome viewer consists of many small, isolated components. Many improvements need <10 lines of code change. You can find them by searching "FIXME" comments. Let's make open source better together! bsky.app/profile/robp...
robp.bsky.social
This is an awesome example of the power of open source. @noamteyssier.bsky.social builds a versatile, efficient & easy to use crate for fastx & binseq parsing; @curiouscoding.nl notices how paired end (and any higher arity) processing can be sped up. Big PR, some discussion and BAM; big new release.
curiouscoding.nl
Paraseq 0.4 is out now! With double the throughput for processing paired-end input :)

github.com/noamteyssier...
zeqianli.bsky.social
I learned so many things with tgv. Writing a mini-interpreter is one of them. Now you can filter reads by:

FILTER BASE(1234)=C

It will be extended to a SQL-like mini language:

ORDER by STRAND WHERE BASE(123)=C AND MAPQ>=30

The parse is built and the backend is under development.
zeqianli.bsky.social
The allele frequency stacked-bar is trickier: we need to calculate how stacks overlap and use the foreground/background trick + █▇▆▅▄▃▂▁ characters. This became a sweet ratatui widget: github.com/ratatui/rata...

The half-block trick is yet to be implemented to alignments. Contribution is open!
zeqianli.bsky.social
The minimal resolution of terminal graphics is one character. To visualize more information, we use Unicode tricks:

At 2x zoom, to render 2 bases per cell, we use the half-block trick: render the "▌" Unicode character with the foreground of first base color and the background being the second base.
zeqianli.bsky.social
tgv 0.1.0 release: github.com/zeqianli/tgv
- Rich CIGAR and base visualization
- Allele frequency visualization
- VCF and BED file support
- Mouse dragging and hovering
- Filter alignment

Now 90% of what I need from IGV can be done in the terminal.

Some interesting behind-the-scenes:
zeqianli.bsky.social
Come on Claude, I give you one more chance. This is just a simple refactoring. I wrote instructions in comments. I'll write a good prompt. I'll use your PRO model with MAX reasoning. You got it. No mistake.

> Deletes all the code
zeqianli.bsky.social
In this case it's a bunch of custom enums in the library unfortunately :(
zeqianli.bsky.social
Types are cool but how do I explain this
zeqianli.bsky.social
I think ai is most helpful at making learning less scary (not sure I would have learned rust as fast as I did without help). But the actual learning still needs to happen.
zeqianli.bsky.social
My day job is mostly Python - @pola.rs is expressive enough that typing out exactly what I want is not much more keystrokes than asking AI. Hallucinations are getting so bad that it's hurting the science. The new Python type checkers (pyrefly or ty) are much bigger productivity boost.
zeqianli.bsky.social
tgv is becoming so good. Next release gonna be epic.

On a side note, I stopped using AI all together a month ago (except occasionally turning on tabbing for boilerplate). I'm so much happier. Coding is much more flowy and I'm learning a ton. Vim motion boosts productivity way more than any AI.
zeqianli.bsky.social
Anyone uses marimo notebooks regularly? What do you use it for?
zeqianli.bsky.social
New tgv release: local cache!

tgv download hg38

Download UCSC reference genomes to a local sqlite db for much faster browsing. Awesome Rust tools (twobit, bigtools) made this simple.

github.com/zeqianli/tgv
GitHub - zeqianli/tgv: Explore 5,000+ genomes in the terminal. Light, blazing fast 🚀, vim-motion.
Explore 5,000+ genomes in the terminal. Light, blazing fast 🚀, vim-motion. - zeqianli/tgv
github.com
zeqianli.bsky.social
This is still at an early stage. This is the best I got 😅: github.com/zeqianli/tgv...
github.com
zeqianli.bsky.social
I started tgv to learn Rust and building it has been unbelievably fun! If you wanna pick up a super fast and fun programming language, tgv is open for contribution! There aren't many bioinformatics tools built entirely by the community. If tgv can become one, I'll be so psyched
stephenturner.us
Terminal Genome Viewer (tgv), written in Rust github.com/zeqianli/tgv
zeqianli.bsky.social
Thanks for posting! tgv is still at a very early stage so expect bugs :)
zeqianli.bsky.social
Congratulations!