For beginner it is suggested to start with their eframe_template. Just clone it and cargo run to see a very basic single component:
We can check out their web demo, where you can play around with the well-classified components. For component that appeals to you, you can view the source code and study how to achieve the ui.
2.2. Entrypoint
2.2.1. main.rs, for resource initialization
Note that main.rs is the binary crate, which starts as the entrypoint of our egui application.
It is a good place to start initialization of resources that is not related to egui framework such as
database connection;
spawn of tokio runtime (for doing async tasks), etc.
2.2.2. lib.rs, for app state initialization
For our application logic, we will "enable" custom packages in lib.rs by using mod <package-name> several times. We can also define static resources, or methods that manage static resources, in lib.rs.
A successful installation of prisma into the project will create you a prisma.rs in src/ via cargo build. After that, add a line mod prisma in lib.rs and we are all set to use prisma.
2.3.2. Connect to database on the launch of the application
Now back to eframe_tempalte project (mentioned in section 〈2.1. How to get Started〉), in main.rs we have the following block of code:
1fnmain()->eframe::Result<()>{2// Choose database location based on build mode3let db_path =ifcfg!(debug_assertions){4// In debug mode, use current directory for easier development5std::env::current_dir().unwrap().join("database.db")6}else{7// In release mode, use proper app data directory8let app_data_dir =dirs::data_dir()9.unwrap_or_else(||std::env::current_dir().unwrap())10.join("ShellScriptManager");1112// Create directory if it doesn't exist13std::fs::create_dir_all(&app_data_dir).ok();1415 app_data_dir.join("database.db")16};1718let db_url =format!("file:{}", db_path.display());1920let rt =tokio::runtime::Runtime::new().unwrap();21shell_script_manager::RT_HANDLE22.set(rt.handle().clone())23.unwrap();2425 rt.block_on(async{26matchshell_script_manager::prisma::new_client_with_url(&db_url).await{27Ok(client)=>{28// Initialize database schema automatically for desktop app29ifletErr(e)=shell_script_manager::db::get_db::initialize_database(&client).await30{31eprintln!("Failed to initialize database: {}", e);32eprintln!("Please check database permissions or file path");33std::process::exit(1);34}3536shell_script_manager::PRISMA_CLIENT.set(client).unwrap();37println!("Database connection established successfully");38}39Err(e)=>{40eprintln!("Failed to connect to database: {}", e);41eprintln!("Please ensure the database exists by running: npm run migrate:dev");42eprintln!(43"If deploying to production, run migrations as part of your deployment process."44);45std::process::exit(1);46}47}48});4950// Spawn a task to keep the runtime alive51std::thread::spawn(move||{52 rt.block_on(async{53// Keep alive until signal54let _ =tokio::signal::ctrl_c().await;55});56});5758// Initialize event system59let(tx, rx)=crossbeam::channel::unbounded();60shell_script_manager::EVENT_SENDER.set(tx).unwrap();61shell_script_manager::EVENT_RECEIVER.set(rx).unwrap();6263let native_options =eframe::NativeOptions{64 viewport:egui::ViewportBuilder::default()65.with_inner_size([1280.0,720.0])66.with_min_inner_size([800.0,400.0])67.with_icon(68// NOTE: Adding an icon is optional69eframe::icon_data::from_png_bytes(&include_bytes!("../assets/icon-256.png")[..])70.expect("Failed to load icon"),71),72..Default::default()73};7475eframe::run_native(76"Shell Script Managers",77 native_options,78Box::new(|cc|Ok(Box::new(shell_script_manager::App::new(cc)))),79)80}
The highlighted lines are new code added to fn main, the intention is clearly stated in the comment, where we have:
Connected to database;
Kept the tokio runtime, i.e., executor polls, alive to schedule futures (async tasks).
There are many more static resources by searching pub static in the project.
3. Architecture
3.1. State Management
Script Folders Management is the major domain (and possibly the only domain) in our application. Let's organize our state in a separate folder:
3.1.1. Declare global state
Since our state will be accessed in both main thread running UI as well as threads used by tokio runtime. For thread safty most of our state are wrapped inside an atomic reference count pointer Arc, avoiding our states being killed when parent resource gets dropped:
In addition to Arc, we also protect our data by Read-Write LockRwlock:
On one hand, we don't want to block access for reading data during other read;
On the other hand, we don't want to allow read access to a data that is being written (use of write lock), or vice versa (no write while reading by read lock).
For sure we can mutate the state by dereferencing the pointer and assign it a value anywhere. This is both good and bad for immidiate mode gui application.
As in redux, we should restrict outself to mutate the state only via reducer. In this way we have decoupled the state-update logic from ui-view logic. Which easily causes scope issue by directly
In react repeated pattern of state extraction can be reused in react via hook, which is always of the form
1const{ someState }=useSomeHook(someParam);
However, in Rust, we need to consider the lifespan of a RwLockReadGuard, it would be much better to get access to a state via closure to ensure the guard is released at an appropriate time to prevent locking:
1// src/lib.rs23pubfnwith_folder_state<F,R>(f:F)->R4where5F:FnOnce(&crate::state::folder_state::FoldersState)->R,6{7f(&crate::state::folder_state::FOLDER_STATE)8}910pubfnwith_folder_state_reducer<F,R>(f:F)->R11where12F:FnOnce(&crate::state::folder_state::FolderReducer<'static>)->R,13{14// FOLDER_STATE is a 'static LazyLock, so we can create a FolderReducer<'static> safely15let reducer =crate::state::folder_state::FolderReducer{16 state:&crate::state::folder_state::FOLDER_STATE,17};18f(&reducer)19}
3.2. Event-Driven Design based on Rust Messaging System
3.2.1. Initialize messaging system
In src/lib.rs we define static variable for our own project library:
As in usual architecture in DDD, our backend state changes are all handled by Command handlers (single responsibility), which (they) as a whole serve as an application layer that interacts directly with our UI interface.
For UI state change we will be delegating it to our event handlers, again for the purpose of separation of concerns.
Here once our backend state change has been finished, we dispatch the corresponding event to notice our system. We will be updating our UI state when the relevant event is received.
When our application gets more complicated, we might also handle additional side effects from our event handler.
61FolderCommand::SelectFolder{ folder_id }=>crate::spawn_task(asyncmove{62match folder_repository
63.upsert_app_state_last_folder_id(folder_id)64.await65{66Ok(_)=>{67crate::dispatch_folder_event(FolderEvent::FolderSelected{ folder_id });68println!(69"Successfully updated last opened folder id to {}",70 folder_id
71);72}73Err(e)=>eprintln!("Failed to update last opened folder id: {:?}", e),74}75}),76// many more ...77}78}
3.2.3. Backend State Part II: Repository
To interact with database, we create a special kind of service for this purpose:
Basically they correspond to AddFolderCommand, SelectFolderCommand, ..., the verbs at the heads are moved to the tails in past tense.
Once a command is finished, we receive an event and do the subsequent action for the application:
9pubstructFolderEventHandler{10 folder_repository:Arc<FolderRepository>,11 script_repository:Arc<ScriptRepository>,12}1314implFolderEventHandler{15pubfnnew()->Self{16Self{17 folder_repository:Arc::new(FolderRepository::new()),18 script_repository:Arc::new(ScriptRepository::new()),19}20}2122pubfnhandle(&self, event:FolderEvent){23let folder_repository =self.folder_repository.clone();24let script_repository =self.script_repository.clone();25match event {26FolderEvent::FolderAdded{ name }=>{27// fetch all folder and set it into the state28println!(29"Folder added event received for folder: {}, now refetch all folders",30 name
31);32crate::spawn_task(asyncmove{33match folder_repository.get_all_folders().await{34Ok(folders)=>{35crate::with_folder_state_reducer(|r| r.set_folder_list(folders));36}37Err(e)=>eprintln!("Failed to load folders: {:?}", e),38}39});40}41...42}43}44}
Our event handlers have a single responsibility of maintaining UI state by fetching the data from our database.
Note that in traditional backend, event handlers (in policies) are responsible only to determine whether we need to dispatch another command for the reaction to domain business rules.
Blog Explorer
Come on, ask me something!
10:22 AM
What does it mean by insertable=false and updatable=false in JoinTable and JoinColumn of JPA
January 7, 2026
Command-Query Based System Part 2: Event based Testing in Spring Boot with Testcontainer Running PGSQL
December 31, 2025
Command-Query Based System Part 1: Command Invokers and Query Invokers for Domain Driven Design
December 30, 2025
SQLite Foreign Key Constraint Must be Enabled Manually
December 27, 2025
Embed Python Runtime into Tauri Application
December 26, 2025
Create new Sub-Window in a Tauri Application
December 25, 2025
RAG Deployment Part 2: Transition from Chroma DB to PostgreSQL
December 20, 2025
RAG Deployment Part 1: Semantic Chunking, Agentic Rephase and Reranking; Chroma Database
December 16, 2025
Retrieval Evaluation Metrics: MRR, nDCG, and Recall@K
December 8, 2025
RAG Study Using Markdown Articles in this Blog
December 6, 2025
下一站,中國銀行
December 3, 2025
Flow Charts for Documentation using Mermaid
November 26, 2025
MCP Course Week 4: LangGraph
November 23, 2025
MCP Course Week 2: Agents, Tools, Handoff and Guardrails
November 22, 2025
MCP Course Week 1: OpenAI Model via Azure, Clients and "Raw" Tools
November 19, 2025
Native Module in Android for React-Native
November 18, 2025
Virtual Environment via UV
November 15, 2025
Dnd-Kit
November 8, 2025
Offline Tauri Application with Local Spring Boot Backend via GraalVM
November 2, 2025
Study Notes of egui Part III: App Bundling
October 25, 2025
Study Notes of egui Part II: UI Components
October 20, 2025
Study Notes of egui Part I: Architecture of egui Application
October 19, 2025
Convenient BottomSheet Trigger in React-Native
October 17, 2025
各標點符號的倉頡碼
October 16, 2025
停用 mac 的 power button
October 15, 2025
Prisma with SQLite for GUI Application in Rust
October 14, 2025
Iced: First Trial to GUI Application in Rust
October 13, 2025
Open Draw.io by Clicking a "Redirect" HTML
October 12, 2025
Temporary Values get Killed After the end of a Statement
October 11, 2025
References don't Track Ownership Changes
October 11, 2025
Implement ECDSA for Transaction Verification in a Blockchain
October 8, 2025
不工作學畫畫,3 年的美術人生
October 7, 2025
中學時期的插畫
October 6, 2025
Rust Fundamentals
September 30, 2025
Event Storming via PUML (Improved)
September 28, 2025
FastAPI and SqlAlchemy ORM in Python
September 26, 2025
Create a Paging API in Spring Boot
September 24, 2025
Drawing Fractal (Mandelbrot Set) in Rust
September 23, 2025
Problem of SQL Based Nodejs Backend, Should we use Query Builder?
September 17, 2025
Problems in Controller-Service-Repository That are Solvable by Tactical Design in DDD (Domain Driven Design)
September 16, 2025
Performance Boost: Batch Insert in Spring Boot with Relations
September 14, 2025
Use Bytecode Enhancement to Solve the Problem that @JoinColumn and @OneToOne Cannot be Truely Lazy
September 11, 2025
New Side Project using DDD was Added to Portfolio!
September 8, 2025
react-dev-inspector, an Alternative to click-to-react-component
September 4, 2025
Links to Lucid-React Resources
September 2, 2025
Spring Data MongoDB
August 28, 2025
Multithreading with Semaphore
August 27, 2025
Value Objects and Embedded Classes
August 23, 2025
PlantUML for EventSourcing and an GUI-application (for Editing)
August 17, 2025
Postgresql and MySQL DB from Docker-Compose and Clone From Existing DB
August 2, 2025
居屋 2024 注意時項
July 30, 2025
Multi-threading For Elementary Tasks in Browsers
July 22, 2025
A Simple Proof to Stirling's Formula
July 1, 2025
JPA Case Study: When repository.delete(someEntity) failed in a transaction silently
June 30, 2025
Two kinds of Side Effects in JPA
June 28, 2025
Migrate from ThunkActions to RTK-Query
June 21, 2025
Float Desired Folders on Top in Vscode
June 17, 2025
Fundamentals of Nestjs
June 5, 2025
Deletion of a VPC with Dangling/Orphaned ENIs
May 21, 2025
Migration from Terraform-Cloud to S3-Backend; Study on Terragrunt
May 18, 2025
PR and Empty Git Commit via SimpleGit in Nodejs
May 9, 2025
Environment Variables via Secret Managers in Backend using Expo Approach
May 6, 2025
How to Build an NPM Package?
May 2, 2025
Count Execution Time of a Shell Script
April 30, 2025
Replace Redux by Zustand and React-Query
April 28, 2025
Recover Bullet-Points and Ordered List Overriden by Tailwind
April 25, 2025
How to work with Multiple ENV files in Serverless Framework??
April 24, 2025
useBlocker hook to Block the Change of Route for Unsaved Update
April 22, 2025
"In-line" Policies via Serverless.yml: ① Self-Invokation ② s3 GetObject
April 20, 2025
Transform Execls file Into Json
April 14, 2025
Amazon EventBridge Schedule to Trigger Springboot Endpoint
April 13, 2025
Google Login in Popup Window
April 12, 2025
Import Existing Resources Into Terraform Project
April 9, 2025
Terraform Modularization for DRY Deployment from DEV to UAT and Input Infrastructure Information
April 7, 2025
Lambda Client
April 1, 2025
Custom Modal Simplification
March 30, 2025
Code Separation of Domain Entity Class, Domain Behaviour (Actions) and the Corresponding Validations
March 24, 2025
AWS Websocket-API 2: Complete Integration of React and Spring Boot using Websocket-API from API-Gateway
March 22, 2025
Combine useQuery and Redux Toolkit Thunk Actions
March 21, 2025
Generate Typescript Interfaces from Swagger-UI
March 20, 2025
Run npm Script Using Gradle Task
March 19, 2025
Mongo in "JPA": spring-boot-starter-data-mongodb
March 18, 2025
Manage Multiple Github Accounts Using SSH Keys in One Machine
March 16, 2025
Speed up Data Migration using JPA with Channels and CountDownLatch
March 15, 2025
Deduplicate data in Database
March 14, 2025
Toolkits and Caveats Working with Spring Boot and JPA
March 13, 2025
CLI Program by Bubble Tea
March 8, 2025
Pruning old Lambda Functions
March 4, 2025
Golang Simple yet Useful Knowledge
March 2, 2025
Terraform Project to Manage Console-Created Lambdas
February 27, 2025
Terraform from Real Project Experience: ECS, Lambda, RDS, RDS-Proxy, VPC, VPC-Endpoints and IAM-Roles
February 15, 2025
Self-Managed Kubenetes Cluster Using k3s, EC2 and RDS
February 13, 2025
General Concept in Terraform (Revisited)
January 19, 2025
Connection to RDS-Proxy Using Lambda Functions
January 13, 2025
AWS Presigned URLs for File-Uploading
January 12, 2025
AWS Websocket-API 1: An overview from API Gateway
January 5, 2025
① Swagger-UI for Spring Boot in SnapStarted Lambda ② Automation of Authorization-Header Assignment for API Testings ③ Basic Functionalities
January 2, 2025
React-Query Fundamentals
January 1, 2025
Unit Testing in Kotlin with MockK
December 31, 2024
Pragmatic drag and drop from Atlassian Design System
December 29, 2024
JPA and DDD Notes from Real Project Experience
December 29, 2024
General Purpose Dialog using MUI with Flexible { xs, sm, md, lg, ...etc } Widths
December 28, 2024
Auto-generated Mapper From Entity Classes into DTO Classes
December 24, 2024
Redirect from 3rd-party Subdomain (WIX in our example) to AWS Cloudfront Distribution Where we host our Frontend
December 22, 2024
Architecture for Private Lamdba functions called via another lambda function
December 19, 2024
Multiple Ngroks Via Docker Compose
December 18, 2024
Set up ESLINT and Husky for Vite React Project
December 16, 2024
Useful Util Functions to Log Excutation time and the Hibernate Generated Query within a code block by Trailing Closures
December 2, 2024
Email Configuration for Spring Boot in SnapStarted Lambda
December 1, 2024
Redis Task Distribution in Kotlin
November 30, 2024
HTTP Request Logger in Springboot
November 28, 2024
Testcontainer, a Replacement of In-Memory Database in Testing
November 18, 2024
Postman Scripts for Testing and Setting Results into Environment Variables
November 17, 2024
Snapstarted Lambda running Spring Boot and Transition into Spring Boot as a Node.js Developer
November 16, 2024
ApplicationEventPublisher with Decorators for Domain Driven Design
November 9, 2024
Doubly-Linked List in Typescript
November 8, 2024
Lambda Function Running Python Docker Image
November 6, 2024
Github Action: Docker Action in Python to get Artifact of CloudWatch Logging
November 5, 2024
Scheduled Tasks in ECS: Demonstration via Regular Database Backup
October 27, 2024
Create an HTML via a PDF File!
October 26, 2024
Restore MongoDB from Backup
October 25, 2024
Restore PostgreSQL DB from Backup
October 25, 2024
Github Action: workflow_dispatch
October 24, 2024
JPA with DB-First Approach: Surgery on JOOQ's POJO into Base @Entity Class
October 20, 2024
RevenueCat Fundamentals
October 10, 2024
Distributive Lock in Kotlin
October 4, 2024
Application Event Publisher for Monolithic DDD in Nodejs
September 30, 2024
Run Blocking Servlet Requests to Achieve Non-Blocking Performance
September 23, 2024
SSE, Coroutine and Channel to Notify Frontend for Stripe Events in Spring Boot and Kotlin
September 21, 2024
Function Literals with Receiver
September 16, 2024
Stripe Technical Detail for Add, Upgrade, Downgrade, and Cancel Subscrpition
September 15, 2024
Customization on build.gradle.kts
September 12, 2024
Lambda Function Running Spring Boot in Docker Image
September 7, 2024
Lambda Function Running Nodejs Docker Image
September 6, 2024
Containerization of Spring Boot Application in Kotlin and Troubles in Deployment through ECS
September 5, 2024
Joda Time
August 27, 2024
Monolithic DDD Without ORM by Separating Data and Domain Behaviour
August 21, 2024
Dockerfile for Springboot Application in Gradle
August 17, 2024
Useful Query in JOOQ
August 12, 2024
Custom Overlay Scrollbar Container
August 11, 2024
Stripe Events and metadata in Stripe Checkout Sessions
August 10, 2024
Quartz DeadlineManager in Saga
August 10, 2024
Json Query in PostgreSQL for domain_event_entry in Axon Framework
August 9, 2024
Access Nested Properties from Json String in Kotlin
August 8, 2024
CORS Configuration for HandlerInterceptors via Spring Security
August 7, 2024
Logging of Commands and Events in Axon Framework
August 6, 2024
AOP in Kotlin
August 5, 2024
Send Gmail in Kotlin
August 4, 2024
Subscription Query and Error Handling of API Calls
August 3, 2024
Logger in Kotlin
August 1, 2024
Routing Config in React Router v6
July 29, 2024
A Minimal Example for react-beautiful-dnd
July 28, 2024
Git-Crypt Study
July 27, 2024
Create a React-App via Vite, Config for MUI, Load Env Variable from Custom Files.
July 14, 2024
Various ways of Implementing Chatroom Input Field in React Native
July 13, 2024
K8S Basics Part III: EKS and Container Logging of Pods in CloudWatch via Fluentbit
June 29, 2024
K8S Basics Part II: Networking
June 28, 2024
K8S Basics Part I: Deployment, Service, Volume and ConfigMap
June 27, 2024
Time-Series Data via WIDTH_BUCKET and Multi-Column Chart
June 26, 2024
JWT in Spring boot II: Get rid of Spring-Security. More on Parsing Json String into Pojo
June 24, 2024
JWT in Spring boot I: Using Spring-Security
June 23, 2024
Gradle Fundamentals: Modularization of Spring Boot Project and Dependencies Control
June 22, 2024
Global Exception Handler
June 18, 2024
Simple Study of Transaction
June 17, 2024
Event Publishing and Listening in Spring boot
June 16, 2024
① Spring boot in Kotlin with JOOQ and Prisma ② Simple Commands for Gradles ③ Integration and Unit Tests
June 15, 2024
Role and User Management in PostgreSQL
June 7, 2024
Record my IntelliJ IDE Setting
June 6, 2024
Get the full type hint from VSCode
May 31, 2024
Github Actions for Serverless Functions
May 23, 2024
Download the Entire CloudWatch Log
May 9, 2024
Self-Reflection on Database Schema Design
May 2, 2024
Kafka and Debezium with Everything Hosted Locally Without Confluent
April 28, 2024
EAS Update
April 17, 2024
CRUD in DynamoDB
April 16, 2024
AWS CDK in Typescript and Python with ① Application in S3 ② Lambda Functions with Debugging ③ API Gateway and ④ DynamoDB
April 15, 2024
Create Custom Layer for Lambda Functions in Python
April 12, 2024
More About Lambda Functions, Thottling, Concurrency, RDS-Proxy and Integration with CloudWatch Events
April 4, 2024
Dev Container
March 29, 2024
CDC in Confluent and Kafka
March 28, 2024
Read Write Lock for Go
March 24, 2024
Channel and WaitGroup
March 23, 2024
Custom HashTable by Separate Chaining
March 15, 2024
In-App Notification
March 14, 2024
Code Organization for RabbitMQ
March 3, 2024
How to node your-script.js --env=some_env
March 2, 2024
SQL Functions to Generate created_at, human-readable created_at and updated_at
March 1, 2024
As-With Clause in SQL
February 28, 2024
Javascript Compatible Timestamp in PostgreSQL
February 27, 2024
Use ULID in PostgreSQL
February 26, 2024
Forcefully Make Prisma Ignore The Changes in a Migrated .sql File
February 25, 2024
Prisma Migration Script
February 25, 2024
Declare Types for Non-typed 3rd Party Library
February 24, 2024
Push-Notification in Android and iOS via Expo
February 20, 2024
Code Organization for Redis
January 27, 2024
Auto-hotkey Config for Vscode Switching (Windows)
January 26, 2024
Github Action for Deployment on ECS Fargate
January 22, 2024
Algolia Revisit
January 21, 2024
Fundamentals of Github Actions
January 16, 2024
Advanced Combat Tracker (ACT): Scriping for Trigger
January 11, 2024
Reverse Engineer PostgreSQL to Go Structs
January 6, 2024
Minimal Code for Setting Prisma as Just a Table Migration tool
January 5, 2024
Paste Image in Markdown Files from Clipboard
January 4, 2024
Dead-letter and Delayed Queues
December 24, 2023
Run Kysely Generated SQL in Tableplus
December 23, 2023
Springboot with JOOQ and Functional Endpoints
December 17, 2023
TSS as a Replacement of makeStyles
December 10, 2023
Manage Environment Varisbles for Dev, Uat, Prod in Springboot Using a Single Yaml File
December 8, 2023
Prisma, Prisma-Kysely and Kysely
November 30, 2023
Frontend Retry Mechanism for Refresh Token
November 20, 2023
Load Test and Stress Test by Gatling
November 19, 2023
Record Table Migration Script in SQL
November 17, 2023
Load Environment Variables from Aws Secret Managers and Run Shell Script in Go for DB Schema Migration Based on DB_URL from Secrets
November 15, 2023
Two Stage Docker Image; Docker-Compose with Service B waiting for the Connection of Service A
November 14, 2023
Complete Golang Project Structure
November 13, 2023
Send Google Gmail Without Sendgrid
November 12, 2023
SQL for Table Migrations in the Course of Developement
November 11, 2023
Transactions, Go and sqlc
November 6, 2023
Make a Custom Swipable Item
November 5, 2023
PostgreSQL Revisit
November 4, 2023
Docker Containerization of Nodejs with Typescript
November 3, 2023
Custom Winston Logger in Nodejs
November 3, 2023
Mongoose way to Convert String into Objectid in Aggregation
November 2, 2023
Goose and Sqlc for Database Migration and Query Function Generation
October 28, 2023
Push Data to Frontend by SSE via Event-Driven Approach with NO Short Polling
October 22, 2023
@gorhom/bottom-sheet
October 21, 2023
Generate Excel by Openpyxl
October 20, 2023
Long Running Task in Background for Mobile App
October 17, 2023
Terraform Modules
October 16, 2023
Remote State for Whole Development Team; Create and Deploy on a Public Subnet of Custom VPC
October 15, 2023
Conditions and Loops
October 14, 2023
Variables and Remote Execution
October 13, 2023
AWS Resources Instanciation in Terraform
October 10, 2023
Pin to Zoom Camera
October 9, 2023
Audio Recording in React-Native
October 7, 2023
AWS Fargate: Let's Create Service and Run Task!
October 7, 2023
File Upload and Download Using Stream and FormData in React-Native
October 5, 2023
Custom BottomSheet
October 3, 2023
Custom Toast Messages
October 1, 2023
Expo-CLI for Development Build
September 30, 2023
Clone a Swipable Page Inspired from Discord Mobile App
September 26, 2023
Auto-Incremented Id for Mongo Collection
September 24, 2023
Voice Chat on Mobile Using AgoraRTC
September 23, 2023
Create a left-join in Mongoose
September 21, 2023
Scaling Websocket Chat Sever by Redis
September 20, 2023
Simple Chat Server in Rust via Telnet
September 19, 2023
Setup of Express with Socket.io with JWT Authentication Using Cookie
September 16, 2023
Jest Fundamentals in TS
September 15, 2023
Environment Variable by env-cmdrc
September 11, 2023
Rust Formatter Configruation
September 10, 2023
Elliptic Curve and Operator Overloading
September 9, 2023
Routing Schema for Frontend Project
September 5, 2023
Rust Study Notes
September 4, 2023
Restrict CORS to Limited Origins
September 3, 2023
Handle Streams in File-Responding Request
September 3, 2023
Server Sent Event in Java and Node.js Backend
September 3, 2023
Scroll Up and Down Events in React
September 2, 2023
Box Shadow
August 27, 2023
Hook to Rerender Component By Making use of the Single Threaded Event Driven Model Behind v8
August 15, 2023
forwardRef and useImperativeHandle
August 14, 2023
Google Login
August 13, 2023
Getting Path Parameters
August 11, 2023
Snackbar Utils
August 10, 2023
Multi-Selections
August 3, 2023
Write Mongo Aggregation Using JSON in Springboot
July 30, 2023
Detect Click Outside
July 27, 2023
Build a Search Function
July 26, 2023
Serverless Flask and Serverless Express-ts
July 19, 2023
Gmail and Inbox Push Notification
July 17, 2023
Flask with Uwsgi and Docker Image Deployment
July 10, 2023
Deployment of React Project Using S3 and Cloudfront
July 8, 2023
Lazy Loading
July 5, 2023
normalizr --- Convert Array of Data Into Hashmap
July 5, 2023
Remote Debugger for Spring Application
July 2, 2023
.gitlab-ci.yml for Deploying Static Pages to S3
June 28, 2023
Docker Run Indefinitely
June 25, 2023
tsconfig.json
June 24, 2023
Revisit Docker and Gitlab-CI
June 23, 2023
Quick Step to Make a Reducer Persist its Data
June 21, 2023
Radio Buttons Group and General Dropdown List
June 21, 2023
Scrollbar Style Like Mac
June 20, 2023
Write Middlewares in Redux-Toolkit
June 20, 2023
Use of dayjs
June 16, 2023
Two Kinds of $lookup, and use Javascript in Advanced lookup
June 15, 2023
Inner and Left Joining Multiple Collections in Mongo --- The preserveNullAndEmptyArrays in $unwind
June 15, 2023
Redux Slice Template
June 13, 2023
List of Mongo Aggregation Pipelines that I have Used.
June 10, 2023
Mui CSS Animation with Keyframes
June 9, 2023
Data Scrapping for Data that Requires Click by Click
May 27, 2023
General Post Request in Springboot and File Uploading
May 25, 2023
Register URL Scheme for an Application
April 6, 2023
std::variant
April 5, 2023
Libtorch Study Notes With OpenCV
April 2, 2023
Precompiled Header in CMake Project
March 27, 2023
Control C++ Standard Accurately
March 24, 2023
Install Opencv and Libtorch for CMake Project
March 20, 2023
Diffusion Model Study
March 7, 2023
Commuication Between Two Threads
February 27, 2023
C++ Useful Util Functions Mimiced from Python, Regular Expression
February 9, 2023
C++ VSCode says it cannot open source file when it really can
January 28, 2023
Pytorch/libtorch with CPP API
January 11, 2023
Socket Programming Fundamentals by winsock
January 10, 2023
Simple Introduction to CMake Files
December 15, 2022
Gray Matter
December 14, 2022
TCP Server Fundamental
December 12, 2022
Variadic Version of Print in C++
December 9, 2022
Iterator
November 30, 2022
Array and Dynamic Array Class
November 29, 2022
Precompiled Header
November 27, 2022
Copy Constructor
November 23, 2022
Visual Studio Solution Configuration
November 16, 2022
makeStyles for react-mui v5.0 and tss-react/mui
November 15, 2022
Redux Toolkit Quick Setup
November 15, 2022
Config Files Organization in Frontend Project (Next.js Specific)
November 15, 2022
Onnx Model Deployment to Frontend From Pytorch Model
November 14, 2022
RetinaFace
November 6, 2022
Albumentations and Common Helper Functions with PyTorch
November 5, 2022
collate_fn in pytorch
November 3, 2022
CPP VSCode Configuration for 2020 Standard
October 8, 2022
Cascade RCNN
September 30, 2022
Squeeze and Excitation Network
September 29, 2022
Gradient Clipping
September 22, 2022
Swin-Transformer Backbone in Faster RCNN
September 20, 2022
Swin Transformer with einops Implementation
September 19, 2022
Mesh Grid Trick
September 7, 2022
Vision Transformer with einops Implementation
September 6, 2022
Angular Fundamental
August 18, 2022
Transformer 2: A More in Depth Training with Real World Dataset Using Modern NLP Dataset Pipeline in Pytorch
August 17, 2022
Transformer 1: The Model Definition and Naive Training Dataset for Machine Translation
August 11, 2022
Retrain Model when Nan Occurs
July 22, 2022
Feature Extractors
July 14, 2022
Data Augmentation for Object Detection
June 30, 2022
Faster RCNN in PyTorch
June 27, 2022
EAST: A Text Detection Algorithm
May 29, 2022
CV2, Pillow and shapely for Polygons
May 28, 2022
Masks in Numpy and Retrive Corresponding Indexes
May 28, 2022
tqdm: The Progress bar for Iterations
May 27, 2022
Logging Without Printing New Lines
May 23, 2022
Pytorch Fundamentals
May 23, 2022
Shell Script Fundamentals
May 20, 2022
Install tensorflow-gpu
May 15, 2022
DefectGAN
May 9, 2022
Singular Value Decomposition
April 30, 2022
Principal Component Analysis
April 30, 2022
Pandoc
April 29, 2022
WGAN and WGAN-GP
April 22, 2022
YOLOv3 Deep Dive
April 22, 2022
Different Kinds of Residue Blocks
April 20, 2022
Element that has Default Fade-in Transition on Mount
April 19, 2022
Discrete Cosine Transform and JPEG Compression Implementation in Python
April 16, 2022
Summarize Rust Beginning Tutorial by a Simplified Multithreading Web Server
April 15, 2022
SSH Config and Download File in SSH Client
April 12, 2022
Typescript Debugger Config
April 11, 2022
pathlib and json in Python
April 7, 2022
Countability of a kind of Discontinuity
April 4, 2022
Color-GAN with Auto-Coloring on Animated Gray Images
April 1, 2022
Ctrl- and Middle-Clickable Button; Method to Scroll to Target Element
March 30, 2022
Mongoose in Nodejs and Mongoengine in Python
March 29, 2022
Cycle-GAN in Tensorflow
March 25, 2022
Two Methods to Read Excel Files in Python
March 24, 2022
Type Annotation Record in Typescript for 3rd-party Library and Usual Import
March 23, 2022
Resulting Shapes of Conv-net by Direct Experiment
March 23, 2022
Simple Introduction to mAP and F1-Score
March 21, 2022
Additional Configuration for makeStyles in Next js
March 13, 2022
How to Configure S3 to Send SQS Message
March 10, 2022
Customized Logger in Python and Javascript
March 7, 2022
Set up Local Environment for Mongo using Docker
February 25, 2022
GAN and DCGAN in Tensorflow
February 15, 2022
Python Generator
January 4, 2022
Nodejs Image Compression in Backend with sharp
December 16, 2021
Call Python Script in Node.js
December 11, 2021
Nextjs with Electron
December 6, 2021
Debug Nextjs with Typescript in VSCode
December 2, 2021
Debug Javascript For Individual File
December 1, 2021
Datetime Object in Python
November 20, 2021
Decompose a Class into Separate Files
October 26, 2021
Python Debugger with Project Directory Included in sys.path
October 25, 2021
How to Include Project Directory in sys.path when Running pytest
October 20, 2021
Auto Hotkey Record
October 17, 2021
Automation Task for Chrome
October 2, 2021
First to Leave Problem of Elevator
October 1, 2021
Live2D 心得
September 18, 2021
template
September 10, 2021
C++ Beginner Notes 02 - Shallow Copy, Deep Copy and Move Semantics
September 9, 2021
C++ Beginner Notes 01 - Stack and Heap
September 8, 2021
Scrapping Images with Selenium and Beautifulsoup on Chrome
August 30, 2021
Image Augmentation with Custom Dataset Pipeline
August 29, 2021
Transfer Learning Based on VGG-16
August 28, 2021
Tensorflow Callbacks and Restart Training Process Based on Past Epoches
August 28, 2021
Comprehensive List of SVG Icon Available in React
August 27, 2021
Colab Setting
August 27, 2021
Dataset Pipeline and Custom Training in Tensorflow
August 26, 2021
The Set Equality for Convex Set
August 20, 2021
Understand Pytorch via GAN
August 20, 2021
Computational Example on Probability Distribution
August 19, 2021
Make your React App Scrapable by Google Search Engine
August 14, 2021
Disqus Comment Plug-in in React
August 12, 2021
Convex Analysis - More on Convex Functions and Characterize Convex lsc Functions by Biconjugate Functionals
August 11, 2021
Convex Analysis - Characterization of Convex lsc Functions
August 8, 2021
Exercises on Algorithms
July 26, 2021
Algorithm: Merge Sort and its Time Complexity
July 25, 2021
On Redux-Saga
July 19, 2021
Useful Conda Commands
July 18, 2021
Review of Basic Statistics
July 15, 2021
Typescript Type Tricks
July 14, 2021
On Looping all Files in Frontend
July 13, 2021
Lazy React Router
July 12, 2021
Study Notes on Distribution and Latent Variable Model in Vartiaonal Auto Encoder