<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Unknowntpo on Medium]]></title>
        <description><![CDATA[Stories by Unknowntpo on Medium]]></description>
        <link>https://medium.com/@e850506?source=rss-3e1beff24abd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*GcvzKZqnezcj1K4PvSWFXA.jpeg</url>
            <title>Stories by Unknowntpo on Medium</title>
            <link>https://medium.com/@e850506?source=rss-3e1beff24abd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 27 May 2026 20:39:21 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@e850506/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[從開源新手到 Apache Gravitino Committer 的成長之路]]></title>
            <link>https://medium.com/@e850506/%E5%BE%9E%E9%96%8B%E6%BA%90%E6%96%B0%E6%89%8B%E5%88%B0-apache-gravitino-committer-%E7%9A%84%E6%88%90%E9%95%B7%E4%B9%8B%E8%B7%AF-121e374026b6?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/121e374026b6</guid>
            <category><![CDATA[apache]]></category>
            <category><![CDATA[源來適]]></category>
            <category><![CDATA[apache-gravitino]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Sat, 07 Jun 2025 05:23:21 GMT</pubDate>
            <atom:updated>2025-06-07T08:45:45.041Z</atom:updated>
            <content:encoded><![CDATA[<h3>背景：自學轉職的後端軟體工程師</h3><p>我大學唸的是電機系，大三的時候因為專題，意外發現自己對程式設計非常有興趣，曾經在線上與實體參與 Jserv 的 Linux 系統程式設計，後來自學轉職成網頁後端軟體工程師。</p><p>之前有貢獻過由強者瑞安開發的 redis/rueidis [1] 專案，寫了幾個 rueidis 與 go-redis 之間的 Adapter，從此開始對開源有了濃厚興趣，希望能為開源世界帶來更多貢獻。</p><h3>緣起：與「源來適你」的初次相遇</h3><p>還記得第一次在 Facebook 看到「<a href="https://www.facebook.com/opensource4you/">源來適你</a>」開源社群 [2] 時，立刻被創辦人蔡嘉平的 <strong>Apache Kafka PMC Member</strong> 頭銜深深吸引。沒想到鼎鼎大名的 Kafka 專案背後，竟然有一位台灣人擔任核心貢獻者，這讓我覺得既驚豔又振奮。</p><p>後來很幸運地在 Mentor 計劃中被 <strong>Apache Gravitino</strong> [3] 專案選中 (目前是 Apache Sofware Foundation 的 Top-Level Project 之一)，由幾位經驗豐富的導師帶領我們深入開源世界。其中一位導師劉勳（我們都親切地稱呼他為勳哥），他是 Gravitino 專案背後的公司：Datastrato 的聯合創辦人和 COO，不僅在技術上給予我很多指導，最終也是讓我成為 Committer 的重要推手！</p><h3>深入 Gravitino：從 CI/CD 到大數據整合</h3><h4>ContainerSuite 的挑戰與突破</h4><p>由於我在加入專案時就表達了對 <strong>CI/CD 領域</strong>的濃厚興趣，因此被分配到實作 ContainerSuite 的任務。Gravitino 作為一個需要整合多種大數據服務的專案，大量使用 TestContainer 來啟動各種服務進行整合測試。</p><p>然而，每個測試都獨立啟動一個容器會消耗大量系統資源，導致測試執行時間過長。為了解決這個問題，我實現了 <strong>PostgreSQL 與 MySQL 的 ContainerSuite </strong>[4][5]，讓多個測試能夠共享同一個容器實例，大幅提升了測試效率。</p><h4>Ranger 與 Hive 的 Docker 整合之路</h4><p>後來勳哥邀請我參與 <strong>Apache Ranger</strong> 與 <strong>Hive</strong> 相關的 Dockerfile 撰寫工作 [6]。Ranger 在大數據生態系統中扮演著權限控管的重要角色，它透過各種 plugin 與其他大數據組件互動，下載對應的 policies 來實現精細的權限管理。</p><p>在 CI/CD 環境中，我們需要將這些複雜的整合過程容器化。然而，Ranger 帶來了不小的挑戰：官方提供的 release 版本並未包含所有必要的 plugin，例如關鍵的 <strong>HDFS plugin</strong> 就需要我們自行編譯。編譯過程不僅參數複雜，耗時更長達 <strong>40 分鐘</strong>左右，這大大增加了開發的複雜度。當初也是花費了好長時間不斷試錯，才找到正確的參數。</p><p>這個算是我做過最崩潰的 PR，那時候還蠻想放棄的，因為怎麼嘗試都失敗。</p><p>所幸，某天在書店裡的某本書裡，我看到類似的說法：</p><blockquote>有時當你處在一個鬼打牆，一直找不到解決辦法的時候，把問題放下，出去運動，散散步，與人聊天，好好吃飯，睡一覺，靈感反而會來找你，而所有天才都是在這種狀態下，達成別人無法想像的成就。</blockquote><p>正是因為我們把問題放下，才能用更大的視野看問題，才能用更適當的方法，更好的完成任務。</p><p>後來調整心態後，經過不斷的拆解問題，嘗試和優化，我們最終成功在 GitHub CI 中建立了自動化 Workflow，將整個編譯和部署過程自動化，為團隊節省了大量的開發時間。</p><h4>GVFS Fuse：與 Rust 的初次交鋒</h4><p>在專案後期，我又接到了一個令人興奮的挑戰：開發 <strong>GVFS Fuse</strong> 工具。這是一個能夠將 Gravitino Virtual File System 掛載到本地的工具，讓使用者無需透過 Java 或 Python Client，就能直接操作 Fileset 資源，大大提升了使用體驗。</p><p>我負責的部分是為系統增加一個 <strong>Debug Wrapper [7]</strong>，這個功能能夠詳細記錄所有檔案系統的操作，讓開發者在追蹤錯誤時有清楚的日誌可以參考。特別的是，GVFS Fuse 是用 <strong>Rust</strong> 語言開發的。</p><p>Rust 雖然是一門強大的系統程式語言，但它複雜的 <strong>Ownership</strong> 概念和嚴格的編譯器檢查，對初學者來說確實是不小的挑戰。由於我對 Rust 一直很感興趣，便主動請纓接下了這個 Issue。</p><blockquote><em>在 ChatGPT 與 Claude 的協助下，經過與 Rust 編譯器的一番「激烈搏鬥」，我逐漸掌握了 Ownership、Borrowing 等核心概念，最終成功完成了 Debug Wrapper 的實作。</em></blockquote><p>這次經驗不僅讓我接觸到了新的程式語言，更讓我體會到了系統程式設計的魅力。</p><h3>心得：</h3><h4>克服跨出第一步的恐懼以及對新手的一些建議：</h4><p>還記得人生第一隻 Open Source Project PR [8] 是從改錯字開始的，當時以為要貢獻 Open Source 專案一定要有什麼高深的知識，懂一堆知識才能開始，但其實只要你敢踏出第一步，其實你就已經開始往目標邁進了。所以對於新手來說，我會推薦先從把專案下載下來，照著官網的 Quick Start 跟著做一遍，這時候就會發現真實遇到的情況可能不是說明文件上面寫得那樣，這時候貢獻的機會就來了。</p><p>再來就會推薦去做一些 Test refactoring 的工作，該開始對專案不熟悉，可以先下載該專案下來玩一下，然後從你會接觸到的功能開始，試著在原始碼裡面追蹤一下流程，而「測試」則是描述這些流程最清楚直接的表達，所以不妨跟著測試，一起熟悉相關的程式碼，這時候說不定就會發現一些怪怪的測試，那你貢獻的機會就來了。</p><p>其實做完以上的幾點，你的心裡就會有些 Insight:</p><blockquote>這個部分好像哪裡不太順暢，如果是這樣可能會比較好 !?</blockquote><p>這時候恭喜你，你已經能自己發現問題，並試著提出解決方案了，而這些解方，也可能會需要複數個 PR 才能完成，而他們也會衍生出更多的 PR，</p><p>這時你已經不愁沒有題目可以做了，對專案的熟悉度也慢慢地上升。</p><h4>快速學習的藝術</h4><p>參與 Gravitino 專案最大的收穫，是學會了如何快速掌握新知識。由於 Gravitino 需要整合眾多不同的大數據專案來進行 metadata 管理，這要求我必須在短時間內理解各種專案的架構和特性。從 Docker 容器化、Apache Ranger 的權限管理機制，到 Rust 語言的系統程式設計，每個領域都有其獨特的知識體系和挑戰。</p><h4>第一性原理的應用</h4><p>在面對複雜問題時，我學會運用 <strong>Elon Musk</strong> 提倡的「第一性原理」思維模式。這個方法的核心是不斷分析和拆解問題，直到能夠清楚地識別出「自己不知道什麼」，然後精準地定位學習目標，學到「足夠解決當前問題」的知識。</p><blockquote><em>這種方法幫助我避免了盲目學習的陷阱，讓我能夠在有限的時間內獲得最大的學習效果。</em></blockquote><h3>結語：開源之路的持續前行</h3><p>參與「源來適你」社群和 Apache Gravitino 專案的經歷，不僅讓我獲得了 <strong>Committer</strong> 的頭銜，更重要的是培養了面對複雜技術挑戰的信心和能力。從 CI/CD 的優化、容器化的實作，到跨語言開發的探索，每一個挑戰都讓我成長許多。</p><p>現在的我相信，無論面對多麼複雜的專案，都能夠運用系統性的思維方法，抽絲剝繭地分析問題，最終找到解決方案。特別是在 Rust 開發過程中，我學會了如何善用 AI 工具來協助學習，這也成為現代開發者的重要技能之一。</p><p>開源世界充滿了無限可能，而這段旅程才剛剛開始。期待在未來能夠為 Gravitino 以及更多的開源專案貢獻自己的力量，也希望能夠幫助更多像我一樣的新手踏入這個精彩的世界。</p><h3>致謝</h3><p>感謝 Jserv，你是我在軟體工程領域的啟蒙導師，雖然後來沒有往 Linux Kernel 的方向前進，但你對軟體工程的態度與堅持，總是給我很大的啟發。</p><p>感謝蔡嘉平博士 aka 開源暖男，謝謝你創建了「源來適你」社群，讓許多對開源有興趣的有志之士能在此發光發熱，也讓「源來適你」生出了好多 Apache Committer，同時也在我工作與個人生活遇到困難時給我好多鼓勵 (尤其是貓貓生病時 QQ)。</p><p>感謝勳哥，謝謝你當時選中我參與 Gravitino 專案，每兩週開線上會議解答問題，也幫我做了好多 Code Review，給了我好多建議，並提名我當 Committer，期望之後我能夠持續在 Gravitino 作出貢獻。</p><p>感謝登耀，在我覺得沒動力時，給我許多支持與建議，也恭喜你成為 Apache Kafka Comitter ! 真的太厲害了！</p><p>感謝瑞安，之前教我 PostgreSQL , Linux 的東西，讓我了解原來世界上有人能夠樣樣都懂，樣樣都精通，還能不斷有突破性的 Idea 與成就，你應該是我工作生涯中的第一個 Mentor 吧！一起加油！</p><p>感謝「源來適你」社群的夥伴們，能有個地方，遇到許多志同道合的人，真的好幸運 ~ 希望大家能夠繼續快快樂樂的寫 Code 聊八卦！</p><h3>References:</h3><ul><li>[1] redis/rueidis: <a href="https://github.com/redis/rueidis/pull/459">Feat: Align </a><a href="https://github.com/redis/rueidis/pull/459">go-redis </a><a href="https://github.com/redis/rueidis/pull/459">JSONCmdable</a></li><li>[2] <a href="https://www.facebook.com/opensource4you/">Facebook · 源來適你</a></li><li>[3] <a href="https://gravitino.apache.org/">Apache Gravitino</a></li><li>[4] <a href="https://github.com/apache/gravitino/pull/2813">[#2807]: Improvement(IT): manage mysql containers in ContainerSuite</a></li><li>[5] <a href="https://github.com/apache/gravitino/pull/3195">[#3066]: Improvement(IT): manage PostgreSQL containers in ContainerSuite</a></li><li>[6] <a href="https://github.com/apache/gravitino/pull/3912">[#3751] feat(CI): Enable Apache Ranger plugin in Hive Docker image</a></li><li>[7] <a href="https://github.com/apache/gravitino/pull/5905">[#5873] feat(gvfs-fuse): add debug log for FuseApiHandle</a></li><li>[8] <a href="https://github.com/picolibc/picolibc/pull/35">Correct the typo in the DESCRIPTION</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=121e374026b6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understand how PostgreSQL handle IN-clause]]></title>
            <link>https://medium.com/@e850506/any-operator-3a478ffc1022?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/3a478ffc1022</guid>
            <category><![CDATA[postgresql]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Mon, 27 Mar 2023 11:36:25 GMT</pubDate>
            <atom:updated>2023-03-27T11:56:19.841Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://dbfiddle.uk/3gEK0GWK">db&lt;&gt;fiddle</a></p><p>Under PG16-dev:</p><p>NOTE: IN clause will be converted to ANY(ARRAY[]) if there are lots of elements inside IN clause.</p><ul><li>Parser: transform into `ScalarArrayOpExpr`</li><li>Optimizer: Selectivity Estimation function: `scalararraysel`</li><li>Executor: ExecEvalScalarArrayOp</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3a478ffc1022" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[NOTE: POSTGRESQL INDEXING: INDEX SCAN VS. BITMAP SCAN VS. SEQUENTIAL SCAN (BASICS)]]></title>
            <link>https://medium.com/@e850506/note-postgresql-indexing-index-scan-vs-bitmap-scan-vs-sequential-scan-basics-d15514de4221?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/d15514de4221</guid>
            <category><![CDATA[postgresql]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Sat, 18 Feb 2023 00:14:34 GMT</pubDate>
            <atom:updated>2023-02-18T00:14:34.574Z</atom:updated>
            <content:encoded><![CDATA[<p>This is my notes about <br>POSTGRESQL INDEXING: INDEX SCAN VS. BITMAP SCAN VS. SEQUENTIAL SCAN (BASICS)</p><p><a href="https://www.cybertec-postgresql.com/en/postgresql-indexing-index-scan-vs-bitmap-scan-vs-sequential-scan-basics/">https://www.cybertec-postgresql.com/en/postgresql-indexing-index-scan-vs-bitmap-scan-vs-sequential-scan-basics/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d15514de4221" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SELECTivity: ? Index Corelation — Fre]]></title>
            <link>https://medium.com/@e850506/selectivity-index-corelation-fre-255348286912?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/255348286912</guid>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Thu, 16 Feb 2023 12:33:50 GMT</pubDate>
            <atom:updated>2023-02-16T12:33:50.095Z</atom:updated>
            <content:encoded><![CDATA[<h3>SELECTivity: ? Index Corelation — Freq Update</h3><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=255348286912" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[NOTE: In Query Slow]]></title>
            <link>https://medium.com/@e850506/note-in-query-slow-2a1d692e9df8?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/2a1d692e9df8</guid>
            <category><![CDATA[postgresql]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Thu, 16 Feb 2023 11:26:22 GMT</pubDate>
            <atom:updated>2023-02-16T11:26:22.964Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://levelup.gitconnected.com/why-is-in-query-slow-on-indexed-column-in-postgresql-b716d9b563e2">https://levelup.gitconnected.com/why-is-in-query-slow-on-indexed-column-in-postgresql-b716d9b563e2</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2a1d692e9df8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Alter column add default to CURRENT_TIMESTAMP in PostgreSQL]]></title>
            <link>https://medium.com/@e850506/alter-column-add-default-to-current-timestamp-in-postgresql-e03176a9f1f8?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/e03176a9f1f8</guid>
            <category><![CDATA[plpgsql]]></category>
            <category><![CDATA[postgres]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Fri, 03 Feb 2023 02:20:29 GMT</pubDate>
            <atom:updated>2023-02-03T02:20:29.357Z</atom:updated>
            <content:encoded><![CDATA[<h3>Alter column add default to CURRENT_TIMESTAMP</h3><p><a href="https://dbfiddle.uk/GnwXenok">https://dbfiddle.uk/GnwXenok</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e03176a9f1f8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[jsonb_to_record in PostgreSQL]]></title>
            <link>https://medium.com/@e850506/jsonb-to-record-in-postgresql-c405128bb9ee?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/c405128bb9ee</guid>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[jsonbtorecord]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Mon, 16 Jan 2023 07:26:15 GMT</pubDate>
            <atom:updated>2023-01-16T07:26:15.641Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://dbfiddle.uk/UXHw-Pfx">Playground</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c405128bb9ee" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Use BCC tools `to trace postgres]]></title>
            <link>https://medium.com/@e850506/use-bcc-tools-to-trace-postgres-1365c779475f?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/1365c779475f</guid>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[ebpf]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Fri, 06 Jan 2023 06:52:26 GMT</pubDate>
            <atom:updated>2023-01-06T07:03:34.485Z</atom:updated>
            <content:encoded><![CDATA[<h3>Use BCC tools to trace postgres</h3><p>Here’s the makefile:</p><pre>all: trace<br><br>CON_NAME ?=&#39;&lt;container id or name&gt;&#39;<br>FUNC_NAME ?= &#39;&#39;<br>BIN_NAME ?= &#39;&#39;<br><br>DIR=$(shell docker inspect $(CON_NAME) -f &#39;{{.GraphDriver.Data.MergedDir}}&#39;)<br>BIN=$(DIR)/$(BIN_NAME)<br><br>trace:<br>        echo $(DIR)<br>        sudo funccount-bpfcc &#39;$(BIN):*$(FUNC_NAME)&#39;</pre><p>Here’s the comand to trace PostgreSQL 9.6 HeapTupleStatisfiesxxx Functions.</p><pre>$ make trace CON_NAME=my-db-1 FUNC_NAME=&quot;HeapTupleSatisfies*&quot; BIN_NAME=/usr/lib/postgresql/9.6/bin/postgres</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1365c779475f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mimic Rust Result in Go]]></title>
            <link>https://medium.com/@e850506/mimic-rust-result-in-go-414d209c4988?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/414d209c4988</guid>
            <category><![CDATA[go]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Mon, 02 Jan 2023 12:53:33 GMT</pubDate>
            <atom:updated>2023-01-02T12:53:33.246Z</atom:updated>
            <content:encoded><![CDATA[<pre>type Result[T any] struct {<br> R T<br> E error<br>}<br><br>func (r Result[T]) HasError() bool {<br> return r.E != nil<br>}<br><br>func (r Result[T]) Error() string {<br> return r.E.Error()<br>}<br><br>func a(i int) Result[int] {<br> if i%2 == 0 {<br>  return Result[int]{E: fmt.Errorf(&quot;some error&quot;)}<br> }<br> return Result[int]{i + 1, nil}<br>}<br>func main() {<br> res := a(3)<br> if res.HasError() {<br>  fmt.Println(&quot;err&quot;, res.E)<br> }<br> res2 := a(2)<br> if res2.HasError() {<br>  fmt.Println(&quot;err&quot;, res2)<br> }<br>}</pre><p><a href="https://go.dev/play/p/EreTF9drKVw">https://go.dev/play/p/EreTF9drKVw</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=414d209c4988" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Excel: Rank.EQ]]></title>
            <link>https://medium.com/@e850506/excel-rank-eq-3ed383978e9c?source=rss-3e1beff24abd------2</link>
            <guid isPermaLink="false">https://medium.com/p/3ed383978e9c</guid>
            <category><![CDATA[excel]]></category>
            <dc:creator><![CDATA[Unknowntpo]]></dc:creator>
            <pubDate>Mon, 02 Jan 2023 09:33:43 GMT</pubDate>
            <atom:updated>2023-01-02T09:33:43.303Z</atom:updated>
            <content:encoded><![CDATA[<ul><li>Use ROUND(RANDOM()*100) to generate dataset</li><li>Use RANK.EQ to rank the data.</li></ul><p><a href="https://docs.google.com/spreadsheets/d/16mczPYFbvo95MoqOhCjYvz--oAn2GDc_bXuEqO7ZQsE/edit?usp=sharing">https://docs.google.com/spreadsheets/d/16mczPYFbvo95MoqOhCjYvz--oAn2GDc_bXuEqO7ZQsE/edit?usp=sharing</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3ed383978e9c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>