Last active
March 28, 2023 21:58
-
-
Save lynnkwong/66f76d9b4922abb0cc97a8d49128aab6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
{ | |
"_id": "313deb5a5701", | |
"published_at": "2022-04-12", | |
"url": "https://lynn-kwong.medium.com/313deb5a5701", | |
"tags": ["Git Hooks", "Git", "Pre-commit", "Python"], | |
"title": "Build a Pre-commit Workflow to Check and Fix Your Python Code Automatically", | |
"subtitle": "Improve your code quality and accelerate your code review process", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*E5bBtt3lm9Crb6Lh", | |
"display_tag": "Git Hooks" | |
}, | |
{ | |
"_id": "5e4b51719427", | |
"published_at": "2022-04-08", | |
"url": "https://lynn-kwong.medium.com/5e4b51719427", | |
"tags": ["MongoDB", "Full-text", "Atlas Search", "Database"], | |
"title": "Learn Advanced Full-Text Searches With MongoDB Atlas Search", | |
"subtitle": "Let's search with MongoDB rather than Elasticsearch", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*F-KMVOuy3gGY2sMr", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "db77ec7071f8", | |
"published_at": "2022-04-03", | |
"url": "https://lynn-kwong.medium.com/some-tips-to-make-your-vs-code-more-efficient-db77ec7071f8", | |
"tags": ["VS Code", "IDE", "Python"], | |
"title": "Some Tips to Make Your VS Code More Efficient", | |
"subtitle": "VS Code can be more friendly than you think", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*Yy4Juu7zTSTv509f.jpg", | |
"display_tag": "VS Code" | |
}, | |
{ | |
"_id": "48b17242676", | |
"published_at": "2022-03-20", | |
"url": "https://lynn-kwong.medium.com/how-to-do-basic-full-text-searches-in-mongodb-48b17242676", | |
"tags": ["MongoDB", "Search", "Full-text", "Database"], | |
"title": "How to Do Basic Full-Text Searches in MongoDB", | |
"subtitle": "Search texts by the text index in MongoDB", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*zO0EOf7p5S7r8efi.jpg", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "efead98f08", | |
"published_at": "2022-03-05", | |
"url": "https://lynn-kwong.medium.com/learn-powerful-mongodb-aggregation-pipelines-from-practical-examples-efead98f08", | |
"tags": ["MongoDB", "Aggregation", "Pipeline", "Database"], | |
"title": "Learn Powerful MongoDB Aggregation Pipelines from Practical Examples", | |
"subtitle": "Get insight into your data in MongoDB by aggregation", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*t-5rhVZafCqhYqx-.png", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "caa077c9a20f", | |
"published_at": "2022-03-06", | |
"url": "https://lynn-kwong.medium.com/all-you-need-to-know-about-using-mongodb-in-python-caa077c9a20f", | |
"tags": ["MongoDB", "NoSQL", "Python", "Database"], | |
"title": "All You Need to Know About Using MongoDB in Python", | |
"subtitle": "Know the common use cases of MongoDB in Python", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/1*vRT4dyelcObU_bzO-dupWg.jpeg", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "8380026642d5", | |
"published_at": "2022-02-24", | |
"url": "https://lynn-kwong.medium.com/learn-the-essentials-and-get-started-with-mongodb-8380026642d5", | |
"tags": ["MongoDB", "NoSQL", "Python", "Database"], | |
"title": "Learn the Basics and Get Started With MongoDB", | |
"subtitle": "Get into to the world of NoSQL databases", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*9koUrp3sLcW73gi5.png", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "7db56792c1f7", | |
"published_at": "2022-02-18", | |
"url": "https://lynn-kwong.medium.com/how-to-run-scrapy-spiders-in-your-program-7db56792c1f7", | |
"tags": ["Scrapy", "Scraping", "Python"], | |
"title": "How to Run Scrapy Spiders in Your Python Program", | |
"subtitle": "Learn to run Scrapy spiders programmatically", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*Epo8ZIhoEGihAt6v.png", | |
"display_tag": "Scrapy" | |
}, | |
{ | |
"_id": "46e78b6549e3", | |
"published_at": "2022-02-12", | |
"url": "https://lynn-kwong.medium.com/how-to-build-a-scraping-project-with-scrapy-and-mongodb-46e78b6549e3", | |
"tags": ["Scrapy", "Scraping", "MongoDB", "Database"], | |
"title": "How to Build a Scraping Project With Scrapy and MongoDB", | |
"subtitle": "Become a real \"spiderman\" in Python", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*FuxltT3FGMD3KyaI.jpg", | |
"display_tag": "Scrapy" | |
}, | |
{ | |
"_id": "e42dd74e51e7", | |
"published_at": "2022-01-07", | |
"url": "https://betterprogramming.pub/how-to-use-the-magical-staticmethod-classmethod-and-property-decorators-in-python-e42dd74e51e7", | |
"tags": ["Decorator", "Python"], | |
"title": "How to Use the Magical @Staticmethod, @Classmethod, and @Property Decorators in Python", | |
"subtitle": "Learn special decorators in Python", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*yPOoejcL-9OBL6sl", | |
"display_tag": "Decorator" | |
}, | |
{ | |
"_id": "ec432efc2c0f", | |
"published_at": "2022-02-27", | |
"url": "https://lynn-kwong.medium.com/learn-advanced-mongodb-queries-for-nested-documents-using-elemmatch-from-practical-examples-ec432efc2c0f", | |
"tags": ["MongoDB", "Nested", "Advanced", "Database"], | |
"title": "Learn Advanced MongoDB Queries for Nested Documents from Practical Examples", | |
"subtitle": "Learn the $elemMatch operator in MongoDB", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/0*7wd-p1K6-jFhW17G.png", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "21d56731bb1f", | |
"published_at": "2022-02-05", | |
"url": "https://lynn-kwong.medium.com/how-to-scrape-javascript-webpages-using-selenium-in-python-21d56731bb1f", | |
"tags": ["Selenium", "JavaScript", "Scraping"], | |
"title": "How to Scrape Javascript Webpages Using Selenium in Python", | |
"subtitle": "Render JavaScript webpages by yourself", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/1*cZ0a9N8qMSUz8gharmAQjQ.png", | |
"display_tag": "Selenium" | |
}, | |
{ | |
"_id": "11672e4da7e9", | |
"published_at": "2022-01-23", | |
"url": "https://lynn-kwong.medium.com/how-to-work-with-json-data-in-mysql-11672e4da7e9", | |
"tags": ["MySQL", "JSON", "Database"], | |
"title": "How to Work With JSON Data in MySQL", | |
"subtitle": "Learn \"NoSQL\" in MySQL?", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*C4XxyqiFrpvu5N4e.jpg", | |
"display_tag": "MySQL" | |
}, | |
{ | |
"_id": "b24dec228c43", | |
"published_at": "2022-01-16", | |
"url": "https://lynn-kwong.medium.com/how-to-write-concurrent-python-code-with-multithreading-b24dec228c43", | |
"tags": ["Threading", "Concurrent", "Queue"], | |
"title": "How to Write Concurrent Python Code With Multithreading", | |
"subtitle": "Boost your application with concurrency", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*Q7xQDv01WO7Ae14z.jpg", | |
"display_tag": "Concurrency" | |
}, | |
{ | |
"_id": "40918f3e2a8b", | |
"published_at": "2022-04-01", | |
"url": "https://lynn-kwong.medium.com/use-isort-to-sort-your-python-module-imports-automatically-40918f3e2a8b", | |
"tags": ["Python", "Formatting"], | |
"title": "Use Isort to Sort Your Python Module Imports Automatically", | |
"subtitle": "Let's sort the modules in a uniform way", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*jg3iaInU1riDAq7E.jpg", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "e3fee4fcc324", | |
"published_at": "2022-03-27", | |
"url": "https://lynn-kwong.medium.com/learn-powerful-full-text-searches-with-mongodb-atlas-search-e3fee4fcc324", | |
"tags": ["MongoDB", "Full-text", "Atlas Search", "Database"], | |
"title": "Learn Powerful Full-Text Searches With MongoDB Atlas Search", | |
"subtitle": "Learn the Elasticsearch counterpart in MongoDB", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*mLsph6UYoJcyQSMt.jpg", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "ff4560dc67f5", | |
"published_at": "2022-03-14", | |
"url": "https://lynn-kwong.medium.com/how-to-use-indexes-properly-in-mongodb-ff4560dc67f5", | |
"tags": ["MongoDB", "Index", "Search", "Database"], | |
"title": "How to Use Indexes Properly in MongoDB", | |
"subtitle": "Boost your MongoDB queries by indexes", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*p_jOoPxYm9OqdWo-.jpg", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "5b90c1a9213f", | |
"published_at": "2022-02-14", | |
"url": "https://lynn-kwong.medium.com/how-to-execute-shell-commands-properly-in-python-5b90c1a9213f", | |
"tags": ["Python", "Subprocess", "Shell"], | |
"title": "How to Execute Shell Commands Properly in Python", | |
"subtitle": "Learn different ways to run shell commands in Python", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*WHCqRhEtpUE6dW19.jpg", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "627a3741fdb1", | |
"published_at": "2022-01-22", | |
"url": "https://betterprogramming.pub/how-to-execute-plain-sql-queries-with-sqlalchemy-627a3741fdb1", | |
"tags": ["SQLAlchemy", "Python", "SQL", "Database"], | |
"title": "How to Execute Plain SQL Queries With SQLAlchemy in Python", | |
"subtitle": "Learn a standard way to run SQL queries in Python", | |
"reading_time": 10, | |
"image_url": "https://miro.medium.com/0*evKiZC18AJdbNAs0.jpg", | |
"display_tag": "SQLAlchemy" | |
}, | |
{ | |
"_id": "54cb18efe454", | |
"published_at": "2022-01-11", | |
"url": "https://lynn-kwong.medium.com/how-to-visualize-google-logs-in-grafana-54cb18efe454", | |
"tags": ["Grafana", "GCP", "Logging"], | |
"title": "How to Visualize Google Logs With Grafana", | |
"subtitle": "Monitor your Cloud data with Grafana", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/1*NzuOrjEFB-FXIwoMYsLpnQ.png", | |
"display_tag": "Grafana" | |
}, | |
{ | |
"_id": "66c8624b069", | |
"published_at": "2022-03-21", | |
"url": "https://lynn-kwong.medium.com/learn-the-basics-and-get-started-with-sqlalchemy-orm-from-scratch-66c8624b069", | |
"tags": ["SQLAlchemy", "ORM", "MySQL", "Database"], | |
"title": "Learn the Basics and Get Started With SQLAlchemy ORM", | |
"subtitle": "Let's interact with databases in a Pythonic way", | |
"reading_time": 10, | |
"image_url": "https://miro.medium.com/0*wrvas_LBnXOoMK9g.jpg", | |
"display_tag": "SQLAlchemy" | |
}, | |
{ | |
"_id": "d97a6e7663c5", | |
"published_at": "2022-02-25", | |
"url": "https://lynn-kwong.medium.com/how-to-use-mongodb-atlas-to-manage-your-server-and-data-d97a6e7663c5", | |
"tags": ["MongoDB", "Atlas", "NoSQL", "Database"], | |
"title": "How to Use MongoDB Atlas to Manage Your Server and Data", | |
"subtitle": "Let someone professional manage your MongoDB server", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*HgOI-QuJ9TN7oeXD.jpg", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "3b43094627dc", | |
"published_at": "2022-01-13", | |
"url": "https://lynn-kwong.medium.com/how-to-use-google-pub-sub-to-build-an-asynchronous-messaging-system-in-python-3b43094627dc", | |
"tags": ["Pub/Sub", "Messaging", "GCP"], | |
"title": "How to Use Google Pub/Sub to Build an Asynchronous Messaging System in Python", | |
"subtitle": "Learn a simple but powerful Cloud Pub/Sub system", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*H9rG6fn_opIsehtv.jpg", | |
"display_tag": "Pub/Sub" | |
}, | |
{ | |
"_id": "46e7b514c60b", | |
"published_at": "2022-01-08", | |
"url": "https://lynn-kwong.medium.com/how-to-write-logs-to-google-cloud-logging-in-python-46e7b514c60b", | |
"tags": ["GCP", "Logging", "Python"], | |
"title": "How to Write Logs to Google Cloud Logging in Python", | |
"subtitle": "Centralize your Python logs in the Cloud", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*SACzpSr22yG_4X6a.png", | |
"display_tag": "GCP" | |
}, | |
{ | |
"_id": "420597ede80e", | |
"published_at": "2022-02-26", | |
"url": "https://lynn-kwong.medium.com/how-to-use-mongodb-with-graphical-ides-420597ede80e", | |
"tags": ["MongoDB", "GUI", "IDE", "Database"], | |
"title": "How to Use MongoDB With Graphical IDEs", | |
"subtitle": "Boost your efficiency with a MongoDB IDE", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/1*FwT4IfvYwa8NMIu2R1igBQ.png", | |
"display_tag": "MongoDB" | |
}, | |
{ | |
"_id": "a4de7182d996", | |
"published_at": "2022-02-04", | |
"url": "https://lynn-kwong.medium.com/how-to-scrape-javascript-webpages-using-proxycrawl-in-python-a4de7182d996", | |
"tags": ["JavaScript", "Scraping", "Proxycrawl"], | |
"title": "How to Scrape Javascript Webpages Using Proxycrawl in Python", | |
"subtitle": "Learn a simple way to scrape JavaScript webpages", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/0*aNJoiOpgL-YfvGja.png", | |
"display_tag": "JavaScript" | |
}, | |
{ | |
"_id": "4f5903c67db2", | |
"published_at": "2022-02-04", | |
"url": "https://lynn-kwong.medium.com/simple-web-scraping-using-requests-beautiful-soup-and-lxml-in-python-4f5903c67db2", | |
"tags": ["Scraping", "Beautiful Soup", "lxml"], | |
"title": "Simple Web Scraping Using Requests, Beautiful Soup, and Lxml in Python", | |
"subtitle": "Get started with web scraping in Python", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*wxrpt7PYyS8X7LGB.png", | |
"display_tag": "Scraping" | |
}, | |
{ | |
"_id": "f4cdbad2e7d", | |
"published_at": "2022-01-09", | |
"url": "https://lynn-kwong.medium.com/how-to-visualize-your-data-with-grafana-f4cdbad2e7d", | |
"tags": ["Grafana", "Monitoring", "MySQL", "Database"], | |
"title": "How to Visualize Your Data With Grafana", | |
"subtitle": "Learn a powerful data monitoring tool", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*UdJ9Od6A273_0Eim.jpg", | |
"display_tag": "Grafana" | |
}, | |
{ | |
"_id": "fddb51f3d03a", | |
"published_at": "2021-12-31", | |
"url": "https://lynn-kwong.medium.com/special-python-string-formatting-in-logging-and-pint-unit-conversion-fddb51f3d03a", | |
"tags": ["Python", "String", "Formatting"], | |
"title": "Special Python String Formatting in Logging and Unit Conversion", | |
"subtitle": "Learn to use string formatting in different cases", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*8BVBG_P2hvIOiFsI.jpg", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "6beecd183345", | |
"published_at": "2021-11-01", | |
"url": "https://lynn-kwong.medium.com/understand-the-basics-of-locks-and-deadlocks-in-mysql-part-ii-6beecd183345", | |
"tags": ["MySQL", "Lock", "Deadlock", "Database"], | |
"title": "Understand the Basics of Locks and Deadlocks in MySQL (Part II)", | |
"subtitle": "Let's not get scared of MySQL deadlocks anymore", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*xOLxbrfgO5Lrz2QD", | |
"display_tag": "MySQL" | |
}, | |
{ | |
"_id": "92f229db0a", | |
"published_at": "2021-11-01", | |
"url": "https://lynn-kwong.medium.com/understand-the-basics-of-locks-and-deadlocks-in-mysql-part-i-92f229db0a", | |
"tags": ["MySQL", "Lock", "Deadlock", "Database"], | |
"title": "Understand the Basics of Locks and Deadlocks in MySQL (Part I)", | |
"subtitle": "Let's not get scared of MySQL deadlocks anymore", | |
"reading_time": 12, | |
"image_url": "https://miro.medium.com/0*MA-vpqylY8VkBGf1", | |
"display_tag": "MySQL" | |
}, | |
{ | |
"_id": "2a386ab73ca2", | |
"published_at": "2021-09-12", | |
"url": "https://lynn-kwong.medium.com/learn-the-fundamentals-of-kubernetes-for-software-developers-2a386ab73ca2", | |
"tags": ["Kubernetes", "k8s", "Docker"], | |
"title": "Learn the Fundamentals of Kubernetes for Software Developers", | |
"subtitle": "Let's get started with the mysterious k8s", | |
"reading_time": 13, | |
"image_url": "https://miro.medium.com/0*T2V2d1B_2hZTvHDb", | |
"display_tag": "Kubernetes" | |
}, | |
{ | |
"_id": "e6af03dff10b", | |
"published_at": "2021-05-19", | |
"url": "https://lynn-kwong.medium.com/how-to-use-postman-to-automate-api-tests-e6af03dff10b", | |
"tags": ["API", "Postman", "JavaScript"], | |
"title": "How to Use Postman to Automate API Tests", | |
"subtitle": "Learn to test your APIs with a friendly GUI", | |
"reading_time": 16, | |
"image_url": "https://miro.medium.com/0*q-1nav6H_7Ymlgcq", | |
"display_tag": "API" | |
}, | |
{ | |
"_id": "f2ba2340f205", | |
"published_at": "2021-04-08", | |
"url": "https://lynn-kwong.medium.com/how-to-upgrade-a-python-2-code-base-to-python-3-f2ba2340f205", | |
"tags": ["Python"], | |
"title": "How to Upgrade a Python 2 Codebase to Python 3", | |
"subtitle": "Let's stop using Python 2 from now on", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/1*sm8w4zwn-UFk8dInKkdSXw.png", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "31814c0a8ec2", | |
"published_at": "2022-01-04", | |
"url": "https://lynn-kwong.medium.com/how-to-create-virtual-environments-with-venv-and-conda-in-python-31814c0a8ec2", | |
"tags": ["Python", "Conda", "venv"], | |
"title": "How to Create Virtual Environments With Venv and Conda in Python", | |
"subtitle": "Learn to build a modern Python development environment", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*zuKvjdFsFwjNqBrt.png", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "3851174f9fb0", | |
"published_at": "2022-01-06", | |
"url": "https://betterprogramming.pub/how-to-use-redis-for-caching-and-pub-sub-in-python-3851174f9fb0", | |
"tags": ["Redis", "Caching", "Pub/Sub"], | |
"title": "How to Use Redis for Caching and Pub/Sub in Python", | |
"subtitle": "Know the common use cases of Redis in Python", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*HjmtCYm--Cibzy9b", | |
"display_tag": "Redis" | |
}, | |
{ | |
"_id": "f6f97a909ee0", | |
"published_at": "2021-12-23", | |
"url": "https://lynn-kwong.medium.com/understand-the-encoding-decoding-of-python-strings-unicode-utf-8-f6f97a909ee0", | |
"tags": ["Encoding", "Unicode", "UTF-8"], | |
"title": "Understand the Encoding/Decoding of Python Strings (Unicode/UTF-8)", | |
"subtitle": "Demystify Python string encoding/decoding", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/0*x7CH-4mW2SouJEaz.jpg", | |
"display_tag": "Encoding" | |
}, | |
{ | |
"_id": "77d80d3ce412", | |
"published_at": "2021-09-19", | |
"url": "https://lynn-kwong.medium.com/use-pre-commit-commit-msg-and-pre-push-git-hooks-to-fix-your-python-code-asap-77d80d3ce412", | |
"tags": ["Git Hooks", "Pre-commit", "Git"], | |
"title": "Use Pre-commit, Commit-msg, and Pre-push Git Hooks to Fix Your Python Code ASAP", | |
"subtitle": "Let Git hooks boost your coding efficiency", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*jVr9nXBLrkdlRiaq", | |
"display_tag": "Git Hooks" | |
}, | |
{ | |
"_id": "a2563d67e6d", | |
"published_at": "2021-05-03", | |
"url": "https://lynn-kwong.medium.com/python-typing-and-validation-with-mypy-and-pydantic-a2563d67e6d", | |
"tags": ["Pydantic", "Typing", "Mypy"], | |
"title": "Python Typing and Validation With Mypy and Pydantic", | |
"subtitle": "Let's make our Python code more readable with typing", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*qpHuBM2eP9SfcOwA", | |
"display_tag": "Pydantic" | |
}, | |
{ | |
"_id": "73da5d2fdc0b", | |
"published_at": "2021-08-22", | |
"url": "https://lynn-kwong.medium.com/essentials-of-redis-all-you-need-to-know-as-a-developer-73da5d2fdc0b", | |
"tags": ["Redis", "Caching", "Database"], | |
"title": "Essentials of Redis - All You Need to Know as a Developer", | |
"subtitle": "Learn the most common use cases of Redis", | |
"reading_time": 14, | |
"image_url": "https://miro.medium.com/0*5X0tFNr0ijgGr1zq", | |
"display_tag": "Redis" | |
}, | |
{ | |
"_id": "8a6b8c56381c", | |
"published_at": "2021-08-15", | |
"url": "https://lynn-kwong.medium.com/how-to-use-pydantic-to-read-environment-variables-and-secret-files-in-python-8a6b8c56381c", | |
"tags": ["Pydantic", "Credential", "Environment"], | |
"title": "How to Use Pydantic to Read Environment Variables and Secret Files in Python", | |
"subtitle": "Learn to manage your environment variables in a better way", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*Z_NFKEUy-Oq2zj4G", | |
"display_tag": "Pydantic" | |
}, | |
{ | |
"_id": "fc4f430b3b28", | |
"published_at": "2021-04-24", | |
"url": "https://lynn-kwong.medium.com/how-to-use-gsutil-and-python-to-deal-with-files-in-google-cloud-storage-fc4f430b3b28", | |
"tags": ["GCP", "Storage", "Python"], | |
"title": "How to Use Gsutil and Python to Deal With Files in Google Cloud Storage", | |
"subtitle": "Learn to interact with GCP Storage programmatically", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/1*VVEYZ6m5Sv7mG8rRVPESKA.png", | |
"display_tag": "GCP" | |
}, | |
{ | |
"_id": "a0b825ad7d41", | |
"published_at": "2021-12-26", | |
"url": "https://lynn-kwong.medium.com/how-to-debug-python-scripts-and-api-code-in-the-console-and-in-vs-code-a0b825ad7d41", | |
"tags": ["Debugging", "VS Code", "API"], | |
"title": "How to Debug Python Scripts and API Code in the Console and in VS Code", | |
"subtitle": "Learn different ways to debug your Python code", | |
"reading_time": 12, | |
"image_url": "https://miro.medium.com/0*rr2H1eobO7uKVRHN.png", | |
"display_tag": "Debugging" | |
}, | |
{ | |
"_id": "b594512f4362", | |
"published_at": "2021-12-08", | |
"url": "https://lynn-kwong.medium.com/use-black-mypy-and-pylint-to-make-your-python-code-more-professional-b594512f4362", | |
"tags": ["Formatting", "Python", "VS Code"], | |
"title": "Use Black, Mypy, and Pylint to Make Your Python Code More Professional", | |
"subtitle": "Let's write Python code like a Pro", | |
"reading_time": 9, | |
"image_url": "https://miro.medium.com/0*LBUMKDDKUidw7KnN", | |
"display_tag": "Formatting" | |
}, | |
{ | |
"_id": "edf826196fbf", | |
"published_at": "2021-11-15", | |
"url": "https://lynn-kwong.medium.com/how-to-decorate-classes-in-python-edf826196fbf", | |
"tags": ["Decorator", "Class", "Python"], | |
"title": "How to Decorate Classes in Python", | |
"subtitle": "Learn a special use case of Python decorators", | |
"reading_time": 3, | |
"image_url": "https://miro.medium.com/0*ij2CTpkZlrBjEUW1", | |
"display_tag": "Decorator" | |
}, | |
{ | |
"_id": "1eecd77188ad", | |
"published_at": "2021-04-30", | |
"url": "https://lynn-kwong.medium.com/how-to-use-google-custom-search-engine-gcse-in-your-python-code-1eecd77188ad", | |
"tags": ["GCP", "GCSE", "Search"], | |
"title": "How to Use Google Custom Search Engine (GCSE) in Your Python Code", | |
"subtitle": "Learn to use Google search API in your code", | |
"reading_time": 4, | |
"image_url": "https://miro.medium.com/0*qLsMEKXTv_Ti7lV5", | |
"display_tag": "GCP" | |
}, | |
{ | |
"_id": "495f2f8db83e", | |
"published_at": "2021-04-03", | |
"url": "https://lynn-kwong.medium.com/learn-elasticsearch-from-practical-examples-495f2f8db83e", | |
"tags": ["Elasticsearch", "Kibana", "Search"], | |
"title": "Learn Elasticsearch from Practical Examples", | |
"subtitle": "You will be able to build a search engine soon", | |
"reading_time": 13, | |
"image_url": "https://miro.medium.com/1*Tl46X3lIX9mmNp4VJMT_Fg.png", | |
"display_tag": "Elasticsearch" | |
}, | |
{ | |
"_id": "481aa444933f", | |
"published_at": "2021-05-14", | |
"url": "https://lynn-kwong.medium.com/understand-and-master-the-decorator-in-python-481aa444933f", | |
"tags": ["Decorator", "Python"], | |
"title": "Understand and Master the Decorators in Python", | |
"subtitle": "Let's demystify the decorators in Python", | |
"reading_time": 4, | |
"image_url": "https://miro.medium.com/0*NN9eC6qlgQYCodYf", | |
"display_tag": "Decorator" | |
}, | |
{ | |
"_id": "dac40803fdf", | |
"published_at": "2021-10-14", | |
"url": "https://lynn-kwong.medium.com/how-to-configure-build-and-deploy-your-python-projects-to-pypi-dac40803fdf", | |
"tags": ["PyPI", "Publish", "Python"], | |
"title": "How to Configure, Build, and Publish Your Python Projects to PyPi", | |
"subtitle": "Learn to publish your Python projects in a modern way", | |
"reading_time": 11, | |
"image_url": "https://miro.medium.com/0*DVKEJVWGX0dgRS4S", | |
"display_tag": "PyPI" | |
}, | |
{ | |
"_id": "b88e6a1071fc", | |
"published_at": "2021-08-13", | |
"url": "https://lynn-kwong.medium.com/learn-more-than-the-basics-about-the-date-time-and-timezone-in-python-b88e6a1071fc", | |
"tags": ["Python", "Logging", "Timezone"], | |
"title": "Learn More Than the Basics About the Date, Time, and Timezone in Python", | |
"subtitle": "Let's become a time master in Python", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/0*noM6VoP5wwtgFMQE", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "6a50a45603ae", | |
"published_at": "2021-07-25", | |
"url": "https://lynn-kwong.medium.com/learn-how-to-use-google-cloud-functions-in-python-with-a-simple-example-6a50a45603ae", | |
"tags": ["Cloud Function", "GCP", "Microservice"], | |
"title": "Learn How to Use Handy Cloud Functions in Python With a Practical Example", | |
"subtitle": "Let's simplify our application with modern serverless services", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/0*taXbJQ-r2Q2kf4NE", | |
"display_tag": "Cloud Function" | |
}, | |
{ | |
"_id": "9e2c2a5e1759", | |
"published_at": "2021-07-11", | |
"url": "https://lynn-kwong.medium.com/build-apis-with-falcon-in-python-all-essentials-you-need-9e2c2a5e1759", | |
"tags": ["API", "Python", "Falcon"], | |
"title": "Build APIs With Falcon in Python - All Essentials You Need", | |
"subtitle": "Learn a simple but efficient API framework in Python", | |
"reading_time": 14, | |
"image_url": "https://miro.medium.com/0*VXbkgtYuloC1NdM4", | |
"display_tag": "API" | |
}, | |
{ | |
"_id": "13811859f80f", | |
"published_at": "2021-05-23", | |
"url": "https://lynn-kwong.medium.com/how-to-use-the-assignment-expression-walrus-operator-in-python-13811859f80f", | |
"tags": ["Python", "Walrus", "Assignment"], | |
"title": "How to Use the Assignment Expression/Walrus Operator (:=) in Python", | |
"subtitle": "Learn a cool feature to simplify your Python code", | |
"reading_time": 3, | |
"image_url": "https://miro.medium.com/0*Pj89LdjG3-zYlS1M", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "7aebc1408d6f", | |
"published_at": "2021-04-26", | |
"url": "https://lynn-kwong.medium.com/learn-advanced-crud-and-search-queries-for-nested-objects-in-elasticsearch-from-practical-examples-7aebc1408d6f", | |
"tags": ["Elasticsearch", "Nested", "Advanced"], | |
"title": "Learn Advanced CRUD and Search Queries for Nested Objects in Elasticsearch from Practical Examples", | |
"subtitle": "Elasticsearch can get complex but also powerful", | |
"reading_time": 5, | |
"image_url": "https://miro.medium.com/0*LtJMvBt2WDjTRMBK", | |
"display_tag": "Elasticsearch" | |
}, | |
{ | |
"_id": "fc894af0b68b", | |
"published_at": "2021-03-29", | |
"url": "https://lynn-kwong.medium.com/how-to-encrypt-and-decrypt-a-secret-file-in-google-cloud-platform-fc894af0b68b", | |
"tags": ["GCP", "Encryption", "Credential"], | |
"title": "How to Encrypt and Decrypt a Secret File in Google Cloud Platform", | |
"subtitle": "Let's save our credentials in a safe way in GCP", | |
"reading_time": 4, | |
"image_url": "https://miro.medium.com/0*VpPOnPJNsgRUfvn0.jpg", | |
"display_tag": "GCP" | |
}, | |
{ | |
"_id": "5f6840af2c05", | |
"published_at": "2021-03-30", | |
"url": "https://lynn-kwong.medium.com/build-a-docker-image-with-cloud-build-in-google-cloud-platform-5f6840af2c05", | |
"tags": ["CI/CD", "Docker", "GCP"], | |
"title": "Build a Docker Image With Cloud Build in Google Cloud Platform", | |
"subtitle": "Learn basic CI/CD with GCP", | |
"reading_time": 7, | |
"image_url": "https://miro.medium.com/0*DQyJWlf_dleqE8cw.png", | |
"display_tag": "CI/CD" | |
}, | |
{ | |
"_id": "efaa78763cc3", | |
"published_at": "2020-11-13", | |
"url": "https://lynn-kwong.medium.com/organize-your-commits-like-a-pro-with-git-rebase-and-git-commit-amend-efaa78763cc3", | |
"tags": ["Git", "GitHub", "GitLab"], | |
"title": "Organize Your Commits Like a Pro With git rebase and git commit --amend", | |
"subtitle": "Learn a professional way to manage your Git commits", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/1*TX4srKV_W5bjK0WgUTi8EQ.png", | |
"display_tag": "Git" | |
}, | |
{ | |
"_id": "16494fc92f87", | |
"published_at": "2020-11-13", | |
"url": "https://lynn-kwong.medium.com/how-to-recover-a-git-commit-that-is-reset-or-discarded-16494fc92f87", | |
"tags": ["Git", "GitHub", "GitLab"], | |
"title": "How to Recover a Git Commit That Is Reset or Discarded", | |
"subtitle": "Calm down! You can get it back!", | |
"reading_time": 4, | |
"image_url": "https://miro.medium.com/0*H2ERIySQQTHN2tXm", | |
"display_tag": "Git" | |
}, | |
{ | |
"_id": "88de292daf80", | |
"published_at": "2020-11-16", | |
"url": "https://lynn-kwong.medium.com/two-caveats-of-the-python-for-loop-88de292daf80", | |
"tags": ["Python"], | |
"title": "Two Caveats of the Python for Loops", | |
"subtitle": "Python loops can be dangerous sometimes", | |
"reading_time": 2, | |
"image_url": "https://miro.medium.com/0*VqWmvhvo_sflRCQm.png", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "2353464814bc", | |
"published_at": "2021-03-16", | |
"url": "https://lynn-kwong.medium.com/python-json-tricks-how-to-deal-with-jsondecodeerror-2353464814bc", | |
"tags": ["Python", "JSON"], | |
"title": "Python JSON Tricks: How to Deal With JSONDecodeError", | |
"subtitle": "A trick you may not know yet", | |
"reading_time": 3, | |
"image_url": "https://miro.medium.com/1*gtTqIG-eq6eTmiM3zgXxKA.png", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "66fb0427d636", | |
"published_at": "2020-11-14", | |
"url": "https://lynn-kwong.medium.com/stop-using-print-in-your-python-code-for-logging-use-the-logging-module-like-a-pro-66fb0427d636", | |
"tags": ["Python", "Logging", "Debugging"], | |
"title": "Stop Using Print in Your Python Code for Logging, Use the Logging Module Like a Pro", | |
"subtitle": "Let's use logging in Python from now on", | |
"reading_time": 6, | |
"image_url": "https://miro.medium.com/0*nC5B82jhygFM2Zqt", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "b9ed00e0fdf0", | |
"published_at": "2021-04-02", | |
"url": "https://lynn-kwong.medium.com/all-you-need-to-know-about-using-elasticsearch-in-python-b9ed00e0fdf0", | |
"tags": ["Elasticsearch", "Kibana", "Python"], | |
"title": "All You Need to Know About Using Elasticsearch in Python", | |
"subtitle": "Learn to build a search engine in Python", | |
"reading_time": 8, | |
"image_url": "https://miro.medium.com/1*SxY9gW4rIugAFaRw_4qENA.jpeg", | |
"display_tag": "Elasticsearch" | |
}, | |
{ | |
"_id": "e1278c35b5ba", | |
"published_at": "2020-11-17", | |
"url": "https://lynn-kwong.medium.com/stop-using-magical-numbers-in-your-python-code-try-to-use-enum-like-a-pro-e1278c35b5ba", | |
"tags": ["Python", "Enum"], | |
"title": "Stop Using Magical Numbers in Your Python Code, Try to Use Enum Like a Pro", | |
"subtitle": "Learn to use Enum to make your code cleaner and more readable", | |
"reading_time": 3, | |
"image_url": "https://miro.medium.com/0*2cW4CeDe7nFkPgfa.png", | |
"display_tag": "Python" | |
}, | |
{ | |
"_id": "5a4b95747d19", | |
"published_at": "2021-03-23", | |
"url": "https://lynn-kwong.medium.com/what-is-elasticsearch-and-why-is-it-so-fast-5a4b95747d19", | |
"tags": ["Elasticsearch", "MongoDB", "Database"], | |
"title": "What Is Elasticsearch and Why Is It So Fast", | |
"subtitle": "Let's start our journey with Elasticsearch", | |
"reading_time": 4, | |
"image_url": "https://miro.medium.com/1*MhBAlZx8gYYcxxXTAasoag.png", | |
"display_tag": "Elasticsearch" | |
}, | |
{ | |
"_id": "fc62348e81d7", | |
"published_at": "2020-12-20", | |
"url": "https://lynn-kwong.medium.com/understand-different-git-states-and-the-corresponding-file-states-fc62348e81d7", | |
"tags": ["Git", "GitHub", "GitLab"], | |
"title": "Understand Different Git States and the Corresponding File States", | |
"subtitle": "Let's learn a bit more about Git basics", | |
"reading_time": 3, | |
"image_url": "https://miro.medium.com/1*0Eqod1YY6zOW8G7rCB4qbg.jpeg", | |
"display_tag": "Git" | |
}, | |
{ | |
"_id": "6967d7c7d42a", | |
"display_tag": "Cloud Run", | |
"image_url": "https://miro.medium.com/max/700/0*bT14___rw9A1pjyq.jpg", | |
"published_at": "2022-04-28", | |
"reading_time": 8, | |
"subtitle": "Apply CI/CD to your web applications", | |
"tags": ["Cloud Run", "CICD", "Flask", "Deploy", "Python"], | |
"title": "How to Deploy a Web Application to Cloud Run Automatically", | |
"url": "https://lynn-kwong.medium.com/6967d7c7d42a" | |
}, | |
{ | |
"_id": "ae9effa8b28f", | |
"display_tag": "Scraping", | |
"image_url": "https://miro.medium.com/max/700/0*KYxgxVALWBFv4w_i.jpg", | |
"published_at": "2022-05-05", | |
"reading_time": 10, | |
"subtitle": "Get accurate data for your application with proxies", | |
"tags": ["Scraping", "Proxies", "Scrapy", "VPN", "Python", "Geolocation"], | |
"title": "How to Use Proxies in Geotargeting Web Scraping With Python", | |
"url": "https://lynn-kwong.medium.com/ae9effa8b28f" | |
}, | |
{ | |
"_id": "bbcad40fed", | |
"display_tag": "GCP", | |
"image_url": "https://miro.medium.com/max/700/0*GszvxspbSanUfOrI.jpg", | |
"published_at": "2022-05-09", | |
"reading_time": 18, | |
"subtitle": "Demystify the mysterious load balancer with simple examples", | |
"tags": ["GCP", "Google", "Load Balancer", "Load Balancing", "Flask"], | |
"title": "How to Set Up a Custom Domain for Different GCP Applications Using a Load Balancer", | |
"url": "https://lynn-kwong.medium.com/bbcad40fed" | |
}, | |
{ | |
"_id": "6bc5d9e9ebd4", | |
"display_tag": "Heroku", | |
"image_url": "https://miro.medium.com/max/700/0*hKhpjHK5fH493akp.jpg", | |
"published_at": "2022-05-15", | |
"reading_time": 10, | |
"subtitle": "Learn an economic way of hosting your web applications", | |
"tags": ["Heroku", "Flask", "Python", "Load Balancing", "Domain", "Deploy"], | |
"title": "How to Deploy Your Web Application to Heroku and Add Custom Domains", | |
"url": "https://lynn-kwong.medium.com/6bc5d9e9ebd4" | |
}, | |
{ | |
"_id": "5cae56904c42", | |
"display_tag": "Redis", | |
"image_url": "https://miro.medium.com/max/1400/0*Xo2H1FUyyCbiuYZu.jpg", | |
"published_at": "2022-05-19", | |
"reading_time": 4, | |
"subtitle": "Learn complex data structures in Redis from simple examples", | |
"tags": ["Redis", "Python", "Caching", "Cache", "Memory", "Database"], | |
"title": "How to Work with Redis Sets, Lists, and Hashes in Python", | |
"url": "https://lynn-kwong.medium.com/5cae56904c42" | |
}, | |
{ | |
"_id": "94af18d50671", | |
"display_tag": "Database", | |
"image_url": "https://miro.medium.com/max/700/0*3nV8zATi7ky7YAZP.jpg", | |
"published_at": "2022-05-26", | |
"reading_time": 7, | |
"subtitle": "Learn a handy tool to manage your databases conveniently", | |
"tags": ["Database", "DBeaver", "MySQL", "GUI", "IDE", "Database"], | |
"title": "Some Tips for Using DBeaver — A Universal Database Tool", | |
"url": "https://lynn-kwong.medium.com/94af18d50671" | |
}, | |
{ | |
"_id": "c00aecbfbd45", | |
"display_tag": "Selenium", | |
"image_url": "https://miro.medium.com/max/700/0*VYaO4N-NNLhUpkPw.jpg", | |
"published_at": "2022-6-06", | |
"reading_time": 4, | |
"subtitle": "Learn basic website test automation in minutes", | |
"tags": [ | |
"Selenium", | |
"Python", | |
"Tests", | |
"Scraping", | |
"Automation", | |
"JavaScript" | |
], | |
"title": "How to Use Selenium to Simulate Manual Actions for Website Tests in Python", | |
"url": "https://lynn-kwong.medium.com/c00aecbfbd45" | |
}, | |
{ | |
"_id": "1e60a908e8f2", | |
"display_tag": "GCP", | |
"image_url": "https://miro.medium.com/max/700/0*v8LfuoGqw2yramdZ.png", | |
"published_at": "2022-6-08", | |
"reading_time": 5, | |
"subtitle": "Connect to Cloud SQL instances with private IPs in minutes", | |
"tags": ["GCP", "Cloud Run", "SQL", "Cloud SQL", "VPC", "Network"], | |
"title": "How to Connect to GCP Cloud SQL Instances in Cloud Run Servies", | |
"url": "https://lynn-kwong.medium.com/1e60a908e8f2" | |
}, | |
{ | |
"_id": "401fd3fff829", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/max/700/0*jCHRxJbggsSaIkJ4.jpg", | |
"published_at": "2022-6-11", | |
"reading_time": 6, | |
"subtitle": "Start Elasticsearch and Kibana with Docker and Docker Compose in minutes", | |
"tags": ["Elasticsearch", "Kibana", "Docker", "ELK"], | |
"title": "How to Run Elasticsearch 8 on Docker for Local Development", | |
"url": "https://lynn-kwong.medium.com/401fd3fff829" | |
}, | |
{ | |
"_id": "4423c5938b17", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/max/1400/0*qCpGYiSJqTFadtmk.jpg", | |
"published_at": "2022-6-12", | |
"reading_time": 4, | |
"subtitle": "Some tips to help you deal with breaking changes of Elasticsearch", | |
"tags": ["Elasticsearch", "Python", "Upgrade", "Kibana", "Docker", "ELK"], | |
"title": "Important Syntax Updates of Elasticsearch 8 in Python", | |
"url": "https://lynn-kwong.medium.com/4423c5938b17" | |
}, | |
{ | |
"_id": "b5bb01ed3824", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/max/700/0*ck-WcY_AxmUBEA1V.jpg", | |
"published_at": "2022-6-13", | |
"reading_time": 4, | |
"subtitle": "Learn different ways to index documents in bulk efficiently", | |
"tags": ["Elasticsearch", "Python", "Upgrade", "Bulk", "helper", "ELK"], | |
"title": "How to Index Elasticsearch Documents with the Bulk API in Python", | |
"url": "https://lynn-kwong.medium.com/b5bb01ed3824" | |
}, | |
{ | |
"_id": "ca7922c8aef6", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/max/700/0*-msYj2ULYl13mSkZ.jpg", | |
"published_at": "2022-6-17", | |
"reading_time": 3, | |
"subtitle": "Get started with query_string queries", | |
"tags": ["Elasticsearch", "bool", "string", "query_string", "logical"], | |
"title": "Write Elasticsearch Queries with Logical Conditions in a Simpler Way", | |
"url": "https://lynn-kwong.medium.com/ca7922c8aef6" | |
}, | |
{ | |
"_id": "deffe7b6cd98", | |
"display_tag": "Python", | |
"image_url": "https://miro.medium.com/max/700/0*oSC34yUxnL4XMtpz.jpg", | |
"published_at": "2022-6-20", | |
"reading_time": 4, | |
"subtitle": "Learn different ways to read and write CSV files in Python", | |
"tags": ["Python", "CSV", "files", "pandas", "dictionary", "list"], | |
"title": "How to work with CSV files in Python", | |
"url": "https://lynn-kwong.medium.com/deffe7b6cd98" | |
}, | |
{ | |
"_id": "4ed0a11421ef", | |
"display_tag": "GCP", | |
"image_url": "https://miro.medium.com/max/1400/0*HekmzhVB73w2rrth.jpg", | |
"published_at": "2022-6-28", | |
"reading_time": 5, | |
"subtitle": "Learn to deal with GCP local authentications in minutes", | |
"tags": ["GCP", "Environment", "Authentication", "SDK", "gcloud", "Python"], | |
"title": "How to Set Up Your Local Environment to Work With GCP", | |
"url": "https://lynn-kwong.medium.com/4ed0a11421ef" | |
}, | |
{ | |
"_id": "ebfcad03b8cf", | |
"display_tag": "GCP", | |
"image_url": "https://miro.medium.com/max/700/0*JPxvSdG5GwTm0seq.jpg", | |
"published_at": "2022-6-29", | |
"reading_time": 7, | |
"subtitle": "Learn a better way to manage your sensitive data", | |
"tags": ["GCP", "Python", "Secret", "Credential", "Secret", "Cloud Run"], | |
"title": "How to Work With Secrets in Google Cloud Platform (GCP)", | |
"url": "https://lynn-kwong.medium.com/ebfcad03b8cf" | |
}, | |
{ | |
"_id": "f21878c9897", | |
"display_tag": "Generator", | |
"image_url": "https://miro.medium.com/max/700/0*j8LBmrobZUbqBHKa.jpg", | |
"published_at": "2022-7-1", | |
"reading_time": 5, | |
"subtitle": "Learn an efficient way to work with large datasets", | |
"tags": [ | |
"Generator", | |
"Iterable", | |
"Iterator", | |
"Iteration", | |
"Typing", | |
"Python", | |
"asyncio", | |
"async" | |
], | |
"title": "Demystify Iterators and Generators in Python", | |
"url": "https://lynn-kwong.medium.com/f21878c9897" | |
}, | |
{ | |
"_id": "66cff907ce8e", | |
"display_tag": "Context Manager", | |
"image_url": "https://miro.medium.com/max/700/0*RRAlqmRvPgAczttw.jpg", | |
"published_at": "2022-7-3", | |
"reading_time": 5, | |
"subtitle": "Use context managers to make your code more robust and more Pythonic", | |
"tags": [ | |
"Context Manager", | |
"Python", | |
"Unit test", | |
"Mock", | |
"Patch", | |
"Generator" | |
], | |
"title": "Understand Context Managers in Python and Learn to Use Them in Unit Tests", | |
"url": "https://lynn-kwong.medium.com/66cff907ce8e" | |
}, | |
{ | |
"_id": "8cd68440ddd1", | |
"display_tag": "Angular", | |
"image_url": "https://miro.medium.com/max/700/0*F_lacS8nVQe52TBd.jpg", | |
"published_at": "2022-7-27", | |
"reading_time": 6, | |
"subtitle": "You don't have to be a CSS master to build nice dialog boxes.", | |
"tags": [ | |
"Angular", | |
"JavaScript", | |
"TypeScript", | |
"Material", | |
"Web Development", | |
"Dialog" | |
], | |
"title": "How to Create a Simple Dialog Box with Angular Material", | |
"url": "https://lynn-kwong.medium.com/8cd68440ddd1" | |
}, | |
{ | |
"_id": "bdfaa3074ee4", | |
"display_tag": "JSON", | |
"image_url": "https://miro.medium.com/max/700/0*hPu0aUIz6hBxH8TO.jpg", | |
"published_at": "2022-7-29", | |
"reading_time": 4, | |
"subtitle": "Learn basic JSON operations with simple examples.", | |
"tags": ["JSON", "Python", "API"], | |
"title": "How to Perform JSON Conversion, Serialization, and Comparison in Python", | |
"url": "https://lynn-kwong.medium.com/bdfaa3074ee4" | |
}, | |
{ | |
"_id": "ae9d8d1db344", | |
"display_tag": "JSON Schema", | |
"image_url": "https://miro.medium.com/max/700/0*r2xLc3zVN_fBSfmO.png", | |
"published_at": "2022-7-31", | |
"reading_time": 8, | |
"subtitle": "Learn a standard way to ensure your data quality.", | |
"tags": ["JSON", "Python", "API", "Validation", "Schema"], | |
"title": "How to Use JSON Schema to Validate JSON Documents in Python", | |
"url": "https://lynn-kwong.medium.com/ae9d8d1db344" | |
}, | |
{ | |
"_id": "743561a4ab53", | |
"display_tag": "Pydantic", | |
"image_url": "https://miro.medium.com/max/700/0*X_eEQak8DFvIaWx1.jpg", | |
"published_at": "2022-8-5", | |
"reading_time": 6, | |
"subtitle": "Learn to validate your data in a flexible way with Pydantic.", | |
"tags": ["Pydantic", "Python", "API", "Validation"], | |
"title": "How to Validate Your Data with Custom Validators of Pydantic Models in Python", | |
"url": "https://lynn-kwong.medium.com/743561a4ab53" | |
}, | |
{ | |
"_id": "1170bbdff32b", | |
"display_tag": "ESLint", | |
"image_url": "https://miro.medium.com/max/700/0*1DcV62SzTQZXRhJP", | |
"published_at": "2022-8-12", | |
"reading_time": 8, | |
"subtitle": "Improve your JS/TS code quality using ESLint.", | |
"tags": ["ESLint", "JavaScript", "TypeScript"], | |
"title": "How Use ESLint to Write Elegant Code in JavaScript and TypeScript", | |
"url": "https://lynn-kwong.medium.com/1170bbdff32b" | |
}, | |
{ | |
"_id": "b04de61834bd", | |
"display_tag": "Pre-commit", | |
"image_url": "https://miro.medium.com/max/700/0*8JouceB741q1Ji45", | |
"published_at": "2022-8-4", | |
"reading_time": 6, | |
"subtitle": "Improve your code quality using ESLint, Prettier, lint-staged, and Husky.", | |
"tags": ["JavaScript", "TypeScript", "Pre-commit"], | |
"title": "Create a Pre-commit Git Hook to Check and Fix Your JavaScript/TypeScript Code Automatically", | |
"url": "https://lynn-kwong.medium.com/b04de61834bd" | |
}, | |
{ | |
"_id": "a6984de1f2c5", | |
"display_tag": "TSDoc", | |
"image_url": "https://miro.medium.com/max/700/0*d4G8qpuGHIWVf-PK.jpg", | |
"published_at": "2022-8-18", | |
"reading_time": 8, | |
"subtitle": "Learn a standard way to add documentation to your JavaScript/TypeScript code.", | |
"tags": ["JSDoc", "TSDoc", "Documentation", "JavaScript", "TypeScript"], | |
"title": "Compare JavaScript JSDoc with TypeScript TSDoc for Documentation", | |
"url": "https://lynn-kwong.medium.com/a6984de1f2c5" | |
}, | |
{ | |
"_id": "30d7ce56ffcb", | |
"display_tag": "P4Merge", | |
"image_url": "https://miro.medium.com/max/700/0*HdEC0F4atRRCHND9.jpg", | |
"published_at": "2022-9-2", | |
"reading_time": 3, | |
"subtitle": "Learn to check code differences with a handy graphical tool.", | |
"tags": ["P4Merge", "Git", "GUI", "Difference"], | |
"title": "Use P4Merge to Check Code Changes Conveniently With a Nice GUI for Git", | |
"url": "https://lynn-kwong.medium.com/30d7ce56ffcb" | |
}, | |
{ | |
"_id": "3b7fbc3d7ee9", | |
"display_tag": "Vim", | |
"image_url": "https://miro.medium.com/max/700/0*HYWmFLuiRdLUbIJC.jpg", | |
"published_at": "2022-9-2", | |
"reading_time": 7, | |
"subtitle": "Vim is not dying and can be very useful sometimes.", | |
"tags": ["Vim", "Linux", "Command", "Editor"], | |
"title": "Learn Handy Vim Commands and Operations That Can Increase Your Efficiency Dramatically", | |
"url": "https://lynn-kwong.medium.com/3b7fbc3d7ee9" | |
}, | |
{ | |
"_id": "6c27b3be1004", | |
"display_tag": "Firebase", | |
"image_url": "https://miro.medium.com/max/700/0*eR_0NqFD9hzIS2lJ.jpg", | |
"published_at": "2022-9-5", | |
"reading_time": 8, | |
"subtitle": "Learn the essentials of Firebase and related services with a hands-on tutorial.", | |
"tags": ["Firebase", "Firestore", "App"], | |
"title": "Learn the Basics and Get Started with Firebase — an App Development Platform Backed by Google", | |
"url": "https://lynn-kwong.medium.com/6c27b3be1004" | |
}, | |
{ | |
"_id": "23044656b97d", | |
"display_tag": "SQLAlchemy", | |
"image_url": "https://miro.medium.com/max/700/0*lYeRB6jx_SPvKwSh.jpg", | |
"published_at": "2022-9-11", | |
"reading_time": 8, | |
"subtitle": "Learn different ways to insert large numbers of records into the database efficiently in Python.", | |
"tags": ["SQLAlchemy", "Python", "Database", "MySQL", "Bulk"], | |
"title": "How to Perform Bulk Inserts With SQLAlchemy Efficiently in Python", | |
"url": "https://lynn-kwong.medium.com/23044656b97d" | |
}, | |
{ | |
"_id": "87308156495c", | |
"display_tag": "Scrapy", | |
"image_url": "https://miro.medium.com/max/720/0*PtkuEP1JB-7sKFbE.jpg", | |
"published_at": "2022-10-3", | |
"reading_time": 5, | |
"subtitle": "Learn to make better use of your scraping logs with Google Logging", | |
"tags": ["Python", "GCP", "Logging", "Logger", "Scrapy"], | |
"title": "How to Add Google Logger to Scrapy in Python", | |
"url": "https://lynn-kwong.medium.com/87308156495c" | |
}, | |
{ | |
"_id": "ab397eb0e67a", | |
"display_tag": "ESLint", | |
"image_url": "https://miro.medium.com/max/720/0*7cV9miYbUXFK72lr.jpg", | |
"published_at": "2022-10-14", | |
"reading_time": 7, | |
"subtitle": "Learn to sort the imported modules in JavaScript/TypeScript code in an elegant way", | |
"tags": [ | |
"TypeScript", | |
"JavaScript", | |
"ESLint", | |
"Sorting", | |
"Import", | |
"Git Hooks", | |
"CICD" | |
], | |
"title": "Sort JavaScript/TypeScript Modules Uniformly and Automatically with Git Hooks and CI Pipelines", | |
"url": "https://lynn-kwong.medium.com/ab397eb0e67a" | |
}, | |
{ | |
"_id": "d9fed161d572", | |
"display_tag": "Angular", | |
"image_url": "https://miro.medium.com/max/720/0*-IOKNMt0_ovjMDa1.jpg", | |
"published_at": "2022-10-16", | |
"reading_time": 5, | |
"subtitle": "Add internationalization to your Angular project with ngx-translate", | |
"tags": ["Angular", "Internationalization", "Translation", "ngx-translate"], | |
"title": "How to Add Internationalization (Translations) in Angular — Basics", | |
"url": "https://lynn-kwong.medium.com/d9fed161d572" | |
}, | |
{ | |
"_id": "bd394262727", | |
"display_tag": "Angular", | |
"image_url": "https://miro.medium.com/max/720/0*-aLaPlaRZn_ov1Kj.jpg", | |
"published_at": "2022-10-17", | |
"reading_time": 5, | |
"subtitle": "Learn more advanced settings for the translation service from a hands-on tutorial", | |
"tags": [ | |
"Angular", | |
"Internationalization", | |
"Translation", | |
"ngx-translate", | |
"Backend", | |
"Lazy-loading" | |
], | |
"title": "How to Add Internationalization (Translations) in Angular — Backend Integration and Lazy-loaded Modules", | |
"url": "https://lynn-kwong.medium.com/bd394262727" | |
}, | |
{ | |
"_id": "294e11811243", | |
"display_tag": "Images", | |
"image_url": "https://miro.medium.com/max/720/0*0cNtD6mh73IH143y.jpg", | |
"published_at": "2022-11-06", | |
"reading_time": 5, | |
"subtitle": "Learn simple image processing with Python", | |
"tags": [ | |
"Images", | |
"Pictures", | |
"Python", | |
"Download", | |
"Cloud Storage", | |
"GCP" | |
], | |
"title": "How to Download Images From URLs, Convert the Type, and Save Them in the Cloud With Python", | |
"url": "https://lynn-kwong.medium.com/294e11811243" | |
}, | |
{ | |
"_id": "372f859851f7", | |
"display_tag": "Firestore", | |
"image_url": "https://miro.medium.com/max/720/0*2bg2xUX5egGjs6W3.webp", | |
"published_at": "2022-11-16", | |
"reading_time": 11, | |
"subtitle": "Learn to manage your Firebase app data in Python", | |
"tags": ["Firebase", "Firestore", "Python", "GCP"], | |
"title": "Essentials for Working With Firestore in Python", | |
"url": "https://lynn-kwong.medium.com/372f859851f7" | |
}, | |
{ | |
"_id": "9dc802a10618", | |
"display_tag": "Linux", | |
"image_url": "https://miro.medium.com/max/720/0*jamI-nfmp62PdWZh", | |
"published_at": "2022-12-03", | |
"reading_time": 6, | |
"subtitle": "Learn some handy and advanced Linux commands from practical examples", | |
"tags": ["Linux", "Ubuntu", "Commands"], | |
"title": "Some Linux Commands That Can Boost Your Work Efficiency Dramatically", | |
"url": "https://lynn-kwong.medium.com/9dc802a10618" | |
}, | |
{ | |
"_id": "abb22a3e5097", | |
"display_tag": "MySQL", | |
"image_url": "https://miro.medium.com/max/720/0*ozssbuQUlrZs6erz.webp", | |
"published_at": "2022-12-06", | |
"reading_time": 7, | |
"subtitle": "Learn advanced MySQL queries to calculate medians on different occasions", | |
"tags": ["MySQL", "Median", "Grouping", "substring_index", "group_concat"], | |
"title": "How to Calculate Medians with Grouping in MySQL", | |
"url": "https://lynn-kwong.medium.com/abb22a3e5097" | |
}, | |
{ | |
"_id": "d581fa9a58e", | |
"display_tag": "Git", | |
"image_url": "https://miro.medium.com/max/720/0*d2btHOdxciMmNMAt.webp", | |
"published_at": "2022-12-09", | |
"reading_time": 8, | |
"subtitle": "Learn something you may not already know about Git", | |
"tags": ["Git", "GitHub", "Git Hooks", "git amend", "git rebase"], | |
"title": "Basics and Tricks of Git for New Software Developers", | |
"url": "https://lynn-kwong.medium.com/d581fa9a58e" | |
}, | |
{ | |
"_id": "e0bc4d25808e", | |
"display_tag": "asyncio", | |
"image_url": "https://miro.medium.com/max/720/0*mZ-v7t912Q8Rd7_Q", | |
"published_at": "2022-12-25", | |
"reading_time": 9, | |
"subtitle": "Get your hands dirty with a new way of writing asynchronous code", | |
"tags": ["asyncio", "async", "await", "Threading", "asynchronous"], | |
"title": "Understand async/await with asyncio for Asynchronous Programming in Python", | |
"url": "https://lynn-kwong.medium.com/e0bc4d25808e" | |
}, | |
{ | |
"_id": "7bdf856a94cb", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/max/720/0*m4pOVLTs_P3GuW8N.webp", | |
"published_at": "2023-01-07", | |
"reading_time": 9, | |
"subtitle": "Learn the simple but powerful synonyms feature to improve your search quality", | |
"tags": ["Elasticsearch", "synonyms"], | |
"title": "How to Use the Synonyms Feature Correctly in Elasticsearch", | |
"url": "https://lynn-kwong.medium.com/7bdf856a94cb" | |
}, | |
{ | |
"_id": "6bf9fa90c6b8", | |
"display_tag": "FastAPI", | |
"image_url": "https://miro.medium.com/max/720/0*KVod4aFyLNHqtOHX.webp", | |
"published_at": "2023-01-23", | |
"reading_time": 10, | |
"subtitle": "Learn a modern web framework for building APIs with Python", | |
"tags": ["FastAPI", "API", "Python"], | |
"title": "Build APIs with FastAPI in Python — All Essentials You Need to Get Started", | |
"url": "https://lynn-kwong.medium.com/6bf9fa90c6b8" | |
}, | |
{ | |
"_id": "988157dce554", | |
"display_tag": "WebSocket", | |
"image_url": "https://miro.medium.com/max/720/0*3qwCy9XghedX6uys.webp", | |
"published_at": "2023-01-30", | |
"reading_time": 8, | |
"subtitle": "Learn to build a two-way interactive communication application with the WebSocket protocol", | |
"tags": ["WebSocket", "FastAPI", "Angular", "Python"], | |
"title": "Build a WebSocket Application with FastAPI and Angular", | |
"url": "https://lynn-kwong.medium.com/988157dce554" | |
}, | |
{ | |
"_id": "b5478e237b27", | |
"display_tag": "Email", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*wNcsoVPemo5wSr-G.png", | |
"published_at": "2023-02-10", | |
"reading_time": 11, | |
"subtitle": "Learn different ways to send emails in Python and trigger GCP Cloud Functions", | |
"tags": ["Email", "Python", "GCP", "Cloud Function", "Microservice"], | |
"title": "How to Send Emails in Python with GCP Cloud Function as a Microservice", | |
"url": "https://lynn-kwong.medium.com/b5478e237b27" | |
}, | |
{ | |
"_id": "71854433a2f7", | |
"display_tag": "Exception", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*B7z2ncM-G4z6saNF.jpg", | |
"published_at": "2023-02-15", | |
"reading_time": 6, | |
"subtitle": "Learn to write robust Python code with proper exception handling", | |
"tags": ["Python", "Error", "Exception"], | |
"title": "How to Handle Errors and Exceptions Properly in Python", | |
"url": "https://lynn-kwong.medium.com/71854433a2f7" | |
}, | |
{ | |
"_id": "99bdf810c498", | |
"display_tag": "Cloud SQL", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*K4eHD4TrEWfeFW9h.jpg", | |
"published_at": "2023-02-20", | |
"reading_time": 9, | |
"subtitle": "Learn a standard way to connect dockerized applications to GCP Cloud SQL instances", | |
"tags": ["Cloud SQL", "GCP", "Docker", "Proxy"], | |
"title": "How to Connect to GCP Cloud SQL with Cloud SQL Auth Proxy in Docker", | |
"url": "https://lynn-kwong.medium.com/99bdf810c498" | |
}, | |
{ | |
"_id": "e936728e00d6", | |
"display_tag": "argparse", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*P0jkhTiiOa5eZ6a7.jpg", | |
"published_at": "2023-02-21", | |
"reading_time": 7, | |
"subtitle": "Learn to add standard command-line interfaces for your Python programs using argparse", | |
"tags": ["argparse", "Python", "Command line", "options", "arguments"], | |
"title": "How to Add Command-line Arguments for a Python Program with argparse", | |
"url": "https://lynn-kwong.medium.com/e936728e00d6" | |
}, | |
{ | |
"_id": "4d199cfb15ae", | |
"display_tag": "MySQL", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*xgeI2AagyozkgIeN.jpg", | |
"published_at": "2023-02-28", | |
"reading_time": 8, | |
"subtitle": "Important MySQL DDL commands we should know for managing our tables", | |
"tags": ["MySQL", "SQL", "Convention", "Standards", "DDL"], | |
"title": "Learn Common Database Managing Commands as a Data Engineer", | |
"url": "https://lynn-kwong.medium.com/4d199cfb15ae" | |
}, | |
{ | |
"_id": "28169af8f7ba", | |
"display_tag": "MySQL", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*Ha7HpTDywWdh-6At.jpg", | |
"published_at": "2023-03-10", | |
"reading_time": 8, | |
"subtitle": "Learn to use triggers efficiently in MySQL to keep track of important tables", | |
"tags": ["MySQL", "Trigger", "audit", "log"], | |
"title": "Use Triggers and Audit/Log Tables to Track Table Changes in MySQL", | |
"url": "https://lynn-kwong.medium.com/28169af8f7ba" | |
}, | |
{ | |
"_id": "741a8cddde8f", | |
"display_tag": "Elasticsearch", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*Wjx0HcX8A8x7vON5.jpg", | |
"published_at": "2023-03-14", | |
"reading_time": 13, | |
"subtitle": "Learn to build a functional search engine with both backend and frontend quickly", | |
"tags": ["Elasticsearch", "FastAPI", "Angular", "Python", "Autocomplete"], | |
"title": "Build an Autocomplete Search Project Using Elasticsearch, FastAPI, and Angular (Part I — Backend)", | |
"url": "https://lynn-kwong.medium.com/741a8cddde8f" | |
}, | |
{ | |
"_id": "7d389ab340d", | |
"display_tag": "Debugging", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*83cuAEHqrBAX6JYL.png", | |
"published_at": "2023-03-18", | |
"reading_time": 9, | |
"subtitle": "Learn different ways to debug your Dockerized API code", | |
"tags": ["API", "FastAPI", "Debugging", "Python", "PDB"], | |
"title": "How to Debug Your Microservice Python Code Running Remotely in Docker", | |
"url": "https://lynn-kwong.medium.com/7d389ab340d" | |
}, | |
{ | |
"_id": "a502e731fd8c", | |
"display_tag": "Pydantic", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/format:webp/0*xSihe3CMjttNYDAZ.png", | |
"published_at": "2023-03-22", | |
"reading_time": 6, | |
"subtitle": "Learn handy tools in Python to manage your data in various ways", | |
"tags": ["Named Tuple", "defaultdict", "Data Class", "Python", "Pydantic"], | |
"title": "Compare Dictionary, Named Tuple, Data Class, and Pydantic Model in Python", | |
"url": "https://lynn-kwong.medium.com/a502e731fd8c" | |
}, | |
{ | |
"_id": "4a2fdc48ef74", | |
"display_tag": "FastAPI", | |
"image_url": "https://miro.medium.com/v2/resize:fit:720/0*GCjG7jIaWihmCNW3", | |
"published_at": "2023-03-27", | |
"reading_time": 5, | |
"subtitle": "Learn to use Annotated typing correctly with APIRouter in FastAPI", | |
"tags": ["FastAPI", "Typing", "Annotated", "bug", "Debugging", "APIRouter"], | |
"title": "How to Use the Cool New Annotated Typing Feature of FastAPI", | |
"url": "https://lynn-kwong.medium.com/4a2fdc48ef74" | |
} | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment