1<!DOCTYPE html> 2<html lang="en-us"> 3<head> 4 5 6 <meta charset="utf-8"> 7 <meta name="author" content="Muhammad Yasoob Ullah Khalid"> 8 <meta name="keywords" content="Yasoob, Yasoob Khalid, Python Tips, Intermediate Python, Pakistan, Programmer, Blogger, Muhammad Yasoob Ullah Khalid, Software Engineer"> 9 10 <meta property="og:image" content="https://yasoob.me/images/profile.jpg"> 11 12 <meta property="og:url" content="https://yasoob.me/"> 13 <meta property="og:title" content="Yasoob Khalid"> 14 <meta property="og:type" content="profile"> 15 16 <meta name="description" content="Yasoob Khalid is the author of Intermediate Python and the Practical Python Projects books. Millions of people have read his work. He helps programmers level up by writing blog posts, giving talks, and leading workshops."> 17 <meta property="og:description" content="Yasoob Khalid is the author of Intermediate Python and the Practical Python Projects books. Millions of people have read his work. He helps programmers level up by writing blog posts, giving talks, and leading workshops."> 18 <meta name="twitter:description" content="Yasoob Khalid is the author of Intermediate Python and the Practical Python Projects books. Millions of people have read his work. He helps programmers level up by writing blog posts, giving talks, and leading workshops."> 19 20 <meta name="twitter:site" content="@yasoobkhalid"> 21 <meta name="twitter:title" content="Yasoob Khalid"> 22 <meta name="twitter:card" content="summary"> 23 <meta property="profile:first_name" content="Muhammad Yasoob Ullah"> 24 <meta property="profile:last_name" content="Khalid"> 25 <meta property="profile:gender" content="male"> 26 <meta name="google-site-verification" content="h-RrQYj6aNBgcXU7M49xoUoksuI0WuJnbcJbFPJMqc4"> 27 28 29 <link rel="icon" type="image/png" href="/images/logo.png"> 30 31 32 <meta charset="utf-8"> 33 <meta name="generator" content="Hugo 0.88.1" /> 34 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 35 <link href="//fonts.googleapis.com/css?family=Roboto:400,700" rel="stylesheet" type="text/css"> 36 <link id="light" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/github.min.css"> 37 <link id="dark" rel="alternate stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/dracula.min.css"> 38 <link rel="stylesheet" href="/css/normalize.css"> 39 <link rel="stylesheet" href="/css/skeleton.css"> 40 <link rel="stylesheet" href="/css/custom.css"> 41 <link rel="alternate" href="/index.xml" type="application/rss+xml" title="Yasoob Khalid"> 42 <link rel="webmention" href="https://webmention.io/yasoob.me/webmention" /> 43 <link rel="pingback" href="https://webmention.io/yasoob.me/xmlrpc" /> 44 <title>Yasoob Khalid</title> 45</head> 46<body> 47<div class="announcement"> 48 <p>Practical Python Projects book is <a href="https://practicalpython.yasoob.me/">now available!</a> Learn how to implement 12 end-to-end projects to enhance your Python knowledge.</p> 49</div> 50<div class="container"> 51 <header onclick="nav_display()" id="nav" class="hide-nav" role="banner"> 52 <div class="header-logo"> 53 <a href="/"><img alt="website logo" src="/images/profile.jpg" width="60" height="60" alt="Yasoob Khalid"></a> 54 </div> 55 <h1 class="site-title"><a href="/"><img alt="website logo" src="/images/logo.png" /></a>Yasoob Khalid<span class="toggle"></span></h1> 56 <p class="tag-line">Author, Blogger & artist who can't make up his mind.</p> 57 <div class="nav-links"> 58 <nav> 59 <ul> 60 <li><a href="/">Home</a></li> 61 <li><a href="/arts">Art Projects</a></li> 62 <li><a href="https://yasoob.github.io/learn-git" target="_blank">Learn Git</a></li> 63 <li><a href="/about">About</a></li> 64 <li> 65 <a id="darkModeToggle">ð</a> 66 <a href="/index.xml"><img alt="rss" class="rss" src="/images/rss.ico"></a> 67 </li> 68 </ul> 69 </nav> 70
70<script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?serve=CE7IP53Y&placement=yasoobme" id="_carbonads_js"></script>
70 71 <h3 class="book-header">My Books</h3> 72 <div class="book-promo"> 73 <a href="https://practicalpython.yasoob.me/"><img src="/images/practical-python.png"/></a> 74 <h4><a href="https://practicalpython.yasoob.me/">Practical Python Projects</a></h4> 75 <p>In 325+ pages I will help you implement 12 end-to-end projects to enhance your Python knowledge.</p> 76 </div> 77 <div class="book-promo"> 78 <a href="https://book.pythontips.com/"><img src="/images/intermediate-python.png"/></a> 79 <h4><a href="https://book.pythontips.com/">Intermediate Python</a></h4> 80 <p>In this free, open-source, and widely-read book, you will learn some intermediate Python concepts.</p> 81 </div> 82 </div> 83 </header> 84 85 86 <main class="homepage" role="main"> 87 <span class="git-source"> 88 <a target="_blank" href="https://github.com/yasoob/personal_blog/tree/master/content/">Source</a> 89 </span> 90 <div> 91 <h1><span class="emoji">ð</span> Hi everyone!</h1> 92 <p>I am <b>Yasoob</b>! You might know me from <a href="https://practicalpython.yasoob.me">Practical Python Projects</a> or the <a href="https://book.pythontips.com">Intermediate Python</a> book. 93 Welcome to my personal blog which is going to be the new home for all of my old and new articles. You can turn on "dark mode" by clicking on the moon (right before the RSS icon) in the side-bar. I hope you enjoy your stay ð 94 </p> 95 </div> 96 </main> 97 <div class="homepage_signup"> 98 <div id="mc_embed_signup"> 99 <form action="https://wordpress.us3.list-manage.com/subscribe/post?u=20b1036063aec6dbf068cc8c0&id=b8eab6bd54" 100 method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" 101 novalidate> 102 <div id="mc_embed_signup_scroll"> 103 <h2>Newsletter</h2><span id="close-btn">Ã</span> 104 <p>If you liked what you read then I am sure you will enjoy a newsletter of the 105 content I create. I send it out every other month. It contains new stuff that I make, links 106 I find interesting on the web, and occasional discount coupons for my book. 107 Join the 5000+ other people who receive my newsletter:</p> 108 <div class="mc-field-group"> 109 <input placeholder="Your Email" type="email" value="" name="EMAIL" class="required email" 110 id="mce-EMAIL"> 111 </div> 112 <div id="mce-responses" class="clear"> 113 <div class="response" id="mce-error-response" style="display:none"></div> 114 <div class="response" id="mce-success-response" style="display:none"></div> 115 </div> 116 117 <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" 118 name="b_20b1036063aec6dbf068cc8c0_f6ee678b65" tabindex="-1" value=""></div> 119 <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" 120 class="button"></div> 121 <p class="subtext">I send out the newsletter once every other month. No spam, I promise + you can unsubscribe at anytime</p> 122 </div> 123 </form> 124</div> 125 </div> 126 <div class="homepage-articles" role="main"> 127 <h1><span class="emoji">âï¸</span> Latest Articles</h1> 128 129 <article itemscope itemtype="http://schema.org/Blog"> 130 <span class="entry-meta"><time itemprop="datePublished" datetime="2025-12-27">Dec 27, 2025</time></span> 131 <h2 class="entry-title" itemprop="headline"><a href="/posts/recording-raw-etw-events/">Debugging ETW Event Drops in High-Throughput Applications</a></h2> 132 133 <p class="teaser">We were losing millions of diagnostic events in production, but I couldn't touch the active monitoring agent. How do you fix a system you can't pause? In this post, I share a technique for running parallel ETW sessions to "spy" on your application's telemetry and diagnose high-frequency event drops without breaking the existing pipeline.</p> 134 135 <p class="wordcount">(1189 words)</p> 136 </article> 137 138 <article itemscope itemtype="http://schema.org/Blog"> 139 <span class="entry-meta"><time itemprop="datePublished" datetime="2025-06-22">Jun 22, 2025</time></span> 140 <h2 class="entry-title" itemprop="headline"><a href="/posts/converting-sourcemap-to-original-sourcecode/">Converting Sourcemaps to Original JavaScript/TypeScript Sourcecode</a></h2> 141 142 <p class="teaser">In this tutorial, you will learn how to convert the sourcemap files to original JavaScript/TypeScript sourcecode using open source tools. You will use mitmproxy and Sourcemapper to achieve this goal.</p> 143 144 <p class="wordcount">(751 words)</p> 145 </article> 146 147 <article itemscope itemtype="http://schema.org/Blog"> 148 <span class="entry-meta"><time itemprop="datePublished" datetime="2024-08-05">Aug 05, 2024</time></span> 149 <h2 class="entry-title" itemprop="headline"><a href="/posts/breaking-kakasoft-usb-copy-protection/">Breaking Kakasoft USB Copy Protection</a></h2> 150 151 <p class="teaser">I stumbled upon a USB drive locked down with Kakasoft's USB Copy Protection software. Challenge accepted! I decided to crack this DRM protection wide open. In this article, I'll take you through every step of the process, sharing my strategies and thought process so you can break free from such flimsy defenses too.</p> 152 153 <p class="wordcount">(611 words)</p> 154 </article> 155 156 <article itemscope itemtype="http://schema.org/Blog"> 157 <span class="entry-meta"><time itemprop="datePublished" datetime="2024-02-23">Feb 23, 2024</time></span> 158 <h2 class="entry-title" itemprop="headline"><a href="/posts/running-go-web-assembly-from-elixir/">Running Go code from Elixir Using Web Assembly</a></h2> 159 160 <p class="teaser">In this article, I will show you how to compile Go code to target WAS
160I and run it from an Elixir host. You will also learn how to pass data to Go and get a response back using pipes.</p> 161 162 <p class="wordcount">(1025 words)</p> 163 </article> 164 165 <article itemscope itemtype="http://schema.org/Blog"> 166 <span class="entry-meta"><time itemprop="datePublished" datetime="2023-08-26">Aug 26, 2023</time></span> 167 <h2 class="entry-title" itemprop="headline"><a href="/posts/how-to-use-vision-framework-via-pyobjc/">How to Use Apple Vision Framework via PyObjC for Text Recognition</a></h2> 168 169 <p class="teaser">Let's learn how to make use of Apple's Vision Framework from Python (via PyObjC) to detect and recognize text in images. Along the way, you will learn quite a bit about how to use PyObjC to interface with different Objective C classes, functions and methods.</p> 170 171 <p class="wordcount">(2378 words)</p> 172 </article> 173 174 <article itemscope itemtype="http://schema.org/Blog"> 175 <span class="entry-meta"><time itemprop="datePublished" datetime="2023-02-12">Feb 12, 2023</time></span> 176 <h2 class="entry-title" itemprop="headline"><a href="/posts/how-to-efficiently-reorder-or-rerank-items-in-database/">How to Efficiently Reorder or Rerank Items in Database</a></h2> 177 178 <p class="teaser">Ever wondered how Jira and Trello store the order of tasks or issues? How they can effortlessly reorder items in the database even when there are a million items? In this article, you will gain an understanding of reordering and reranking techniques and how to store order information in the database to facilitate efficient reordering.</p> 179 180 <p class="wordcount">(1718 words)</p> 181 </article> 182 183 <article itemscope itemtype="http://schema.org/Blog"> 184 <span class="entry-meta"><time itemprop="datePublished" datetime="2022-08-11">Aug 11, 2022</time></span> 185 <h2 class="entry-title" itemprop="headline"><a href="/posts/spotify-synced-and-translated-lyrics-display/">Project Write-up: Display Spotify lyrics on external display</a></h2> 186 187 <p class="teaser">I came across a job posting on Upwork where someone was looking for a software that plays the lyrics of a Spotify song on dual screens. I was really intrigued so I decided to give it a go. In this article I am going to talk about the whole thought process I went through while trying to figure out a solution as I think that part is often missing from programming tutorials.</p> 188 189 <p class="wordcount">(1564 words)</p> 190 </article> 191 192 <article itemscope itemtype="http://schema.org/Blog"> 193 <span class="entry-meta"><time itemprop="datePublished" datetime="2022-04-28">Apr 28, 2022</time></span> 194 <h2 class="entry-title" itemprop="headline"><a href="/posts/setting-up-custom-root-domain-webflow-cloudflare/">Setting Up Custom Root Domain using Webflow and Cloudflare</a></h2> 195 196 <p class="teaser">Are you trying to set up a custom root domain with Webflow & Cloudflare but it is not working? I recently did the same and faced some issues. Let me save you some time and show you how to set it up. By the end, you will have working redirection from www subdomain to your root domain.</p> 197 198 <p class="wordcount">(1014 words)</p> 199 </article> 200 201 <article itemscope itemtype="http://schema.org/Blog"> 202 <span class="entry-meta"><time itemprop="datePublished" datetime="2022-04-24">Apr 24, 2022</time></span> 203 <h2 class="entry-title" itemprop="headline"><a href="/posts/extracting-whatsapp-messages-from-ios-backup/">Extracting WhatsApp messages from an iOS backup</a></h2> 204 205 <p class="teaser">Have you ever been interested in how Apple saves the iOS backup files and how you can extract particular files from a backup? In this article, I will show you the different encryptions involved in creating an iOS backup, how to decrypt the data, and how to extract WhatsApp chats from an iOS backup.</p> 206 207 <p class="wordcount">(2185 words)</p> 208 </article> 209 210 <article itemscope itemtype="http://schema.org/Blog"> 211 <span class="entry-meta"><time itemprop="datePublished" datetime="2022-04-23">Apr 23, 2022</time></span> 212 <h2 class="entry-title" itemprop="headline"><a href="/posts/web-automation-with-selenium/">Web Automation With Selenium And Python</a></h2> 213 214 <p class="teaser">In this article we will take a look at how we can automate basic web interactions using Selenium. By the end of this article you will have an automated booking bot that can reserve court space for you automatically. You will also learn about XPath and how to traverse an HTML document using Python, LXML and XPath.</p> 215 216 <p class="wordcount">(2578 words)</p> 217 </article> 218 219 <a href="/posts" class="button all-articles">All articles</a> 220 </div> 221 222 223 <footer role="contentinfo"> 224 <div class="hr"></div> 225 <div class="footer-link"> 226 <a href="mailto:[email protected]" rel="me" target="_blank">Email</a> 227 <a href="https://twitter.com/yasoobkhalid" rel="me" target="_blank">Twitter</a> 228 229 <a href="https://www.linkedin.com/in/yasoob/" rel="me" target="_blank">LinkedIn</a> 230 <a href="https://github.com/yasoob" rel="me" target="_blank">GitHub</a> 231 232 </div> 233 <div class="copyright"> 234 <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">
235 <img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"> 236 </a> 237 </div> 238 </footer> 239 240</div> 241
242<script>
vendor: 348 bytes, lines 242-247
242 243 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 244 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 245 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 246 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 247 ga('create', '
247UA-97849776-1
vendor: 40 bytes, lines 247-248
247', 'auto'); 248 ga('send', 'pageview');
249</script>
249 250
251<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js"></script>
vendor: 1 bytes, line 251
251
252<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script>
252<script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='ADDRESS';ftypes[3]='address';fnames[4]='PHONE';ftypes[4]='phone';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
vendor: 1 bytes, line 252
252
253<script src="/js/main.js"></script>
253 254</body> 255</html> 256
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.