<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress.com" -->
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"><url><loc>https://donaldsebleung.com/2026/07/18/uncovering-a-curious-case-of-distribution-shift/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-distribution-shift-kjv-full-validation-loss.png</image:loc><image:title>03-distribution-shift-kjv-full-validation-loss</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-distribution-shift-kjv-ot-training-loss.png</image:loc><image:title>00-distribution-shift-kjv-ot-training-loss</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-distribution-shift-kjv-nt-validation-loss.png</image:loc><image:title>01-distribution-shift-kjv-nt-validation-loss</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-distribution-shift-kjv-full-training-loss.png</image:loc><image:title>02-distribution-shift-kjv-full-training-loss</image:title></image:image><lastmod>2026-07-24T16:47:43+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/06/28/building-my-ai-homelab-part-1/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-ai-homelab-pt1-argocd-login-page.png</image:loc><image:title>00-ai-homelab-pt1-argocd-login-page</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-ai-homelab-pt1-nucbox-k11.png</image:loc><image:title>04-ai-homelab-pt1-nucbox-k11</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-ai-homelab-pt1-argocd-dashboard.png</image:loc><image:title>01-ai-homelab-pt1-argocd-dashboard</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-ai-homelab-pt1-jupyterhub-notebook-torch-cpu.png</image:loc><image:title>03-ai-homelab-pt1-jupyterhub-notebook-torch-cpu</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-ai-homelab-pt1-jupyterhub-login-page.png</image:loc><image:title>02-ai-homelab-pt1-jupyterhub-login-page</image:title></image:image><lastmod>2026-07-24T16:45:51+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/06/19/bootstrapping-a-self-service-ai-platform-with-gitops/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-kubeflow-gitops-demo-fixed.gif</image:loc><image:title>06-kubeflow-gitops-demo-fixed</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-kubeflow-gitops-dashboard-fixed.png</image:loc><image:title>04-kubeflow-gitops-dashboard-fixed</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-kubeflow-gitops-landing-page.png</image:loc><image:title>00-kubeflow-gitops-landing-page</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-kubeflow-gitops-notebook-pytorch-cuda.png</image:loc><image:title>05-kubeflow-gitops-notebook-pytorch-cuda</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-kubeflow-gitops-login-page.png</image:loc><image:title>01-kubeflow-gitops-login-page</image:title></image:image><lastmod>2026-07-24T16:43:36+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/06/08/tracking-mindspore-experiments-with-mlflow/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-mlflow-mindspore-run-onnx-model.png</image:loc><image:title>06-mlflow-mindspore-run-onnx-model</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-mlflow-mindspore-experiment-select-run.png</image:loc><image:title>03-mlflow-mindspore-experiment-select-run</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-mlflow-mindspore-run-metrics-hyperparameters.jpg</image:loc><image:title>04-mlflow-mindspore-run-metrics-hyperparameters</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-mlflow-mindspore-select-experiment.png</image:loc><image:title>02-mlflow-mindspore-select-experiment</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-mlflow-mindspore-run-metrics-graphs.jpg</image:loc><image:title>05-mlflow-mindspore-run-metrics-graphs</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-mlflow-mindspore-new-experiment.png</image:loc><image:title>01-mlflow-mindspore-new-experiment</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/10-mlflow-mindspore-run-02-onnx-model.jpg</image:loc><image:title>10-mlflow-mindspore-run-02-onnx-model</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-mlflow-mindspore-mlflow-homepage.jpg</image:loc><image:title>00-mlflow-mindspore-mlflow-homepage</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/08-mlflow-mindspore-run-02-metrics-hyperparameters.jpg</image:loc><image:title>08-mlflow-mindspore-run-02-metrics-hyperparameters</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/09-mlflow-mindspore-run-02-metrics-graphs.jpg</image:loc><image:title>09-mlflow-mindspore-run-02-metrics-graphs</image:title></image:image><lastmod>2026-07-24T16:39:40+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/05/23/fine-tuning-resnet-18-on-cifar-100-with-mindcv-and-mindspore/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-resnet18-transfer-learning-cifar100-samples.png</image:loc><image:title>00-resnet18-transfer-learning-cifar100-samples</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-resnet18-transfer-learning-training-vs-validation-loss.png</image:loc><image:title>01-resnet18-transfer-learning-training-vs-validation-loss</image:title></image:image><lastmod>2026-07-24T16:36:32+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/05/09/upgrading-to-mindspore-2-9-0-cann-9-0-0-on-the-orangepi-aipro-20t/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-upgrade-cann-mindspore-cann-900-installer-files.png</image:loc><image:title>00-upgrade-cann-mindspore-cann-900-installer-files</image:title></image:image><lastmod>2026-07-24T16:34:26+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/05/01/migrating-pytorch-deep-learning-workloads-to-the-ascend-ecosystem/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-pytorch-ascend-images-labels.png</image:loc><image:title>00-pytorch-ascend-images-labels</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-pytorch-ascend-images-labels-predictions.png</image:loc><image:title>02-pytorch-ascend-images-labels-predictions</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-pytorch-ascend-training-validation-loss.png</image:loc><image:title>01-pytorch-ascend-training-validation-loss</image:title></image:image><lastmod>2026-07-24T16:32:54+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/04/20/accelerating-model-inference-on-nvidia-tesla-t4-with-onnx-runtime/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-onnxruntime-gpu-predictions-vs-labels.png</image:loc><image:title>01-onnxruntime-gpu-predictions-vs-labels</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-onnxruntime-gpu-images-and-labels.png</image:loc><image:title>00-onnxruntime-gpu-images-and-labels</image:title></image:image><lastmod>2026-07-24T16:31:02+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/04/19/serving-machine-learning-models-for-inference-with-onnx-runtime/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-cifar10-onnxruntime-images-and-labels.png</image:loc><image:title>00-cifar10-onnxruntime-images-and-labels</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-cifar10-onnxruntime-predictions-vs-labels.png</image:loc><image:title>01-cifar10-onnxruntime-predictions-vs-labels</image:title></image:image><lastmod>2026-07-24T16:29:31+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/04/04/predicting-california-house-prices-with-mindspore/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-california-housing-mindspore-training-validation-loss.png</image:loc><image:title>00-california-housing-mindspore-training-validation-loss</image:title></image:image><lastmod>2026-07-24T16:27:23+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/03/02/exploring-the-ascend-ecosystem-with-orangepi-aipro-20t/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-orangepi-aipro-20t-environment.gif</image:loc><image:title>00-orangepi-aipro-20t-environment</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-orangepi-aipro-20t-tf-card-reader.png</image:loc><image:title>05-orangepi-aipro-20t-tf-card-reader</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-orangepi-aipro-20t-board.png</image:loc><image:title>04-orangepi-aipro-20t-board</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/07-orangepi-aipro-20t-xfce-desktop.png</image:loc><image:title>07-orangepi-aipro-20t-xfce-desktop</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/10-orangepi-aipro-20t-jupyter-notebook.png</image:loc><image:title>10-orangepi-aipro-20t-jupyter-notebook</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-orangepi-aipro-20t-development-kit.png</image:loc><image:title>01-orangepi-aipro-20t-development-kit</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-orangepi-aipro-20t-boot-order-switch.png</image:loc><image:title>06-orangepi-aipro-20t-boot-order-switch</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-orangepi-aipro-20t-casing.png</image:loc><image:title>03-orangepi-aipro-20t-casing</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-orangepi-aipro-20t-packaging.png</image:loc><image:title>02-orangepi-aipro-20t-packaging</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/09-orangepi-aipro-20t-jupyter-terminal.png</image:loc><image:title>09-orangepi-aipro-20t-jupyter-terminal</image:title></image:image><lastmod>2026-07-24T16:23:57+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/02/17/deploying-deepseek-r1-for-distributed-inferencing-with-ray/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/07-vllm-ray-deepseek-r1-ray-verify.gif</image:loc><image:title>07-vllm-ray-deepseek-r1-ray-verify</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-vllm-ray-deepseek-r1-ray-serving.gif</image:loc><image:title>06-vllm-ray-deepseek-r1-ray-serving</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-vllm-ray-deepseek-r1-ray-status.gif</image:loc><image:title>05-vllm-ray-deepseek-r1-ray-status</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-vllm-ray-deepseek-r1-ray-start-worker.gif</image:loc><image:title>04-vllm-ray-deepseek-r1-ray-start-worker</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-vllm-ray-deepseek-r1-ray-start-head.gif</image:loc><image:title>03-vllm-ray-deepseek-r1-ray-start-head</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-vllm-ray-deepseek-r1-serving-vllm.gif</image:loc><image:title>02-vllm-ray-deepseek-r1-serving-vllm</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-vllm-ray-deepseek-r1-environment-preloaded.gif</image:loc><image:title>01-vllm-ray-deepseek-r1-environment-preloaded</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-vllm-ray-deepseek-r1-environment-nvidia.gif</image:loc><image:title>00-vllm-ray-deepseek-r1-environment-nvidia</image:title></image:image><lastmod>2026-07-24T16:15:35+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/02/14/running-deepseek-r1-on-a-commodity-laptop-with-vllm/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-vllm-deepseek-r1-inference.gif</image:loc><image:title>04-vllm-deepseek-r1-inference</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-vllm-deepseek-r1-api-exploring.gif</image:loc><image:title>03-vllm-deepseek-r1-api-exploring</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-vllm-deepseek-r1-serving.gif</image:loc><image:title>02-vllm-deepseek-r1-serving</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-vllm-deepseek-r1-docker-build.gif</image:loc><image:title>01-vllm-deepseek-r1-docker-build</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-vllm-deepseek-r1-hwinfo.gif</image:loc><image:title>00-vllm-deepseek-r1-hwinfo</image:title></image:image><lastmod>2026-07-24T16:07:14+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/01/18/exploring-the-developer-ecosystem-on-huawei-matebook-pro/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-matebook-pro-hish-docker-run-podinfo.gif</image:loc><image:title>00-matebook-pro-hish-docker-run-podinfo</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-matebook-pro-super-privacy-mode.png</image:loc><image:title>03-matebook-pro-super-privacy-mode</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/10-matebook-pro-codearts-program-execution.png</image:loc><image:title>10-matebook-pro-codearts-program-execution</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/11-matebook-pro-hishell-system-information.png</image:loc><image:title>11-matebook-pro-hishell-system-information</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/30-matebook-pro-hish-user-guide-docs-docker.png</image:loc><image:title>30-matebook-pro-hish-user-guide-docs-docker</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/09-matebook-pro-codearts-breakpoint-debugging.png</image:loc><image:title>09-matebook-pro-codearts-breakpoint-debugging</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-matebook-pro-celia-settings-local-ai.png</image:loc><image:title>06-matebook-pro-celia-settings-local-ai</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-matebook-pro-celia-deep-thinking.png</image:loc><image:title>04-matebook-pro-celia-deep-thinking</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/13-matebook-pro-hish-appgallery.png</image:loc><image:title>13-matebook-pro-hish-appgallery</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/08-matebook-pro-codearts-new-python-project.png</image:loc><image:title>08-matebook-pro-codearts-new-python-project</image:title></image:image><lastmod>2026-07-24T15:58:49+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2026/01/17/implementing-gitops-practices-with-argo-cd/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/15-argocd-gitops-demo-cli-walkthrough.gif</image:loc><image:title>15-argocd-gitops-demo-cli-walkthrough</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-argocd-gitops-demo-argocd-server-login-screen.png</image:loc><image:title>02-argocd-gitops-demo-argocd-server-login-screen</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/11-argocd-gitops-demo-podinfo-progressing.png</image:loc><image:title>11-argocd-gitops-demo-podinfo-progressing</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/09-argocd-gitops-demo-podinfo-sync.png</image:loc><image:title>09-argocd-gitops-demo-podinfo-sync</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/14-argocd-gitops-demo-podinfo-running.png</image:loc><image:title>14-argocd-gitops-demo-podinfo-running</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-argocd-gitops-demo-argocd-server-ignore-certificate-warning.png</image:loc><image:title>01-argocd-gitops-demo-argocd-server-ignore-certificate-warning</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/13-argocd-gitops-demo-podinfo-map.png</image:loc><image:title>13-argocd-gitops-demo-podinfo-map</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-argocd-gitops-demo-new-app.png</image:loc><image:title>04-argocd-gitops-demo-new-app</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-argocd-gitops-demo-architecture-diagram.png</image:loc><image:title>00-argocd-gitops-demo-architecture-diagram</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-argocd-gitops-demo-argocd-server-applications-view.png</image:loc><image:title>03-argocd-gitops-demo-argocd-server-applications-view</image:title></image:image><lastmod>2026-07-24T15:50:49+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/09/23/configuring-rook-with-external-ceph-storage/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-rook-external-ceph-demo.gif</image:loc><image:title>03-rook-external-ceph-demo</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-rook-external-ceph-ceph-ingress-rgw-ha.png</image:loc><image:title>02-rook-external-ceph-ceph-ingress-rgw-ha</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-rook-external-ceph-cephfs-architecture.png</image:loc><image:title>00-rook-external-ceph-cephfs-architecture</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-rook-external-ceph-ceph-rgw-overview.png</image:loc><image:title>01-rook-external-ceph-ceph-rgw-overview</image:title></image:image><lastmod>2026-07-24T15:47:11+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/09/21/provisioning-ceph-storage-with-cephadm/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2025/09/01-cephadm-demo.gif</image:loc><image:title>01-cephadm-demo</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-cephadm-ceph-architecture-overview.png</image:loc><image:title>00-cephadm-ceph-architecture-overview</image:title></image:image><lastmod>2026-07-24T15:42:02+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/04/20/implementing-pod-to-pod-encryption-with-istio-ambient-mesh/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-istio-ambient-mtls-demo.gif</image:loc><image:title>00-istio-ambient-mtls-demo</image:title></image:image><lastmod>2026-07-24T15:37:27+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/04/12/uncovering-a-reverse-shell-attack-in-real-time/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-reverse-shell-symantec-bad-ip-reputation.png</image:loc><image:title>01-reverse-shell-symantec-bad-ip-reputation</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-reverse-shell-tracee-json-event.png</image:loc><image:title>00-reverse-shell-tracee-json-event</image:title></image:image><lastmod>2026-07-24T15:33:26+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/03/04/understanding-the-security-benefits-of-ebpf-based-vs-traditional-service-meshes/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-ebpf-vs-traditional-service-meshes-envoy-namespaces.png</image:loc><image:title>02-ebpf-vs-traditional-service-meshes-envoy-namespaces</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-ebpf-vs-traditional-service-meshes-istio-architecture.png</image:loc><image:title>01-ebpf-vs-traditional-service-meshes-istio-architecture</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-ebpf-vs-traditional-service-meshes-mesh-evolution.png</image:loc><image:title>00-ebpf-vs-traditional-service-meshes-mesh-evolution</image:title></image:image><lastmod>2026-07-24T15:31:29+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2025/01/19/operating-kafka-at-scale-with-strimzi/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-kafka-strimzi-zookeeper-vs-kraft.png</image:loc><image:title>00-kafka-strimzi-zookeeper-vs-kraft</image:title></image:image><lastmod>2026-07-24T15:28:21+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2024/12/28/enforcing-recommended-practices-on-kubernetes-with-validatingadmissionpolicy/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-k8s-vap-access-control-overview.png</image:loc><image:title>00-k8s-vap-access-control-overview</image:title></image:image><lastmod>2026-07-24T15:23:41+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2024/06/09/protecting-stateful-workloads-on-kubernetes-with-kanister/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/07-kanister-wordpress-wp-admin-hello-world-deleted.png</image:loc><image:title>07-kanister-wordpress-wp-admin-hello-world-deleted</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-kanister-wordpress-wp-admin-dashboard.png</image:loc><image:title>04-kanister-wordpress-wp-admin-dashboard</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-kanister-wordpress-wp-homepage-1.png</image:loc><image:title>00-kanister-wordpress-wp-homepage-1</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-kanister-wordpress-wp-admin-login-page.png</image:loc><image:title>03-kanister-wordpress-wp-admin-login-page</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-kanister-wordpress-wp-homepage-2.png</image:loc><image:title>01-kanister-wordpress-wp-homepage-2</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-kanister-wordpress-wp-hello-world.png</image:loc><image:title>02-kanister-wordpress-wp-hello-world</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-kanister-wordpress-wp-admin-delete-hello-world-1.png</image:loc><image:title>05-kanister-wordpress-wp-admin-delete-hello-world-1</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-kanister-wordpress-wp-admin-delete-hello-world-permanently.png</image:loc><image:title>06-kanister-wordpress-wp-admin-delete-hello-world-permanently</image:title></image:image><lastmod>2026-07-24T15:19:45+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2024/02/25/deploying-keycloak-on-fedora-workstation-with-podman/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/07-keycloak-example-com-add-user.png</image:loc><image:title>07-keycloak-example-com-add-user</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/25-keycloak-spa-demo-sso-success.png</image:loc><image:title>25-keycloak-spa-demo-sso-success</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-keycloak-master-create-example-com-realm.png</image:loc><image:title>04-keycloak-master-create-example-com-realm</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/23-keycloak-example-com-johndoe-mfa-setup.png</image:loc><image:title>23-keycloak-example-com-johndoe-mfa-setup</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/09-keycloak-example-com-add-johndoe-password.png</image:loc><image:title>09-keycloak-example-com-add-johndoe-password</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/12-keycloak-example-com-johndoe-password-created.png</image:loc><image:title>12-keycloak-example-com-johndoe-password-created</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/15-keycloak-example-com-client-capability-config.png</image:loc><image:title>15-keycloak-example-com-client-capability-config</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/14-keycloak-example-com-add-keycloak-spa-client.png</image:loc><image:title>14-keycloak-example-com-add-keycloak-spa-client</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-keycloak-example-com-auth-required-actions.png</image:loc><image:title>06-keycloak-example-com-auth-required-actions</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/13-keycloak-example-com-add-client.png</image:loc><image:title>13-keycloak-example-com-add-client</image:title></image:image><lastmod>2026-07-24T15:13:43+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2024/02/13/running-workloads-at-the-edge-with-microk8s/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-nginx-ingress-nginx-welcome-page.png</image:loc><image:title>02-nginx-ingress-nginx-welcome-page</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/01-nginx-ingress-404-not-found.png</image:loc><image:title>01-nginx-ingress-404-not-found</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-microk8s-homelab-architecture.png</image:loc><image:title>00-microk8s-homelab-architecture</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/03-nginx-ingress-lets-encrypt-certificate.png</image:loc><image:title>03-nginx-ingress-lets-encrypt-certificate</image:title></image:image><lastmod>2026-07-24T15:09:42+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2024/01/14/exploring-openshift-with-crc/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/11-okd-web-admin-argocd-details.png</image:loc><image:title>11-okd-web-admin-argocd-details</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/12-okd-argocd-web-login.png</image:loc><image:title>12-okd-argocd-web-login</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/00-okd-web-oauth.png</image:loc><image:title>00-okd-web-oauth</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/06-okd-web-admin-argocd.png</image:loc><image:title>06-okd-web-admin-argocd</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/02-okd-web-admin-restricted-dashboard.png</image:loc><image:title>02-okd-web-admin-restricted-dashboard</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/04-okd-web-admin-dashboard.png</image:loc><image:title>04-okd-web-admin-dashboard</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/05-okd-web-admin-operators-operatorhub.png</image:loc><image:title>05-okd-web-admin-operators-operatorhub</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/13-okd-argocd-web-dashboard.png</image:loc><image:title>13-okd-argocd-web-dashboard</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/10-okd-web-admin-argocd-install-success.png</image:loc><image:title>10-okd-web-admin-argocd-install-success</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/07-okd-web-admin-community-operator.png</image:loc><image:title>07-okd-web-admin-community-operator</image:title></image:image><lastmod>2026-07-24T15:06:50+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/12/26/running-stateful-workloads-on-kubernetes-with-rook-ceph/</loc><lastmod>2026-07-24T15:03:14+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/11/14/investigating-a-failed-volumesnapshot-with-nfs-on-kubernetes/</loc><lastmod>2026-07-24T15:00:57+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/09/16/configuring-an-ipsec-vpn-connection-with-openiked/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-06.png</image:loc><image:title>openiked-intro-06</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-04.png</image:loc><image:title>openiked-intro-04</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-02-1.png</image:loc><image:title>openbsd-intro-02</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-01.png</image:loc><image:title>openiked-intro-01</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-07.png</image:loc><image:title>openiked-intro-07</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-03.png</image:loc><image:title>openiked-intro-03</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-05.png</image:loc><image:title>openiked-intro-05</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openiked-intro-02.png</image:loc><image:title>openiked-intro-02</image:title></image:image><lastmod>2026-07-24T14:58:15+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/09/12/configuring-a-simple-router-with-openbsd/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-10.png</image:loc><image:title>openbsd-intro-10</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-05.png</image:loc><image:title>openbsd-intro-05</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-03.png</image:loc><image:title>openbsd-intro-03</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-09.png</image:loc><image:title>openbsd-intro-09</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-04.png</image:loc><image:title>openbsd-intro-04</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-02.png</image:loc><image:title>openbsd-intro-02</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-08.png</image:loc><image:title>openbsd-intro-08</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-06.png</image:loc><image:title>openbsd-intro-06</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-07.png</image:loc><image:title>openbsd-intro-07</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/openbsd-intro-01.png</image:loc><image:title>openbsd-intro-01</image:title></image:image><lastmod>2026-07-24T14:56:04+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/08/25/evaluating-and-securing-your-kubernetes-infrastructure-with-kube-bench/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/devsecops-pipeline-2.png</image:loc><image:title>devsecops-pipeline</image:title></image:image><lastmod>2026-07-24T14:52:28+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/08/19/scanning-and-remediating-vulnerabilities-with-grype/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/grype-01.png</image:loc><image:title>grype-01</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/grype-02.png</image:loc><image:title>grype-02</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/grype-04.png</image:loc><image:title>grype-04</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/grype-03.png</image:loc><image:title>grype-03</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/devsecops-pipeline-1.png</image:loc><image:title>devsecops-pipeline</image:title></image:image><lastmod>2026-07-24T14:48:11+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/08/02/implementing-continuous-delivery-pipelines-with-github-actions/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-12.png</image:loc><image:title>github-actions-12</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-24.png</image:loc><image:title>github-actions-24</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-10.png</image:loc><image:title>github-actions-10</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-23.png</image:loc><image:title>github-actions-23</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-22.png</image:loc><image:title>github-actions-22</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-04.png</image:loc><image:title>github-actions-04</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-16.png</image:loc><image:title>github-actions-16</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-21.png</image:loc><image:title>github-actions-21</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-17.png</image:loc><image:title>github-actions-17</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/github-actions-18.png</image:loc><image:title>github-actions-18</image:title></image:image><lastmod>2026-07-24T14:44:19+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/07/29/enabling-local-project-collaboration-with-gitea/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-01.png</image:loc><image:title>gitea-01</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-00.png</image:loc><image:title>gitea-00</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-14.png</image:loc><image:title>gitea-14</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-05.png</image:loc><image:title>gitea-05</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-12.png</image:loc><image:title>gitea-12</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-10.png</image:loc><image:title>gitea-10</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-08.png</image:loc><image:title>gitea-08</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-07.png</image:loc><image:title>gitea-07</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-06.png</image:loc><image:title>gitea-06</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/gitea-09.png</image:loc><image:title>gitea-09</image:title></image:image><lastmod>2026-07-24T14:40:19+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/07/16/patching-a-directory-traversal-attack-vulnerability/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/function-assets.png</image:loc><image:title>function-assets</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/function-compute.png</image:loc><image:title>function-compute</image:title></image:image><lastmod>2026-07-24T14:35:40+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/07/20/securing-your-kubernetes-workloads-with-sigstore/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/devsecops-pipeline.png</image:loc><image:title>devsecops-pipeline</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/devops-pipeline.png</image:loc><image:title>devops-pipeline</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2026/07/infected-devops-pipeline.png</image:loc><image:title>infected-devops-pipeline</image:title></image:image><lastmod>2026-07-24T14:34:53+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/2023/07/15/migrating-my-personal-website-to-an-event-driven-serverless-architecture/</loc><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2023/07/web-hosting.png</image:loc><image:title>web-hosting</image:title></image:image><image:image><image:loc>https://donaldsebleung.com/wp-content/uploads/2023/07/function-compute.png</image:loc><image:title>function-compute</image:title></image:image><lastmod>2026-07-24T14:28:44+00:00</lastmod><changefreq>monthly</changefreq></url><url><loc>https://donaldsebleung.com/about/</loc><lastmod>2026-07-23T15:56:38+00:00</lastmod><changefreq>weekly</changefreq><priority>0.6</priority></url><url><loc>https://donaldsebleung.com</loc><changefreq>daily</changefreq><priority>1.0</priority><lastmod>2026-07-24T16:47:43+00:00</lastmod></url></urlset>
