As a software engineer, I am passionate about creating innovative solutions to enhance user experiences. My specialties include Language Model Learning (LLM), Natural Language Processing (NLP), and Computer Vision (CV) in Machine Learning/Deep Learning (ML/DL). Additionally, I enjoy full-stack development, specifically using Python, JavaScript, and React. The lean startup spirit I acquired from my previous successful startup experience will keep guiding me throughout my career.
ποΈ Projects
AI-Driven Grocery Logging and Recipe Suggestions App
Built an AI-driven grocery logging and recipe suggestions app. The app integrates GPT-4 Vision prompts and OCR to scan receipts, tracks purchases, provides expiry notifications, and suggests recipes. Built with ReactJS, Vite, and Firebase, the app underwent extensive testing using Cypress. A Serverless RESTful API with ExpressJS and AWS ElasticBean was also developed for efficient back-end operations.
GPT4-Vision
GPT-3.5
OCR
ReactJS
Firebase
Microservices
Serverless
Vite
Mar 17, 2024 β Apr 26, 2024
AI-Powered Driver Companion Mobile App
Developed an AI-powered mobile app called Carpanion that serves as a driver companion, engaging in conversation, telling dad jokes, and providing information about the surroundings. The app incorporates AI models such as YOLOv4, GPT-4, Text-To-Speech, and Speech-To-Text, and is built using Django for the back-end and React Native for mobile development. Challenges included integrating real-time speech-to-text capability and ensuring logical and meaningful responses from GPT-4. Future plans include improving contextual awareness, adding more languages and regional pronunciations, and enhancing interaction skills.
Django
React-Native
YOLO
GPT-4
Text-To-Speech
Speech Recognition
Mar 29, 2024 β Mar 31, 2024
Scalable Serverless RESTful services for Recipe Suggestion
Virtual Chef is a recipe suggestion service built with serverless technology, utilizing ExpressJS and AWS ElasticBeanstalk. The project showcases the potential of serverless technology in creating scalable applications. The serverless RESTful API developed with ExpressJS and deployed with AWS ElasticBeanstalk integrates API Gateway with AWS Lambda Functions.
Serverless
Microservices
AWS API Gateway
AWS ElasticBean
AWS Lambda
ExpressJS
RESTful API
Nov 1, 2023 β Nov 30, 2023
Smart Assistant with edge AI computing - Summer Internship at Himax Imaging in Irvine (Ongoing)
This blog post documents the ongoing summer internship at Himax Imaging in Irvine, focusing on the development and improvement of a computer vision AI model for an AI module product. (Not Finished Yet)
Edge AI
Embedded System
Windows Desktop App Dev
Electron
React Native
Computer Vision
Emotion Detection
Task Automation
AIoT
Internet of Things (IoT)
Automatic Speech Processing
LLM
Jun 17, 2024 β Sep 20, 2024
π¬ Publications
- A Redundancy-Enhanced Framework For Error Correction in Named Entity Recognition, 2nd Round of ACL Rolling Review β24 (First Author)
- GlobalNER: Incorporating Non-local Information into Named Entity Recognition, Arxiv β23 (First Author)
βπ» Blog
Comprehensive Comparisons Between JavaScript Runtimes
This document provides an overview of different JavaScript runtimes, including Node.js, Deno, GraalVM, Hermes, JerryScript, Kinoma, and Bun. It compares their features, performance, security, ecosystem, and use cases. Node.js is widely adopted with a mature ecosystem, while Deno offers improved security and modern features. GraalVM supports multiple languages and is ideal for enterprise applications. Hermes is optimized for React Native, JerryScript is designed for IoT devices, and Kinoma focuses on hardware prototyping. Each runtime has its strengths and is suitable for specific needs.
Jul 23, 2024
Compilers and Polyfills in JavaScript
Compilers and polyfills are essential tools in JavaScript development to ensure code compatibility across different environments and browsers. Compilers like Babel transform modern JavaScript code into older browser-compatible versions, while polyfills add missing functionalities to browsers that do not support them natively. Conformance/compatibility tables help developers choose the right tools based on ECMAScript standards. Common compilers include Babel, TypeScript Compiler (tsc), and Google Closure Compiler, each with its own advantages and use cases. Common polyfills include Fetch API, Promises, Array.prototype.includes, Object.assign, and URLSearchParams, with tools like Core-js, , Babel Polyfill, and Modernizr for managing polyfills. Understanding these tools and their compatibility is crucial for writing efficient and compatible JavaScript code.
Jul 23, 2024
ECMAScript
Jul 23, 2024
What Makes Asynchronous Programming Possible?
To enable asynchronous programming, key components such as the event loop, non-blocking I/O, callbacks, promises/futures, coroutines, task queues, multiplexing, cooperative multitasking, and asynchronous libraries/frameworks work together. These mechanisms allow for efficient handling of I/O-bound tasks without the need for multiple threads or processes, making asynchronous programming useful for network operations, file I/O, and other scenarios involving external resources.
Jul 22, 2024
Asynchronous Programming
Event Loop
Non-blocking I/O
Interfacing Python with C: A Comprehensive Guide
Python's ability to interface with lower-level languages like C and C++ provides performance gains, access to existing libraries, and low-level system programming. This comprehensive guide explores various methods to interface Python with C and C++, including writing Python bindings for a C++ library using tools like
pybind11
or Boost.Python
, using the Python/C API, utilizing Cython, and ctypes
for calling functions in DLLs or shared libraries. Each method has its strengths and use cases, allowing developers to optimize their applications based on project requirements.Jul 22, 2024
Python
C++
Interface
pybind11
Boost.Python
Python/C API
Cython
ctypes
Understanding Inter-Process Communication (IPC): Bridging the Gap Between Processes
Inter-Process Communication (IPC) allows processes to communicate and synchronize their actions. IPC is important for resource sharing, modularity, performance, and scalability. Common IPC mechanisms include pipes, named pipes, message queues, shared memory, and sockets. Each mechanism has its own strengths and use cases. Understanding IPC enables developers to build robust and scalable applications.
Jul 21, 2024
IPC
Inter-Process Communication
Resource Sharing
Modularity
Performance
Scalability
Pipes
Named Pipes
Message Queues
TCP
Shared Memory
Bridging the Gap: Using CommonJS and ES Modules Together in Node.js
This post explores how to bridge the gap between CommonJS (CJS) and ES Modules (ESM) in Node.js, ensuring smooth interoperability. It discusses the basics of CJS and ESM, the challenges faced when using ESM in Node.js, and provides a solution using tools like
createRequire
and defining __dirname
. The post also covers practical applications and file extensions for ES Modules, emphasizing the importance of understanding and implementing these solutions for code maintainability and scalability.Jul 11, 2024
Node.js
Computer Science
Web Dev
JavaScript
Test-Time Training (TTT): A New Paradigm in Self-Supervised Learning
Test-Time Training (TTT) is a novel approach in self-supervised learning that allows models to learn and adapt during inference, bridging the gap between training and testing phases. TTT layers update hidden states using self-supervised learning, compressing large datasets into model weights. This approach enables continuous learning and adaptation at test time, improving model performance. TTT layers offer a trade-off between expressiveness and hardware efficiency, making them powerful in sequence modeling tasks. The mathematical formulation involves updating the model's parameters based on input data encountered during the test phase. TTT layers have been compared with RNN and self-attention layers, demonstrating superior performance and efficiency. TTT layers have practical implications in scenarios with distribution shifts and can enhance robustness and generalization. The code implementation showcases how TTT layers can be integrated into a larger neural network, optimizing parameters during the forward pass.
Jul 11, 2024
LLM
Language Models
Self-Supervised Learning
RNN
Mamba
Self-Attention
Transformer
A Journey Through JavaScript Module Systems: From Early Practices to Modern Solutions
Jul 10, 2024
JavaScript
Generative vs Discriminative Model
Generative models learn the joint probability distribution of input and output, while discriminative models learn the conditional probability of output given input. Deep learning models like CNNs and RNNs are typically discriminative, separating input into classes. Generative models like Naive Bayes and Autoencoders learn joint probability distribution to generate new data. Language models can be both generative and discriminative, with n-gram models being generative and models like BERT being discriminative. GPT is a generative model that predicts the next word, while BERT is a discriminative model that understands context. Generative models learn joint probability distribution indirectly through conditional probabilities. They generate examples by learning the data distribution during training. Discriminative models are not typically used to generate examples.
May 5, 2024
Computer Science
Deep Learning
Generative Models
Discriminative Models
Language Models
Machine Learning
Note on Modern CSS Development
This post discusses the use of CSS-in-JS libraries like styled-components and emotion, highlighting their ability to write CSS directly within JavaScript code and dynamically adjust styles based on component state or props. It also compares CSS Modules with CSS-in-JS libraries, noting their different approaches to CSS scoping. Additionally, it mentions that using CSS preprocessors like Sass with CSS Modules is common and beneficial, while using them with CSS-in-JS libraries is not necessary. The document concludes with a reference to further reading on CSS methodologies.
May 3, 2024
CSS-in-JS
CSS Modules
CSS preprocessors
Best Practices in React Development
Best practices in React development include keeping components small and focused, using functional components with hooks, lifting state up only when necessary, utilizing context for global state, optimizing performance with memoization and code splitting, handling side effects with cleanup functions and conditional execution, writing unit tests and mocking dependencies, ensuring accessibility with semantic HTML, ARIA attributes, and keyboard navigation, maintaining code quality with ESLint and Prettier, and styling with CSS-in-JS libraries and maintainable CSS practices.
May 3, 2024
React.js
Web Dev
Software Development
Good Practices and Conventions of React Project
This post discusses good practices and conventions for React projects. It covers folder structure options, grouping folders, recommended extensions, naming conventions for files, components, CSS, TypeScript types/interfaces, event handlers, state variables, props, and hooks. It also mentions CI/CD suggestions such as running linting and tests before committing.
May 2, 2024
Retrieval-Augmented Generation
Retrieval-Augmented Generation (RAG) is a transformer-based model that combines document retrieval with sequence-to-sequence generation to produce more factual and detailed responses. RAG utilizes the BERT transformer model for generation and the Dense Passage Retriever for document retrieval. Another important concept is SentenceBERT, which uses siamese and triplet network structures to derive semantically meaningful sentence embeddings. RAG and SentenceBERT have various applications in automated chatbots, recommendation systems, literature review, and document retrieval in legal and healthcare industries. However, biases in training data and the need for substantial computational resources are important considerations.
May 1, 2024
NLP
Information Retrieval
Skip Lists
Deep Learning
WebSockets: Revolutionizing Real-Time Web Communication
WebSockets have transformed web communication by enabling real-time, bidirectional data exchange between clients and servers. They provide instant updates, reduced latency, efficient resource usage, cross-platform compatibility, and bi-directional communication. Use cases include chat applications, live updates, collaborative tools, games, trading platforms, and IoT communication. Implementing WebSockets can be simplified with libraries like , and they differ from traditional sockets in their persistent connection and full-duplex communication. Considerations include scalability, firewall issues, and fallback mechanisms. WebSockets have revolutionized real-time web communication and will continue to shape the future of real-time applications.
Jul 25, 2024
Browserβs Access to the Client's Filesystem
Jul 24, 2024
File I/O Buffer and Flush()
Jul 24, 2024
Node.js Shared Memory Limitations: The Inter-Process Communication Challenge
Node.js's implementation of shared memory is limited when it comes to inter-process communication with unrelated processes, especially those written in other languages. This limitation requires developers to explore alternative IPC methods and can lead to increased complexity and performance considerations. Workarounds include using memory-mapped files, external IPC mechanisms, native addons, or third-party libraries. Developers must be versatile in their approach to inter-process communication in complex, multi-language environments.
Jul 23, 2024
Memory-Mapped Files: Bridging the Gap Between Memory and Storage
Memory-mapped files bridge the gap between system memory and storage, offering improved performance and simplified code for handling large datasets or inter-process communication. This technique allows a program to treat a file on disk as if it were part of its memory, accessing and manipulating file contents using simple memory operations. Memory-mapped files have advantages such as simplified code, improved performance, efficient inter-process communication, and reduced memory usage. While disk I/O is involved, caching mechanisms, lazy loading, and write-back policies optimize access and minimize I/O costs. Memory-mapped files can also facilitate cross-language communication between programs. Understanding and utilizing memory-mapped files can enhance application performance and efficiency.
Jul 23, 2024
WebAssembly: Revolutionizing Web Development for Client and Server
WebAssembly (Wasm) is revolutionizing web development by offering unprecedented performance and flexibility for both client-side and server-side applications. It is a low-level, binary instruction format that allows languages like C, C++, and Rust to run on the web with near-native performance. WebAssembly has applications in complex web-based games, video and audio processing, data visualization, edge computing, serverless functions, and microservices. It offers portability, security, and seamless interoperability with JavaScript. As the ecosystem around WebAssembly continues to grow, it is expected to play a crucial role in the future of web development, enabling more complex and performant applications on both the browser and the server.
Jul 23, 2024
Shared Memory IPC
Shared memory is a fast and efficient inter-process communication (IPC) technique that allows multiple processes to access a common memory segment. This blog post explores the key techniques in shared memory IPC, including creating and managing shared memory segments, synchronization mechanisms, memory mapping, and a use case example of the producer-consumer problem. Shared memory offers advantages in speed and efficiency but requires careful synchronization and security considerations. Code snippets and additional resources are provided for further reading.
Jul 22, 2024
Main, Preload and Renderer in Electron and IPC
Jul 10, 2024
JavaScript
Web Dev
Desktop Development
Cross-Platform
TypeScript Declaration File (
.d.ts
)Jul 9, 2024
Windows Desktop Development
For Windows desktop development, the recommended options are .NET Core (and its successors .NET 5+, or 6 and 7) and Core for new projects, while the .NET Framework is still relevant for maintaining existing Windows-based applications. The Windows App SDK introduced in Windows 11 provides a modern SDK supporting different OS versions of Windows, combining good parts from UWP and Win32 APIs. The document provides an overview of each option, including their release and maturity, platform compatibility, use cases, performance, deployment options, and future direction.
Jul 8, 2024
Windows Desktop Development
.NET Framework
.NET Core
ASP.NET
WinRT
Win32
Windows App SDK
Windows SDK
Universal Windows Platform
MSIX Packaging
C/C++ Addons for Node.js
Jul 5, 2024
CSS positioning
Jun 1, 2024
Mamba
May 8, 2024
Understanding Progressive Web Apps
Progressive Web Apps (PWAs) combine the best features of web and mobile apps, offering a seamless user experience directly from the web browser. They provide functionalities like offline access, push notifications, and device hardware access. PWAs are designed to be progressive, responsive, connectivity independent, app-like, fresh, safe, discoverable, re-engageable, installable, and linkable. They utilize service workers and a web app manifest for key functionalities. PWAs are cost-effective for businesses and provide a faster and more efficient experience for users. They are changing the digital landscape by improving engagement and conversion rates. The future of PWAs includes integration with AI and IoT, as well as advancements in offline capabilities.
May 7, 2024
Web Dev
Software Development
Mobile App
About User Interviews
User interviews are a fundamental part of creating user-centered designs. They provide invaluable insights into the needs, motivations, and behaviors of your target audience. User interviews are conducted early in the design process to gather qualitative insights, while user testing is done later to evaluate usability. Preparation, execution, and analysis are key steps in conducting user interviews. A user interview guide ensures consistency, provides structure, aids in preparation, and assists in active listening. Crafting a guide involves defining objectives, identifying main questions, preparing follow-up prompts, planning the interview flow, and testing the guide. During the interview, maintain an open and friendly conversation flow, practice active listening, remain neutral, and respect privacy. Afterward, analyze the collected data, use it to inform design changes, and document the process and findings.
May 6, 2024
User Interviews
User Testing
User Interview Guide
User Interview Survey for Savor App
This user interview guide is designed to gather insights on grocery shopping and cooking behaviors to inform the development of a web app aimed at reducing food waste and simplifying meal planning. The guide covers topics such as cooking frequency, grocery shopping habits, inventory management, decision-making in cooking, and experiences with existing apps or tools. The collected feedback will be used to enhance the app development, and participants may have the opportunity for a follow-up session to provide further input.
May 5, 2024
User Interview
Startups
Agile Development
Design Thinking
CSS Variables
CSS Variables, also known as custom properties, are entities defined by CSS authors to contain specific values that can be reused throughout a document. They are declared using custom property notation and can be used with the
var()
function. CSS Variables offer advantages such as reusability, maintainability, and dynamic control. They follow the rules of cascading and inheritance and are particularly useful for defining global values in stylesheets. They are an essential tool for front-end developers and provide a flexible way to manage and manipulate CSS.May 3, 2024
Padding in base64/65
Base64 encoding uses the "=" character as padding to ensure the encoded data's length is divisible by 4. This is necessary because each 3 bytes of data are converted into 4 Base64 characters. The padding characters act as placeholders and do not encode actual data.
May 1, 2024
Base64
Encoding
Padding