<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ye Joo Park's Blog</title><link>https://park.is/</link><description>Recent content on Ye Joo Park's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 08 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://park.is/index.xml" rel="self" type="application/rss+xml"/><item><title>Using GPT to Generate Paper Feedback</title><link>https://park.is/notebooks/20250908_generate_paper_feedback_using_gpt/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/20250908_generate_paper_feedback_using_gpt/</guid><description>&lt;div&#10; class="cell border-box-sizing text_cell rendered"&#10; id="cell-id=cec6d515-3cbc-4cf7-a028-dd970afe0740"&#10;&gt;&#10; &lt;div class="prompt input_prompt"&gt;&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10; &lt;p&gt;&#10; In 2012, I graded hundreds of papers as a teaching assistant. This was a&#10; time-consuming and subjective process, and I often spent days grading&#10; just to meet deadlines.&#10; &lt;/p&gt;&#10; &lt;p&gt;&#10; Large language models (LLMs) like GPT-5 are transforming education,&#10; including the grading of written assignments. LLMs provide an efficient&#10; and scalable way to assess students' writing while also generating&#10; personalized feedback. However, my experience using LLMs for grading has&#10; been unreliable for the following reasons:&#10; &lt;/p&gt;</description></item><item><title>Web Workers in Next.js 15 with Comlink</title><link>https://park.is/blog_posts/20250417_nextjs_comlink_examples/</link><pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20250417_nextjs_comlink_examples/</guid><description>&lt;p&gt;Running heavy computations or background tasks directly on the main thread can lead to a sluggish user interface 🐌. Web Workers offer a solution by allowing you to run scripts in background threads, keeping your UI responsive. However, communicating with Web Workers traditionally involves a lot of boilerplate code using &lt;code&gt;postMessage&lt;/code&gt; and event listeners.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/GoogleChromeLabs/comlink"&gt;Comlink&lt;/a&gt; is a tiny library by the Google Chrome team that simplifies Web Worker communication, making it feel like you&amp;rsquo;re interacting with local objects or functions.&lt;/p&gt;</description></item><item><title>Market Dynamics of the Big Three Cloud Providers</title><link>https://park.is/blog_posts/20250218_market_dynamics_of_big_three_cloud_providers/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20250218_market_dynamics_of_big_three_cloud_providers/</guid><description>&lt;img src="https://r2cdn.perplexity.ai/pplx-full-logo-primary-dark%402x.png" class="logo" width="120"/&gt;&#10;&lt;p&gt;✒️ I&amp;rsquo;ve used &lt;a href="https://perplexity.ai"&gt;Perplexity&lt;/a&gt;&amp;rsquo;s newly-released &lt;a href="https://www.perplexity.ai/hub/blog/introducing-perplexity-deep-research"&gt;Deep Research&lt;/a&gt; to draft this post.&lt;/p&gt;&#10;&lt;p&gt;The cloud computing industry has undergone transformative growth over the past decade, with Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP) collectively dominating the market. This report synthesizes historical market share trends, current competitive dynamics, and future projections for these three hyperscalers, contextualized by technological advancements, regional developments, and strategic investments.&lt;/p&gt;&#10;&lt;h2 id="-historical-market-share-evolution"&gt;📊 Historical Market Share Evolution&lt;/h2&gt;&#10;&lt;h3 id="aws-the-early-dominator"&gt;AWS: The Early Dominator&lt;/h3&gt;&#10;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/320px-Amazon_Web_Services_Logo.svg.png" alt="AWS Logo" height="60" style="margin-bottom: 20px" /&gt;&#10;&lt;p&gt;AWS pioneered the cloud infrastructure market in the mid-2000s, leveraging Amazon&amp;rsquo;s e-commerce infrastructure to establish a first-mover advantage. By 2017, AWS commanded approximately 33% of the global cloud market, a figure that has since stabilized around 31–32% despite intensified competition&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. Key to its early success were competitive pricing, a vast service catalog, and rapid scalability. However, AWS&amp;rsquo;s growth rate has decelerated in recent years, dropping from 27% year-over-year (YoY) in Q1 2023 to 12% by Q4 2024&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;. This slowdown reflects both market saturation in core offerings and rising competition in emerging sectors like AI.&lt;/p&gt;</description></item><item><title>Analyzing College Town Landlords at UIUC, BYU, and PSU</title><link>https://park.is/notebooks/20250130_analysis_of_college_town_landlords/</link><pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/20250130_analysis_of_college_town_landlords/</guid><description>&lt;div class="cell border-box-sizing text_cell rendered" id="cell-id=4161515d-2e69-4fe4-8d08-5be823210676"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;h2 id="%E2%9C%A8-Background"&gt;✨ Background&lt;a class="anchor-link" href="#%E2%9C%A8-Background"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I first moved into an apartment at UIUC during the summer of 2007. The apartment was Gregory Place under a management company called &lt;a href="https://jsmliving.com/"&gt;JSM&lt;/a&gt;. Here is a photo of the apartment from 2007. The construction site shows the second building being built.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Gregory Place 2007" src="https://github.com/user-attachments/assets/1ea504b8-5737-459d-96ac-1a8a49b49d5d"/&gt;&lt;/p&gt;&#10;&lt;p&gt;Back in 2007, JSM was regarded as one of the better management companies, along with Royse Brinkmeyer and Roland. Almost two decades later, JSM is still highly regraded. Prospective tenants lining up from the early morning in front of JSM's office to secure a lease was a sight to see in recent years.&lt;/p&gt;</description></item><item><title>Sentiment Analysis using spaCy and DistilBERT</title><link>https://park.is/notebooks/20250123_sentiment_analysis_with_spacy_and_distilbert/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/20250123_sentiment_analysis_with_spacy_and_distilbert/</guid><description>&lt;div&#10; class="cell border-box-sizing text_cell rendered"&#10; id="cell-id=0d6e4426-8fbd-4434-a2cf-32e7f6116cc3"&#10;&gt;&#10; &lt;div class="prompt input_prompt"&gt;&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10; &lt;p&gt;&#10; Natural language processing (NLP) aims to give computers the ability to&#10; understand, process, and even generate human language. This notebook&#10; introduces the common preprocessing steps and demonstrates how to use a&#10; widely used transformer model&#10; (&lt;code&gt;distilbert-base-uncased-finetuned-sst-2-english&lt;/code&gt;) to&#10; perfrom a sentiment analysis. 😀😦🙁&#10; &lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div&#10; class="cell border-box-sizing code_cell rendered"&#10; id="cell-id=a31b7a34-007c-4e89-8916-a07406598896"&#10;&gt;&#10; &lt;div class="input"&gt;&#10; &lt;div class="prompt input_prompt"&gt;In [1]:&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10; &lt;div class="highlight hl-ipython3"&gt;&#10; &lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;plotly.express&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;px&lt;/span&gt;&#10;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div&#10; class="cell border-box-sizing code_cell rendered"&#10; id="cell-id=8d48c8d9-b347-4596-afe2-acbe54df942c"&#10;&gt;&#10; &lt;div class="input"&gt;&#10; &lt;div class="prompt input_prompt"&gt;In [2]:&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10; &lt;div class="highlight hl-ipython3"&gt;&#10; &lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'display.max_columns'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div&#10; class="cell border-box-sizing text_cell rendered"&#10; id="cell-id=fa8fe7ba-291c-4abc-b95a-f80f4d6bba1f"&#10;&gt;&#10; &lt;div class="prompt input_prompt"&gt;&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10; &lt;h2 id="%F0%9F%97%83%EF%B8%8F-Load-data"&gt;&#10; 🗃️ Load data&lt;a&#10; class="anchor-link"&#10; href="#%F0%9F%97%83%EF%B8%8F-Load-data"&#10; &gt;¶&lt;/a&#10; &gt;&#10; &lt;/h2&gt;&#10; &lt;p&gt;&#10; This exercise uses a small dataset that contains reviews of two&#10; apartments at Indiana University Bloomington.&#10; &lt;/p&gt;</description></item><item><title>Unexpected Behaviors of the R Programming Language</title><link>https://park.is/blog_posts/20250118_unexpected_behaviors_in_r/</link><pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20250118_unexpected_behaviors_in_r/</guid><description>&lt;p&gt;Consider this R code where it creates an R vector.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-R" data-lang="R"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# create a vector&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#111"&gt;v&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#75af00"&gt;c&lt;/span&gt;&lt;span style="color:#111"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#111"&gt;,&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#111"&gt;,&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#111"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is a seemingly simple task - how do you get the container type of the vector &lt;code&gt;v&lt;/code&gt;?&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m looking for a straightforward function that would return &amp;ldquo;vector&amp;rdquo; if I pass &lt;code&gt;v&lt;/code&gt; as an argument.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-R" data-lang="R"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75af00"&gt;some_function&lt;/span&gt;&lt;span style="color:#111"&gt;(&lt;/span&gt;&lt;span style="color:#111"&gt;v&lt;/span&gt;&lt;span style="color:#111"&gt;)&lt;/span&gt; &lt;span style="color:#75715e"&gt;# should return &amp;#34;vector&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;My first intuition is to use the commonly used functions to inspect objects - &lt;code&gt;typeof()&lt;/code&gt;, &lt;code&gt;class()&lt;/code&gt; and &lt;code&gt;mode()&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Evaluating LLMs' DataViz Code Generation and Refinement Capabilities</title><link>https://park.is/notebooks/evaluating-llms-dataviz-code-generation-and-refinement-capabilities/</link><pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/evaluating-llms-dataviz-code-generation-and-refinement-capabilities/</guid><description>&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;Refining a visual often involves getting rid of unnecessary elements and directing a viewer's attention to specific elements. The process to enhance clearity, readability, and effectiveness is a iterative process that requires constant self-evaluations. This process requires many hours, although the output may look simple.&lt;/p&gt;&#10;&lt;p&gt;Can Large Language Models (LLMs) be used as a tool for generating visuals? While LLMs excel at text-based tasks, their ability to understand and generate complex concepts can be leveraged to assist in writing code to create visuals. But can LLMs be used to &lt;em&gt;refine&lt;/em&gt; visuals? This post tests LLM's ability to refine Plotly visuals.&lt;/p&gt;</description></item><item><title>How to Replace GPU Cooling Fans without Disassmbling the Entire Card</title><link>https://park.is/blog_posts/20240820_replace_zotac_rtx_fans/</link><pubDate>Tue, 20 Aug 2024 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20240820_replace_zotac_rtx_fans/</guid><description>&lt;p&gt;I&amp;rsquo;ve been using a Zotac RTX 2060 Super to power four 2K monitors. After five years of almost non-stop usage in a high-dust environment, the GPU&amp;rsquo;s cooling performance started to degrade due to the fans slowing down. So I decided to replace the cooling fans.&lt;/p&gt;&#10;&lt;p&gt;Replacing the cooling fans on GPUs can be a hassle, especially if you separate the PCB and heatsink. Once you take the heatsink off from the PCB, you can&amp;rsquo;t reuse the thermal pads. You have no option but to measure the depth and purchase new ones online. Nearly every tutorial you find on the internet will first guide you to completely disassemble the graphics card.&lt;/p&gt;</description></item><item><title>Extract Timestamp from UUID v7 using Javascript</title><link>https://park.is/blog_posts/20240803_extracting_timestamp_from_uuid_v7/</link><pubDate>Sat, 03 Aug 2024 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20240803_extracting_timestamp_from_uuid_v7/</guid><description>&lt;h2 id="time-based-uuids"&gt;Time-based UUIDs&lt;/h2&gt;&#10;&lt;p&gt;A UUID (Universally Unique Identifier) is a 128-bit number used to uniquely identify records or information.&lt;/p&gt;&#10;&lt;p&gt;Time-based UUIDs are a category of UUIDs that incorporate the current timestamp into their structure, allowing for chronological ordering of the generated UUIDs. They are particularly useful in distributed systems where unique identifiers that are sortable by creation time are beneficial. There are several versions of time-based UUIDs, including UUID v1, UUID v6, and UUID v7, each with different methods of encoding the timestamp and other components.&lt;/p&gt;</description></item><item><title>Benford's Law Application and Interpretation</title><link>https://park.is/notebooks/benfords-analysis/</link><pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/benfords-analysis/</guid><description>&lt;div&#10; class="cell border-box-sizing text_cell rendered"&#10; id="cell-id=94818c56-0367-444d-bfc4-7d7d05296165"&#10;&gt;&#10; &lt;div class="prompt input_prompt"&gt;&lt;/div&gt;&#10; &lt;div class="inner_cell"&gt;&#10; &lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10; &lt;p&gt;&#10; Benford's Law, also known as the Newcomb-Benford law or the first-digit&#10; law, is a surprising observation about the leading digits of numbers in&#10; real-world datasets. In many naturally occurring collections of data,&#10; smaller leading digits (like 1 and 2) are significantly more common than&#10; larger ones (like 8 and 9).&#10; &lt;/p&gt;&#10; &lt;ul&gt;&#10; &lt;li&gt;Financial records&lt;/li&gt;&#10; &lt;li&gt;Scientific measurements&lt;/li&gt;&#10; &lt;li&gt;Astronomical distances&lt;/li&gt;&#10; &lt;li&gt;Street addresses&lt;/li&gt;&#10; &lt;/ul&gt;&#10; &lt;h3 id="Why-does-this-happen?"&gt;&#10; Why does this happen?&lt;a&#10; class="anchor-link"&#10; href="#Why-does-this-happen?"&#10; &gt;¶&lt;/a&#10; &gt;&#10; &lt;/h3&gt;&#10; &lt;p&gt;&#10; Real-world data often involves growth, multiplication, and comparisons&#10; across different scales. This "scaling invariance" creates a natural&#10; bias towards smaller leading digits.&#10; &lt;/p&gt;</description></item><item><title>An In-depth Comparison of Pandas String dtypes</title><link>https://park.is/notebooks/comparing-pandas-string-dtypes/</link><pubDate>Sat, 27 May 2023 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/comparing-pandas-string-dtypes/</guid><description>&lt;div class="cell border-box-sizing code_cell rendered"&gt;&#10;&lt;div class="input"&gt;&#10;&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[1]:&lt;/div&gt;&#10;&lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10;&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;&#10;&#10;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"python version &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;major&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minor&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;version_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;micro&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"pandas version &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__version__&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"numpy version &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__version__&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="output_wrapper"&gt;&#10;&lt;div class="output"&gt;&#10;&#10;&#10;&lt;div class="output_area"&gt;&#10;&#10; &lt;div class="prompt"&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;div class="output_subarea output_stream output_stdout output_text"&gt;&#10;&lt;pre&gt;python version 3.10.11&#10;pandas version 1.5.2&#10;numpy version 1.23.5&#10;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;The default data type for strings in Pandas DataFrames is the &lt;code&gt;object&lt;/code&gt; type. However, &lt;a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/text.html"&gt;pandas' documentation&lt;/a&gt; recommendeds explicitly using the &lt;code&gt;StringDtype&lt;/code&gt; for storing strings as it's more efficient and allows for more specific string operations.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;pd.StringDtype()&lt;/code&gt; is a dedicated data type for storing strings. It is an It allows for more specific string operations. &lt;code&gt;StringDtype&lt;/code&gt; is still considered experimental as of &lt;code&gt;pandas&lt;/code&gt; 2.0.1.&lt;/p&gt;</description></item><item><title>Run MOSS Plagiarism Checker on Jupyter Notebooks</title><link>https://park.is/blog_posts/20230420_running_moss_plagiarism_checker/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20230420_running_moss_plagiarism_checker/</guid><description>&lt;h2 id="moss"&gt;MOSS&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://theory.stanford.edu/~aiken/moss/"&gt;MOSS&lt;/a&gt; (Measure of Software Similarity) is a system to to determine the similarity of programs. It&amp;rsquo;s most commonly used to detect plagiarism in programming classes. It was developed in 1994 by David A. Aiken, Robert Sedgewick, and Andrew W. Appel at Stanford University.&lt;/p&gt;&#10;&lt;h3 id="moss-for-plagiarism-detection"&gt;MOSS for Plagiarism Detection&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://theory.stanford.edu/~aiken/moss/"&gt;MOSS&lt;/a&gt; (Measure of Software Similarity) is a great tool for catching plagiarism because it can identify even small similarities that may not be obvious to the human eye. MOSS works by comparing the source code of two or more files. It does this by breaking the code down into tokens, which are the smallest meaningful units of code. A token could be a variable name, a function name, or a keyword. MOSS then compares the tokens in each file to see how many of them are the same.&lt;/p&gt;</description></item><item><title>Retrieve tweets using Twitter API</title><link>https://park.is/notebooks/retrieve-tweets/</link><pubDate>Wed, 08 Feb 2023 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/retrieve-tweets/</guid><description>&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;A &lt;a href="https://developer.twitter.com/"&gt;Twitter Developer account&lt;/a&gt; is required to run this script.&lt;/p&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing code_cell rendered"&gt;&#10;&lt;div class="input"&gt;&#10;&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[1]:&lt;/div&gt;&#10;&lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10;&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tweepy&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing code_cell rendered"&gt;&#10;&lt;div class="input"&gt;&#10;&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[2]:&lt;/div&gt;&#10;&lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10;&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'display.max_colwidth'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'display.max_rows'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;h2 id="Read-Twitter-API-credentials"&gt;Read Twitter API credentials&lt;a class="anchor-link" href="#Read-Twitter-API-credentials"&gt;&amp;#182;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;Read Twitter API credentials from &lt;code&gt;twitter-credentials.json&lt;/code&gt;. The JSON file should contain the following key/values:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;consumer_key&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;YOUR_CONSUMER_KEY&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;consumer_secret&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;YOUR_CONSUMER_SECRET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;access_token&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;YOUR_ACCESS_TOKEN&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;access_token_secret&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;YOUR_ACCESS_TOKEN_SECRET&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;quot;bearer_token&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BEARER_TOKEN&amp;quot;&lt;/span&gt;&#10;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;p&gt;Create the &lt;code&gt;twitter-credentials.json&lt;/code&gt; with your own keys and tokens in the same folder as this Jupyter notebook.&lt;/p&gt;</description></item><item><title>Duplicating a Supabase Postgres Schema to a New Project</title><link>https://park.is/blog_posts/20211104_duplicate_a_supabase_database/</link><pubDate>Thu, 04 Nov 2021 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20211104_duplicate_a_supabase_database/</guid><description>&lt;p&gt;Looking to duplicate a Postgres database in a Supabase project to another project? Using &lt;code&gt;pg_dump&lt;/code&gt; and &lt;code&gt;pg_restore&lt;/code&gt; won&amp;rsquo;t work because you only have superuser access through the Supabase dashboard. Here&amp;rsquo;s a workflow of duplicating a Supabase Postgres schema using pgAdmin and the Supabase dashboard.&lt;/p&gt;&#10;&lt;h2 id="exporting-schema"&gt;Exporting Schema&lt;/h2&gt;&#10;&lt;p&gt;You can use the &lt;code&gt;pg_dump&lt;/code&gt; in a CLI as well.&lt;/p&gt;&#10;&lt;h3 id="right-click-on-pgadmins-public-schema-and-click-backup"&gt;Right-click on pgAdmin&amp;rsquo;s public schema and click Backup&lt;/h3&gt;&#10;&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/1064036/140382400-0792e227-4d7b-48e1-bfc1-bba413f1038e.png" alt="image"&gt;&lt;/p&gt;&#10;&lt;h3 id="enter-a-filename-and-choose-plain-format"&gt;Enter a filename and choose Plain format&lt;/h3&gt;&#10;&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/1064036/140382436-ca1b821f-0f44-4d58-a537-863569f3ad5b.png" alt="image"&gt;&lt;/p&gt;</description></item><item><title>Two useful Firebase Hacks</title><link>https://park.is/blog_posts/20211028_firebase_useful_functions/</link><pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20211028_firebase_useful_functions/</guid><description>&lt;p&gt;I was once an avid user of &lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt;. But over time, I gradually became fond of PostgreSQL-backed open-source alternatives like &lt;a href="https://hasura.io/"&gt;Hasura&lt;/a&gt; or &lt;a href="https://supabase.io/"&gt;Supabase&lt;/a&gt; and moved on. The two things that I don&amp;rsquo;t miss in Firebase are:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;No way to change custom user claims in the dashboard&lt;/li&gt;&#10;&lt;li&gt;No easy one-click solution to auto-timestamp document updates in Firestore 😤&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Here are two Firebase (serverless) functions to make your life easier. &lt;strong&gt;Both are slight modifications of community knowledge from StackOverflow.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>PostgreSQL Trigger: Calculate the Difference between Two Timestamps in Seconds</title><link>https://park.is/blog_posts/20210605_postgres_trigger_time_between_two_dates/</link><pubDate>Sat, 05 Jun 2021 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20210605_postgres_trigger_time_between_two_dates/</guid><description>&lt;p&gt;A SQL trigger is a function that is automatically invoked when an event occurs. To set a trigger, you specify the following:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;which table(s) and column(s) to listen to&lt;/li&gt;&#10;&lt;li&gt;which actions to listen to (e.g., &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;what function or procedure to invoke.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Triggers have many use cases. Some examples are:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Create an audit trail&lt;/strong&gt;: You have a table that contains sensitive information. You create a trigger to record all changes (what change has been made, which user has made the change, when the change has been made) to a separate table.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Integrity check&lt;/strong&gt;: Before adding a student to a class roster, you want to ensure that the student&amp;rsquo;s previous course enrollments fulfill prerequisites.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Derive additional data&lt;/strong&gt;: You have a table that contains the start and the end time of an online exam for test-takers. When a student is done with the exam, you want to calculate how long the student took to complete the exam using the start and end timestamps. Note that this can also be implemented using a generated column.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This post will implement the last example. You create a test-taking web app where you mark the start time (&lt;code&gt;start_time&lt;/code&gt;) when the student hits the &amp;ldquo;Start&amp;rdquo; button. Once the student finishes taking the exam and clicks on &amp;ldquo;Submit&amp;rdquo;, the web app will mark the finish time (&lt;code&gt;end_time&lt;/code&gt;). You want to automatically calculate how long the test-taker spent on the exam in &lt;strong&gt;seconds&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Cleaning Chicago Ridesharing Registered Vehicles Dataset</title><link>https://park.is/notebooks/cleaning-chicago-ridesharing-vehicles-dataset/</link><pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/cleaning-chicago-ridesharing-vehicles-dataset/</guid><description>&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;All vehicles 🚗 reported by Transportation Network Providers (sometimes called rideshare companies) to the City of Chicago as part of routine reporting required by ordinance. Inclusion of a vehicle in a monthly report indicates that the vehicle was eligible for trips in Chicago in that month for at least one day, regardless of whether it actually provided any rides. If a vehicle is eligible in multiple months, which is common, it will have records in each of these reporting months.&lt;/p&gt;</description></item><item><title>Add a multiline environment variable to Vercel (or Heroku)</title><link>https://park.is/blog_posts/20210118_add_a_multiline_env_variable_to_vercel/</link><pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20210118_add_a_multiline_env_variable_to_vercel/</guid><description>&lt;p&gt;One of the common issues when deploying a React project with &lt;code&gt;firebase-admin&lt;/code&gt; is that a secret environment variable with a newline (&lt;code&gt;\n&lt;/code&gt;) character will cause a build error.&lt;/p&gt;&#10;&lt;p&gt;Assume that the text below is a simplified version of your &lt;code&gt;firebase-admin&lt;/code&gt; private key.&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;-----BEGIN PRIVATE KEY-----&#10;abcde&#10;fghij&#10;klmno&#10;pqrs=&#10;-----END PRIVATE KEY-----&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In a &lt;code&gt;.env&lt;/code&gt; file, this would be represented as:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;MY_PRIVATE_KEY=&amp;#34;-----BEGIN PRIVATE KEY-----\nabcde\nfghij\nklmno\npqrs=\n-----END PRIVATE KEY-----\n&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;What happens when you add a secret environment variable containing your private key value - &lt;code&gt;&amp;quot;-----BEGIN PRIVATE KEY-----\nabcde\nfghij\nklmno\npqrs=\n-----END PRIVATE KEY-----\n&amp;quot;&lt;/code&gt; and redeploy?&lt;/p&gt;</description></item><item><title>COVID-19 Exploratory Data Analysis</title><link>https://park.is/notebooks/covid-19-eda/</link><pubDate>Mon, 01 Jun 2020 00:00:00 +0000</pubDate><guid>https://park.is/notebooks/covid-19-eda/</guid><description>&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;This is a notebook from the live coding session by &lt;a href="https://www.datacamp.com/instructors/hugobowne"&gt;Dr Hugo Bowne-Anderson&lt;/a&gt; on April 10, 2020 via DataCamp.&lt;/p&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;h3 id="Imports-and-data"&gt;Imports and data&lt;a class="anchor-link" href="#Imports-and-data"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;Let's import the necessary packages from the SciPy stack and get &lt;a href="https://github.com/CSSEGISandData/COVID-19"&gt;the data&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing code_cell rendered"&gt;&#10;&lt;div class="input"&gt;&#10;&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[1]:&lt;/div&gt;&#10;&lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10;&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Import packages&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;&#10;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;&#10;&lt;span class="c1"&gt;# Set style &amp;amp; figures inline&lt;/span&gt;&#10;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="k"&gt;matplotlib&lt;/span&gt; inline&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing code_cell rendered"&gt;&#10;&lt;div class="input"&gt;&#10;&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[2]:&lt;/div&gt;&#10;&lt;div class="inner_cell"&gt;&#10; &lt;div class="input_area"&gt;&#10;&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Data urls&lt;/span&gt;&#10;&lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/'&lt;/span&gt;&#10;&lt;span class="n"&gt;confirmed_cases_data_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'time_series_covid19_confirmed_global.csv'&lt;/span&gt;&#10;&lt;span class="n"&gt;death_cases_data_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'time_series_covid19_deaths_global.csv'&lt;/span&gt;&#10;&lt;span class="n"&gt;recovery_cases_data_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'time_series_covid19_recovered_global.csv'&lt;/span&gt;&#10;&lt;span class="c1"&gt;# Import datasets as pandas dataframes&lt;/span&gt;&#10;&lt;span class="n"&gt;raw_data_confirmed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;confirmed_cases_data_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;span class="n"&gt;raw_data_deaths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;death_cases_data_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;span class="n"&gt;raw_data_recovered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recovery_cases_data_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/pre&gt;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;h3 id="Confirmed-cases-of-COVID-19"&gt;Confirmed cases of COVID-19&lt;a class="anchor-link" href="#Confirmed-cases-of-COVID-19"&gt;&amp;#182;&lt;/a&gt;&lt;/h3&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;&#10;&lt;/div&gt;&lt;div class="inner_cell"&gt;&#10;&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;&#10;&lt;p&gt;We'll first check out the confirmed cases data by looking at the head of the dataframe:&lt;/p&gt;</description></item><item><title>Detecting Local Image Features with SIFT</title><link>https://park.is/blog_posts/20180406_sift/</link><pubDate>Fri, 06 Apr 2018 00:00:00 +0000</pubDate><guid>https://park.is/blog_posts/20180406_sift/</guid><description>&lt;p&gt;SIFT (Scale-Invariant Feature Transform) is a computer vision algorithm for detecting and describing local features in images. Developed by David Lowe in 1999, SIFT has become a fundamental tool for various applications due to its robustness and versatility.&lt;/p&gt;&#10;&lt;h2 id="use-cases-of-sift"&gt;Use Cases of SIFT&lt;/h2&gt;&#10;&lt;h3 id="-object-recognition"&gt;👀 Object Recognition&lt;/h3&gt;&#10;&lt;p&gt;SIFT is widely used for detecting and identifying specific objects within complex scenes. Its ability to extract distinctive features that are invariant to scale, rotation, and illumination changes makes it effective for recognizing objects across different viewpoints and conditions.&lt;/p&gt;</description></item><item><title>About</title><link>https://park.is/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://park.is/about/</guid><description>&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/1064036/97115755-7eb41980-16c6-11eb-9381-9066e3303256.jpg" alt="Park Profile Photo"&gt;&lt;/p&gt;&#10;&lt;p&gt;Hi, I&amp;rsquo;m Park from Seoul, South Korea.&lt;/p&gt;&#10;&lt;p&gt;I like &lt;a href="https://github.com/subwaymatch"&gt;writing code&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m currently working as an Instructor of Accountancy at the University of Illinois. I teach Data/Business Analytics to business major/minors, accounting students, and iMBA learners using Python, R, SQL and Tableau. I am also serving as an Associate Director at &lt;a href="https://www.centerforanalytics.giesbusiness.illinois.edu/"&gt;the University of Illinois-Deloitte Foundation Center for Business Analytics&#10;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="recent-projects"&gt;Recent Projects&lt;/h2&gt;&#10;&lt;h3 id="tabbied-"&gt;Tabbied 🚀&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://www.tabbied.com/"&gt;https://www.tabbied.com/&lt;/a&gt; generates artworks using code &lt;a href="https://css-doodle.com/"&gt;css-doodle&lt;/a&gt;. &lt;a href="http://syunghong.com/"&gt;Sy Hong&lt;/a&gt; came up with the idea and designed the app. I only worked on the development side.&lt;/p&gt;</description></item></channel></rss>