Skip to content

podcast

Setting Up Ubuntu Desktop on AWS Workspace

Welcome back, listeners, to another episode of Continuous Improvement. I'm your host, Victor, and today we have an exciting topic to discuss – the journey of using Ubuntu Desktop and its migration to an AWS EC2 instance. If you're a fan of Ubuntu like me, you won't want to miss this episode.

It all started back in my university days when I first discovered Ubuntu Desktop as a Windows replacement. The community support and resourcefulness were truly exceptional. But, like any transition, there were challenges to overcome, such as hardware compatibility issues with webcams, sound, and keyboards.

At first, I admit, I made some rookie mistakes. I would blindly copy and paste commands into the terminal, only to realize later that I messed up my environment and had to reinstall Ubuntu Desktop multiple times. But, as they say, we learn from our mistakes.

Fast forward to today, and my journey with Ubuntu Desktop has taken a new turn. I've now migrated it to an AWS EC2 instance. With Google Chrome's remote desktop setup, I enjoy the flexibility of choosing hardware based on my needs. However, I did face disappointment with the browser scrolling experience, especially when streaming YouTube videos.

But, as luck would have it, I stumbled upon an exciting announcement this morning – the availability of Ubuntu Desktop on AWS Workspace. Intrigued by this new option, I wasted no time and immediately dove into exploring it. And guess what? I'm actually recording this podcast episode from the Ubuntu Desktop on AWS Workspace setup.

Now, let's dive into the step-by-step guide, shall we?

Step 0: Before diving into the setup process, you'll need to set up a directory. You have the option to choose between AWS Managed Microsoft AD or Simple AD, depending on your needs. In my case, I opted for Simple AD, as I needed an inexpensive Active Directory compatible service.

Step 1: Once your directory is set up, you can proceed to create an AWS-managed workspace. This process takes some time and requires you to register it as well.

Steps 2 & 3: Next, create a user and identify their credentials. Ensure everything is set up correctly.

Step 4: Now comes the exciting part – selecting the Ubuntu Desktop bundle. Keep in mind that the UI may be a bit cumbersome, lacking search and filter functionality. You may need to navigate to the last page to find the Ubuntu options. Take your time to choose the hardware configuration that suits your needs. I personally went for the performance option, as it currently has a free tier promotion.

Step 5: It's decision time – "Always On" or "AutoStop." I chose the "AutoStop" option with a one-hour timeout for cost-saving purposes.

Step 6: Optional encryption is available, but for now, I recommend skipping it unless you require additional security measures.

Now, all you have to do is wait for the status to change from "Pending" to "Ready." Once the workspace is ready, you can start connecting using the registration code. Moreover, one fantastic feature of Ubuntu Desktop on AWS Workspace is the ability to access it via the web. Here's how to enable it:

Go to the WorkSpaces console at https://console.aws.amazon.com/workspaces/ and navigate to "Directories." Choose your directory, then select "Actions" and "Update Details." Expand the "Access Control Options" section and locate "Other Platforms." Click on "Web Access" and choose "Update and Exit."

Congratulations! You're now ready to access Ubuntu Desktop from any web browser. Simply visit https://clients.amazonworkspaces.com/webclient and input your registration code.

Enter your username and password. If you've forgotten your directory password, don't worry; you can easily reset it through your AWS console.

And there you have it! You're now logged in to a fully functional Ubuntu Desktop in your web browser. This setup offers incredible convenience and allows access from anywhere. So far, my experience has been outstanding, and I'm delighted with the user experience.

If you have any questions or need further information about this setup, don't hesitate to reach out. I'm here to help and share knowledge with our wonderful community.

That concludes today's episode of Continuous Improvement. Thank you for tuning in and joining me on this Ubuntu Desktop journey. I hope you found this information valuable and that it will enhance your Ubuntu experience. Remember, as we navigate the world of technology, there's always room for continuous improvement.

Until next time, this is Victor signing off. Stay curious and keep improving!

Setting up a Three-Tier Architecture on AWS

Hello, and welcome to another exciting episode of Continuous Improvement! I'm your host, Victor, and today we're going to dive deep into the world of Virtual Private Cloud (VPC) services on Amazon Web Services (AWS).

In this episode, we'll explore how to set up a three-tier architecture using VPC services. So, grab a cup of coffee and get ready to learn!

Now, before we jump into the technicalities, let's take a look at the architecture diagram. We have three layers: the presentation layer, the logic layer, and the data layer.

The presentation layer allows users to access the public subnet directly through the gateway. Then we have the logic layer, which handles all the business logic. This layer is located in a private subnet behind a load balancer. And finally, we have the data layer, which consists of a MySQL database in a private subnet.

To ensure high availability, we have deployed our architecture across two Availability Zones. Additionally, our database is backed up to the other zone, guaranteeing operational continuity in case of an Availability Zone failure.

Now that we have an overview of the architecture, let's dive into the setup process.

First, we'll create a VPC network named 'victorleungtwdemo.' We'll allocate the CIDR block '172.17.0.0/16' to provide room for future expansion.

Moving forward, we'll create six subnets, each associated with a specific Availability Zone. This setup allows us to distribute our resources across multiple zones, enhancing scalability and resilience.

Now, let's talk about routing. We'll create three separate routing tables: 'pub-route' for the public network, 'priv-route' for the private network, and 'nat-route' for the database subnet.

The 'pub-route' table will have a route '0.0.0.0/0' directed towards our Internet Gateway, granting access to the public internet for all machines in the associated subnets.

As for security, we'll create separate security groups for our bastion host, load balancer, web servers, and database. This way, we can ensure proper access controls and protect our infrastructure.

Once the networking and security aspects are in place, we'll launch the relevant EC2 instances and set up an RDS server with the appropriate VPC and security group.

To provide load balancing capabilities, we'll create a target group for the web servers and set up an application load balancer.

All that's left is to test the system and ensure everything is functioning as expected. From the bastion host, we'll SSH into the web servers, launch an Nginx server, and verify access to the database from the application layer.

And just like that, we've successfully set up a three-tier architecture using VPC services on AWS! Give yourself a pat on the back for a job well done.

Well, that wraps up today's episode of Continuous Improvement. I hope you found this guide helpful in understanding and implementing a three-tier architecture on AWS. If you have any questions or would like to connect, feel free to reach out to me on LinkedIn.

Join me next time as we explore more exciting topics and strategies for continuous improvement. Until then, keep learning and stay curious!

This is Continuous Improvement, signing off.

Introducing Amazon Web Services (AWS)

Welcome to Continuous Improvement, the podcast where we dive deep into the world of Amazon Web Services (AWS). I'm your host, Victor Leung, an AWS community builder, here to help you navigate the vast world of cloud computing. In today's episode, we'll be discussing the fundamental aspects of AWS and how it can transform your business. So, let's get started!

So, what is AWS? Well, it's the world's most comprehensive and well-adopted cloud platform. Customers across the globe trust AWS to power their infrastructure and applications, allowing them to lower costs, become more agile, and innovate faster.

AWS provides on-demand delivery of technology services via the internet with pay-as-you-go pricing. This means that you only pay for the services you use, without any upfront costs or ongoing commitments. It's a flexible and cost-effective solution for running any type of application.

One of the key advantages of AWS is the wide range of services and features it offers. With AWS, you have access to more services and features than any other cloud provider, making it faster, easier, and more cost-effective to move your existing applications to the cloud and build new innovative solutions.

When it comes to scaling your applications, AWS has you covered with its globally deployed infrastructure. With 84 Availability Zones within 26 geographic regions worldwide and more on the way, you can easily scale your application to meet growing demand. You can choose the region closest to you and your customers, ensuring low latency and high performance.

Now, let's talk about computing power on the AWS platform. One of the key services for deploying servers is Amazon EC2, also known as Elastic Compute Cloud. With EC2, you have a wide range of instance types to choose from, each optimized for different use cases. The selection process involves considering the CPU, memory, storage, and network performance requirements of your application.

But what happens if you choose the wrong instance type? No worries! With AWS, you have the flexibility to change the instance type even after you've started an EC2 instance. Simply stop the instance, change the type, and start it again. It's that easy.

To ensure optimal performance and stability, AWS provides various CloudWatch metrics for your EC2 instances. These metrics include CPU utilization, disk operations, network traffic, and more. You can also install the CloudWatch agent to collect memory metrics and track log files.

Now, let's move on to another critical aspect of AWS: high availability and fault tolerance. AWS offers various features to ensure your applications are always up and running, even in the face of disasters. One of these features is the ability to deploy your application across multiple Availability Zones. By distributing your infrastructure, you can ensure that your application remains available even if one zone goes down.

In case of larger-scale disasters or outages, you can leverage multi-region deployments. For example, deploying your website in Singapore and setting up a backup environment in Hong Kong. By utilizing Amazon Route53, you can easily switch your domain name and redirect

Understanding Kubernetes

Welcome back to another episode of Continuous Improvement. I'm your host, Victor, and today we're diving into the world of Kubernetes. In this episode, we'll explore the key concepts you need to understand to navigate this powerful open-source system for automating the deployment, scaling, and management of containerized applications. So grab a cup of coffee, sit back, and let's get started.

Let's start with the Control Plane. This component plays a crucial role in making global decisions about the cluster. It consists of three fundamental elements: ETCD, API Server, and Scheduler.

ETCD acts as a distributed key-value store, providing a reliable way to store data accessible by a distributed system or a cluster of machines. It ensures strong consistency while handling data storage.

The API Server serves as the interface through which users interact with the cluster. Whether it's through REST, a user interface, or the command-line tool kubectl, the API Server facilitates seamless communication and management.

The Scheduler handles resource management, ensuring that Kubernetes efficiently assigns pods to worker nodes while adhering to resource restrictions and constraints.

Moving on to the Data Plane, this is where the resources, networking, and storage management come into play to enable container workloads to run smoothly.

In Kubernetes, a Namespace provides a logical separation of objects within the cluster. It scopes access and divides the cluster, allowing for better organization and management.

Nodes, whether they are virtual or physical machines, form the backbone compute resources of a cluster. They are managed by the Control Plane and host Pod objects. Kubelet is a critical component that acts as a Control Plane agent on each node, while the Container Runtime schedules and manages the Pod containers. Kube Proxy acts as a networking proxy within the cluster, ensuring smooth communication between Pods.

Now, let's talk about Pods. These are the basic deployable objects in Kubernetes and can be seen as services or microservices. Pods can run one or more containers, sharing storage and network resources. Within a Pod, you may have an init-container to perform setup tasks before the main container starts, the main container hosting the application process, and even a sidecar container loosely coupled to the main container.

It's important to note that Pods are typically created via controller resources like Deployments, DaemonSets, Jobs, or StatefulSets. A ReplicaSet, for example, ensures a stable set of replica Pods running at any given time.

ConfigMaps come in handy when storing non-confidential key-value configurations. These can be used by Pods as file mounts or environment variables accessible by the containers within a Pod.

Now let's explore the Role-based Access Control (RBAC) Resources. A ServiceAccount provides an identity for all processes running within a Pod. ClusterRole and Role contain sets of permissions, while ClusterRoleBinding and RoleBinding grant those permissions to a specific ServiceAccount.

Deployments act as controllers for Pods and associated objects like ReplicaSets and ConfigMaps. They continuously monitor and reconcile the state as declared in the manifest, making rollouts to ReplicaSets seamless. Canary deployments, with garbage collection features, can also be executed.

The HorizontalPodAutoscaler automates the scaling of workload resources based on metrics like memory and CPU usage. It can also utilize custom or external metrics for scaling, such as those provided by Prometheus.

StorageClass describes an abstract class of storage with properties like storage type, provider, and reclamation policies. It is utilized by PersistentVolume, which represents storage that can be attached to Pods and has a lifecycle independent of the Pods themselves.

Moving on to Services, they serve as abstractions for network exposure. They provide load balancing and make Pods accessible from other Pods within the cluster.

For stateful applications, there's the StatefulSet controller. Unlike Deployment resources, it maintains a sticky identity for each Pod and associates each Pod with a unique instance of persistent storage. Deleting or scaling down a StatefulSet does not delete associated volumes.

A Job is ideal for applications that run tasks ending in successful completion. It deploys one or more Pods and retries until a specified number of Pods have terminated, signaling the task's conclusion. And for scheduled tasks, we have CronJobs, which operate on a set schedule.

To guide external traffic to Pods via Services, we have Ingress. Ingress requires an Ingress Controller, such as ingress-nginx, to fulfill Ingress rules. It can handle external load balancing, SSL termination, and name-based virtual hosting within the cluster.

If you're looking to extend Kubernetes resource types, CustomResourceDefinition allows you to define custom resource properties and schemas. These can be subscribed to by custom controllers or operators, and each CustomResource must have an associated CustomResourceDefinition.

And there you have it — a whirlwind tour of important Kubernetes concepts. Whether you're preparing for the CKAD, CKA, or CKS exams or simply looking to enhance your Kubernetes knowledge, I hope this episode has given you valuable insights.

Don't forget, if you have any questions or thoughts to share, feel free to reach out. Until next time, keep learning and embracing continuous improvement.

Thank you for tuning in to this episode of Continuous Improvement. If you enjoyed this content, don't forget to subscribe and leave us a review. And remember, your feedback helps us grow and improve. Stay curious and never stop learning. See you in the next episode!

Understanding Service Mesh and Istio

Hello, and welcome to Continuous Improvement, the podcast where we dive deep into various topics related to software development and infrastructure. I'm your host, Victor, and in today's episode, we are going to explore the fascinating world of service mesh and specifically focus on Istio. So, whether you're a software developer or just curious about how networks in the cloud work, this episode is for you!

As a software developer, I sometimes find infrastructure networking quite confusing. But fear not, because today we'll be unraveling the mysteries of service mesh and shedding light on Istio.

So, what exactly is a service mesh? Well, to put it simply, a service mesh is a dedicated infrastructure layer responsible for handling service-to-service communication. It ensures reliable delivery of requests through the complex topology of services in a cloud-native application.

In practice, a service mesh is usually implemented as a collection of lightweight network proxies deployed alongside the application code. The beauty of it is that the application doesn't even need to be aware of these proxies. Contrary to its name, a service mesh is not a mesh of services, but rather a mesh of proxies that abstract away the network layer.

Now, a service mesh fulfills three primary functions: flow control, security, and observability. The control plane manages the flow of configuration data from a central unit to the proxies that make up the mesh. Meanwhile, the data plane handles the flow of application data between microservices, facilitated by the sidecar proxy.

One popular service mesh that you may have heard of is Istio. Istio is an open-source project born out of a collaboration between Google, IBM, and Lyft's Envoy proxy. It provides a transparent infrastructure layer for managing inter-service communication on Kubernetes.

So how does Istio work? It intercepts network traffic bound for a pod and proxies it through an intelligent Layer 7 proxy called Envoy, which is mounted as a sidecar to the main container. Istio then applies advanced routing and policy rules to enhance security, resiliency, and observability. It even uses mutual TLS for communication between peers.

Using Istio offers immediate advantages in the three core functions of a service mesh. However, it's important to note that there are complexities involved, such as operational overhead and a slight latency at the link level. Istio also requires platform adaptation and consumes additional resources like memory and CPU.

Let's take a closer look at the components of Istio. The control plane, known as istiod, handles functions like service discovery, proxy configuration, certificate management, and more. In older versions of Istio, these functions were spread out among separate deployments, but they have since been consolidated into istiod.

The data plane of Istio consists of Envoy proxy instances that communicate with the Istio control plane. Once configured and synchronized, these proxies manage all inbound and outbound network traffic to pods by applying advanced Layer 7 routing and policy rules. The configuration is achieved through the control plane's Rules-Based API, which then compiles it into Envoy-specific settings.

To be entirely transparent to application developers, Istio reroutes all traffic to Envoy by manipulating the IP tables of all pods in the service mesh. Traffic hijacking is achieved through either an init container called istio-init or Istio's Container Networking Interface (CNI) plugin.

In addition to its core functionalities, Istio also offers a Security API that allows you to configure policies at different levels of granularity. It supports various modes of TLS communication, such as DISABLE, PERMISSIVE, and STRICT. By examining Istio request metrics, you can determine whether a request was proxied over mTLS.

In conclusion, service mesh and Istio are fascinating technologies that provide a dedicated infrastructure layer to manage inter-service communication. Although they bring immediate advantages in terms of flow control, security, and observability, they also introduce complexities and require platform adaptation.

I hope this episode helped shed some light on service mesh and Istio. Remember, learning is a continuous process, and there's always more to explore. Thank you for tuning in to Continuous Improvement. I'm Victor, and until next time, keep improving!

My Career Story

Welcome back to another episode of Continuous Improvement! I'm your host, Victor, and today we're diving into the fascinating world of technology and professional growth. I've always been captivated by the ever-evolving landscape of tech, and today I want to share my journey with you. From switching careers to navigating challenges, and embracing continuous learning, we'll explore how I've grown into the role of a software engineer. So grab your favorite beverage, sit back, and join me on this exciting ride!

It all started back in university when I stumbled upon a Java programming course. Little did I know, that course would spark an intense passion for technology within me. After completing my bachelor's degree in Chemistry, I initially pursued a career as a marketing manager in the tourism industry. But I couldn't ignore the fact that many marketers lacked technical skills. This realization inspired me to make a career switch and become a software engineer at an Australian consulting firm.

My time at Accenture was both challenging and rewarding. I was fortunate to work on a large customer-based mobile app for an airline. Tight timelines and numerous feature requirements pushed me to adopt an agile approach. But it wasn't all smooth sailing. Negotiating with the product owner to overcome project blockers taught me an invaluable lesson about the importance of collaboration. In the end, we successfully launched the mobile app, meeting business requirements and ensuring customer satisfaction.

While consulting for EY in the banking sector, I encountered a setback involving the choice of a cloud platform. Our initial choice, Amazon Web Services (AWS), was unable to meet regulatory requirements due to a delay in their data center in Hong Kong. So we had to shift gears and migrate to Microsoft Azure. It was a challenging experience, but one that highlighted the need for adaptability and the ability to make quick, strategic decisions.

Dynatrace brought a whole new set of challenges to the table. I was part of the post-sales team, working on software monitoring products. One particular project stood out – integrating our product into Huawei's cloud platform. Working in Shenzhen, I faced a demanding work culture and a grueling schedule. But through proactive communication and dedication, we successfully launched the project and delivered exceptional results.

My journey continued at HSBC, where I served as a technical lead. Developing an online payment solution for merchants in Malaysia, I identified a fragmented team and office politics that hindered our progress. To overcome these challenges, I dove deep into understanding customer needs, consulted error logs, and fostered effective delegation of tasks. Gradually, we saw a remarkable rise in transaction success rates. This experience taught me the importance of taking ownership and cultivating a harmonious team environment.

Today, I find myself at Thought Machine as a client engineering manager. It's a role that allows me to explore new technologies and collaborate with customers, partners, and teams. Recently, I had the opportunity to assist a colleague in pre-sales, presenting to one of Taiwan's largest banks. Despite the language barrier, I embraced the challenge, translating and presenting the slides with confidence. It was a rewarding experience to see our efforts recognized and appreciated.

Outside of my professional pursuits, I'm an avid advocate for continuous learning. I've obtained certifications in various cloud platforms and project management methodologies like Scrum. But I don't stop there. I actively engage with Toastmasters clubs to improve my communication and public speaking skills. After all, growth knows no limits!

And that brings us to the end of yet another episode of Continuous Improvement. I hope my journey has inspired you to embrace the ever-changing world of technology, to strive for collaboration and continuous learning, and to never shy away from taking on new challenges. Remember, you have the power to shape your own path to success. Until next time, this is Victor signing off!

On Digital Transformation

Welcome to Continuous Improvement, the podcast where we explore the world of digital transformation and discuss strategies for success. I'm your host, Victor, and in today's episode, we'll dive into the career journey of a digital transformation leader.

But before we begin, a quick reminder to subscribe to our podcast and leave us a review if you enjoy the content. Your feedback is greatly appreciated.

Now, let's get started.

Over the past 5 years, our guest today has assumed leadership roles in multiple digital transformation projects, working with renowned companies like Cathay Pacific Airways, HSBC, and EY. With a unique blend of technical and business acumen, our guest has tackled complex challenges and obtained hands-on experience in various technologies.

In 2017, as a senior consultant at Accenture, our guest led the transformation of Cathay Pacific Airways' mobile app, moving it from a legacy platform to a new native mobile technology. Through effective communication and the utilization of his coding skills, our guest successfully addressed both the organizational and technological challenges.

Following this, in 2018, our guest worked as a consultant at EY on a project for HSBC's Payme business mobile app. The rise of e-commerce and the disruption caused by AliPay posed a threat to traditional banks. Our guest was entrusted with guiding HSBC through this transition, advising on technical architecture, agile delivery methodologies, and even driving the migration from AWS to Azure.

In 2019, our guest took on the role of technical lead for the HSBC merchant online payment project. With the sudden surge in e-commerce due to the pandemic, our guest played a crucial role in building a new website to handle the increased demand. Leveraging Angular, TypeScript, and Adobe Experience Manager (AEM), our guest ensured a smooth launch while collaborating with various teams.

Continuously pushing boundaries, our guest then joined a digital-only bank project in Singapore in 2021. Unlike traditional banks burdened by legacy systems, this digital bank had the advantage of utilizing cloud-native technology. Our guest witnessed firsthand how agility and innovation can lead to more efficient and cost-effective operations.

Now, in 2022, our guest is contributing to a Vietnamese Digital Bank project, working on building financial products on the platform. With a diverse skill set and the ability to analyze business requirements and translate them into technical specifications, our guest is helping drive innovation and success in the banking sector.

Throughout these experiences, our guest emphasizes the importance of changing mindsets and introducing new ways of working. Digital transformation is not just about technology—it's about meeting customer needs effectively. Our guest's journey highlights the need for a diverse team, involving both business and technical individuals, and working closely with end-users to ensure successful adoption.

While focused on technology, our guest acknowledges the importance of developing a strong business model that connects technology to an emerging market. With a test-and-learn mentality and a commitment to continuous improvement, our guest aims to lead successful digital transformations.

And that's a wrap for today's episode of Continuous Improvement. I hope you found our guest's journey inspiring and learned valuable insights about digital transformation.

Don't forget to tune in next week for another exciting episode. Until then, keep exploring and striving for continuous improvement.

Thank you for listening to Continuous Improvement. If you enjoyed this episode, be sure to subscribe and leave us a review. We appreciate your support.

Think and Grow Rich - Book Review

Welcome to Continuous Improvement, the podcast that helps you unleash your full potential and achieve success in all areas of your life. I'm your host, Victor, and today we're diving into the world of personal development with a book review of "Think and Grow Rich" by Napoleon Hill.

Now, before we begin, I want to address the elephant in the room. Yes, the title may sound a bit superficial, and you might even feel a tad awkward reading it in public. But trust me, there's much more to this book than meets the eye.

Let's kick things off with a powerful quote that sets the tone for the entire book. Henry Ford once said, "Whether you think you can, or you think you can't, you're right." This quote perfectly encapsulates the essence of "Think and Grow Rich." At first, I too had my reservations about this book. Was it a scam? A get-rich-quick scheme? But as I delved into its pages, I discovered something much more profound.

To truly understand this book, we need to consider its historical context. Published in 1937, during the Great Depression, "Think and Grow Rich" remains a bestseller, having sold over 20 million copies. It belongs to the self-improvement genre, and like many self-improvement books, it raises skepticism. After all, if these books were truly effective, we'd all be living lavish lives by now. But let's not jump to conclusions just yet.

The core message of the book revolves around mindset—a key factor in achieving success. It's not just about thinking your way to riches; action is required. Hill presents a simple formula: desire, faith, and then action. If you have an unwavering desire, faith in yourself, and the courage to conquer your fears, you'll be propelled to take the necessary action.

Throughout the book, Hill shares captivating stories and case studies of successful individuals, including renowned industrialist Andrew Carnegie. While some accuse the book of lacking scientific rigor in its methodology, I believe the best way to test its ideas is through action. Knowledge alone won't get you paid; it's the application and the ability to inspire others to act that holds the key to financial success.

"Think and Grow Rich" also tackles the importance of character and mindset. Building positive relationships and cooperative efforts are crucial for achieving power and success. In essence, your ability to provide valuable service and inspire others is what truly sets you apart.

The book challenges the notion that a college degree equates to true education. True education lies in the effective application of knowledge without infringing upon the rights of others. It's about consistently pursuing your goals and making a positive impact.

If you're someone who's passionate about becoming wealthy, I wholeheartedly recommend reading "Think and Grow Rich." It's a powerful exploration of mindset, action, and the principles that can guide you towards your goals.

And that brings us to the end of this episode of Continuous Improvement. I hope you found this book review insightful and inspiring. Remember, success is within reach if you're willing to embrace the right mindset and take consistent action.

If you enjoyed this episode, make sure to subscribe to Continuous Improvement on your favorite podcast platform, and don't forget to leave us a review. Until next time, keep striving for greatness.

[END OF SCRIPT]

Vietnamese Street Food

Welcome to another exciting episode of "Continuous Improvement." I'm your host, Victor, and today we have a mouthwatering topic to dive into - Vietnamese street food! So grab a snack, sit back, and let's embark on a culinary adventure through the vibrant streets of Vietnam.

Vietnam is known for its rich history and diverse culture, but its street food scene is truly something to behold. During the Vietnam War, food was scarce, and the first dish we'll discuss serves as a reminder of that challenging time. It's a photo of a dry, flavorless potato - a representation of the hardships people faced. It's important to approach this with empathy and understanding.

Now, let's switch gears and delve into the exciting experiences I had while sampling authentic Vietnamese street food. The best way to truly immerse oneself in the culture is by joining a motorbike local street food tour. Trust me, driving in Vietnam is an adventure in itself - traffic rules are more like suggestions! But don't worry, I made it through unscathed.

One of my favorite street food dishes is Bánh Tráng Nướng, also known as Vietnamese Pizza. Unlike its Italian counterpart, this dish is made with light and crispy rice paper, cooked over an open flame. Just don't expect any safety regulations here!

A popular dish that you must try is Bánh Xèo, the Vietnamese pancake. Cooked in a wok over real fire, it's a fragrant and savory delight. The pancake is filled with mouthwatering ingredients like morning glory, making it a must-try on your culinary journey.

Another dish that caught my attention is Bột Chiên. It takes fried rice to a whole new level. Imagine tasty rice flour cakes fried to perfection and topped with flavorful papaya slices. It's an explosion of flavors that will leave you craving for more.

Now, let's talk about Nem Bò Nướng Sả, smoky sweet and savory pork skewers. Pigs might be smart, but they are also incredibly delicious. The succulent pieces of grilled pork will satisfy any meat lover's cravings.

The French colonial influence in Vietnam gifted us with Bánh Mì, the Vietnamese baguette. Picture a crispy yet soft baguette filled with various delectable ingredients. It's a mouthwatering blend of flavors that will make your taste buds sing.

For the soup lovers out there, I recommend trying Bún Bò Huế. This spicy beef noodle soup hails from the city of Hue and packs a punch. Although it might not be suitable for vegetarians, it's simply too good to pass up. Keep in mind that fish sauce is a common addition in Vietnamese cuisine, even to salads.

If you're a fan of fish, you must try Bún Cả, a delightful fish cake dish. But wait, there's a secret to enhance its flavor - fish sauce. Known as the ultimate flavor enhancer, it takes this dish to a whole new level of deliciousness.

Now, let's satisfy our sweet tooth. I recommend trying Chuối Nếp Nướng, banana sticky rice with coconut. It's a mouthwatering dessert and a delightful alternative to Thailand's famous Mango Sticky Rice. Just be careful with the pronunciation, as we don't want any unintentional miscommunications.

Vietnam offers a wide variety of desserts. From jelly-like treats to miscellaneous sweet and salty delicacies, there's a dessert to satisfy every craving. Don't be afraid to step out of your comfort zone and try something new - you won't be disappointed.

Coconut lovers, get ready for a treat! Vietnam is abundant in coconuts, and they're put to great use. Whether it's a simple coconut itself or a creamy coconut ice cream, you're in for a refreshing delight. And for coffee enthusiasts, Vietnam is famous for its coffee, especially the kind made with condensed milk. It's an indulgence worth savoring.

Before we wrap up, let's learn a couple of useful phrases. If you're up for a night of festivities, the word "rượu" means "getting drunk." But remember, everything in moderation! And when it's time to raise your glass, you can join the locals with the phrase "Một, Hai, Ba, YO" - it means "1, 2, 3, Cheers!" So let's practice together: "Một, Hai, Ba, YO!"

And that's a wrap for today's episode of "Continuous Improvement." I hope I've whetted your appetite for Vietnamese street food. If you ever find yourself in Vietnam, be sure to explore the vibrant streets and indulge in these mouthwatering delicacies. Until next time, remember to keep improving, one flavorful bite at a time.