I’ve been keeping an eye on Vanilla OS for quite a while, but almost all the official documentation was still focused on version 1. Back then, they were planning for the big v1 to v2 upgrade, so I waited. Since I visit my parents once a year, I need a stable, low-maintenance operating system that can be continuously upgraded so I can do some light work during my visits. The last thing I want to do…
Almost every day, I see someone on LinkedIn publicly calling out a “terrible” recruiter. The complaints follow familiar patterns: a recruiter mixed up the technology and pitched a role that had nothing to do with the person’s actual skills; they demanded ten years of experience in a framework that’s barely been around for two; they proposed a position several levels below where the person is in…
If you use GitHub Copilot custom agents, you probably know you can define them per-repository in .github/agents/ . That works well for project-specific agents, but it means every new repo starts from scratch. There is a way to share agents across all your repos without copying files everywhere — and it works for personal accounts too, even though the documentation only mentions organizations.…
I wanted a quick way to scan paper documents with my phone, but I kept getting harsh shadows on the page. The scanner app could detect edges, but the image quality was inconsistent because my hand, phone, and room light all affected the result. So I made a simple document scanner box from cardboard. It is cheap, simple, and works surprisingly well. (more...)
A few weeks ago, I was vibe coding a personal CRM with an AI assistant. Nothing fancy — just something to log my communication with people at work: who I talked to, what we discussed, when to follow up. The AI cheerfully scaffolded the whole thing: a Python backend, a SQLite database, tables for contacts and interactions, a schema with migration scripts. I stared at the output for a moment. A…
I’ve been experimenting with the GitHub Copilot Cloud Agent (also called the Copilot coding agent) as part of my remote vibe coding setup . The idea is simple: assign a GitHub issue to Copilot, let it implement the code on cloud compute, and have it open a pull request — all without needing a machine running locally. If you haven’t read that post, the short version is that this kind of setup is…
Many AI platforms — OpenAI, Anthropic — offer “scheduled tasks” or “scheduled agents” that run automatically. Sounds great, until you realise the configuration lives in some web UI, completely outside your version control. You can’t review changes in a pull request, you can’t roll back, and you can’t easily share or reproduce your setup. The automation tooling conversation also seems to have been…
I was scrolling through YouTube late one evening when a video on plain text accounting caught my eye. It immediately clicked. I’ve been managing my finances with a patchwork of Excel spreadsheets for years — one quarterly balance sheet, one income statement, and a few ad hoc sheets for tax calculations. They work, until they don’t. Formulas drift. Unbalanced accounts go unnoticed. And importing…
In my previous post about ADR as Event Sourcing , I talked about capturing architecture decisions continuously as they happen, not months later when everyone’s forgotten the context. But writing ADRs is only half the battle. The other half is actually enforcing them—and that’s where most teams fail. ADRs sit in a separate wiki or documentation tool like Confluence or Notion, gradually becoming…
Does any organization actually have good, up-to-date software architecture documentation? I’ve worked with enough teams to know the answer is almost always “no.” Most architecture docs become outdated the moment they’re written. Engineers don’t have time to maintain documentation while shipping features. Traditional Architecture Decision Records (ADRs) are often written after decisions are made,…
As a busy parent, I often only have 5-10 minutes of uninterrupted work time before my child needs attention. Traditional coding workflows—where you need a laptop open, an IDE running with AI agents actively working, and constant supervision—simply don’t work for someone in my situation. I needed a setup that could run in the background without any intervention, could be accessed from any device…
The TOGAF Practitioner exam can be challenging, but with the right strategy, you can significantly improve your chances of success. Unlike the Foundation exam which tests knowledge recall, the Practitioner exam tests your ability to apply TOGAF principles in realistic scenarios. Here’s a battle-tested approach that helped me pass the exam. (more...)
In September 2008, I wrote my first blog post, a humble guide about fixing missing screen resolutions in Ubuntu. Eighteen years and 88 posts later, I’m celebrating a different milestone: the 10th anniversary of moving this blog to its permanent home on shinglyu.com. What started as a way to document Linux troubleshooting tips has evolved into something far more significant: a chronicle of my…
I was really into Raycast. The global hotkeys, the instant app launching, the clipboard management – it transformed how I worked on my Mac. But I really don’t want to use their AI features. I found out it’s quite difficult to completely turn them off. With sensitive data flowing through my clipboard and workflows, I want absolute certainty that nothing leaves my machine. Also, Raycast is always in…
The industry chatter is loud about “vibe coding”—the AI-assisted writing of software. Yet, as someone who’s spent years observing how we build and manage cloud infrastructure (and recently preparing for the Google Cloud Professional Cloud Architect exam), I’ve noticed a much more profound trend quietly emerging on the operations side. It’s not about “vibe coding,” it’s about Vibe Operations. For…
While working on my recent exploration of Rust on Google Cloud Run , I was impressed by how seamless and developer-friendly the experience turned out to be. The container-based approach provided more flexibility and better tooling integration than I expected, sparking my interest in Google Cloud’s broader ecosystem and architectural patterns. This hands-on experience led me to consider pursuing…
I was really into Raycast. The global hotkeys, the instant app launching, the clipboard management – it transformed how I worked on my Mac. But I really don’t want to use their AI features. For the AI features it provides, I prefer using my own LLM provider. But I found out it’s quite difficult to completely turn it off. With sensitive data flowing through my clipboard and workflows, I want…
A few weeks ago, I published a comparison of Rust across AWS Lambda, Azure Functions, and GCP’s serverless offerings . I was pretty harsh on GCP, essentially dismissing Cloud Run as “not really serverless” and suggesting Google was missing the boat entirely. The GCP community didn’t let that slide. Multiple comments and messages pointed out that I hadn’t given Cloud Run a fair evaluation. They…
When you’re choosing a cloud platform for your next Rust serverless project, the landscape can be confusing. Each of the big three cloud providers—AWS, Azure, and Google Cloud Platform—offers different levels of maturity and support for Rust in serverless environments. I’ve spent some time experimenting with two platforms (more on why I’m missing one later), and the differences are more…
“Sorry, but that just won’t work for our organization.” Ever been in a customer meeting where the conversation seems to hit a brick wall? As a solution architect, you pitch your best cloud strategy, only to be met with a polite—sometimes not-so-polite—rejection. Most folks would pack up and move on. But what if this is the moment you should lean in and ask… why? (more...)
In my previous post , we deployed a simple “Hello World” Rust function to Azure. Now we’re ready to build something production-worthy: a database-backed REST API that handles real business logic. We’ll create a cake ordering system for a local bakery, complete with data persistence, input validation, and proper error handling. (more...)
This is the first post in my new series on serverless Rust on Azure. We’ll start simple by following the official Azure tutorial, with my notes on the caveats and tweaks I’ve made along the way. Having worked with AWS for the past 6 years, I’ll also highlight key differences from AWS Lambda. You can find the complete code on GitHub: https://github.com/shinglyu/serverless-rust-on-azure . (more...)
A frontend developer friend recently reached out to me for help. Her React app was mysteriously breaking, and she couldn’t figure out why. After some investigation, we discovered the culprit: a single % character in a URL was causing the entire application to crash. When you see a URL (Uniform Resource Locator), it often contains characters like letters, numbers, and some special symbols. However,…
After spending over a year each on my previous two books, I decided to experiment with AI assistance for my latest project: Learning to Learn AWS . The goal wasn’t to generate another AI-filled book flooding Amazon, but to maintain intellectual ownership while dramatically reducing the time investment. Here’s how I completed a quality technical book in just 5 months, working only 1-2 hours per…
I’ve been working on improving my Dutch by watching NOS Journaal in Makkelijke Taal (NOS News in Simple Language). It’s perfect for language learners - the vocabulary is accessible, the pronunciation is clear, and the topics are current and relevant. But here’s the thing: while listening helps with comprehension, I wanted to read the subtitles after watching to catch vocabulary I missed during the…
I use AI chatbots and agents extensively in my daily workflow. Sometimes I need to provide them with documents converted to markdown, but I don’t want to give away too much personal information. Markitdown is an excellent tool for converting PDFs and Word documents to markdown, but I lacked a CLI tool that could redact PII from the output. There are existing tools out there, and cloud services…
AI agents like Cline can now install complex software by interpreting documentation and handling environment differences automatically. Is this the future of software installation, or are we creating new problems by delegating these tasks to AI? I’m a bit late to the Model Context Protocol (MCP) party. While everyone was enthusiastically exploring the capabilities of MCP months ago, I only…
Last year, I wrote about turning hand-drawn architecture diagrams into digital diagrams using generative AI . While that approach worked well for creating editable digital diagrams, the result was quite basic—mostly rectangles and text. But if you’ve ever seen presentations by AWS solution architects, you’ll know that colorful AWS service icons can make architecture diagrams much more visually…
Since COVID, online meetings have become an indispensable tool for collaboration, communication, and productivity. Whether you’re a seasoned professional or just starting your career, mastering the art of online meetings is crucial for success. Having spent four years in a customer-facing role, I’ve participated in countless online meetings across various time zones, gaining valuable insights into…
As a developer, I often find myself needing a tool that can let me type with voice. While macOS boasts a variety of excellent GUI-based transcription tools, the Linux landscape leans more towards command-line utilities. This presented a challenge, but also an opportunity to build a custom solution tailored to my workflow. I kept delaying it, but now I finally got time to build a fast and accurate…
Note: This post is written with the help from Gemini 2.0 Flash. Let me know if you like the style and tone. Keeping a pristine photo gallery can be a challenge. I wanted a way to separate my permanent family photos from the everyday snapshots I take—parking spots, receipts, quick notes—things I only need temporarily. I wanted those transient images kept separate, ready for easy cleanup later. I…
A scammer(s), with the name “Amrw Hoinc”, is trying to use my identity to sign up for multiple websites. Based on the IP and phone number, they is based in Algeria and speaks Arabic and French. They signed up for multiple website builder tool, AI customer service chatbot, form builder, content publisher, and all kinds of AI tool and games. I suspect they are trying to create fake websites with…
I recently worked on a project to migrate a CDK project to Terraform, because the client want to standarize on Terrafrom. This could have been a time-consuming job, and it requires expertise on both CDK and Terraform, but with the help from generative AI, especailly Amazon Q Developer and Amazon Bedrock, it becomes quite easy. This article will walk you through how I performed the migration and…
My Linux laptop is running the old Ubuntu 20.04 and is going to go out of support next year. I was planning to switch over to NixOS but I don’t have time right now to do a fresh reinstall and learn NixOS from scratch. That’s why I decided to simply upgrade to Ubuntu 24.04 and switch to Wayland . I was using i3 on X11, so switching to Wayland means I have to change many of my settings and switch to…
The solution in this post is originally proposed by MattC and krassowski in this StakeOverflow thread . I just added some screenshots. Thanks to Nadhya Polanco for pointing me to this solution. (To view a larger version of a screenshot, right-click on the image and select Open Image in New Tab .) By default, when you use JupyterLab in Amazon SageMaker Studio, you’ll see some Python code being…
Recently, I’ve been working on a project that requires running thousands of models simultaneously. To save costs, we decided to run it on a SageMaker Multi-Model endpoint. Here is the official definition of Multi-Modal Endpoint from the official AWS Documentation : Multi-model endpoints provide a scalable and cost-effective solution to deploying large numbers of models. They use the same fleet of…
Triggering AWS code pipeline when new files are uploaded to S3 is a very common use case. For example, when new data is uploaded, you can trigger a CodePipeline that triggers SageMaker model retraining or inference. However, the documentation and services involved in this process have gone through multiple updates, making it confusing for users to understand the current recommended approach. In…
Background As an architect, whiteboarding is an essential part of the design and problem-solving process. However, once the whiteboard session is over, it can be challenging to translate those hand-drawn diagrams into a digital format that can be easily shared and collaborated on. Traditionally, this process involved manually recreating the diagrams using diagramming tools, which can be…
In my previous blog , I asked Raycast to create an iTerm2 terminal to run the transcription script. This was because I needed to press CTRL+C to stop the sox recording. However, I found that launching iTerm2 and zsh took a significant amount of time, sometimes up to 5 to 10 seconds, which was too slow for quickly jotting down thoughts. To address this issue, I discovered a way to stop the sox…
Why local transcription? In today’s world, many of us rely on cloud-based services for tasks like speech-to-text transcription. While these services are convenient, they come with drawbacks like high latency due to network transfers and potential privacy concerns as our audio data is sent to the cloud. Local transcription addresses these issues by performing the speech recognition process entirely…
Authors: Brajendra Singh , Shing Lyu The blog post is derived from a workshop I built with Brajendra Singh , which was never published. I’m extracting the content to make a blog post. You will learn how to deploy the SageMaker provided MLOps template for model deployment and how the template works internally. If the screenshot is too small, right-click on the image and select Open Image in New Tab…
Transcribing natural speech is a challenging task for voice-to-text services. When using traditional transcription tools, speakers are expected to talk slowly and clearly, avoiding fillers like “um” and “uh” as much as possible. However, this puts a huge cognitive load on the speaker to monitor every word before it’s spoken. Suddenly, having a normal conversation becomes an artificial performance.…
Raycast has become an indispensable tool in my workflow. The ability to quickly automate tasks and create custom integrations boosts my productivity daily. One common need I have is getting key summaries from long blocks of text. For example, summarize a long blog article I’m too lazy to read. Or quickly understand what is going on based on a long email thread. While there are pre-built Raycast AI…
I have been using Joplin for work for two years now, and I love it. Joplin is a free and open source note-taking app that lets you create notes in Markdown format, sync them across devices, and encrypt them for privacy. Joplin is also very flexible and customizable, allowing you to use plugins, themes, templates, and more to suit your needs. One of the features that I recently discovered in Joplin…
Llm-chain is a Rust crate that help you create advanced LLM applications such as chatbots, agents, and more. It supports various drivers, such as OpenAI , llama.cpp , and llm , that can connect to different APIs or run models locally. llm-chain allows you to easily switch between different drivers and options without a complete rewrite of your code. One of the challenges of using llm-chain is the…
Hi, everyone! I hope you are all doing well and enjoying Rust as much as I do. I have some exciting news to share with you today: I have just published my new book, Practical Rust Projects, 2nd Edition. I would like to acknowledge the contribution of my co-author, Andrew Rzeznik, who took over the project after I had to stop for personal circumstances. He did a fantastic job in finishing the book…
Recently I’ve been contributing to llm-chain , a Rust library for working with large language models (LLMs). It’s similar to Python’s LangChain . I contributed this tutorial to the official website for setting up a simple llm-chain using LLaMA models running locally using the llama.cpp project. I’m also publishing the same tutorial in this blog for archiving. Tutorial: Getting Started using the…
I like Brave’s SpeedReader feature. It is a new approach to reader modes that removes unnecessary elements from pages it recognizes as articles and displays them in a simplified format as part of the rendering pipeline. Because it’s done during rendering, not after the page have rendered (as most reader mode extensions does), it delivers performance gain and reduce the network bandwidth required.…
In this blog post, I will show you how to use AWS CLI and SageMaker JumpStart to create your own private large language model (LLM) on Amazon SageMaker. You will learn how to deploy a pretrained model from the Hugging Face Transformers library, and how to use it to generate text with custom instructions using AWS CLI. (more...)