Build Your Compiler - Code generation

Part 0 and code reference Part 1: Build a parser Code generation is actually quite easy (in basic level) because LLVM handles optimization and ASM generation for us. In part 1, we had an AST. Therefore, we just need walk down the tree and print the code accordingly. If you know how to evaluate an expression tree, this is basically the same but ANTLR generated code already contained some boilerplate. The code is super straight-forward.
Read more →

Đàn nhạc fingerstyle

Cách thu âm guitar khi bạn không có tiền (mua mic + multiclap) Audacity (miễn phí): noise reduction, reverb, thêm tí compressor Dùng tiếng đập dây để định vị, điều chỉnh các khuông nhạc có vẻ hợp lí. Nhưng không biết về sau chỉnh sao cho nó nghe hay hơn (´._.`) Mình là kĩ sư phần mềm chứ không phải kĩ sư âm thanh :(. Ai có thủ thuật gì hay thì nói mình biết với please (form ở bên dưới) Nếu cái tools chuyển âm thanh qua bản nhạc chạy được, và trình guitar khủng hơn (〃..), thì mình sẽ cập nhật tabs sau.
Read more →

Tối ưu hóa với Julia: Biến thể bài toán người giao hàng

Bài viết này sẽ nói về cách thiết lập và giải 1 biến thể bài toán người giao hàng (được "bịa" ra) dùng quy hoạch tuyến tính có số nguyên (MILP - mixed integer linear programming) qua solver SCIP & Julia. Giới thiệu bài toán Bài toán người giao hàng (Travelling Salesman) Input: các thành phố và khoảng cách giữa chúng Output: chu trình ngắn nhất thăm các thành phố đúng 1 lần Biến thể trình bày ở bài viết này Giống người giao hàng nhưng tìm số công nhỏ nhất.
Read more →

Build Your Compiler - Define the grammar

Part 0 and code reference: https://github.com/quangIO/Lucix In this short blog, we will use ANTLR (it's awesome) to create our parser. Grammar There are many formal articles you can easily find in literature about parsing but in this blog, I will go with the informal, lazy approach. Basically, I want my language to look like this test()-> i32 {return0;}main()-> i32 {c: i32 =3;ifa>b{c=test();}returnc;}What we have Variables: a, b, c Declare as identifier ‘:’ type (‘=’ expression)?
Read more →

Me and my contents

Welcome to my new blog. Knock, knock. Who dis? I am just a random broke college student who program on the side. Some of my old contents Security: https://pwn.netlify.com/ (young me hacking old tech) Follow one of my friend at https://protegototalum.faith for more hard-core content Game dev: https://learnio.netlify.com/ (broken and I am too lazy to update) Feminism for some reasons: https://women.netlify.com/ What are you doing here?
Read more →

Useful Tools for Data Science

So I heard, you just got a bunch of messy CSVs. What to do now? Query on Data Convert CSV to SQLite: good for small dataset q (a Python tool): slow DataFrame (duh): slow Spark/Hadoop/R: hard to use for me JuliaDB: Good stuff, fast, even for user defined functions ClickHouse: If you need more production ready solutions Other GPUs stuff like OmniSci, AresDB if you need real-time, hard-core analytics Unix tools sort xsv head tail less grep split sed (so confusing that everytime I want something done quickly, I just write my script in C++) tmux very useful to manage SSH sessions Editors vim, nano, or emacs Scientific writing GNU Texmacs is very productive Programming Languages My favorites are C++, Julia, Nim, and, when the data is small, Python
Read more →

Cellular Automata on GPU with Julia

In this post, we will learn about basic GPU programming & Julia by coding Conway's Game of Life. You may want to try to search “Conway's Game of Life” on Google ;). What is Life? Tl;dr version For each iteration Under-population: any cell with fewer than 2 neighbours dies Over-population: any cell with more than 3 neighbours dies Reproduction: any cell with exact 3 neighbours becomes alive Implementation Basic Writing the code for those rules is quite trivial.
Read more →