<?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:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Tommy's Blog]]></title><description><![CDATA[Thoughts, photos, notes.]]></description><link>https://blog.tjtl.io/</link><image><url>https://blog.tjtl.io/favicon.png</url><title>Tommy&apos;s Blog</title><link>https://blog.tjtl.io/</link></image><generator>Ghost 5.75</generator><lastBuildDate>Fri, 17 Apr 2026 05:02:42 GMT</lastBuildDate><atom:link href="https://blog.tjtl.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[On taking an architecture class]]></title><description><![CDATA[<p>I&#x2019;ve always had a deep appreciation for architecture: the geometry, the structure, the ideas behind it, as well as the history and cultural context of buildings in all their forms. Some of my old friends may still remember that I used to be especially interested in photographing buildings</p>]]></description><link>https://blog.tjtl.io/architecture-at-uiuc/</link><guid isPermaLink="false">69691fc1ba75b905d9c568b4</guid><category><![CDATA[Architecture]]></category><category><![CDATA[Design]]></category><category><![CDATA[UIUC]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Fri, 06 Feb 2026 05:00:00 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2026/02/Screenshot-2026-02-05-at-21.43.21.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2026/02/Screenshot-2026-02-05-at-21.43.21.png" alt="On taking an architecture class"><p>I&#x2019;ve always had a deep appreciation for architecture: the geometry, the structure, the ideas behind it, as well as the history and cultural context of buildings in all their forms. Some of my old friends may still remember that I used to be especially interested in photographing buildings on the street, whether in the narrow alleys of Tsim Sha Tsui in Hong Kong or in the bustling downtown areas of Boston.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cortex.persona.co/w/1920/q/94/i/0ee573c5b2d8da9b9a5c5ea84ac183c9e81b450c35cd444404e0344d85feb6a3/IMG_5451.JPG" class="kg-image" alt="On taking an architecture class" loading="lazy"><figcaption><span style="white-space: pre-wrap;">I was a postcard-making enthusiast because I&apos;m deeply fell in love with </span><a href="https://tjtl.persona.co/project-architectureofthecity?ref=blog.tjtl.io"><span style="white-space: pre-wrap;">photographing buildings</span></a><span style="white-space: pre-wrap;">. Every time I visited a new place, I&#x2019;d come up with a new set of postcards and send a few to my friends.</span></figcaption></figure><p>About a year ago, while I was still in school, I took an introductory course in the architecture department (<a href="https://courses.illinois.edu/schedule/2024/fall/ARCH/171?ref=blog.tjtl.io" rel="noreferrer">ARCH 171</a>). The class was essentially an introduction to what &quot;Design&quot; means for students interested in architecture. 9 years before this class, I was working as a freelance designer&#x2013;doing UI, interaction design, and branding for small companies&#x2013;and I thought immersing myself in design from scratch like this, should be a fun experience. It turned out to be exactly that. I genuinely enjoyed spending time with the younger peers and seeing the creativity that emerged during our presentations.</p><p>About two weeks into the class, I remember one afternoon after studio time when two professors came over to our group&#x2019;s table. It was our first assignment. We were each assigned an existing architectural project by a well-known architect. Based only on observation, we had to draw architectural plans and then build a model that represents the idea/implication of the project. After briefly walking the professors through my process, they became interested in my draft, where I used a grid system to estimate and construct the curve of the building&#x2019;s fa&#xE7;ade, essentially integrating curvature through a structured grid. They asked what year I was in, what my major was, and then said something along the lines of, &#x201C;You should study architecture.&#x201D;</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2026/02/image.png" class="kg-image" alt="On taking an architecture class" loading="lazy" width="1926" height="1106" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/image.png 1600w, https://blog.tjtl.io/content/images/2026/02/image.png 1926w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">I can do this all day.</span></figcaption></figure><p>I was very, very inspired by that moment. At one point in my life, I truly did dream of studying architecture. I still remember traveling along the East Coast about ten years ago, photographing buildings designed by my favorite architects&#x2013;works by Le Corbusier and I. M. Pei around the Cambridge area. Although my life path has taken a different direction, simply being able to appreciate how powerful and beautiful architecture can be still means a lot to me. And for now, that feels like enough.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2026/02/image-1.png" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1423" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/image-1.png 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/image-1.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/image-1.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/image-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">I used to maintain a project called &quot;</span><a href="https://aotc.persona.co/?ref=blog.tjtl.io"><span style="white-space: pre-wrap;">Architecture of the City</span></a><span style="white-space: pre-wrap;">&quot;, compling a list of architectural photos I took around the world. </span></figcaption></figure><hr><p>Now let&apos;s get to the work. All of them shown here was created about a year ago, and the only reason I decided to write these thoughts down is because I genuinely loved what I designed, and I did it from scratch. There were no AI tools involved, just me, my thoughts, and my passion. I wanted to document it here as a small homage to a dream I once had.</p><p>The class itself offered a glimpse into what an architectural education feels like, especially at a school known for its strong architecture program. The two major assignments were structured around a midterm review and a final review, and each required presenting our work in front of both students and professors. I really enjoyed this in-person presentation style.</p><hr><h2 id="midterm-review">Midterm Review</h2><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0001.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0001.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0001.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0001.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0001.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0002.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0002.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0002.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0002.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0002.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0003.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0003.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0003.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0003.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0003.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0004.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0004.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0004.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0004.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0004.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0005.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0005.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0005.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0005.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0005.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0006.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0006.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0006.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0006.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0006.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0007.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0007.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0007.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0007.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/arch-171---midterm-upload---Tommy-Liu---jingtao8_page-0007.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><hr><h2 id="final-compendium">Final Compendium</h2><p>I was excited to share my work at the end of the semester. During a group presentation where all students&#x2019; projects were displayed in the lounge of Temple Buell Hall, I felt that being an architecture student is something quite special. The environment was formal yet enjoyable. Architecture sits at the intersection of art, design, and engineering, and that combination gives it a strong sense of professionalism and purpose.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2026/02/image-5.png" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1038" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/image-5.png 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/image-5.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/image-5.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/image-5.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Students&apos; work showing in the lounge at TBH.</span></figcaption></figure><p>Let me briefly walk you through my process for this miniature project. We were asked to design an observation tower for one of three sites in the University Arboretum near the Japan House&#x2014;a peaceful and picturesque area. I chose Site C, located south of the Japan House, with lush greenery and an open corner where I placed my tower. I used to live near the arboretum and visited it often, so I felt a personal connection to the site.</p><p>Inspired by the traditional hexagonal gates of Suzhou Gardens, I wanted the design to blend naturally with its surroundings. Each floor of the tower rotates 90 degrees, offering distinct views:</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2026/02/image-2.png" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1114" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/image-2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/image-2.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/image-2.png 1600w, https://blog.tjtl.io/content/images/2026/02/image-2.png 2072w" sizes="(min-width: 720px) 720px"></figure><ul><li>the west grove and Japan House parking lot, </li><li>the south grove and Pollinatarium, </li><li>the Orchard Downs housing community to the east, </li><li>and the Japan House and Idea Garden to the north. </li></ul><p>The open ground floor creates an inviting entry, while the rooftop offers panoramic views. Visitors ascend via stairs or an elevator, and the structure is supported by four main pillars.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2026/02/image-3.png" class="kg-image" alt="On taking an architecture class" loading="lazy" width="1474" height="770" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/image-3.png 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/image-3.png 1000w, https://blog.tjtl.io/content/images/2026/02/image-3.png 1474w" sizes="(min-width: 720px) 720px"></figure><p>The idea behind this project aligns closely with my love for wandering and exploring spaces. Walking through Area C gave me a strong sense of connection to the natural elements&#x2014;trees, wind, and weather&#x2014;which directly shaped the design approach behind my work. As &quot;<a href="https://asca.uva.nl/content/research-groups/warp/walking-as-research-practice.html?cb=&amp;ref=blog.tjtl.io">Walking as Research Practice</a>&quot; beautifully states: &#x201C;We knead, imprint, trample, and leave traces, whether we want to or not.&#x201D;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0001-1.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0001-1.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0001-1.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0001-1.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0001-1.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0002-1.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0002-1.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0002-1.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0002-1.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0002-1.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0003.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0003.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0003.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0003.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0003.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0004.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0004.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0004.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0004.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0004.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0005.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0005.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0005.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0005.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0005.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0006.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0006.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0006.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0006.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0006.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0007.jpg" class="kg-image" alt="On taking an architecture class" loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0007.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0007.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0007.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2026/02/171-FINAL-COMPENDIUM-UPLOAD---jingtao8---v2_page-0007.jpg 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><b><strong style="white-space: pre-wrap;">Materials used</strong></b><span style="white-space: pre-wrap;">: PET Sheet (0.04&quot; thickness), Balsa Wood Sticks (1/8in &#xD7; 1/8in)</span></figcaption></figure><hr><p>When I finished school last summer and moved back to the Bay Area, I brought this model with me on the airplane, carefully wrapped in foam. The good news was that it&#x2019;s still intact, and now it sits on my desk every day.</p><p>Maybe someday, it will motivate me to design something bigger.</p>]]></content:encoded></item><item><title><![CDATA[My climbing gym board game!]]></title><description><![CDATA[<p>This board game is the result of my coursework in <a href="https://courses.illinois.edu/schedule/2025/spring/INFO/416?ref=blog.tjtl.io">INFO 416</a> during Spring 2025 at the University of Illinois. As a climbing enthusiast, I was able to put my thoughts and the game design concepts I learned from the class into practice and create an actual physical game from</p>]]></description><link>https://blog.tjtl.io/climbing-board-game/</link><guid isPermaLink="false">681f9f3c1bf61004816e9ce7</guid><category><![CDATA[Bouldering]]></category><category><![CDATA[Maker]]></category><category><![CDATA[UIUC]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Thu, 15 May 2025 14:21:33 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2025/05/Screenshot-2025-05-10-at-13.57.06.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2025/05/Screenshot-2025-05-10-at-13.57.06.png" alt="My climbing gym board game!"><p>This board game is the result of my coursework in <a href="https://courses.illinois.edu/schedule/2025/spring/INFO/416?ref=blog.tjtl.io">INFO 416</a> during Spring 2025 at the University of Illinois. As a climbing enthusiast, I was able to put my thoughts and the game design concepts I learned from the class into practice and create an actual physical game from scratch. I really appreciate that people enjoy the idea and the game itself!</p><hr>
<!--kg-card-begin: html-->
<div class="toc"></div>
<style>
.toc:before {
  content: "Table of Content";
  display: block;
  margin-bottom: 20px;
  font-size: large;
  font-weight: bold;
  border-bottom: 1px dashed #dadada;
  padding-bottom: 10px;
}
.toc {
  padding: 30px;
  border: 1px solid #dadada;
  border-radius: 5px;
  background-color: #fafafa;
}
a.toc-link {
  font-size: 80%;
  text-decoration: none;
}
li.toc-list-item {
    margin-top: 0;
}
.toc-list .is-collapsible {
  margin-left: 15px;
  color: #666;
}
</style>
<!--kg-card-end: html-->
<hr><h2 id="creating-the-game">Creating the Game</h2><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="1140" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2025/05/image.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Overview of all the game components in my board game (V3.0 Rev. May/2025)</span></figcaption></figure><p>At the ideation stage of designing the physical game, I knew right away it had to be about climbing. Climbing has been such a big part of my life in the past year, and I felt like it was an area of culture that hadn&#x2019;t really been explored much in board games. What wasn&#x2019;t clear to me at the start, though, was how exactly that would look. I had once imagined building a digital climbing gym simulation game&#x2014;something where players could either be climbers or gym owners, setting routes and managing the space. But as I thought more about what kind of game would actually be fun to play with friends around a table, it made more sense to center the experience around the climber: their progression, the gym environment, and the quirky moments that make climbing so community-oriented and personal.</p><p>From the start, I wanted the game to be both fun and grounded. I designed it as a kind of simulation of the bouldering gym experience. I filled the cards that the player drew with climbing jokes and references&#x2014;like losing chalk to someone else in the gym, or gaining stamina by drinking Yerba Mate, which, if you&#x2019;ve spent time in any climbing gym, you know is basically part of the culture.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-1.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="1134" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-1.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-1.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-1.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2025/05/image-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">One of the slides from my pitch deck to the class at the beginning of my making process.</span></figcaption></figure><p>While refining Boulder Quest, I focused on several key aspects to improve both gameplay and player experience. One of the main priorities was making sure the game remained accessible to newcomers while still feeling authentic to climbers, which meant carefully balancing the use of climbing terminology. I also spent time adjusting the overall game balance&#x2014;especially the relationship between resource gain and loss&#x2014;to keep the pacing engaging without making it overly punishing. I also considered the physical usability of the components; I paid close attention to how resources were tracked, how tokens were placed, and how intuitive the player boards felt during gameplay. These areas became central to my iteration process among all the concerns</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-2.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="1134" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-2.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-2.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2025/05/image-2.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">A slide about the rules of the game from my pitch deck after I made the first version.</span></figcaption></figure><hr><h2 id="iterating-the-game-feedback-challenges">Iterating the Game: Feedback &amp; Challenges</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-3.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="589" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-3.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-3.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-3.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2025/05/image-3.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Early log of the playtesting briefings.</span></figcaption></figure><p>Throughout the semester, I held four rounds of playtesting, and every session gave me something new to think about. One of the most consistent themes in the feedback was about resource balance. Players pointed out that the early versions of the game had too much loss and not enough gain&#x2014;especially from the gym and training cards. Even though people found the flavor text funny, the high frequency of losses made the game feel punishing. It discouraged players from drawing those cards sometimes, which wasn&#x2019;t what I wanted.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2025/05/image-5.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="828" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-5.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-5.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-5.png 1600w, https://blog.tjtl.io/content/images/2025/05/image-5.png 2354w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-4.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="580" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-4.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-4.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-4.png 1600w, https://blog.tjtl.io/content/images/2025/05/image-4.png 2220w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Paper prototype for the game.</span></figcaption></figure><p>To fix this, I adjusted the math behind the cards. I increased the frequency and value of gains and softened the consequences of losses. Behind the scenes, I created a spreadsheet to simulate various draw combinations and balance outcomes across different situations. I want to make sure the game always felt like it was offering progress, even when things didn&#x2019;t go perfectly.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-7.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="703" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-7.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-7.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-7.png 1600w, https://blog.tjtl.io/content/images/2025/05/image-7.png 2134w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Early version of the game board design. The gym map from Bridges Rocks Gym is really helpful to me.</span></figcaption></figure><p>Feedback also helped me realize that tracking resources needed to be more visible and intuitive. Originally, I didn&#x2019;t even include a section on the climber&#x2019;s board for skill tokens. I thought it might simplify the game to have fewer tokens to move around. That turned out to be a mistake. Without a clear place to track skills, players kept forgetting what they had, and the extra mental load made the game less enjoyable. In the final version, I added skill slots directly onto the board&#x2014;and that change was well-received. It made everything more transparent and gave players a stronger sense of control over the resource allocation.</p><p>Another issue that came up during playtests was unclear placement of tokens. The layout of the climber&#x2019;s board sometimes caused players to confuse where strength, skill, stamina, or chalk tokens were supposed to go. I&#x2019;ve brainstormed a few potential solutions&#x2014;like redesigning the board with clearer zones or using icon-based trays&#x2014;but for now, I&#x2019;ve included a cheat sheet and a &#x201C;spectator&#x201D; role to help smooth over the learning curve. The spectator doesn&#x2019;t play, but they help distribute tokens, keep track of rules, and speed things up. That role ended up being helpful in longer sessions.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/image-6.png" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="1755" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/image-6.png 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/image-6.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/image-6.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2025/05/image-6.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Code I wrote to generate the game cards.</span></figcaption></figure><p>Aside from gameplay issues, one of the biggest challenges I ran into was producing the physical prototype. Digitally, the design process went smoothly. I built a Python script that allowed me to feed in card data from a JSON file and automatically generate all the visuals I needed. That saved me a lot of time and gave me the flexibility to make changes quickly when balancing the cards. But printing them was a different story. I couldn&#x2019;t find a campus printer that could do double-sided prints on thick cardstock, so I had to get creative. I manually aligned front and back layouts, printed them out, and then glued them onto pre-cut cardboard pieces. It wasn&#x2019;t the prettiest or easiest solution, but it gave the cards enough weight to actually feel good in players&#x2019; hands.</p><p>Another tricky part was managing the number of stages in the game. At first, I had three stages with different climbing grades, but that made the game drag on too long. In one session, we only played stage 1 and it cost about 30 minutes. So I restructured the stages into just two, with each wall stacking easier problems on top and harder ones underneath. It gave the game a natural sense of progression without overstaying its welcome, and the total playtime now sits at a comfortable 1 to 1.5 hours.</p><p>In the end, each challenge&#x2014;whether it was a design decision or a production hurdle&#x2014;became a part of the game&#x2019;s story. Boulder Quest evolved not just because I had a vision, but because other people played it, questioned it, and helped me see it from different angles. That feedback loop, that collaboration, is a lot like climbing itself: you try something, you fall, you learn, and then you try again&#x2014;this time a little smarter.</p><hr><h2 id="vision-shortcomings">Vision &amp; Shortcomings</h2><p>From the beginning, my vision for Boulder Quest was to create a board game that captured the essence of indoor climbing&#x2014;not just the physical challenge, but also the community vibe, the in-jokes, and the feeling of progression that climbers experience session after session. I think I was able to achieve that balance in many ways. The humor landed well during playtests, the theme resonated with climbers, and the pacing&#x2014;after several adjustments&#x2014;felt satisfying without being too heavy.</p><p>That said, there are still areas where the game fell short. Resource balance, while much improved, isn&#x2019;t perfect. For example, in the final playtest, players struggled to collect specific resources like &#x201C;body work&#x201D; during the harder stages, which led to some stalling. It wasn&#x2019;t a game-breaking issue, but it showed that certain card distributions still need more variety and flexibility. Physical accessibility is another area that needs more work. Token management, in particular, was more tedious than I&#x2019;d like&#x2014;it took up more time and attention than it should, and as the &#x201C;spectator,&#x201D; I found myself doing a lot of manual cleanup just to keep the game moving.</p><p>These are things I plan to address in future iterations, but I also see them as natural growing pains in a project that started from scratch and evolved through trial, error, and a lot of learning.</p><hr><h2 id="core-values-intended-experience"><strong>Core Values &amp; Intended Experience</strong></h2><p>I wanted the game to reflect the idea that climbing isn&#x2019;t just about reaching the top&#x2014;it&#x2019;s about the small wins, the fun moments, and the learning portions. That meant designing a game where players of different skill levels could enjoy themselves, where setbacks didn&#x2019;t feel punishing, and where the gameplay encouraged both individual strategy and light social interaction. The character roles were built to reflect different climbing styles and personalities, without creating a strict power hierarchy.</p><p>The play experience I envisioned was something calm but engaging&#x2014;strategic but never stressful. I wanted each turn to feel like a meaningful choice: whether to rest, push through a problem, or train for something harder. I also wanted to recreate the rhythm of a real climbing session, where difficulty builds gradually, and where players feel themselves getting better&#x2014;or at least more prepared&#x2014;as they go. I wasn&#x2019;t aiming for intense competition; instead, I focused on friendly tension, where players can still cheer each other on, laugh at the card effects, and share a story by the end of the game. If the table ends up joking about someone hoarding chalk or trying to send a V6 with no stamina left, then I&#x2019;ve done my job right.</p><hr><h2 id="looking-forward-improvements-accessibility-audience"><strong>Looking Forward: Improvements, Accessibility &amp; Audience</strong></h2><p>There&#x2019;s still plenty of room for Boulder Quest to grow in future iterations. One of the first things I want to improve is the game&#x2019;s flow and progression mechanics. Right now, there&#x2019;s a loophole where players could avoid climbing entirely by just drawing gym and training cards, which slows the game down and breaks the intended rhythm. I&#x2019;d like to introduce incentives for attempting problems regularly. I also plan to diversify the card requirements&#x2014;especially in the higher grades&#x2014;so that players don&#x2019;t get stuck searching for one specific type of resource. Token placement and resource tracking are still more tedious than they should be, so I&#x2019;m exploring better board layouts and maybe even component redesigns to make the experience smoother. Down the line, I&#x2019;d love to add random events, asymmetric character abilities, and more social mechanics to better reflect the playful unpredictability and collaboration in real-world climbing.</p><p>In terms of accessibility and approachability, I&#x2019;d say the game is moderately accessible and approachable. It uses familiar mechanics like turn-taking, resource management, and character-based strategy, which helps new players get into it quickly. The theme is clear, the player aids are useful, and most people pick up the flow of the game within the first few rounds. That said, the game does have a lot of physical components&#x2014;tokens, icons, boards&#x2014;and that can feel overwhelming at first. I&#x2019;ve tried to make that more manageable with things like the cheat sheet and the optional spectator role, but I know there&#x2019;s more I can do to make the game less fiddly without losing its depth.</p><p>As for the intended audience, Boulder Quest is designed for teens and adults aged 12 and up, especially those with an interest in climbing or casual strategy games. I chose that age range partly because of the laser-cut wooden components, but also because the game requires a bit of planning and attention to detail that younger players might not enjoy as much. It&#x2019;s meant for small groups&#x2014;2 to 4 players&#x2014;like friends at a climbing gym or people looking for a chill, thematic game night. I&#x2019;ve tried to make it welcoming for both climbers and non-climbers by blending familiar cultural references with intuitive design. Ideally, the game feels like a relaxed climb session: a little competitive, a little chaotic, and something everyone walks away from with a good story.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2025/05/DSCF1497-2.jpg" class="kg-image" alt="My climbing gym board game!" loading="lazy" width="2000" height="2000" srcset="https://blog.tjtl.io/content/images/size/w600/2025/05/DSCF1497-2.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2025/05/DSCF1497-2.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2025/05/DSCF1497-2.jpg 1600w, https://blog.tjtl.io/content/images/2025/05/DSCF1497-2.jpg 2048w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">The game with a laser-cut game box! (version 3.0 Rev. April 2025)</span></figcaption></figure><hr><h2 id="playtest-details-thanks">Playtest Details &amp; Thanks!</h2><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x2764;&#xFE0F;</div><div class="kg-callout-text">Special thanks to the following people who have playtested it (as of May 6, 2025): <br><b><strong style="white-space: pre-wrap;">Yiyu, Aaron, Min, Danny, Julia, Jackson, Duncan, Karsh, Muskan, Daniel, Josh, Joe.</strong></b></div></div><p>The current Boulder Quest has gone through 3 version of iterations:</p><ul><li><strong>Version 1.0</strong>: first prototype</li><li><strong>Version 2.0</strong>: updated prototyped based on 1.0<ul><li>based on the feedback from the first few playtests</li></ul></li><li><strong>Version 3.0</strong>: final prototype</li></ul><p>Here are some of the details for each playtest sessions:</p><ul><li><strong>May 7</strong><ul><li><strong>Playtesters</strong>: Dave, Zhiheng, Lizi, and Shilan</li><li><strong>Play time</strong>: roughly 1.5 hrs. finished the whole game and have winner.</li><li><strong>Where</strong>: Urbana Boulders</li><li><strong>Version played</strong>: version 3.0</li></ul></li><li><strong>Feb 26</strong><ul><li><strong>Playtesters</strong>: Min, Aaron, Josh, and Daniel</li><li><strong>Play time</strong>: roughly 40 minutes. Didn&#x2019;t start stage 2.</li><li><strong>Where</strong>: Urbana Boulders</li><li><strong>Version played</strong>: version 2.0</li></ul></li><li><strong>Feb 22</strong><ul><li><strong>Playtesters</strong>: Yiyu, Joe, and Tommy (myself)</li><li><strong>Play time</strong>: roughly 40 minutes.</li><li><strong>Where</strong>: Urbana Boulders</li><li><strong>Version played</strong>: version 1.0</li></ul></li><li><strong>Feb 20</strong><ul><li><strong>Playtesters</strong>: Julia, Jackson, Danny, and Yuge</li><li><strong>Play time</strong>: roughly 20 minutes. Didn&#x2019;t finish stage 1</li><li><strong>Where</strong>: Armory 182 in class</li><li><strong>Version played</strong>: version 1.0</li></ul></li></ul><hr><h2 id="%F0%9F%91%80-there-will-be-more">&#x1F440; There will be more!</h2>]]></content:encoded></item><item><title><![CDATA[Climbing wrapped 2024]]></title><description><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-white"><div class="kg-callout-text"><i><em class="italic" style="white-space: pre-wrap;">TL;DR</em></i></div></div><blockquote>I uploaded this blog post to Google&apos;s NotebookLM and had it generate a podcast for me. It turned out surprisingly well in terms of both audio quality and overall accuracy (and funny). If you&apos;re interested, here&apos;s the link to the <a href="https://notebooklm.google.com/notebook/2f1db5fd-7b5f-4aae-9b33-2c5aad2eacb1/audio?ref=blog.tjtl.io" rel="noreferrer">clip</a> (around</blockquote>]]></description><link>https://blog.tjtl.io/climbing-wrapped-2024/</link><guid isPermaLink="false">6761ed9b6a3cbe04458c7750</guid><category><![CDATA[Bouldering]]></category><category><![CDATA[Notes]]></category><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Wed, 18 Dec 2024 05:00:00 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card kg-callout-card kg-callout-card-white"><div class="kg-callout-text"><i><em class="italic" style="white-space: pre-wrap;">TL;DR</em></i></div></div><blockquote>I uploaded this blog post to Google&apos;s NotebookLM and had it generate a podcast for me. It turned out surprisingly well in terms of both audio quality and overall accuracy (and funny). If you&apos;re interested, here&apos;s the link to the <a href="https://notebooklm.google.com/notebook/2f1db5fd-7b5f-4aae-9b33-2c5aad2eacb1/audio?ref=blog.tjtl.io" rel="noreferrer">clip</a> (around 13 minutes).</blockquote><hr><p>It&apos;s almost the end of the year&#x2014;time for a thorough climbing wrap-up. How I&apos;ve been documenting my climbing progress has been extremely helpful to me and was quite useful when I decided to write this article. To begin, here are some highlights:</p><ul><li>I <a href="https://blog.tjtl.io/bouldering/" rel="noreferrer">began climbing</a> on <strong>February 7, 2024</strong>, at Urbana Boulders.</li><li>I started uploading my climbing videos on <a href="https://www.instagram.com/dijkstrawberry/?ref=blog.tjtl.io" rel="noreferrer">Instagram</a> in <strong>March</strong>.</li><li>I&#x2019;ve been visiting the climbing gym regularly, about <strong>4 times a week</strong>.</li><li>I&#x2019;ve spent roughly <strong>400+ hours climbing</strong> in gyms since I started (as of today).</li><li>I&apos;ve sent <strong>11 V6-7</strong> (gym grade)<strong> problems </strong>so far.<ul><li><a href="https://www.instagram.com/dijkstrawberry/reel/C9F4dGau8Ve/?ref=blog.tjtl.io">[1]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/C9OHrk7yjvL/?ref=blog.tjtl.io">[2]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/C-Yb0n1yzaa/?ref=blog.tjtl.io">[3]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/C-1Uj_8ODwV/?ref=blog.tjtl.io">[4]</a> at Mosaic Boulders</li><li><a href="https://www.instagram.com/dijkstrawberry/reel/C6C3ZUqOb08/?ref=blog.tjtl.io">[5]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DBfcRlTtiUF/?ref=blog.tjtl.io">[6]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DCxbpkqOk0N/?ref=blog.tjtl.io">[7]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DDbD9i9Ouri/?ref=blog.tjtl.io">[8]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DDlYD26uNqd/?ref=blog.tjtl.io">[9]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DDlaTqvucn0/?ref=blog.tjtl.io">[10]</a> <a href="https://www.instagram.com/dijkstrawberry/reel/DDqbS9PtMlF/?ref=blog.tjtl.io">[11]</a> at Urbana Boulders</li></ul></li><li>I&#x2019;ve <strong>visited 12 climbing gyms</strong> in total so far.</li><li>I had my <strong>first outdoor bouldering</strong> experience in Berkeley this summer.</li></ul><p></p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/12/1218__thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/12/1218_.mp4" poster="https://img.spacergif.org/v1/1080x1080/0a/spacer.png" width="1080" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/12/1218__thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">7:24</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">My favorite climbs this year so far (mostly recent ones)</span></p></figcaption>
        </figure><p>The journey so far has been an absolute blast, and here is my full reflection.</p><hr>
<!--kg-card-begin: html-->
<div class="toc"></div>
<style>
.toc:before {
  content: "Table of Content";
  display: block;
  margin-bottom: 20px;
  font-size: large;
  font-weight: bold;
  border-bottom: 1px dashed #dadada;
  padding-bottom: 10px;
}
.toc {
  padding: 30px;
  border: 1px solid #dadada;
  border-radius: 5px;
  background-color: #fafafa;
}
a.toc-link {
  font-size: 80%;
  text-decoration: none;
}
li.toc-list-item {
    margin-top: 0;
}
.toc-list .is-collapsible {
  margin-left: 15px;
  color: #666;
}
</style>
<!--kg-card-end: html-->
<p></p><hr><h2 id="my-climbing-stats">My Climbing Stats</h2><h3 id="the-hardness-of-the-grading-system">The &quot;Hardness&quot; of the Grading System </h3><p>There are two major grading systems in bouldering: the Fontainebleau scale and the V-scale. I started climbing in the United States, where the V-scale is mostly used. Some gyms use a single-digit V-scale, while others use range-based grades that can sometimes be narrow or wide (e.g., V4-5, or V4-6). The strictness of grading, however, varies between gyms&#x2014;especially when comparing commercial franchise gyms to smaller neighborhood gyms. For simplicity, I&#x2019;ll disregard outdoor bouldering grades here, as I&#x2019;ve only been on outdoor trips twice.</p><p>To me, the grading system feels rewarding when I send a higher-grade problem, but it&apos;s also important for me to be aware that I&apos;m not a competitive climber. My goal is simply to progress naturally, without rushing, while spending time with friends&#x2014;whether that means helping each other on climbs, chatting, or just playing little climbing games.</p><p>At Urbana Boulders, they use a six-color tag system to represent ranges of the V-scale:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image.png" class="kg-image" alt loading="lazy" width="1810" height="576" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image.png 1600w, https://blog.tjtl.io/content/images/2024/12/image.png 1810w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Blue: VB. Red: V0-V2. Yellow: V2-V4. Green: V4-V6. Purple: V6-V8. Pink: V8+</span></figcaption></figure><p>There used to be a white tag, which was an &quot;unknown&quot; grade that route setters would assign immediately after resetting a new set of climbs. A week or so later, after the reset, each white-tag climb would be updated with its actual grade. However, from what I&#x2019;ve heard, some people complained about the white tags, and the gym removed them afterward. I personally like the white tags for two reasons. First, grades are largely unimportant for non-comp climb&#x2014;it&apos;s about having fun and thoroughly studying the route. If I get stuck, I can discuss with friends to come up with different possible beta. Second, I can use those new routes as a metric to test how much I&apos;ve progressed. For the first couple of weeks when the white tags were still there, I was able to finish about 60% of the climbs right after they were set in one session. The most sends I got was roughly 80%, and later I found that the problems I hadn&#x2019;t sent in that session were all V6+.</p><p>In my experience, grading at Urbana Boulders is often stricter compared to most other franchise gyms I&#x2019;ve visited. Although softer routes can sneak in depending on the route setters, I would say most climbs are graded fairly strictly within their defined ranges. Occasionally, the routesetters may intentionally set softer climbs to motivate climbers who want to achieve higher grades. I&#x2019;ve experienced this myself: I sent <a href="https://www.instagram.com/p/C6C3ZUqOb08/?ref=blog.tjtl.io">a purple tag (V6-8) in April</a> after only two months of climbing. I was surprised at the time because the problem was set with only huge cube-shaped holds on a slab wall (bolt holes are off for certain). I credit my decent balance ability for that send. Jed, the route setter, and I had a small talk, and that&apos;s when I first learned about the term &quot;sandbagging.&quot; It means that a climb is much easier than it is graded.</p><p>Grading a route is inherently subjective because climbing is a sport with so much variation. Some climbers are flexible, some are powerful, some have stronger fingers, while others are good at core strength. Setting a route that encapsulates all these factors is impossible, or at least highly time-consuming for route setters. For instance, many physically strong climbers (typically tall) in the gym weren&#x2019;t able to finish that sandbagged purple-tag climb on the slab wall after a fair number of attempts, but as a smaller climber, I found it more manageable. This kind of variability raises the question: how can you assign an &quot;objective&quot; grade? Because of this, I try to keep the grading debate in perspective.</p><p>The other day, I was talking with a friend, Aaron. We discussed how this two-level, wide-range grading tag system is sometimes inconsistent in terms of the difficulty climbers experience, and how it may give false hope for sending a hard green tag in the short term if they are not prepared. The grade may float around from V4 to V6 from time to time. To me, a V6 can be significantly harder and different from a V4. Recently, at Urbana Boulders, I noticed that many of the yellow tags now reach near V4, while some green tags were probably downgraded to V4. Similarly, I&#x2019;ve found that almost one-fourth of the purple tags fall to V6 in terms of the strength and skills required to finish them. But there may be more to this grading style than meets the eye.</p><p>I&apos;ve also climbed at gyms that use a single-digit V-scale grading system, but I find it less reliable because the 0-7 range here in the States is already wide, making it hard to find a good balance. But it&apos;s straightforward, for sure. Mosaic Boulders is a small, cozy gym just two blocks away from UC Berkeley; they use a one-grade range system. In this system, each color represents a specific V-scale range with no overlaps: V0-V1, V2-V3, V4-V5, V6-V7, and so on. While grading subjectivity still exists, I think this system somehow minimizes inconsistencies, and I prefer it this way.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image-5.png" class="kg-image" alt loading="lazy" width="1734" height="792" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-5.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-5.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-5.png 1600w, https://blog.tjtl.io/content/images/2024/12/image-5.png 1734w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Gradings at Mosaic Boulders this summer.</span></figcaption></figure><p>Since I started climbing, I&apos;m confident that I&#x2019;ve sent at least 300 problems and have around 200 sends documented on my Instagram. Over time, I&#x2019;ve developed my own view of difficulty levels. Remember, the grading numbers I&#x2019;ve mentioned here are based on how I perceive climbs in gyms on the West Coast and Midwest of the United States.</p><ul><li><strong>VB, V0, V1 </strong>(i<strong>ntroductory level</strong>): Holds are mostly jugs or jug-like holds, with a comfortable introduction to basic types like pinches, slopers, and wider pockets. These climbs are straightforward&#x2014;often strength alone is enough to pull you to the top, even without good techniques.</li><li><strong>V2, V3 </strong>(<strong>beginner to intermediate transition</strong>): Slightly tougher holds like shallow crimps and small two-finger pockets are introduced. The placement of holds may sometimes feel unintuitive, and requires climbers to rely more on intuition or strength/endurance.</li><li><strong>V4, V5, V6</strong> (<strong>intermediate level</strong>): Introduces 5-10mm crimps, smoothed-out volumes, small foot chips, and flat slopers. More &quot;creative,&quot; specialized holds (like complex pinches or steep slopers) also come into play, such that they expose climbers to styles they might see outdoors.</li><li><strong>V6+</strong> (<strong>advanced level</strong>): I&#x2019;ve only climbed one V7 so far (with about 80% confidence that it&#x2019;s a strict V7), so I don&#x2019;t have much personal experience to write about yet.</li></ul><blockquote>Note: This breakdown ignores wall styles like slab and overhang&#x2014;but those affect difficulty in their own ways.</blockquote><p>Beyond individual gym grading, V-scale grading also differs significantly by region. For example, many Asian gyms (e.g., in Japan and Hong Kong) tend to deflate their grades&#x2014;something I&#x2019;ve heard from influencers and friends in the scene. A V6 in the United States (if strictly graded) might only be equivalent to a V3 or V4 in Japan. This means that<strong> simply discussing grades in isolation often doesn&#x2019;t tell the full story about a climb or the climber&#x2019;s ability</strong>. As an example, one of my friends, S, who climbs in Singapore would grade the only V7 I finished, which I&#x2019;m going to discuss later, as a V5-6.</p><p>Grades are fun. They&#x2019;re enjoyable because they give a relatively objective sense of progress, but they can also be draining if you overthink them or let them affect your mental state. Whether my friends or I send a harder grade, we chat about it or celebrate&#x2014;that&#x2019;s what matters most. And when I sent my first few V6-7s, the only feeling I had was being grateful for the people on the crash pad cheering me on.</p><hr><h3 id="10-months-as-a-milestone">10 Months as a Milestone</h3><p>Now, focusing on myself, I want to use this blog post as a way to measure how my climbing ability has progressed since I started and as a reference for my future self. Maybe it can be useful to others as well. Since I&#x2019;ve visited Urbana Boulders the most, I&#x2019;ll primarily use my experience there for reference, along with some climbs I&#x2019;ve done at Mosaic.</p><p>In general, I&#x2019;m able to finish every <strong>green tags (V4-6)</strong> and below, so V5 and low-end V6 feels completely doable for me. That is, I&apos;m sure that I can complete these within 30 attempts. I consider my current climbing level as follows:</p><ul><li>For&#xA0;<strong>yellow tags (V2-4)</strong>: I&#x2019;m roughly 90% confident I can flash them, and I&#x2019;m 100% sure I can finish them within a few attempts.</li><li>For&#xA0;<strong>green tags (V4-6)</strong>: I&#x2019;m rouhgly 50% confident I can flash them. With the recent resets, I&#x2019;d estimate the flashable green tags lean more toward V4 or V5 from my perspective. I&#x2019;m also 100% confident of finishing them within a reasonable number of attempts.</li><li>For&#xA0;<strong>purple tags (V6-8)</strong>: For most purple tags, I can finish about half of the route for a single problem, and they are likely V6-V7 level problems. As of now, I&#x2019;ve completed roughly 7 purple tags at Urbana Boulders. Of those, half of them felt like softer climbs and leaned more toward green-tag difficulty (one of which includes the sandbagged slab balance climb I mentioned earlier). The other climbs feel more solidly in the purple range.</li></ul><hr><h3 id="close-look-at-the-v6-7-problems-i-sent">Close Look at the V6-7 Problems I Sent</h3><p>Again, all the V6-7 climbs I&#x2019;ve completed are gym graded, and I disregard any inconsistencies in grading between regions. I recognize that the &quot;hardness&quot; of each climb differs, so I&#x2019;ll categorize my V6-7 climbs into two groups: those that feel like a solid V6-7 and those that feel softer. I&#x2019;ll explain why and give them my personal grade, simply because it allows me to recognize the exact difficulties of each climb and evaluate them subjectively.</p><hr><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/12/1217_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/12/1217.mp4" poster="https://img.spacergif.org/v1/1080x1080/0a/spacer.png" width="1080" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/12/1217_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:29</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Thanks, Ruchen and Athena, for helping me record the sends for this climb! It meant so much to me.</span></p></figcaption>
        </figure><p><a href="https://www.instagram.com/dijkstrawberry/reel/DCxbpkqOk0N/?ref=blog.tjtl.io"><a href="https://www.instagram.com/dijkstrawberry/reel/DCxbpkqOk0N/?ref=blog.tjtl.io">The first one</a></a> I want to talk about is from the BBC8 Women&#x2019;s Open Final (V6+). This was part of the Boneyard Boulders Cup 8th Edition, a regional competition held by Urbana Boulders. Sam, a friend I met at UB, who regularly climbs V9 recognized this as a good purple tag, and based on the effort I put into this climb, as well as the techniques it required, I personally would grade it as V7-ish. I spent nearly a week on this problem, with over 30 full attempts, plus additional attempts focusing on specific sections and movements. The climb required a variety of skills: </p><ul><li>The first part was dynamic and required coordination and core strength. I had to pull myself back to the wall after being thrown off from the start while matching on the edge of a large side hold.</li><li>The&#xA0;second part&#xA0;was more static and technique-heavy. It required:<ul><li>Heel hooks and precise positioning for proper posture.</li><li>Finger strength for 5mm crimps.</li><li>Wrist and back strength for maintaining control on the final hold.</li><li>Lower body control to stay close to the wall while finishing.</li></ul></li></ul><p>This climb was incredibly challenging yet rewarding to me, and I&#x2019;m especially thankful to my friends for their encouraging words that kept me motivated throughout the process.</p><hr><p>I&apos;ve sent 4 V6-7 problems at Mosaic:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-9.png" class="kg-image" alt loading="lazy" width="2000" height="1082" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-9.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-9.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-9.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-9.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/C9F4dGau8Ve/?ref=blog.tjtl.io">first one</a> is probably softer considering the tension it requires to finish. I used a &quot;chestbar,&quot; which involves squeezing my chest into the side hold to provide good support and help me stay below the top. Since the top part of the finishing hold has no texture, you can&apos;t hold it to finish, but instead, you need to match with both hands and touch it. This was a fun blue tag at Mosaic, and I personally would grade it V4-5 because of the tension involved.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-10.png" class="kg-image" alt loading="lazy" width="2000" height="924" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-10.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-10.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-10.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-10.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/C9OHrk7yjvL/?ref=blog.tjtl.io">second one</a> is a really tricky slab problem. The start was a crux for me because I thought I had a relatively short arm span. But then some friends told me to focus on the foot chip and really step on it to support my body as I reached for the next crimp hold. With my span, I could reach it comfortably, but I also had to be aware of my coordination, as I couldn&apos;t lose my step that was supporting me. The next crux involved stepping on top of a chip on the side of a volume. One of the beta tips was to step on it with the front part of my foot, which caused excruciating pain. But tolerance was key. After getting past that, the next few holds were straightforward. Nathan, who helped record this video, came up with more than five beta variations, and he&#x2019;s been my inspiration at Mosaic. I would grade it V5 due to the lack of finger strength required for a V6.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-11.png" class="kg-image" alt loading="lazy" width="2000" height="1058" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-11.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-11.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-11.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-11.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/C-Yb0n1yzaa/?ref=blog.tjtl.io">third one</a> was full power on muscles for the pinch and slope. I think I did it differently from the intended beta, which I saw on Mosaic&apos;s Instagram, where one of their route setters finished it. I was super happy to complete it. I would grade it V6 for the amount of tension required to top out.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-12.png" class="kg-image" alt loading="lazy" width="2000" height="1164" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-12.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-12.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-12.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-12.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/C-1Uj_8ODwV/?ref=blog.tjtl.io">last one</a> was somehow easier for me to finish the first half, but the crux was getting around the giant hold in between, which belongs to another problem. The key was using my left finger and arm strength to keep my center of mass on the crimp foot hold, while reaching for a stable grip on the next crimpy, slopey hold. I would personally grade it V4-5 because it lacks the strong power required to finish a V6-7.</li></ul><hr><p>At Urbana Boulders, I&apos;ve sent another 6 V6-7 problems. I mention V6-7 even though the grade tag at UB is V6-8 (purple), because I know I&#x2019;m definitely incapable of finishing a V8 at the moment.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-13.png" class="kg-image" alt loading="lazy" width="2000" height="983" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-13.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-13.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-13.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-13.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/C6C3ZUqOb08/?ref=blog.tjtl.io">first one</a> is the sandbagged route I mentioned earlier. As Jed, our route setter at UB, said, it&apos;s really tough to grade a route like this, and I agree. So, I won&#x2019;t be giving my personal grade here, since all it provided was fun and an opportunity to test out everyone&apos;s slab walking experience.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/12/image-14.png" class="kg-image" alt loading="lazy" width="2000" height="1088" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-14.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-14.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-14.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-14.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><ul><li>The <a href="https://www.instagram.com/dijkstrawberry/reel/DBfcRlTtiUF/?ref=blog.tjtl.io">second one</a> is a problem on the top-out wall. At UB, we have a top-out wall that simulates an outdoor bouldering experience, where you have to touch all the holds and top out to the sofa-level floor to finish. This one was a purple tag, and it had a &quot;no arete&quot; label on the starting holds. Alex, another friend, and I were working on it, and we agreed that it&#x2019;s either a green or a pink, depending on whether the &quot;no arete&quot; label is on. But anyway, this was a fun climb, and I would personally grade it as a rough V5 due to the lack of power required.</li></ul><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image-15.png" class="kg-image" alt loading="lazy" width="2000" height="860" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-15.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-15.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-15.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-15.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">My personal grade for routes from left to right: (1) V5+; (2) V5+; (3) V5+; (4) V6.</span></figcaption></figure><ul><li>The rest (<a href="https://www.instagram.com/dijkstrawberry/reel/DDbD9i9Ouri/?ref=blog.tjtl.io">[1]</a>&#xA0;<a href="https://www.instagram.com/dijkstrawberry/reel/DDlYD26uNqd/?ref=blog.tjtl.io">[2]</a>&#xA0;<a href="https://www.instagram.com/dijkstrawberry/reel/DDlaTqvucn0/?ref=blog.tjtl.io">[3]</a>&#xA0;<a href="https://www.instagram.com/dijkstrawberry/reel/DDqbS9PtMlF/?ref=blog.tjtl.io">[4]</a>) are some recently finished climbs, and to me, they all seem to range from V5-6, but not 6+.</li></ul><hr><h3 id="home-gyms-outdoor-trips">Home Gyms &amp; Outdoor Trips</h3><p>This section will primarily cover the numbers and stats I&#x2019;ve collected, some of which are based on geolocation data I tracked myself.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/12/image-2.png" class="kg-image" alt loading="lazy" width="2000" height="2000" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-2.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-2.png 1600w, https://blog.tjtl.io/content/images/2024/12/image-2.png 2131w" sizes="(min-width: 720px) 720px"></figure><p>My home gym is definitely Urbana Boulders, as I spent more time in Illinois than in California. However, since I spent all summer (a full four months) in California, I&#x2019;ll factor that time into the stats as well:</p><ul><li>I&#x2019;ve spent roughly&#xA0;<strong>258 hours</strong>&#xA0;at Urbana Boulders and&#xA0;roughly <strong>165 hours</strong>&#xA0;at Mosaic Boulders. Altogether, that totals&#xA0;<strong>400+ hours</strong>&#xA0;between these two gyms.</li><li>On average, that&#x2019;s about&#xA0;<strong>1 hour per day</strong>&#xA0;over the past 10 months.</li><li>The&#xA0;<strong>longest recorded session</strong>&#xA0;lasted about&#xA0;<strong>5.5 hours</strong>&#x2014;I&#x2019;m not entirely sure why I stayed that long. Probably just post-finals week exhaustion, plus chatting more than climbing.<ul><li><em>Note that the 7.7 hours in the Mosaic chart was inaccurate because, on that day, I went back and forth to Mosaic twice, and my current code doesn&apos;t split that time up.</em></li></ul></li><li>Most of my sessions typically last&#xA0;<strong>2 hours</strong>, though occasionally they go longer when I just want to &quot;relax.&quot;</li></ul><p>As of December 17, I&#x2019;ve climbed at <strong>12 gyms</strong> in total:</p><ul><li><strong>Illinois</strong> (4 gyms):<ul><li>Urbana Boulders &#x1F947;</li><li>First Ascent Humboldt Park</li><li>Brooklyn Boulders Chicago</li><li>ARC at UIUC (<em>our campus gym, which has a top rope wall and a Kilter Board room&#x2014;if we count that</em>)</li></ul></li><li><strong>California</strong> (7 gyms in NorCal):<ul><li>Mosaic Boulders &#x1F948;</li><li>Benchmark Berkeley</li><li>The Oaks</li><li>Dogpatch San Francisco</li><li>Movement Santa Clara</li><li>Movement SF</li><li>Bridges Rock Gym &#x1F949;</li></ul></li><li><strong>Costa Rica </strong>(1 gym):<ul><li>Eskalar, a super cool climbing gym that also doubles as the training center for youth national players. I visited this gym during a conference trip, and it was an awesome experience.</li><li>Fun fact: <em>At Eskalar, I met two very strong climbers, both named Tommy. It reminded me of the &quot;Spider-Men pointing at each other&quot; meme, which made the experience even more interesting. I had a great time climbing there with talented youth athletes on bouldering problems, the Kilter Board, and the spray walls.</em></li></ul></li></ul><p>I&#x2019;ve only climbed outdoors twice so far:</p><ul><li><strong>Indian Rock Park, Berkeley</strong>: I went with some super fun, casual climbers I met at Mosaic. While the experience was enjoyable, I couldn&#x2019;t even complete a V1 because the rock was so dense, and I had commitment issues&#x2014;I was afraid of falling off the slippery surfaces and getting injured.</li><li><strong>Holy Boulders, Illinois</strong>: This was a well-planned trip in October to the Shawnee National Forest. A group of about 10 of us drove from campus to the area, and we spent the day chilling and climbing the rocks we set up ourselves. (Unfortunately, I forgot to download some beta videos beforehand, and there was no cellular signal at the site.) Despite that hiccup, it was a fantastic experience, and we&#x2019;re already looking forward to the next outdoor trip.</li></ul><hr><h2 id="training-warm-ups-injuries">Training, Warm-ups &amp; Injuries</h2><p>I definitely do not consider myself a competition-style climber, nor do I wish to become one in the future.</p><h3 id="tryout-for-the-climbing-team">Tryout for the Climbing Team</h3><p>Around September, I noticed that the UIUC climbing team was recruiting new members. The only reason I applied was that I wanted to benefit from their regular training routine. I hoped it could help me become a better climber in areas where I lacked the most, such as endurance and technique. I applied just to give it a try and to see how challenging the routes were for competition climbers.</p><p>The tryout consisted of two parts: the first was top rope climbing, and the second was on the Kilter Board (each part included three climbs of increasing difficulty). Now, here&#x2019;s the hilarious part: I had only tried top rope climbing once prior to the tryout, and I couldn&#x2019;t top any of the top rope routes that day.</p><p>For the Kilter Board part, my group (we were three climbers, including myself) was assigned the following problems: a V5, a V7, and a V8+.</p><ul><li>I was able to complete about 80% of the V5 problem, 50% of the V7 problem, and roughly 20% of the V8+.</li><li>Kaji, a freshman also in the tryout, was incredibly strong and a super dynamic climber. I wasn&#x2019;t surprised when he made the team afterward, and I just wish him the best in his competition journey in the team.</li></ul><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/12/2024-09-25_23-22-06_UTC_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/12/2024-09-25_23-22-06_UTC.mp4" poster="https://img.spacergif.org/v1/720x900/0a/spacer.png" width="720" height="900" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/12/2024-09-25_23-22-06_UTC_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:42</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">The V7 climb, I tried again two weeks later after the tryout.</span></p></figcaption>
        </figure><p>Even though I didn&#x2019;t make the team, it&#x2019;s not as bad as it sounds. The climbing team trains at Urbana Boulders on a regular, weekly schedule, so I often get to observe how they train and climb (or just flash) routes with different styles. Watching them gave me a better understanding of the variety in climbing techniques: static, dynamic, slab work, power moves&#x2014;each team member has their own unique style, and I love that.</p><p>I even got the chance to connect with some of the team climbers, though I&#x2019;ve only had a few conversations so far. Hopefully, I&#x2019;ll get to talk with more of them next year. Their routines&#x2014;including 4x4s, campus boarding, wall traverses, and even random spray wall problems or dyno/paddle moves&#x2014;have been both inspiring and satisfying to observe.</p><p><strong>Training on My Own</strong>. Since the summer, I&#x2019;ve started doing specific &quot;toy&quot; training on my own. I got a hexagonal portable hangboard from Amazon and began lifting weights using different numbers of fingers. I also started doing L-sits regularly&#x2014;on a flat floor or hanging rings&#x2014;along with daily pull-ups (up to 14 max). Here&#x2019;s what I&#x2019;ve achieved so far:</p><ul><li>I can do a one-arm pull-up with&#xA0;90% completeness&#xA0;on my right arm.</li><li>I can hold a full front lever, either gripping a bar or using four fingers on the Beastmaker hangboard&#x2019;s deeper slots.</li><li>I can do more than two pull-ups on 40-degree flat slopers.</li><li>I&#x2019;ve reached 1-4-6 on 20mm crimps with a wider step size on the campus board.</li></ul><p>Nathan, the friend I mentioned in one of my V6-7 climbs, told me how calisthenics has benefited his climbing. Taking inspiration from him, I&#x2019;m also exploring this aspect to improve my strength.</p><p>Another type of training is simply climbing. One route I remember spending an entire week on is an overhang climb, and I attempted it more than 50 times. A friend and I joked that I didn&apos;t have the endurance or muscle to finish the send, but while I was climbing, I was also training.</p><p><strong>Technique Training</strong>. Technique is another area I&#x2019;ve been focusing on, though it&apos;s hard to &quot;train&quot; directly. For me, it&#x2019;s challenging to replicate the elegant movements of experienced climbers or Olympians&#x2014;the kind of sequences that look effortless and perfectly logical in their own styles. Technique often comes from experience, and maybe I can train by focusing on the tiny details I pick up while climbing simpler problems.</p><p>To work on this, I began climbing more problems and analyzing my movement. I tried to find the optimal posture for climbs I had already completed&#x2014;refining my technique further. I learned two fun training techniques from Louis (Catalyst Climbing, my favorite climbing YouTube channel): the &quot;flow&quot; and &quot;robot&quot; styles of movement. A few weeks ago, I practiced these styles and felt that I gained some muscle memory by incorporating them into my climbing. Now, I apply these techniques when attempting new problems. On good physical and mental days, this helps me confidently flash some V4 or even V5 problems.</p><p>One of the joys of climbing is watching how different climbers approach problems in unique ways. I&#x2019;ve had a lot of fun spending time with others, exploring various permutations of postures and movements to solve the same climb. It&#x2019;s incredibly satisfying to discover new solutions together.</p><p><strong>Mental Preparedness</strong>. Checo, a friend I met in Costa Rica, and I had a few conversations about how mental preparedness affects climbing&#x2014;even problems we&#x2019;ve already sent. Climbing is equal parts physical and mental, and that&#x2019;s one of the reasons climbing with friends are really important. When you&#x2019;re trying harder problems, the support and encouragement of climbing partners are invaluable for staying mentally positive.</p><hr><h3 id="warm-ups-are-important">Warm-ups Are Important</h3><p>For the first few months, I rarely did warm-ups. But that was alright since climbing was already fun, and sometimes I didn&#x2019;t have a lot of time to spend on warm-ups without cutting into my actual climbing time. However, as I started progressing to higher levels, I began paying more attention to the length and variety of my warm-up routines.</p><p>One noticeable difference is that proper warm-ups make climbing feel more fluid, confident, and long-lasting. When I warm up properly, I can spend up to four hours climbing without feeling too tired. But without a good warm-up, I often feel fatigued after just about 30 minutes. Preparing my body is super important if I want to have a productive session with friends and actually solve problems. (Plus, ping pong is definitely a great warm-up routine.)</p><p>Then again, on more casual climbing days, chatting and small talk can be just as fun as the climbing itself.</p><hr><h3 id="taking-care-of-myself">Taking Care of Myself</h3><p>Injuries happen from time to time, but it&apos;s crucial to avoid major ones. Luckily, I&#x2019;ve never had a serious injury so far&#x2014;just some flappers, bolt hole cuts, and scratches. I try my best to prevent anything worse from happening.</p><p>I don&#x2019;t climb top rope, crack, lead, ice, or outdoors (which might sound silly to some people) at the moment. One of my goals is to become better at bouldering first before exploring these other types of climbing. Now that I&#x2019;m nearing 30, avoiding injuries and being able to keep climbing is far more important to me. Also, take care of the calluses! Balms, nail clippers, and tape are our best friends.</p><hr><h3 id="weaknesses-strengths">Weaknesses &amp; Strengths</h3><p>As an intermediate climber, I know for sure that I have many weaknesses, but I also have certain strengths that allow me to climb hard with confidence.</p><p>In <a href="https://www.instagram.com/p/DBXwgwGOLZ9/?ref=blog.tjtl.io" rel="noreferrer">a post</a> I wrote a few weeks ago, I mentioned trying a purple-tag problem, which I believe is definitely a V7-V8 climb (at UB). It required precision and skill, such as: (1) jumping mid-air with pinpoint accuracy to reach an 8cm-wide sloper while avoiding other holds; and (2) a dyno (dynamic jump) to an upward hold from a crimp at a bad angle.</p><p>Everything about this climb was so challenging that I had to break it into more than four components just to analyze and reflect on it. Complex coordination moves, finger strength for pockets, far volume/hold walking on two slab walls, bicep and tricep strength, and accurate footwork for jumps&#x2014;it all required a lot of effort.</p><p>But there are areas where I feel confident. Since I&apos;m not very tall and am lightweight, my core and back strength allow me to maintain my center of mass when performing specific moves, such as pogoing and doing moves on a slab wall. I&apos;m good at pogo moves, but I struggle when the holds are slopers at bad angles. But my finger strengths are gradually getting stronger with each training and climbing session. </p><p>Another area I&#x2019;ve started focusing on&#x2014;and where I&apos;ve been struggling&#x2014;is projecting problems. Thoroughly studying a route can become quite analytical if I treat a moderately difficult climb seriously, especially when I want to flash it.</p><hr><h2 id="extra-stuff">Extra Stuff</h2><h3 id="ub-spray-wall">UB Spray Wall</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image-3.png" class="kg-image" alt loading="lazy" width="2000" height="1329" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-3.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-3.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-3.png 1600w, https://blog.tjtl.io/content/images/2024/12/image-3.png 2252w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The spray wall card in front of the wall that used to be the spray wall.</span></figcaption></figure><p>Before visiting climbing gyms around the Bay Area in California, I had never seen a spray wall. So when the route setters set a spray wall at UB, my friends and I were psyched. This was something some UB members had probably been waiting for. Unfortunately, after a few weeks (right before the gym competition), they reset the wall, and it&#x2019;s now gone.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/12/1217-2-_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/12/1217-2-.mp4" poster="https://img.spacergif.org/v1/1080x1080/0a/spacer.png" width="1080" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/12/1217-2-_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:23</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">&quot;Toy story,&quot; V3+, only on the removed UB spray wall.</span></p></figcaption>
        </figure><p>While the spray wall was up, I created an interesting problem called &quot;Toy Story,&quot; which consisted solely of fun toy-shaped holds on the wall. I gave it a V3+ grade after asking some friends to test it out. The problem had a cool pogo move that many friends who tried it said was fun.</p><p>A week ago, while looking through my photos, I found a picture of the spray wall. Inspired, I decided to segment all the holds in the photo and create a little hold &quot;card&quot; for the wall. Isn&apos;t this wall a piece of art?</p><hr><h3 id="bouldering-journal">Bouldering Journal</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image-4.png" class="kg-image" alt loading="lazy" width="2000" height="1430" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-4.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-4.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-4.png 1600w, https://blog.tjtl.io/content/images/2024/12/image-4.png 2286w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">My note for sending my first V7.</span></figcaption></figure><p>In one of my <a href="https://blog.tjtl.io/climbing-trusting-progressing/">previous blog posts</a>, I mentioned that I had started a bouldering journal to keep track of the climbs I&apos;ve explored. However, I found it challenging to keep it up-to-date since most of my time is now spent simply climbing regularly, and I&apos;m busy with other duties. Instead, I began creating well-formatted captions for the climbing videos I post on Instagram. These captions follow the basic structure of my journal template and include all the key information I want and need. Even though I haven&#x2019;t been journaling as much recently, the journal pages I&apos;ve made are lovely. I love the feel of actually handwriting my notes, whether on paper or digitally on my iPad.</p><hr><h2 id="friends">Friends</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/12/image-7.png" class="kg-image" alt loading="lazy" width="2000" height="890" srcset="https://blog.tjtl.io/content/images/size/w600/2024/12/image-7.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/12/image-7.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/12/image-7.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/12/image-7.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Some pieces I took from my bouldering journal lap board.</span></figcaption></figure><p><strong>Climbing is nothing without friends.</strong></p><p>When I was designing my bouldering journal, I included a section titled &quot;I Climbed With&quot; in the template. My goal was to keep a record of the names of people who helped me on climbs or simply chatted with me. This is partly because I&#x2019;m not great at remembering names, and it would be awkward not to know their names the next time we meet&#x2014;especially if we connected and shared a good vibe.</p><p>Here&#x2019;s a short (and incomplete) list of names I remember climbing with, in no particular order:</p><blockquote>Litong, Aaron, Dave, Min, Xiaoqin, Daniel, Athena, Jiayi, Jun, Ahmed, Ben, Hao-Chien, Jacob, Ruchen, Hao, Fei, Peter, Yizhu, Yifei, Ziqi, Rose, Finnley, Stelios, Henry, Russell, Kaji, Kevin, Dev, Nick, A.R., Will, Wendy, Paul, Sam, Will, Jackie, Alex, David, Scott, Dillon, Nick, Ujaan, Fernando, Jason, Sasha, Isaac, Ben, Nathan, Dongsu, Nolan, Elijah, Dillon, Paul, Parker, Stephanie, Falcon, Chaoyu, Nat, Matthew, Rose, Checo, Tommy, Tommy, Sebastian, Mateo, and more.</blockquote><p>I&#x2019;m just grateful to have had these friends on this climbing journey.</p><hr><h2 id="what-about-2025">What About 2025?</h2><p>I&#x2019;m a casual person. So, realistically, here are my climbing goals for next year:</p><ul><li><strong>Spend more time with friends</strong>&#x2014;helping those who are new to climbing learn techniques and keep supporting each other as we tackle harder and interesting problems. I also want convince the person who first introduced me to climbing at UB to come back to the gym :D</li><li><strong>Send a strict V8</strong>.</li></ul><hr><blockquote>Vanga! Vamos! Allez! &#x30AC;&#x30F3;&#x30D0; (Gamba)&#xFF01;</blockquote>]]></content:encoded></item><item><title><![CDATA[Climbing, trusting, and progressing]]></title><description><![CDATA[<p>It has been almost five months since I started bouldering. I thought it might be a good chance to recollect my past recorded videos and see how I did throughout this wonderful journey. I want to share my top 10 favorite climbs since I started. There are definitely great routes</p>]]></description><link>https://blog.tjtl.io/climbing-trusting-progressing/</link><guid isPermaLink="false">668370859e4b31fdb7363ba8</guid><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Tue, 02 Jul 2024 04:28:28 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/07/IMG_0238.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2024/07/IMG_0238.JPG" alt="Climbing, trusting, and progressing"><p>It has been almost five months since I started bouldering. I thought it might be a good chance to recollect my past recorded videos and see how I did throughout this wonderful journey. I want to share my top 10 favorite climbs since I started. There are definitely great routes I didn&apos;t have the chance to record, and I enjoyed those moments mingling with people even when the camera was not on.</p><hr><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/07/image-17.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="2000" height="324" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-17.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-17.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/07/image-17.png 1600w, https://blog.tjtl.io/content/images/2024/07/image-17.png 2360w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Timeline of my climbing journey as of today.</span></figcaption></figure><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/07/0701--2-_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/07/0701--2-.mp4" poster="https://img.spacergif.org/v1/1080x1080/0a/spacer.png" width="1080" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/07/0701--2-_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">6:37</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure><hr><h2 id="no-1-v0-2">No. 1: V0-2</h2><blockquote>Recorded on Feb 27, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-3.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1552" height="1260" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-3.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-3.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-3.png 1552w" sizes="(min-width: 720px) 720px"></figure><p>This is the very first recorded send I did back in February, when I was just about three weeks into the bouldering world. I actually tried this route the day before but was not able to finish it. I&apos;m not sure if I was exhausted or if I just didn&apos;t figure out the right postures. This send was recorded in the morning, and I hadn&apos;t eaten anything besides some breadcrumbs from a sandwich I bought at a coffee shop. I had no preparations whatsoever, and when I chatted with my friend Litong about this route, I just went for it. To my surprise, I finished it on the first attempt (for that day). Then I asked her to help me record this video for the second attempt&#x2014;it obviously worked again. This route is not exactly energy-consuming despite it is a quite circuitous path. On the fourth-to-last boulder, I realized the importance and effectiveness of flagging on the wall to save energy since it kept my center of mass closer to the wall. Techniques matter! Anyway, this is definitely worth remembering. Thanks, Litong, for the video, and again, for taking me to this climbing journey!</p><hr><h2 id="no-2-v2-4">No. 2: V2-4</h2><blockquote>Recorded on Apr 16, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-4.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1550" height="1264" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-4.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-4.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-4.png 1550w" sizes="(min-width: 720px) 720px"></figure><p>I finished this V2-4 with pride. No joke, the first few times I tried it, it was too hard for me to stay on the route at the horizontal pinch (the one just above the light green boulder) because I didn&apos;t match on it. I thought I had to train harder on my biceps to be able to do this. Then I left this route and went for another V0-2 overhang (the yellow boulder just to the right of this blue route), and only campused on that for almost two weeks. Although it helped, I still think it was mainly because I didn&apos;t match on the pinch. Well, I finished this in a session with my friend Nick, where I chatted with him about my uncertainty in finishing it. Oh my, the look on my face was pure joy when I got off the wall. I persistently tried this route again and again at the start of each session since it made me feel like I had the ability to climb outdoors. Meh, no, I was dillusional for sure&#x2014;but that doesn&apos;t I&apos;m not able to do it indefinitely. Allez! Thanks, Nick!</p><hr><h2 id="no-3-sandbagged-v6-8">No. 3: Sandbagged V6-8</h2><blockquote>Recorded on Apr 21, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-6.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1550" height="1260" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-6.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-6.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-6.png 1550w" sizes="(min-width: 720px) 720px"></figure><p>It&apos;s really satisfying to have a sandbagged route that I can get my hands on in my local gym&#x2014;and why I have to rank my local gym as the best gym in the world. I said satisfying, not just because I was able to try it, but also because, as Jed, the route setter, said, it gave me the incentive to try harder boulders. Once this set was finished, I gave it a try and realized, &quot;Hey! I might be able to finish this V6-8.&quot; I never realized that my core strength was good enough to finish it, but yay, I do have good control over my core along with my lower body flexibility.</p><hr><h2 id="no-4-v4-6">No. 4: V4-6</h2><blockquote>Recorded on Apr 25, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-10.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1552" height="1262" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-10.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-10.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-10.png 1552w" sizes="(min-width: 720px) 720px"></figure><p>This was a pretty random route Nick and I chose to project on a sunny afternoon. We originally wanted to work on another cave route, which is the same grade (V4-6) as this one. Eventually, we gave up after more than 15 attempts because we couldn&apos;t figure out the good start for that one. This was probably the first time I felt great about using a volume as a hold to pull myself up to the crimp right after the corner (above the edge).</p><hr><h2 id="no-5-v2-4">No. 5: V2-4</h2><blockquote>Recorded on Apr 27, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-7.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1554" height="1262" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-7.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-7.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-7.png 1554w" sizes="(min-width: 720px) 720px"></figure><p>It&apos;s a funny V2-4 that exploited my middle fingers for days. The key was trusting my knee to generate the momentum needed to reach an upper position, allowing me to place my left foot in the next pocket, which is about one meter away. Also, the end of it is trash. Tall people can just reach it, but as a short guy, I have to trust my jump and the precision of my hand placement on the final pocket at the top. The movement looks cool though! Thanks, Dave, for helping me record the video!</p><hr><h2 id="no-6-v5">No. 6: V5</h2><blockquote>Recorded on May 15, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-8.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1550" height="1260" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-8.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-8.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-8.png 1550w" sizes="(min-width: 720px) 720px"></figure><p>After my spring semester ended, I headed over to California to spend my break. Benchmark Berkeley was the place my friend Falcon introduced me to, and I had a lot of fun climbing there. It definitely has much more facility than Urbana Boulders, my local gym and also the gym where I started climbing. It has a MoonBoard, bunch of gym facilities, some yoga gadgets, several hangboards, and a diverse range of routes with fixed grades (instead of a vague range) marked at the start of each problems. I know some people may say grades are just numbers&#x2013;I do value them since I&apos;m just a beginner/intermediate(?) climber, and grades definitely help me see whether I&apos;ve progressed or not. But hey, if I want to climb a V10 in a random tomorrow, I would say it&apos;s for fun&#x2014;because why not? I climb, therefore I have fun.</p><p>Random thoughts aside, this V5 was one of the few routes I figured out myself without any betas from others. Additionally, it has the dynamic vibe I like and helped me practice my slab skills. The heel hook on the second-to-last sloper was a spontaneous move. Skills, skills, skills! Thanks, Falcon, for his guest pass and all the fun climbing time we spent there.</p><hr><h2 id="no-7-v4-5">No. 7: V4-5</h2><blockquote>Recorded on May 20, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-12.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1548" height="1262" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-12.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-12.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-12.png 1548w" sizes="(min-width: 720px) 720px"></figure><p>Mosaic Boulders is a relatively small bouldering gym very close to the UC Berkeley campus&#x2014;just two blocks away from the famous Sather Gate. I&apos;d say it&apos;s probably the same size as Urbana Boulders. But that&apos;s what I love most about small gyms near schools: I get to meet new friends without any pressure. We share similar vibes and are willing to open up to exchange our thoughts without mental barriers, at least that&apos;s how I view it.</p><p>This is the first-ever &quot;dynamic&quot; route I finished. While it&apos;s graded a V4-5, only the start is the hardest. The rest is pretty straightforward. Before I attempted it, I saw a girl try it about 50+ times. I think that was one of the reasons that motivated me to give it a try. It&apos;s about perseverance and relentless attempting!</p><hr><h2 id="no-8-v4-5">No. 8: V4-5</h2><blockquote>Recorded on Jun 25, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-11.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1546" height="1264" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-11.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-11.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-11.png 1546w" sizes="(min-width: 720px) 720px"></figure><p>I spent 10+ attempts on this route before finishing it. Initially, I was trying, like others, to catch the medium-sized jug on the volume, which requires a lot of momentum to boost myself up there. Then I thought, no, there has to be an easier way. So I considered more static moves, and the result was using the one boulder in between (the small sloper) to support me and get closer to the medium-sized jug, which was much easier. I like how I did it in a relatively static way.</p><hr><h2 id="no-9-v4-5">No. 9: V4-5</h2><blockquote>Recorded on Jun 25, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-13.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1548" height="1260" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-13.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-13.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-13.png 1548w" sizes="(min-width: 720px) 720px"></figure><p>This route is a bit random and came about the other day when I was looking for new routes to work on. The start is definitely a bit dynamic, but I think the key is precision on the crimps on both sides of the volume. After less than 10 attempts, I was able to finish it with confidence in jumping at the start. It looks cool. Thanks, Nate, for recording the video!</p><hr><h2 id="no-10-v6-7">No. 10: V6-7</h2><blockquote>Recorded on Jun 30, 2024</blockquote><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/07/image-14.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1550" height="1264" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image-14.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image-14.png 1000w, https://blog.tjtl.io/content/images/2024/07/image-14.png 1550w" sizes="(min-width: 720px) 720px"></figure><p>Oh my, oh my, this is my first (probably actually legitimate?) V6-7. It&apos;s this boulder that made me believe that I have indeed been making progress in climbing. The first move is a toehook on the big jug while catching the upper side of the next big jug. Then the next move is to jump to the crimp, landing with my foot. What&apos;s really fascinating is how my climbing friends, who gave me the beta, suggested using a &quot;chest&quot; or &quot;shoulder&quot; bar to lay back on the second-to-last boulder in order to reach the top of this route. It&apos;s not possible to grab the top boulder without this move, since the top part is smooth and offers no friction. A good problem, and I guess it marks nice progress for me as well!</p><hr><p>I want to conclude this post with some notes, things I did and routines I had in mind throughout my climbing sessions:</p><ul><li>Climb the same finished route a bit more to discover new possibilities, train my intuition to apply techniques spontaneously, and gain confidence for tackling harder routes.</li><li>Do longer warm-ups before my climbing sessions: 10+ minutes consisting of (power or not) pull-ups, stretching the entire body (feet, neck, hips, wrists, ankles, etc.), hangboarding on jugs for a sufficient amount of time. And of course, climb on easy routes (V0-2) and harder routes that I&apos;ve finished before tackling real problems.</li><li>Have more regular training session! Having solid muscles, great flexibility and endurance is always better.</li><li>Talk to strangers and share thoughts! One special thing I&apos;ve gained from climbing is building trust, and I mean that in two ways. The first kind of trust is about trusting myself and every movements, especially the seemingly risky ones. The second kind of trust is about being kind and nice to the people I interacted with. This has helped me a lot in terms of having in-person social interactions, especially since I have an introverted personality. People are beautiful. Trust climbers around you.</li><li>Take proper rests! Honestly, I didn&apos;t take enough rests between sessions because, like most climbers, stopping climbing is the hardest part. But hey, recovery is important. Resting during sessions also helps me take some time off, talk to people instead of feeling the pressure of not being able to solve a project, and relax my body and muscles. I just love climbing</li><li>I still have not yet buy a brush. And until now, it becomes necessary for me to use brush on some harder routes. Brushing for others is also a good manner &#x1F609;</li><li>Record my sends with proper notes. This helps me remember the techniques I applied on each send and may consolidate my memory to prepare myself for future project tackling. I designed the following climbing journal page, printed several pages, and clipped them onto a lap board of A6 size. It&apos;s portable, and I can use a pencil to freely draw anything I want. The only recent drawback I&apos;ve found is that I always feel a bit shaky after my send due to my torn muscle.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/07/image.png" class="kg-image" alt="Climbing, trusting, and progressing" loading="lazy" width="1222" height="1024" srcset="https://blog.tjtl.io/content/images/size/w600/2024/07/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/07/image.png 1000w, https://blog.tjtl.io/content/images/2024/07/image.png 1222w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">I treasure my climbing friends a lot&#x2013;so yes, there&apos;s got to be a &quot;I climbed with&quot; section.</span></figcaption></figure><hr><blockquote>Keep climbing and keep having fun!</blockquote>]]></content:encoded></item><item><title><![CDATA[Best time to hit the bouldering gym? Anytime]]></title><description><![CDATA[<p>As per my last post, I&apos;ve been (indoor) bouldering for about 2 months now. I can now say I&apos;m pretty confident in topping the red-taped routes (V0-2), and able to finish almost half of the yellow-taped routes (V2-4). To my surprise, I was even able to</p>]]></description><link>https://blog.tjtl.io/bouldering-ii-3/</link><guid isPermaLink="false">6610bcbe9e4b31fdb736376a</guid><category><![CDATA[Bouldering]]></category><category><![CDATA[UIUC]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Sat, 06 Apr 2024 04:05:59 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/04/135sr-2024-03-30-152134.681.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2024/04/135sr-2024-03-30-152134.681.JPG" alt="Best time to hit the bouldering gym? Anytime"><p>As per my last post, I&apos;ve been (indoor) bouldering for about 2 months now. I can now say I&apos;m pretty confident in topping the red-taped routes (V0-2), and able to finish almost half of the yellow-taped routes (V2-4). To my surprise, I was even able to finish a V4-6 the other day; well, not sure if counts since I asked for a Kevin for the beta.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/04/image-1.png" class="kg-image" alt="Best time to hit the bouldering gym? Anytime" loading="lazy" width="2000" height="871" srcset="https://blog.tjtl.io/content/images/size/w600/2024/04/image-1.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/04/image-1.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/04/image-1.png 1600w, https://blog.tjtl.io/content/images/2024/04/image-1.png 2236w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Left: how my gym grades the routes. Right: For example, the green boulders with yellow tape are in the scale of V2-4.</span></figcaption></figure><p>I started bouldering on Feb 6 this year and noticed that there&apos;s a real-time person counter widget displayed on my gym&apos;s website. With this convenience, I realized that I could write a Python script to extract the webpage parse the person count, and record it in a fixed duration for each opening day. So I went ahead and wrote one, and let it run in the background via PM2 on my laptop (as I never turn it off, it naturally becomes the first choice, instead of running on a server). A few weeks later, after spring break, I&apos;ve got about 1 month of data; now almost 2 months of data points. Visualizing them corresponding to each date on 7 different subplots on Jupyter, it looks like this:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/04/image-2.png" class="kg-image" alt="Best time to hit the bouldering gym? Anytime" loading="lazy" width="2000" height="975" srcset="https://blog.tjtl.io/content/images/size/w600/2024/04/image-2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/04/image-2.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/04/image-2.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/04/image-2.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">I&apos;ve excluded the spring break dates on campus, as they don&apos;t quite fit well here with the goal of knowing approximately when people go there the most and the least.</span></figcaption></figure><p>As you can directly observe from these subplots, on weekdays, except for Wednesday, the trend for the opening hours is pretty much the same. It makes sense because during the low hours, most students and faculty who visit here are either in classrooms or offices. Wednesday nights are usually members&apos; night, so you see that during those hours, the data points hit very high; while there are many people, I went there one day and it is surprisingly &quot;not very crowded.&quot; In terms of the availability of the routes, people are just very nice, and, well, you have to take some rests between each climb.</p><p>I used to go to the gym based on this chart and scheduled to go there when there weren&apos;t many people ($\leq 20$). It does feel really great when you&apos;re one of the only few climbers in a certain area with walls of routes that you are free to climb and record a video about. However, after that Wednesday members&apos; night I went to, I realized having people around isn&apos;t actually a bad thing; at least you have someone to talk to, potentially getting beta for some routes I&apos;ve tried many times. Recording videos can be handy even if there are quite a few people as well; most climbers here are so nice, and whenever I asked them, they just helped me. So right, this visualization is now purely for fun.</p><p>I also had other plots; this one is a bit fancier, as it has some background colors indicating each time window, which provides some kind of intuitive insights on how many people are there.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/04/image-3.png" class="kg-image" alt="Best time to hit the bouldering gym? Anytime" loading="lazy" width="2000" height="564" srcset="https://blog.tjtl.io/content/images/size/w600/2024/04/image-3.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/04/image-3.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/04/image-3.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/04/image-3.png 2400w" sizes="(min-width: 1200px) 1200px"></figure><p>I thought about using Markov chain or time-series models to potentially predict the possibility of a time range being rush hour or not. While this goal is somewhat undeterministic, as a person who has visited there quite often (now more than four times a week), I still want to give it a try and at least achieve some triumphs in modeling this problem. I had some observations when thinking about the possible relevant events that could cause the number of people to change significantly:</p><ul><li><u>Change of routes</u>: Whenever the gym route setters make big changes to the routes, I notice a relative surge of some groups of intermediate/advanced climbers hitting the gym, discussing, and having fun.</li><li>Some other events that could possibly have an impact include: <ul><li><u>Bad weather</u>, <u>low temperatures</u>: fewer people visiting</li><li><u>Special events on campus</u>: fewer people visiting</li><li><u>Exam weeks</u>: fewer people visiting</li><li><u>Spring/fall/winter/summer breaks</u>, <u>holidays</u>: fewer or more people</li><li><u>Members&apos; night</u>: more people visiting</li></ul></li></ul><p>And that&apos;s it; these are my current thoughts about this little toy &quot;project&quot; I&apos;ve had running in the background for a while. I&apos;m still thinking about the computer vision side of bouldering tutoring, using NeRF to reconstruct the 3D scene, and allowing analysis of the boulderers&apos; movement, as well as possibly recording which routes they have finished in an interactive way. It may just be for fun and not practical, but why not? It&apos;s a cool idea.</p><p>At this point, I&apos;m glad that I started the bouldering journey in this relatively small place but with good routes and nice people around. It&apos;s a warm place to visit.</p><p>Here, I present to you some of my favorite routes recently:</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/04/Sequence-01_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/04/Sequence-01.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/04/Sequence-01_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:53</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">All of them are V0-2.</span></p></figcaption>
        </figure><p>So when is the best time to visit the bouldering gym? Anytime works, as long as the place is welcoming. Allez!</p><hr><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/04/image-4.png" class="kg-image" alt="Best time to hit the bouldering gym? Anytime" loading="lazy" width="1622" height="842" srcset="https://blog.tjtl.io/content/images/size/w600/2024/04/image-4.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/04/image-4.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/04/image-4.png 1600w, https://blog.tjtl.io/content/images/2024/04/image-4.png 1622w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Cheers! (</span><a href="https://www.etsy.com/listing/1684729564/climbing-bouldering-juggy-mug-v0-400ml?ref=cart"><span style="white-space: pre-wrap;">Source</span></a><span style="white-space: pre-wrap;"> on Etsy.com)</span></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Bouldering]]></title><description><![CDATA[<p>It has been more than a month since I wrote my last post. I could say it&apos;s because I&apos;ve been busy with studies and works, but the main reason is that the majority of my spare time is on bouldering recently.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/03/image.png" class="kg-image" alt loading="lazy" width="2000" height="1174" srcset="https://blog.tjtl.io/content/images/size/w600/2024/03/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/03/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/03/image.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/03/image.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">What a lovely place!</span></figcaption></figure><p>The</p>]]></description><link>https://blog.tjtl.io/bouldering/</link><guid isPermaLink="false">6600be0e9e4b31fdb73635d6</guid><category><![CDATA[Bouldering]]></category><category><![CDATA[UIUC]]></category><category><![CDATA[Random]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Mon, 25 Mar 2024 02:46:11 GMT</pubDate><content:encoded><![CDATA[<p>It has been more than a month since I wrote my last post. I could say it&apos;s because I&apos;ve been busy with studies and works, but the main reason is that the majority of my spare time is on bouldering recently.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/03/image.png" class="kg-image" alt loading="lazy" width="2000" height="1174" srcset="https://blog.tjtl.io/content/images/size/w600/2024/03/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/03/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/03/image.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/03/image.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">What a lovely place!</span></figcaption></figure><p>The first time I heard about this place was when I tried to search for a bouldering gym on Google Maps around 2022. My friend S is an enthusiastic climber. Back when I was working in Shanghai, he took me to the gym once, but I don&apos;t recall the details of that memory anymore; that was about 8 years ago. He posted some clips on social media, and I was &quot;sort of&quot; motivated to try bouldering. But nobody around me climbed and Urbana Boulders wasn&apos;t within walking distance from campus. That changed last month when a friend from the lab mentioned the gym again, said she sometimes climbs there, and kindly suggested we could go together. And that became my biggest motivation, having a &quot;gym homie&quot; is just better than pouring yourself tons of pep talk or videos, gaslighting yourself to be a &quot;better one.&quot;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/03/405F0B8A-BB8F-4C9F-8D35-5CB34DD17D4C_1_102.jpeg" class="kg-image" alt loading="lazy" width="1928" height="1629" srcset="https://blog.tjtl.io/content/images/size/w600/2024/03/405F0B8A-BB8F-4C9F-8D35-5CB34DD17D4C_1_102.jpeg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/03/405F0B8A-BB8F-4C9F-8D35-5CB34DD17D4C_1_102.jpeg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/03/405F0B8A-BB8F-4C9F-8D35-5CB34DD17D4C_1_102.jpeg 1600w, https://blog.tjtl.io/content/images/2024/03/405F0B8A-BB8F-4C9F-8D35-5CB34DD17D4C_1_102.jpeg 1928w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">My gym homie recently suffered a minor foot injury, and I hope she recovers soon! Luckily I still had some motivations to go there on a weekly basis, more than four times a week so far.</span></figcaption></figure><hr><h2 id="start">Start</h2><p>Soon after starting my first bouldering session with her, and some brief introductions about the gym, the grading, her climbing experiences, etc., I became quite hooked on bouldering. Mainly because of the joy of problem-solving, almost as if I was solving a coding or math problem (and also getting to see tons of memes and supportive videos from the online bouldering community).</p><p>Now, 7 weeks into bouldering, I&apos;ve learned quite a bit, not just from YouTube videos, but also from in-person interactions with other beginner and intermediate boulders at the gym. </p><p>On the bouldering aspect, there are some terminologies and techniques I&apos;ve learned and found quite useful, and some of them are just interesting. Giving &quot;beta&quot; to another person means providing clues about a certain route, a &quot;project&quot; is equivalent to a &quot;route&quot;, having a route &quot;sent&quot; means you have successfully topped it, and &quot;topped it&quot; means you reached the top. I&apos;ve come to understand how using &quot;core power&quot; is extremely important for balance, both physically and &quot;mentally.&quot; In terms of strength, while my finger strength is still pretty weak, my biceps are surprisingly getting used to climbing some V3/4 as I progressed.</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/03/original_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/03/original.mp4" poster="https://img.spacergif.org/v1/3840x2160/0a/spacer.png" width="3840" height="2160" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/03/original_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:28</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Week 2/3. I was climbing on a V2-4 route.</span></p></figcaption>
        </figure><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/03/output_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/03/output.mp4" poster="https://img.spacergif.org/v1/1440x1080/0a/spacer.png" width="1440" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/03/output_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:40</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Week 7. Two V3 routes. I think the major difference is the use of core power to balance.</span></p></figcaption>
        </figure><p>Mentally, climbing helps me recover from stress, as I simply can&apos;t find joy in just running or lifting in the gym. I think probably most people nowadays learned about climbing because of Jimmy Chin&apos;s Alex Honnold documentary, &quot;Free Solo.&quot; The storytelling about how Alex became the first one to climb El Capitan, without a rope, had me shocked and impressed for a long time after I first saw it several years ago. I still remember that dialogue he said in the movie:</p><blockquote>&#x201C;It takes small steps to accomplish a quantum leap [&#x2026;] you face your fear because your goal demands it.&#x201D;</blockquote><p>Alex didn&apos;t just show up and start to climb because he had the guts (duh, he sure does). He visited the route frequently before the final free solo, practicing and memorizing each move. It reminds me of an old Chinese saying, &quot;Without accumulating small steps, one cannot reach a thousand miles; without accumulating small streams, there is no way to become seas and rivers.&quot; (&#x4E0D;&#x79EF;&#x8DEC;&#x6B65;&#xFF0C;&#x65E0;&#x4EE5;&#x81F3;&#x5343;&#x91CC;&#xFF1B;&#x4E0D;&#x79EF;&#x5C0F;&#x6D41;&#xFF0C;&#x65E0;&#x4EE5;&#x6210;&#x6C5F;&#x6D77;). This saying, in many ways, is a reflection of Alex&apos;s life philosophy here. Of course, one also needs a great deal of courage to do what he did. I once saw a clip from the Norwegian professional climber and YouTuber, Magnus Midtb&#xF8;, where he was <a href="https://www.youtube.com/watch?v=Cyya23MPoAI&amp;ref=blog.tjtl.io" rel="noreferrer">doing a small free solo project guided by Alex</a>, and even he appeared to be terrified.</p><p>Bouldering has helped me focus on the tasks I hope to accomplish, both physically and mentally, in this monotonous place filled with cornfields. I&apos;m just delighted that my friend introduced me to it at this time period.</p><hr><h2 id="ideas">Ideas</h2><p>During my several bouldering sessions, I found that applying some computer vision techniques to analyze the posture of a climber seemed interesting. I asked my friend to record me climbing a V3 (I know different gyms have different scales - here yellow means V2-4, and since this climb was somewhat hard for me, but not overly so, I decided to classify it as middle level) to explore this idea further. Two concepts came to mind.</p><p>The first is a virtual trainer that helps analyze a climber&apos;s posture and then provides tips on how climbers should adjust their positions at certain points. My thought was to apply state-of-the-art pose estimation on the video, extract the 3D positions of each major joint of the body, and analyze how a climber moves relative to their pelvis and the angles at each joints. It could also provide analysis on the center of mass of the body, to help climbers gain an intuitive understanding of how core power can improve their climbing at an early stage in their journey. Adding pressure sensors to the boulders themselves might also be a good idea, I guess?</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/03/My-Movie-1_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/03/My-Movie-1.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/03/My-Movie-1_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:28</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">A video with pose estimation using MMPose. This is route is about level of V3 (V2-4).</span></p></figcaption>
        </figure><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/03/test2_out____thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/03/test2_out___.mp4" poster="https://img.spacergif.org/v1/2700x1350/0a/spacer.png" width="2700" height="1350" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/03/test2_out____thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:31</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p><span style="white-space: pre-wrap;">Another video with 3D pose mapping, also used MMPose. This route is V0-2.</span></p></figcaption>
        </figure><p>The second idea consists of several parts.</p><ul><li>Scan the bouldering gym and reconstruct the virtual boulder wall using <a href="https://www.matthewtancik.com/nerf?ref=blog.tjtl.io" rel="noreferrer">NeRF</a> or other state-of-the-art 3D reconstruction models.</li><li>Input the climber&apos;s body data, obtained either via pose estimation or physical measurement. This would include strength data, such as finger and arm strength, as well as weight data for different parts of the body.</li><li>Insert a doppelganger agent into the reconstructed 3D scene, and have it climb in the scene using the same route and approximately the same body data.</li><li>Beginner climbers would then climb for the first few times, using the set of movements from previous attempts in the virtual scene as a guide. If the climber falls, a virtual coach would suggest one or more possible approaches the agent could adopt to avoid the fall.</li><li>As a bonus (though not exactly practical at the moment), a deep network could be used to train the agent for countless iterations and explore how the climber could evolve&#x2026;</li></ul><p>As far as I&apos;m aware, there are already some existing applications like <a href="https://belay.ai/?ref=blog.tjtl.io" rel="noreferrer">belay.ai</a> and <a href="https://climbalyzer.com/?ref=blog.tjtl.io" rel="noreferrer">climbalyzer.com</a>. I came across belay.ai when a friend shared a video from Magnus Midtb&#xF8;, the Norwegian climber I mentioned earlier, in which he collaborated with the team to demo the software. I&apos;m looking forward to more of their updates and perhaps I could delve deeper into this topic in the future.</p><p>There are some other papers I found that discussed this topic:</p><ul><li><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10574944/?ref=blog.tjtl.io">Climbing Technique Evaluation by Means of Skeleton Video Stream Analysis</a></li><li><a href="https://pubmed.ncbi.nlm.nih.gov/17936389/?ref=blog.tjtl.io">3D analysis of the body center of mass in rock climbing</a></li><li><a href="https://www.frontiersin.org/journals/psychology/articles/10.3389/fpsyg.2020.02188/full?ref=blog.tjtl.io">3D Visualization of Body Motion in Speed Climbing</a></li><li><a href="https://arxiv.org/pdf/2303.18246.pdf?ref=blog.tjtl.io">3D Human Pose Estimation via Intuitive Physics</a></li><li><a href="https://cs230.stanford.edu/projects_winter_2020/reports/32175834.pdf?ref=blog.tjtl.io">Graph Neural Networks in Classifying Rock Climbing Difficulties</a></li></ul><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">I started taking notes <a href="https://blog.tjtl.io/bouldering-and-computer-vision" rel="noreferrer">here</a>, check it out!</div></div><hr><h2 id="notes">Notes</h2><p>Now, watching YouTube videos, <a href="https://www.youtube.com/watch?v=q1ifufO-N58&amp;ref=blog.tjtl.io" rel="noreferrer">IFSC competitions</a> or <a href="https://www.youtube.com/@CatalystClimbing?ref=blog.tjtl.io" rel="noreferrer">Catalyst Climbing&apos;s Louis </a>has become my routine after meals. I find the bouldering community as welcoming as can be, with so many influencers sharing their experiences, footage, funny videos, and words of encouragement from various perspectives. I thought I&apos;d jot down some notes here as a reference for my future bouldering sessions as well:</p><ul><li>Do 5-10 minutes of warm-ups before each session, do dead hang, do lift up if possible</li><li>Rest about 5-10 minutes between each climb, relax the muscle before; social!</li></ul><hr><h2 id="reference">Reference</h2><p>Also, here are some videos I find quite helpful:</p><ul><li>General discussion about bouldering terminologies &amp; techniques<ul><li><a href="https://www.youtube.com/watch?v=gtIGgs_y2nY&amp;ref=blog.tjtl.io" rel="noreferrer">A COMPLETE Guide to CLIMBING MOVEMENT AND TECHNIQUE</a></li><li><a href="https://www.youtube.com/watch?v=wY2Tt0dwYwk&amp;ref=blog.tjtl.io" rel="noreferrer">A COMPLETE Guide to CLIMBING FOOTWORK TECHNIQUES</a></li><li><a href="https://www.youtube.com/watch?v=rPCS1dkiu3k&amp;list=PLt7NDnSJ6A3u7KiG2CmweC0BjfpEHPTBE&amp;index=51&amp;pp=gAQBiAQB&amp;ref=blog.tjtl.io">Climbing Handholds 101: How to Hold Them! (FOR BEGINNERS)</a></li><li><a href="https://www.youtube.com/watch?v=a8DTOztiuLM&amp;list=PLt7NDnSJ6A3u7KiG2CmweC0BjfpEHPTBE&amp;index=14&amp;pp=gAQBiAQB&amp;ref=blog.tjtl.io">Learn 100+ Climbing Techniques With Just 4 Movement Concepts</a></li></ul></li><li>Louis Parkinson (my favourite climbing channel)<ul><li><a href="https://www.youtube.com/watch?v=h5Oxp9qujeE&amp;ref=blog.tjtl.io">BIGGEST MISTAKES Coach Louis Sees at Every Grade (V0-V9+)</a></li><li><a href="https://www.youtube.com/watch?v=XnScNp24xEU&amp;ref=blog.tjtl.io" rel="noreferrer">Route Reading 101 || How to with Louis Parkinson</a></li><li><a href="https://www.youtube.com/watch?v=cSUxu7bHtYw&amp;t=25s&amp;ref=blog.tjtl.io">Improve your footwork! | PART ONE</a></li><li><a href="https://www.youtube.com/watch?v=nY8Cycunx2A&amp;ref=blog.tjtl.io">Learn Dynamic Climbing With Louis Parkinson</a></li></ul></li></ul><hr><p>Let&apos;s end here with a Emil Abrahamsson&apos;s meme video.</p><p></p>
<!--kg-card-begin: html-->
<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/reel/C1o5LuetIaQ/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/reel/C1o5LuetIaQ/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewbox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"/></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/reel/C1o5LuetIaQ/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Adam Ondra (@burden_0f_memes)</a></p></div></blockquote> <script async src="//www.instagram.com/embed.js"></script>
<!--kg-card-end: html-->
]]></content:encoded></item><item><title><![CDATA[Face migration in classical artwork]]></title><description><![CDATA[<!--kg-card-begin: html-->
<div class="toc"></div>
<style>
/*.toc:before {
  content: "Table of Content";
  display: block;
  margin-bottom: 20px;
  font-size: large;
  font-weight: bold;
  border-bottom: 1px dashed #dadada;
  padding-bottom: 10px;
}*/
.toc {
  padding: 30px;
  border: 1px solid #dadada;
  border-radius: 5px;
  background-color: #fafafa;
}
a.toc-link {
  font-size: 80%;
  text-decoration: none;
}
li.toc-list-item {
  margin-top: 0;
}
.toc-list .is-collapsible {
  margin-left: 15px;
  color: #666; */
}
</style>
<!--kg-card-end: html-->
<hr><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text">This is an</div></div>]]></description><link>https://blog.tjtl.io/face-migration-in-classical-artwork/</link><guid isPermaLink="false">65d9627b9e4b31fdb7363501</guid><category><![CDATA[UIUC]]></category><category><![CDATA[Computer Vision]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Sat, 24 Feb 2024 03:55:29 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/02/Screenshot-2024-02-23-at-22.11.38.png" medium="image"/><content:encoded><![CDATA[
<!--kg-card-begin: html-->
<div class="toc"></div>
<style>
/*.toc:before {
  content: "Table of Content";
  display: block;
  margin-bottom: 20px;
  font-size: large;
  font-weight: bold;
  border-bottom: 1px dashed #dadada;
  padding-bottom: 10px;
}*/
.toc {
  padding: 30px;
  border: 1px solid #dadada;
  border-radius: 5px;
  background-color: #fafafa;
}
a.toc-link {
  font-size: 80%;
  text-decoration: none;
}
li.toc-list-item {
  margin-top: 0;
}
.toc-list .is-collapsible {
  margin-left: 15px;
  color: #666; */
}
</style>
<!--kg-card-end: html-->
<hr><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text">This is an edited version of my final project report, a result of my Computational Photography (<a href="https://courses.engr.illinois.edu/cs445/fa2023/?ref=blog.tjtl.io" rel="noreferrer">CS 445, Fall 2023</a>) class at UIUC, taught by Prof. Derek Hoiem. Special thanks to his lectures and his systematic and creative ways of teaching such a fundamental and core computer vision course.</div></div><hr><h2 id="i-motivation">I. Motivation</h2><img src="https://blog.tjtl.io/content/images/2024/02/Screenshot-2024-02-23-at-22.11.38.png" alt="Face migration in classical artwork"><p>In project 3 (a project on the topic of gradient domain editing), we implemented texture style transfer, learning how to transfer the &quot;drawing style&quot; from one picture to another based on pixel intensity. Given the creative perspective of this notion, we want to incorporate additional techniques not yet covered in class projects, such as object averaging (morphing), image warping, matting, and hole-filling, to create a pipeline for &#x201C;Face Migration in Classical Artwork.&#x201D;</p><p>Our inspiration comes from a creative rendition of Vermeer&#x2019;s &#x201C;Girl with a Pearl Earring&#x201D; (shown in Figure 1), where the girl&apos;s face is replaced with that of an oil-paint cat. This gave us the idea of seamlessly merging objects from one classical artwork into the scene or objects of another. Our primary objective is to facilitate face-to-face swaps that do more than just blend faces; we also want to apply texture transfer to match the drawing style and morph only into the face region, preserving the integrity of the original artwork. Figure 2 shows another example we aim to achieve, swapping the two faces in &#x201C;American Gothic&#x201D; by Grant Wood.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-17.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="2000" height="587" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-17.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-17.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-17.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/02/image-17.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 1 (left)</strong></b><span style="white-space: pre-wrap;">. The creative rendition of Vermeer&#x2019;s &#x201C;Girl with a Pearl Earring&#x201D;. </span><b><strong style="white-space: pre-wrap;">Figure 2 (right)</strong></b><span style="white-space: pre-wrap;">. &#x201C;American Gothic&#x201D;&#xA0;</span></figcaption></figure><hr><h2 id="ii-approach">II. Approach</h2><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-16.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="2000" height="790" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-16.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-16.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-16.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-16.png 2338w" sizes="(min-width: 1200px) 1200px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 3</strong></b><span style="white-space: pre-wrap;">. Our project pipeline.</span></figcaption></figure><p>Our approach comprises several steps, each of which is covered in the class. The pipeline shown above provides an overview of our method (refer to Figure 3), and here are steps with more detailed descriptions:</p><ol><li><strong>Image Selection</strong>: We first obtain two sets of images. One set consists of pictures of a &quot;cat,&quot; the other set includes numerous classical portrait artworks.</li><li><strong>Source and Target Images</strong>: Select one image from each set, labeling them as the &apos;source&apos; and &apos;target&apos; images, respectively.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-5.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1110" height="616" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-5.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-5.png 1000w, https://blog.tjtl.io/content/images/2024/02/image-5.png 1110w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 4</strong></b><span style="white-space: pre-wrap;">. Example selected source image and target image.</span></figcaption></figure><ol start="3"><li><strong>Facial Landmarks Extraction</strong>: Extract facial landmarks from both images using the standard 68 landmarks model.</li></ol><ul><ul><li>For human faces, we automatically extract the landmarks using dlib&#x2019;s detector and predictor, which is a mature technology.</li><li>For cat faces, we manually extract the landmarks using a Python tool we developed, taking the positions of dlib&#x2019;s predictor landmarks as reference (Elmahmudi, Ali, et. al.). For more details, see the README file in the code repo.</li></ul></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-6.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1404" height="686" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-6.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-6.png 1000w, https://blog.tjtl.io/content/images/2024/02/image-6.png 1404w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 5</strong></b><span style="white-space: pre-wrap;">. Facial Landmarks Extraction</span></figcaption></figure><ol start="4"><li><strong>Triangulation</strong>: Triangulate the facial landmarks of each face to match the same mesh structure. This is achieved using a convex hull and the Delaunay algorithm.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-7.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1444" height="688" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-7.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-7.png 1000w, https://blog.tjtl.io/content/images/2024/02/image-7.png 1444w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 6</strong></b><span style="white-space: pre-wrap;">. Proper triangulation for facial meshes</span></figcaption></figure><ol start="5"><li><strong>Affine Transformation</strong>: Perform an affine transformation from the stylized source face to the target face, or vice versa. Obtain the mask of each face.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-8.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1702" height="422" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-8.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-8.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-8.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-8.png 1702w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 7</strong></b><span style="white-space: pre-wrap;">. Face affine transformation between two human faces.</span></figcaption></figure><ol start="6"><li><strong>Poisson Blending</strong>: Apply Poisson or Mixed blending using the source face&apos;s region of interest, the target artwork, and the source face mask.</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-9.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1614" height="572" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-9.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-9.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-9.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-9.png 1614w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 8</strong></b><span style="white-space: pre-wrap;">. Three different output images with different blend techniques.</span></figcaption></figure><hr><h2 id="iii-results">III. Results</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-10.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1890" height="774" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-10.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-10.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-10.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-10.png 1890w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 9</strong></b><span style="white-space: pre-wrap;">. Cat-human Face Example 1 (w/ Poisson Blending) Source: unknown, internet. Target: &#x201C;Girl with a Pearl Earring&#x201D; by Vermeer</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-11.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1958" height="780" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-11.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-11.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-11.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-11.png 1958w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 10</strong></b><span style="white-space: pre-wrap;">. Cat-human Face Example 2 (w/ Mixed Blending) Source: unknown, internet. Target: &#x201C;Portrait of Giovanni di Nicolao Arnolfini&#x201D; by Jan van Eyck Source face is well-fitted into the target face, but this time it also maintains the target face structure as well</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-13.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1906" height="738" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-13.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-13.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-13.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-13.png 1906w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 11</strong></b><span style="white-space: pre-wrap;">. Cat-human Face Example 4 (w/ Poisson Blending) Source: generated with DALL-E, internet. Target: &#x201C;Man With a Ring 1617&#x201D; by Werner van den Valckert Source face is well-fitted into the target face in terms of the facial contour. As this cat face is more abstract compared to others, the mouth seems to be misaligned, due to the improper annotation, as well as the unmatched color profile of two faces.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-14.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1904" height="742" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-14.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-14.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-14.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-14.png 1904w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 12</strong></b><span style="white-space: pre-wrap;">. Human-human Face Example 1 (w/ Poisson Blending) Source &amp; Target: &#x201C;American Gothic&#x201D; by Grant Wood</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/02/image-15.png" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="1690" height="882" srcset="https://blog.tjtl.io/content/images/size/w600/2024/02/image-15.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/02/image-15.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/02/image-15.png 1600w, https://blog.tjtl.io/content/images/2024/02/image-15.png 1690w" sizes="(min-width: 720px) 720px"><figcaption><b><strong style="white-space: pre-wrap;">Figure 13</strong></b><span style="white-space: pre-wrap;">: The final outputs of two different blending techniques are compared: Poisson blending, which tends to maintain more of the source face, and Mixed blending, which more effectively blends the source face into the target face, resulting in an interesting stylistic look.</span></figcaption></figure><hr><h2 id="iv-implementation">IV. Implementation</h2><p>For this project, Python was our primary programming language, complemented by a range of open-source libraries. Below is a list of these libraries in our project:</p><ul><li><code>cv2</code> (OpenCV):&#xA0;<ul><li><u>General Functions</u>: Used for reading images, converting color spaces, visualizing landmarks on images, and calculating the bounding box coordinates.</li><li><u>Convex Hull and Subdiv2D</u>: Used for creating convex hulls and Delaunay triangulation, essential in the process of meshing facial landmarks.</li><li><code>cv2.getAffineTransform()</code>, <code>cv2.warpAffine()</code>: These functions perform affine transformations for morphing faces from source to target images.</li><li><code>cv2.fillConvexPoly()</code>: Fills a convex polygon, which we used for masking and blending regions in the image.</li><li><u>Poisson Blending</u>: we opted for the <code>cv2.seamlessClone()</code> function instead of the functions built during project 3 for its efficiency and effectiveness in the blending step.&#xA0;</li></ul></li><li><code>dlib</code>: Used for its robust facial detector and predictor, providing the facial landmarks necessary for our transformations.</li><li><code>Pillow</code>: Used for opening and handling the content and style images from their respective directories.</li><li>Others: <code>matplotlib</code>, <code>numpy</code>, <code>json</code></li></ul><p>For image datasets, some were acquired from the internet (e.g., Google Arts, Google Search), while others were generated using GAN technology (e.g., DALL-E). The sources of these images will be listed in the reference section.</p><hr><h2 id="v-problem">V. Problem</h2><p>The main problem was achieving a seamless blend of the source face with the target artwork&apos;s color palette and style. We initially tried mixed gradient blending, which sometimes caused the source face to lose its unique features. We then experimented with poisson gradient blending, which retained more of the source face structure and was ultimately chosen for our project. We provide users with both blending options, allowing them to select based on their preference.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-us.googleusercontent.com/tCZlW2MFbA3nClsnkGErOk5H7LOlEyf41ZXhV9r36guY9smtwnbnBvuheDy-f6DBzMUznVRKuCrNnSRUN_EUG-F0ene9R4k4t0EagIqBJ4DaTa0EHbgbPknq-tn8dx2b-WqCovMITI5QQvuAoKkJ57U" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="298" height="188"><figcaption><b><strong style="white-space: pre-wrap;">Figure 14</strong></b><span style="white-space: pre-wrap;">. Poisson blending is impacted by the mustache on the target face, resulting in darker blended areas. Mixed blending achieves a more stylistically consistent result.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-us.googleusercontent.com/8owa6NJSIlFQk7pRoWXcb-vEk2gk_efzFLjAppjvO6u0MQY9nteCMapFS3HuVFvILbbJIb-auIHmzZHWqt8f34fa9G9PCRnI8cRZbFw52kZuMlFVP0QOsf7dUQeP84l6ns1EFuVMRaIcBcbi-Pt5rmw" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="298" height="171"><figcaption><b><strong style="white-space: pre-wrap;">Figure 15</strong></b><span style="white-space: pre-wrap;">. Due to the source face&apos;s brightness compared to the target, neither blending technique used here yields an ideal result.</span></figcaption></figure><p>For future improvements, we hope to explore other techniques that account for variations in lighting, saturation, and color profiles. Potential solutions include:</p><ul><li>Implementing a multi-scale blending approach for preserving finer details while ensuring a smooth transition.&#xA0;</li><li>Incorporating color correction algorithms to match the source face&apos;s color tone with the target artwork.</li><li>Enhancing triangulation, especially around key facial features, to achieve more detailed and accurate morphing.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-us.googleusercontent.com/mWWHst2dLPECU-A4S_3zl6Y0lCeZ8oKIktzk6SGW0MgGCRL2QJJl-KRKVvyt_W0ypTmIO5SD0JBKfuZp99YboPM2qZNeOamqq6Gb0dfAcfHPKknSCGsmYMPhAbfZG_IDEA_oI3BIomjc8aV_UCaMWjw" class="kg-image" alt="Face migration in classical artwork" loading="lazy" width="624" height="160"><figcaption><b><strong style="white-space: pre-wrap;">Figure 16</strong></b><span style="white-space: pre-wrap;">. Distorted areas in the source face when morphed into the target face, due to a limited number of control points.</span></figcaption></figure><p>Our initial goal of facilitating general object migration between artworks, time constraints led us to focus solely on facial swaps. An automatic segmentation method could be incorporated into the project to handle the different shapes, colors, and textures present in various objects, which would be quite interesting to observe as objects migrate through each other across different artworks. Recent developments with Semantic Automatic Matting (SAM) (Kirillov et al., 2023) seem to be a promising option to be integrated in the future.</p><hr><h2 id="vi-acknowledgements">VI. Acknowledgements</h2><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text">This final project was completed by a group of three students, led by Tommy. The other two members include Rishit C., who focused on applying style transfer to the source image, and Taeseok R. As mentioned earlier, this document is an edited version of the project report, and as such, some content, such as details on the style transfer process, has been omitted here.</div></div><p><strong>Tommy Liu</strong></p><ul><li>Project report writing and the finalized version</li><li>Implemented a tool to manually annotate the 68 landmarks for cat face, as well as save/load the landmark file to be used in the Notebook</li><li>(Main notebook) implemented the parts for landmark extraction, triangulation w/ convex hull and Delaunny algorithm, face blending, the final output and comparing section, as well as the final code integration</li><li>Ran demo on various source and target images to showcase the project&apos;s capabilities</li><li>Wrote the README file in the GitHub repo</li></ul><hr><p>The full code is located <a href="https://github.com/tommyjtl/cs445-fa23-final-project?ref=blog.tjtl.io"><u>here</u></a> on GitHub.</p><hr><h2 id="reference">Reference</h2><h3 id="list-of-images-used">List of images used</h3><ul><li>van Eyck, J. (c. 1438). Portrait of Giovanni di Nicolao Arnolfini. [Painting].Berlin.</li><li>Christus, P. (c. 1465-1470). Portrait of a Young Girl. [Oil-on-oak panel]. Gem&#xE4;ldegalerie, Berlin.</li><li>van den Valckert, W. (1617). Man With a Ring. Location Unknown.</li><li>Vermeer, J. (c. 1665). Girl with a Pearl Earring. [Oil painting]. Mauritshuis museum, The Hague.</li><li>Repin, I. (1884). Portrait of Vsevolod Mikhailovich Garshin. [Oil on canvas]. Metropolitan Museum of Art.</li><li>Wood, G. (1930). American Gothic. [Painting]. Location Unknown.</li><li>Elmahmudi, A. and Ugail, H., 2021. Identification of facial landmarks using Dlib [Digital Image]. In A. Elmahmudi and H. Ugail, &quot;A framework for facial age progression and regression using exemplar face templates,&quot; The Visual Computer, vol. 37. doi: 10.1007/s00371-020-01960-z. Available: https://www.researchgate.net/figure/dentification-of-facial-landmarks-using-Dlib-a-Facial-landmarks-b-The-position-and_fig2_343699139</li><li>Adam88xx. (2014, May 23). Cat Kitten Gaze Regard Glance Look Head. [Digital Image]. IStock. Available: www.istockphoto.com/photo/cat-gm493250135-40361554. Accessed 6 Dec. 2023.</li><li>Aleksandrov, V. Red Cat. [Digital Art]. ArtPal. Available: www.artpal.com/VladimirAleksand?i=238586-12. Accessed 6 Dec. 2023.</li><li>Brooks, K. (2015, Sept. 3). Cats Are Taking over Famous Western Artworks and We&#x2019;re Definitely Not Mad about It. HuffPost. Available: www.huffpost.com/entry/cats-are-taking-over-famous-western-artworks_n_55e75737e4b0aec9f355c018. Accessed 6 Dec. 2023.</li><li>Flood, S. Orlando. [Painting]. Year and Location Unknown.</li></ul><h3 id="list-of-readings">List of readings</h3><ul><li>A. Kirillov, E. Mintun, N. Ravi, H. Mao, C. Rolland, L. Gustafson, T. Xiao, S. Whitehead, A. C. Berg, W.-Y. Lo, P. Doll&#xE1;r, and R. Girshick, &quot;Segment Anything,&quot; 2023. arXiv:2304.02643 [cs.CV]. [Online]. Available: https://arxiv.org/abs/2304.02643</li><li>D. King, &quot;Dlib&apos;s demo code for using 68 landmarks predictor,&quot; dlib.net. [Online]. Available: http://dlib.net/face_landmark_detection.py.html. [Accessed: Dec. 05, 2023].</li><li>OpenCV, &quot;seamlessClone() - OpenCV 3.4 documentation,&quot; docs.opencv.org. [Online]. Available: https://docs.opencv.org/3.4/df/da0/group__photo__clone.html#ga2bf426e4c93a6b1f21705513dfeca49d. [Accessed: Dec. 05, 2023].</li><li>OpenCV, &quot;Subdiv2D() - OpenCV 3.4 documentation,&quot; docs.opencv.org. [Online]. Available: https://docs.opencv.org/3.4/df/d5b/group__imgproc__subdiv2d.html. [Accessed: Dec. 05, 2023].</li><li>L. R. Finka et al., &quot;Geometric morphometrics for the study of facial expressions in non-human animals, using the domestic cat as an exemplar,&quot; Scientific Reports, vol. 9, no. 1, Art. no. 9883, Jul. 2019, doi: 10.1038/s41598-019-46330-5.</li><li>G. Martvel, I. Shimshoni, and A. Zamansky, &quot;Automated Detection of Cat Facial Landmarks,&quot; 2023. arXiv:2310.09793. [Online]. Available: https://arxiv.org/abs/2310.09793 [cs.CV]. [Accessed: Dec. 05, 2023].</li><li>G. Martvel, N. Farhat, I. Shimshoni, and A. Zamansky, &quot;CatFLW: Cat Facial Landmarks in the Wild Dataset,&quot; 2023. arXiv:2305.04232. [Online]. Available: https://arxiv.org/abs/2305.04232 [cs.CV]. [Accessed: Dec. 05, 2023].</li><li>Tech4Animals Lab, &quot;CatFLW: Cat Facial Landmarks in the Wild Dataset,&quot; Tech4Animals, 2023. [Online]. Available: https://www.tech4animals.org/catflw. [Accessed: Dec. 05, 2023].</li><li>Pi&#x119;tka, Ola. &#x201C;Face Swapping &amp; Style Transfer.&#x201D; GitHub, 14 Nov. 2023, github.com/OlaPietka/Portrait-Style-Transfer. Accessed 7 Dec. 2023.</li><li>Q. Zhang, &quot;Landmark Detection for Animal Face and 3D Reconstructions,&quot; zhangtemplar.github.io, 2023. [Online]. Available: https://zhangtemplar.github.io/animal-keypoints/. [Accessed: Dec. 05, 2023].</li><li>S. Mallick, &quot;Face Swap using OpenCV,&quot; learnopencv.com, 2023. [Online]. Available: https://learnopencv.com/face-swap-using-opencv-c-python/. [Accessed: Dec. 05, 2023].</li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[Berlin]]></title><description><![CDATA[<blockquote>Jeder einmal in Berlin!</blockquote><p>On a cold night, as pedestrians hurriedly traversed the street, Gereon&apos;s attention was drawn to an advertisement on a pillar. The inscription on the poster read, &quot;Jeder einmal in Berlin!&quot; which in English means &quot;Everyone once in Berlin!&quot; In one</p>]]></description><link>https://blog.tjtl.io/berlin-2024-01-24/</link><guid isPermaLink="false">65a02991bc01f0205e8cd6b0</guid><category><![CDATA[Movie]]></category><category><![CDATA[Random]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Thu, 25 Jan 2024 04:52:33 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/01/BabBerlinS01E01.png" medium="image"/><content:encoded><![CDATA[<blockquote>Jeder einmal in Berlin!</blockquote><img src="https://blog.tjtl.io/content/images/2024/01/BabBerlinS01E01.png" alt="Berlin"><p>On a cold night, as pedestrians hurriedly traversed the street, Gereon&apos;s attention was drawn to an advertisement on a pillar. The inscription on the poster read, &quot;Jeder einmal in Berlin!&quot; which in English means &quot;Everyone once in Berlin!&quot; In one of the Chinese subtitle translations, &quot;&#x6BCF;&#x4E2A;&#x4EBA;&#x90FD;&#x5E94;&#x8BE5;&#x6765;&#x67CF;&#x6797;,&quot; and in English again, is &quot;Everyone should come to Berlin!&quot;</p><p>This scene is from the German TV series &quot;<a href="https://en.wikipedia.org/wiki/Babylon_Berlin?ref=blog.tjtl.io">Babylon Berlin</a>,&quot; where Gereon Rath is the male protagonist. I started watching it while taking a German popular culture class, which spurred my curiosity to learn more about Germany. Gereon, a WWI soldier suffering from wartime PTSD, later became a police officer in Berlin, either to heal or escape from his past. Throughout the first three seasons, viewers witness the how unstable and fragile the Weimar Germany was, which eventually led the nation to become a Nazi state.</p><p>Berlin holds a certain appeal for me. In my opinion, it exudes freedom, youth, and wildness. It&apos;s like Bob Dylan as a city. The <a href="https://www.ccc.de/en/?ref=blog.tjtl.io">CCC</a> (Chaos Computer Club), a hacker association I&apos;ve heard tales about, was founded in Berlin, and it has attracted me to go there and experience the creativity of Berlin hackers.</p><p>&quot;<a href="https://www.berlinale.de/en/2015/programme/201505757.html?ref=blog.tjtl.io">Victoria</a>,&quot; a low-budget film winner of the 2015 Berlinale Best Film Awards, tells the story of a Spanish girl encountering a group of German boys and becoming a part of a bizarre midnight adventure on the streets of Berlin. It remains one of my top five movies of all time, especially for the original film soundtrack composed by Nils Frahm. My first viewing was at one of the HKIFF&apos;s screenings. The immersive experience created by the cinematography and the soundtrack was mesmerizing. The entire film was <a href="https://en.wikipedia.org/wiki/Victoria_(2015_film)?ref=blog.tjtl.io#:~:text=The%20film%20was%20shot%20in,of%20the%20dialogue%20being%20improvised.">captured in a single take</a> (or perhaps two? but you wouldn&apos;t notice it), taking viewers on a journey through Berlin streets unfiltered, as if you are a fl&#xE2;neur, right there with them.</p><p>I have two friends who used to live in Berlin: one is an architect, one is a software engineer. They both have unique characteristics, styles, and interesting backstories.</p><p>I haven&apos;t been to Berlin yet, but these memories make me crave a visit. My intention is subjective, yes; admittedly, I haven&#x2019;t taken many other factors about the city into account&#x2014;neither good nor bad. But I delight in imagining how it would be, and if experiencing it might decharm my fantasy, that&apos;s fine.</p><hr><p>&quot;Babylon Berlin&quot; was refreshing and provided historical context unfamiliar to me. During that class, I made a visual map of the characters&apos; relationships on Miro, which I found quite helpful for understanding the plot. Here it is:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Babylon-Berlin-Character-Relationship.jpg" class="kg-image" alt="Berlin" loading="lazy" width="2000" height="1216" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Babylon-Berlin-Character-Relationship.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Babylon-Berlin-Character-Relationship.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Babylon-Berlin-Character-Relationship.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/Babylon-Berlin-Character-Relationship.jpg 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Made w/ Miro. I&apos;m really glad that as a U of I student I can use the Pro version for free.</span></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[On note-taking]]></title><description><![CDATA[<p>I&apos;ve decided to include some technical notes directly in my blog from now on, e.g., OCaml learning series upcoming. But before that, I want to share some bits of my experiences on note-taking.</p><p>My note-taking pipeline is quite simple yet complicated, to some extent. Right now, I&</p>]]></description><link>https://blog.tjtl.io/putting-more-technical-notes/</link><guid isPermaLink="false">65b183158750c751983bdfe4</guid><category><![CDATA[Random]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Thu, 25 Jan 2024 03:19:40 GMT</pubDate><content:encoded><![CDATA[<p>I&apos;ve decided to include some technical notes directly in my blog from now on, e.g., OCaml learning series upcoming. But before that, I want to share some bits of my experiences on note-taking.</p><p>My note-taking pipeline is quite simple yet complicated, to some extent. Right now, I&apos;m using <a href="https://quip.com/?ref=blog.tjtl.io">Quip</a> for my working log, <a href="https://obsidian.md/?ref=blog.tjtl.io">Obsidian</a> for serious note-taking, and iOS reminders for checking to-dos. These tools pretty much take about 90% of my daily writings; in some other times, I use Overleaf for report and paper writing, and Google Docs for a few class project writings.</p><hr><h2 id="quip">Quip</h2><p>I&apos;ve been using Quip since around 2015 when I was a freelance visual designer. It was my go-to option for managing documentation and communication with clients. One thing I like about Quip is its clean and informative interface. In a way, I don&apos;t really have to care about the formatting being too casual (i.e., cartoonish fonts) or unattractive, and I can also use Markdown to write down stuff efficiently.</p><p>I would say I&apos;m very particular about the layout and formatting because, sometimes, if they don&apos;t look right, I can&apos;t start the writing. Sounds unreasonable, right? Quip resolves it for me and had me use it for almost 10 years.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-21.png" class="kg-image" alt loading="lazy" width="2000" height="1129" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-21.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-21.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-21.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-21.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">It also supports Math blocks with LaTeX syntax. I LOVE IT. I&apos;ve been taking notes on Quip for almost all of my Math and CS classes before Obsidian. Above is a screenshot of my MATH 241 (Multivariable Calculus) notes.</span></figcaption></figure><p>Another thing I like about Quip is how well it handles spreadsheet editing. I consider myself a sheet pro (<em>okay, don&apos;t say sh*t</em>), as well as some of my friends who saw my spreadsheet on Quip. It supports many fundamental Excel features, such as column/row freezing, merging, cell syntax, coloring, in-cell formatting, etc. And they look compact and good.</p><p>I have used the table on Notion; it just doesn&apos;t fit my actual needs, where there are a lot of things it doesn&apos;t support, as I mentioned above. And I understand that, since most Notion users wouldn&apos;t need complicated spreadsheeting techniques, and what they care about is easy to use. As for Obsidian, well, while it supports markdown table, but come on; you almost can not do anything with those plain table syntax.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-19.png" class="kg-image" alt loading="lazy" width="1550" height="890" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-19.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-19.png 1000w, https://blog.tjtl.io/content/images/2024/01/image-19.png 1550w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">One of the most recent documents includes these two spreadsheets for my college plan. I blocked some cells for some reasons I&apos;m going to discuss in the future, as I plan to write about my UIUC journey when I graduate.</span></figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-20.png" class="kg-image" alt loading="lazy" width="2000" height="618" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-20.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-20.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-20.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-20.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">The table I used for researching and buying a car.</span></figcaption></figure><p>Quip is nice. I&apos;m still using it to record my college study and life, mostly naming the documents as &quot;logs&quot;. Then, why did I quit using it for serious note-taking?</p><hr><h2 id="obsidian">Obsidian</h2><p>I think the first time I tried Obsidian was several years ago. I don&apos;t exactly remember when, but the first few times I tried, the UI was sluggish and unattractive. I appreciate how it is open-source and allows users to modify the layout or create community plugins, which is terrific. However, the first time I tried it, I gave up for about a few days, as in Quip, I don&apos;t need to care about too many things that bother me.</p><p>About 1 year ago, I embraced myself to try Obsidian again. I think that was around when Obsidian started to be profitable (maybe?). So I downloaded the latest version and gave it a try for the second time. It impressed me as a serious note-taking software.</p><p>There are a few things that changed my mind to switch from Quip to Obsidian for serious note-taking. And when I say &quot;serious&quot; note-taking, I mean I&apos;m going to write complex notes in the combination of Markdown, LaTeX, HTML syntax. Quip was good at it until I realized:</p><ul><li>Quip cannot export a document with full Markdown code, nor can it export to HTML with the original LaTeX rendered math block.</li><li>Quip doesn&apos;t support full document export, meaning that whatever stays on Quip, stays on it. I once saw someone develop a <a href="https://github.com/sonnenkern/quip-export?ref=blog.tjtl.io">tool</a> that uses Quip API to export all the documents to local, but I never succeeded in downloading all of my documents. Probably because I have too many documents, and many of them have too many images? Nevertheless, the lack of full export disappointed me.</li><li>Quip was acquired by Salesforce in 2016, and during these years, it hasn&apos;t been developing many new features since then. So it&apos;s most unlikely that it will fix the above problems that I care about - problems that Salesforce customers don&apos;t care about - in a foreseeable future.</li></ul><p>Coupled with a few reasons that hooked me for the new Obsidian about a year ago:</p><ul><li>I had time to customize the GUI that fits my needs with some CSS and JavaScript code snippets.</li><li>The default theme is well-laid out and good-looking.</li><li>Syntax support in the editing mode is superb. It supports the mix of Markdown, LaTeX, and HTML for all documents.</li><li>All files are locally stored; I don&apos;t have to load my data from a remote server that I can&apos;t access, and the performance is just better than Quip, no writing latency, because rendering is just faster.</li></ul><p>I started to use Obsidian for all my note-taking: dev notes, course notes, secret projects&#x2026;</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-23.png" class="kg-image" alt loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-23.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-23.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-23.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-23.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">One of my notes for CS 361, a probability and statistics class.</span></figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-24.png" class="kg-image" alt loading="lazy" width="2000" height="1294" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-24.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-24.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-24.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-24.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">One of my lecture notes for CS 341, a system programmign class taught using C.</span></figcaption></figure><p>One more thing I want to mention is that, after quite a while, after I gained a personal note-taking style, I realize that visualizing the table of content by parsing the headers is really eye-catching. It also allows me to have a review of what things I have touched during a certain amount of time. Plus, it is a nice-looking tree.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/chart--4--2.png" class="kg-image" alt loading="lazy" width="1426" height="2466" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/chart--4--2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/chart--4--2.png 1000w, https://blog.tjtl.io/content/images/2024/01/chart--4--2.png 1426w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">ToC visualization for my CS 445 (Computational Photography) course notes.</span></figcaption></figure><hr><p>I have nothing specific to note about the iOS reminder. It&apos;s very efficient, and informative.</p><hr><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-25.png" class="kg-image" alt loading="lazy" width="2000" height="1133" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-25.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-25.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-25.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-25.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">LaTeX is the best syntax system for writing, said I. Check more of my course notes on </span><a href="https://github.com/tommyjtl/uiuc-cs361-notes?ref=blog.tjtl.io"><span style="white-space: pre-wrap;">https://github.com/tommyjtl/uiuc-cs361-notes</span></a><span style="white-space: pre-wrap;"> if you are interested.</span></figcaption></figure><hr><p>But, why do I want to include technical notes in the blog in the future? Well, for now I just want to put more content here.</p><hr><p>Til next time.</p>]]></content:encoded></item><item><title><![CDATA[A belated year(s) in review]]></title><description><![CDATA[<blockquote>TL;DR</blockquote><p>This will be more like a brief recap of my past few years. A few important dates:</p><ul><li>Ten years ago, I made the rather rash decision to work as a software developer instead of going to college.</li><li>Eight years ago, I made a decision of starting a tech</li></ul>]]></description><link>https://blog.tjtl.io/2023-review/</link><guid isPermaLink="false">659c8652bc01f0205e8ccfe9</guid><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Wed, 10 Jan 2024 03:26:49 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/01/DSCF6757-3.jpg" medium="image"/><content:encoded><![CDATA[<blockquote>TL;DR</blockquote><img src="https://blog.tjtl.io/content/images/2024/01/DSCF6757-3.jpg" alt="A belated year(s) in review"><p>This will be more like a brief recap of my past few years. A few important dates:</p><ul><li>Ten years ago, I made the rather rash decision to work as a software developer instead of going to college.</li><li>Eight years ago, I made a decision of starting a tech company with my friend, instead of going to college, again.</li><li>Almost three years ago, I left my first startup, and was finally coming back to college to finish my undergraduate degree.</li></ul><p>Let&apos;s just start with the most recent one, which happened during the COVID period.</p><hr><p><strong>College Application, 8 years after High School</strong></p><p>To be honest, when I reapplied to university in 2020, I wasn&apos;t sure if any school would admit me. Back in 2012, I applied to a few U.S. schools and received offers from several of my dream schools. But in 2020, I was no longer the fresh high school graduate; I was older than the typical applicant, and my outdated standardized test scores didn&apos;t quite reflect who I was then. Plus, I was up against a pool of talented high schoolers, where the number of applicants was much greater than in my time. So, filling out those 20 applications while juggling my duties as a startup founder was exhausting.</p><p>Of all the schools I applied to, I had only one video interview, quite a pleasuring one. An email hit my inbox one day from the MIT admission office, I was surprised, and thought it was spam. But no, it was an email from an alumni volunteer saying she would be doing an interview with me, her name was Susan. With a few days to prepare, we did the interview via Zoom. There is one moment I now recall quite clearly.</p><blockquote>&quot;Hello Tommy &#x2013; oh hey, you are wearing the shirt!&quot; </blockquote><p>Susan said at the beginning, pointing to my somewhat faded shirt, which has the equation $\frac{E}{C^2} \sqrt{-1} \frac{PV}{nR}$ printed on the front &#x2013; essentially &apos;MIT&apos; in a nerdy form. I bought this shirt while traveling to Boston in 2016, a pivotal moment when I decided to continue with my startup instead of pursuing a degree again. Meeting Prof. Gilbert Strang of MIT was a special moment; he inspired me to explore MOOCs back in the summer of 2011, when I was part of a team translating his Linear Algebra course from English to Chinese. He taught me that teaching and learning are lifelong tasks. His spirit of perseverance, which has sustained him for over 50 years of teaching &#x2013; and still going strong on YouTube, beloved by millions &#x2013; deeply impacted me. I&apos;m grateful for his encouragement and trust, and for his recommendations, offered twice, even eight years after our first online meeting via email. Susan&apos;s greeting brought back these memories back. I had been so determined to study at MIT, influenced by Prof. Strang, the hacker culture, the city&apos;s walkability, and the wonderful people I met there. I was rejected twice. But who knows &#x2013; perseverance is the key &#x2013; according to <a href="https://www.instagram.com/p/BUupAWFhgKd/?ref=blog.tjtl.io" rel="noreferrer">one of MIT CSAIL&apos;s posts</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-16.09.17.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="1460" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-09-at-16.09.17.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-09-at-16.09.17.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-09-at-16.09.17.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-16.09.17.png 2098w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Back in 2016, after I sat in his lecture in person, he signed this.</span></figcaption></figure><p>The other day in February, when I was working from home, I received an email from the UIUC admission office. From that moment, a bond was formed between me and this place &#x2013; a place I never learned much about, a surprise to my life. So, out of 20 schools, 19 rejected me. I was about to embark on a new journey in the cornfield.</p><p>There are two main reasons that pushed me to come to the U.S., one is that my girlfriend is pursuing her doctoral study here, and we don&apos;t want to separate for a long-distant relationship. The other one is that, deep down in my heart, I wanted to make up for the rash decisions I made. The degree may just be a piece of paper, but its value largely depends on the student&apos;s proactivity during these two to four years. One could just pass all classes and then graduate, while another might do more &#x2013; choose to engage more deeply, connecting with professors, peers, and various communities. The network created, not just the friendships or connections but also the advantages provided by a formal institution, could be a significant step forward in their learning.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/R0002834.JPG" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="1500" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/R0002834.JPG 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/R0002834.JPG 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/R0002834.JPG 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/R0002834.JPG 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">My first month in the States with my girlfriend. Oh hey! That&apos;s Chancellor Carol! Captured on 2021.</span></figcaption></figure><p>Every life lesson comes to a cost, whether it&apos;s about money time, or both. Embrace it and move forward.</p><hr><p><strong>UIUC</strong></p><p>I have just concluded my fifth semester here at UIUC, and so far everything has gone well. I&apos;m going to quote some of the questions that my course advisor asked me a year ago to describe my up-to-date experience.</p><blockquote>Are you happy with your grades? &#x2013; a faculty mentor</blockquote><p>Do I have a good GPA? Sure, I am satisfied with any grade above $\texttt{3.5}$. But more importantly, did I meet some interesting faces? Yes, in general, CS @UIUC is a resemblance to MIT in terms of the hacker culture, in my humble opinion. I&apos;ve had a great time learning new things about the campus, the professors, and the students here.</p><p>Did I learn anything? Well, for the first two years, most of the CS technical core wasn&apos;t too challenging for me, as I had more experience than many of my peers, which is unfair to say. However, I gained a lot from picking up the maths. I felt really positive about revisiting my knowledge in most of the math courses at UIUC, especially with Prof. Matthew Russell in Calculus III and Prof. Hongye Liu in Probability &amp; Statistics for CS. Not surprisingly, I made the most comprehensive notes in these two classes as well.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/chart--4--copy.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="1295" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/chart--4--copy.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/chart--4--copy.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/chart--4--copy.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/chart--4--copy.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">I always like to create visualizations from pure text content. Here are two table-of-content trees from my course notes on </span><a href="https://github.com/tommyjtl/uiuc-cs361-notes?ref=blog.tjtl.io" rel="noreferrer"><span style="white-space: pre-wrap;">CS 361</span></a><span style="white-space: pre-wrap;"> and </span><a href="https://cs.illinois.edu/academics/courses/cs445?ref=blog.tjtl.io" rel="noreferrer"><span style="white-space: pre-wrap;">CS 445</span></a></figcaption></figure><p>On another note, what I am really amazed about is how well CS @UIUC is doing in computing education, and it&apos;s still improving. Take CS 124 for example, the equivalent to Harvard&apos;s CS 50 (fun fact, Prof. Malan of CS 50 is a friend of Prof. Colleen, one of CS 124&apos;s professors). This course is the starting point for any student new to CS, and its structure is thoughtfully designed to suit a wide range of student demographics. <a href="https://www.geoffreychallen.com/?ref=blog.tjtl.io" rel="noreferrer">Prof. Challen</a> and his team developed an interactive system for students to code around inside a web browser of their own programming language choice, with different versions of interpretations for certain objectives. This project later has a neat domain called <a href="https://www.learncs.online/?ref=blog.tjtl.io" rel="noreferrer">learncs.online</a>. It has the most structured and intuitive representation for learning in a web page setup I&apos;ve ever seen. Compared to what I researched when I was doing my EdTech startup and teaching students in Hong Kong K-12 schools, I would say CS 124 can be a generous and fulfilling experience for programming novice.</p><p>There are other people and groups in the department doing relevant things. <a href="https://education.illinois.edu/faculty/h-chad-lane?ref=blog.tjtl.io" rel="noreferrer">Prof. Chad Lane</a> is one of the professors I approached when I entered UIUC and seeking research opportunities. He later introduced me to <a href="https://education.illinois.edu/faculty/michael-tissenbaum?ref=blog.tjtl.io" rel="noreferrer">Prof. Mike Tissenbaum</a>, where I spent almost all of my UIUC time at his lab, Pixel Playground Lab. There, I collaborated with his PhD student, <a href="https://cjsmith0.web.illinois.edu/?ref=blog.tjtl.io" rel="noreferrer">Casey Smith</a>, on the HCI &amp; EdTech project, <a href="https://www.pixelplaygrounds.org/?ref=blog.tjtl.io" rel="noreferrer">REACH</a>, which aimed to improve remote maker space learning through a projector-camera system. I once imagined this could be an alternative or pilot version of Bret Victor&apos;s <a href="https://dynamicland.org/?ref=blog.tjtl.io" rel="noreferrer">Dynamicland</a>. We are still working on making this setup accessible to all audiences. Another influential faculty member I met was <a href="https://cs.illinois.edu/about/people/faculty/glherman?ref=blog.tjtl.io" rel="noreferrer">Prof. Geoffrey Herman</a> of CS 233 (Computer Architecture with MIPS), is conducting many research on improving student&apos;s performance in CS classes. The <a href="https://www.prairielearn.com/?ref=blog.tjtl.io" rel="noreferrer">PrairieLearn</a> is one open-source learning platform he and his team designed to digitize math and CS learning, for a better experience for both teachers and students. While some may find its usability challenging for certain courses, its modular design shows potential to replace traditional learning management systems in the future. As of now, I&apos;m seeing more than five U.S. universities are using it, at least according to the institution login options I saw today. <a href="https://cs.illinois.edu/about/people/faculty/angrave?ref=blog.tjtl.io" rel="noreferrer">Prof. Angrave</a> of CS 341 and his team are doing research and development on the accessibility for online learning, called ClassTranscribe, while also providing an in-browser VM for students to learn system programming. <a href="https://www.ziangxiao.com/?ref=blog.tjtl.io" rel="noreferrer">Dr. Ziang Xiao</a> is a friend I met through a local film development lab, worked on a project at the university focusing on evaluating and improving engineering students&apos; spatial visualization abilities across various demographics. There are just many more interesting people I can name if I have more spaces here.</p><p>To elaborate, there&apos;s an additional factor that motivated me to pursue a degree: gaining more exposure to fundamental CS research in an academic setting. Fields like computer vision and graphics, compilers, have always fascinated me since high school. Projects from the MIT Media Lab, such as the Sixth Sense project, largely influenced my love for Computer Science and its intersection with other creative or technical fields.</p><blockquote>Do you know what you want to do after you graduate? Do you have any questions about research and PhD programs? &#x2013; a faculty mentor</blockquote><p>When I first saw these two questions, I pondered for a while. My simplest answer is a straight inequality:&#xA0;</p><p>$$P(\text{Applying for PhD}) &gt; P(\text{Finding a job}) &gt; P(\text{A new startup})$$</p><p>At this point, I can either start fresh (first option) or start from scratch (latter two options). As an outlier, I will have to weave my own path from here.&#xA0;</p><p>PhD may be a good option for me, simply because I want to go in-depth into specific fields. During my eight years in the industry (2013-2021), I had the pleasure of working with people across various fields and sectors: software, hardware, supply chain, design, architecture, photography, education, and VCs. I was in Beijing, Shanghai, and Shenzhen, cities with opportunities. This period of experience has molded my mindset to think in a multidisciplinary way. While breadth is valuable, I also want to try my hand at fundamental CS research. In the context of when AGI becomes true in an (if) not distant future, it can definitely be good at everything, but it&apos;s not going to excel at everything (otherwise humans are doomed; yes, I&apos;m that pessimistic).&#xA0;</p><p>There&apos;s a good chance that I might get rejected from every program; I always consider the worst-case scenario when making decisions. For now, I&apos;m choosing to ignore this possible outcome. If the worst actually happens, well, it&apos;s another story to tell.&#xA0;<a href="https://jeffe.cs.illinois.edu/?ref=blog.tjtl.io#:~:text=I%20have%20the%20lowest%20undergraduate%20GPA%20(2.4/4.0)%20of%20any%20professor%20I&apos;ve%20ever%20met">Prof. Jeff Erikson&apos;s tale</a>&#xA0;tells me that anything is possible.</p><p>Studying at UIUC is something I never thought about, it is a fortune to be here meeting all kinds of people around campus. I will be always thankful to that admission committee for their decision. I will be paying off my college tuition myself for undergraduate, and I think this is going to be the proudest thing I have done during these four years.</p><hr><p><strong>Time in the U.S.</strong></p><p>This post should not only be just storytelling. It should be more lively. I should write something about my spare time here, which is mostly spending time driving around with my loved one. Since I got my driving license in 2022, we started enjoying road trips and exploring new cities we&apos;ve never been apart from the Bay Area, traveling North to Sonoma, Napa, Davis, Klamath, Portland; and East/South to Yosemite, Lake Tahoe, Santa Cruz, Monterey, Death Valley, Las Vegas, Los Angeles, Pasadena, Irving, San Diego. It was definitely a joy.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-1.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="754" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-1.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-1.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-1.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-1.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">A glimpse of our road trip paths in 2023, recorded using </span><a href="https://apps.apple.com/us/app/arc-mini/id1510217238?ref=blog.tjtl.io" rel="noreferrer"><span style="white-space: pre-wrap;">Arc Mini</span></a><span style="white-space: pre-wrap;"> and rendered with </span><a href="https://kepler.gl/demo?ref=blog.tjtl.io" rel="noreferrer"><span style="white-space: pre-wrap;">Kepler.gl</span></a><span style="white-space: pre-wrap;">.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF3394.jpg" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="1333" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF3394.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF3394.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF3394.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF3394.jpg 2048w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">We had our very first Arsenal match experience in SoFi stadium.</span></figcaption></figure><p>Other than the road trip, we were just working and studying. Oh, right, both of us started to learn a new foreign language in 2023. This happened when I took a German culture class in 2023 and started learning German; and she started to pick up French when she first learned during her undergraduate period. Despite I only spent about 10 minutes on average on Duolingo, it made me keeps the desire to learn this language. Time to take a German language class next semester.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-10.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="1794" height="1076" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-10.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-10.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-10.png 1600w, https://blog.tjtl.io/content/images/2024/01/image-10.png 1794w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Left: A &quot;hooray I learned this much German&quot; moment in December 2023. Right: Yes, I&apos;m a frequent flyer between ORD and SFO.</span></figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-9.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="2000" height="875" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-9.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-9.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-9.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/image-9.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">Surprisingly, I had over 10M views for my photos on </span><a href="https://unsplash.com/@0x746f6d6d796a746c?ref=blog.tjtl.io" rel="noreferrer"><span style="white-space: pre-wrap;">unsplash.com</span></a><span style="white-space: pre-wrap;"> up to December 2023.</span></figcaption></figure><hr><p><strong>There&apos;s Always a New Chapter</strong></p><p>Each year, as we complete another orbit around the sun, it marks a special moment. We set new goals, carry forward some from the past, and celebrate those we&apos;ve achieved. I certainly reached a few milestones in 2023 and am carrying others into 2024. Every year is a new chapter in my life, yet each one is deeply interconnected. One goal I&apos;m setting for myself is to write more posts here in 2024, whether to consolidate my thoughts and ideas, or just to share photos, or just QotDs.</p><p>Here is to 2024: stay kind, work hard, enjoy spare time, as always. Like GD, like ADAM, be optimistically optimizable.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/image-2.png" class="kg-image" alt="A belated year(s) in review" loading="lazy" width="1230" height="320" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-2.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-2.png 1000w, https://blog.tjtl.io/content/images/2024/01/image-2.png 1230w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Image credit: </span><a href="https://www.ruder.io/optimizing-gradient-descent/?ref=blog.tjtl.io"><span style="white-space: pre-wrap;">https://www.ruder.io/optimizing-gradient-descent/</span></a></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[New year's hike]]></title><description><![CDATA[<p>In Chinese, there is a saying that suggests going for a hike on the first day of the year to help you climb higher and higher throughout the year. This saying is known as &quot;&#x65B0;&#x5E74;&#x767B;&#x9AD8;, &#x6B65;&#x6B65;&#x9AD8;&#x5347;,&quot; which symbolizes taking steps that lead</p>]]></description><link>https://blog.tjtl.io/new-years-hike-mt-tam/</link><guid isPermaLink="false">659f899cbc01f0205e8cd656</guid><category><![CDATA[Photography]]></category><category><![CDATA[Hike]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Mon, 01 Jan 2024 08:00:00 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/01/DSCF6814-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2024/01/DSCF6814-1.jpg" alt="New year&apos;s hike"><p>In Chinese, there is a saying that suggests going for a hike on the first day of the year to help you climb higher and higher throughout the year. This saying is known as &quot;&#x65B0;&#x5E74;&#x767B;&#x9AD8;, &#x6B65;&#x6B65;&#x9AD8;&#x5347;,&quot; which symbolizes taking steps that lead to continuous improvement. This year, we followed this tradition and went to Mt. Tamalpais, a place we consider the best spot to overlook the bay and relax.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF6768.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="851" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF6768.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF6768.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF6768.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF6768.jpg 2048w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF6916.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="1333" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF6916.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF6916.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF6916.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF6916.jpg 2048w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF6757-5.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="1333" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF6757-5.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF6757-5.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF6757-5.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF6757-5.jpg 2048w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF6853-3-1.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="1365" height="2048" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF6853-3-1.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF6853-3-1.jpg 1000w, https://blog.tjtl.io/content/images/2024/01/DSCF6853-3-1.jpg 1365w" sizes="(min-width: 720px) 720px"></figure><hr><p>A friend then took us to Bernal Heights, another fantastic spot to overlook the bay area, but we had a better view of the East Bay.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF7061-4.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="1333" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF7061-4.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF7061-4.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF7061-4.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF7061-4.jpg 2048w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF7010.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="1333" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF7010.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF7010.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF7010.jpg 1600w, https://blog.tjtl.io/content/images/2024/01/DSCF7010.jpg 2048w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/Untitled-1-copy001.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="991" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Untitled-1-copy001.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Untitled-1-copy001.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Untitled-1-copy001.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/Untitled-1-copy001.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.tjtl.io/content/images/2024/01/002.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="991" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/002.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/002.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/002.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/002.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><figure class="kg-card kg-image-card kg-width-full kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/DSCF7023-3.jpg" class="kg-image" alt="New year&apos;s hike" loading="lazy" width="2000" height="450" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/DSCF7023-3.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/DSCF7023-3.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/DSCF7023-3.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/DSCF7023-3.jpg 2400w"><figcaption><span style="white-space: pre-wrap;">Overlooking SF on Bernal Heights.</span></figcaption></figure><p></p>]]></content:encoded></item><item><title><![CDATA[Repairing my Ricoh GR II]]></title><description><![CDATA[<blockquote>I do not try to find myself in what I &#x201C;shoot,&#x201D; but perhaps I want to see the position of the world I am in. - Daid&#x14D; Moriyama (&#x68EE;&#x5C71;&#x5927;&#x9053;)</blockquote><p>Indeed, the Ricoh GR II is a camera that does the best at helping me</p>]]></description><link>https://blog.tjtl.io/repairing-my-ricoh-gr-ii/</link><guid isPermaLink="false">659c824bbc01f0205e8ccfa3</guid><category><![CDATA[Photography]]></category><category><![CDATA[Maker]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Mon, 27 Jun 2022 07:00:00 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/01/IMG_20220616_220657_731.jpeg" medium="image"/><content:encoded><![CDATA[<blockquote>I do not try to find myself in what I &#x201C;shoot,&#x201D; but perhaps I want to see the position of the world I am in. - Daid&#x14D; Moriyama (&#x68EE;&#x5C71;&#x5927;&#x9053;)</blockquote><img src="https://blog.tjtl.io/content/images/2024/01/IMG_20220616_220657_731.jpeg" alt="Repairing my Ricoh GR II"><p>Indeed, the Ricoh GR II is a camera that does the best at helping me to capture the best moment of my daily life &#x2013; and the world I have experienced &#x2013; throughout the past six years. It has the most petite body compared to other competitive models (e.g., Sony RX100) while maintaining the best image resolution of its kind. It is undoubtedly the best APS-C camera out there on the market. Among all the upsides of this model, I specifically love the macro effect, as well as the unique &#x201C;Daido&#x201D; (high-contrast black and white) preset.</p><p>I bought my GR II in Hong Kong around 2016, and I&#x2019;ve been bringing it with me as much as possible since then. In fact, I think I&#x2019;ve used it for every possible ways. Street candid, architecture, landscape, portrait, macro, product&#x2026; I&#x2019;d recommend you buy one if you are new to and interested in film and digital photography, as well as want to bring it with you every day.</p><p>Here are some photos I took in the past few years:</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/image.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="658" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image.png 1600w, https://blog.tjtl.io/content/images/2024/01/image.png 2376w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/tjtl-film-december.jpg" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="1182" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/tjtl-film-december.jpg 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/tjtl-film-december.jpg 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/tjtl-film-december.jpg 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/tjtl-film-december.jpg 2400w" sizes="(min-width: 720px) 720px"></figure><p>Now back to the topic. Last year around December, I noticed the shutter curtain didn&#x2019;t open (see picture below) when I powered it on. But it functioned well after taking one photo, and the process usually took quite a long time (due to the all-black scene with the curtain, not opening). So I googled for some answers. Luckily, I shared the same issue that Michael from StreePhotoTip encountered &#x2013; and probably every Ricoh GR II user around me has the same issue if they used it for a long time. Michael assumes that the issue is due to the long-term use of the camera. To be precise, the lens cable was broken after frequent stretching when the main board controls the lens to push it out and in.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.47.10.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="1572" height="1150" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-17.47.10.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-17.47.10.png 1000w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.47.10.png 1572w" sizes="(min-width: 720px) 720px"></figure><p>Back in Shenzhen, I could easily find a place to repair it without hassles. On Taobao.com (the Chinese equivalent of eBay), there are tons of repairing services I could contact to fix my GR. I know it because the last time the LCD screen was broken, it cost me roughly 200 RMB (around USD 30) to replace the parts, and worked perfectly. So yeah, I missed the good old days when I could visit Huaqiangbei, find electronic parts easily, and get them at the lowest price (and with decent quality) possible.</p><p>While I was feeling nostalgic, I knew the repair price here in the States must be pricey. After I googled the camera repairing service for a while, some of them either have bad reviews or the costs are higher than expected. However, Ricoh US provides an official repairing service but sending the camera to the repairing site costs around USD 250. I&#x2019;m not going to waste that much money on an old camera.</p><p>Eventually, I went to AliExpress, an international version of Taobao.com, and found a store that sells the flex PCB I wanted to replace manually. Here is what it looks like:</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.47.30.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="1592" height="704" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-17.47.30.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-17.47.30.png 1000w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.47.30.png 1592w" sizes="(min-width: 720px) 720px"></figure><p>The most satisfying thing is that it only costs me 14 dollars, including the shipping fee. The shipping period isn&#x2019;t that long; it arrives at my door after about two weeks.</p><h2 id="tearing-down-the-camera">Tearing down the camera</h2><hr><p>Then, it was time to tear it apart. Here are two videos I found on YouTube. I truly appreciate the author&#x2019;s efforts in making these content public.</p><ul><li><a href="https://www.youtube.com/watch?v=3VvFep15RTw&amp;ref=blog.tjtl.io">Ricoh GR (II) Disassembly</a>: Instructions on how to dissemble the camera.</li><li><a href="https://www.youtube.com/watch?v=rbi6noK5BWI&amp;ref=blog.tjtl.io">Ricoh GR (II) Lens Housing Disassembly</a>: Detailed instructions on dissembling the lens module.</li></ul><p>It was pretty easy at first. The level of modularization of the camera&#x2019;s mechanical structure exceeds my expectation &#x2013; I could easily open the case with the standard screwdrivers and tweezers.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.18.47.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="655" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-08-at-15.18.47.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-08-at-15.18.47.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-08-at-15.18.47.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.18.47.png 2374w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">From left to right: (1) What it looks after I removed the screen side of the case. Wouldn&#x2019;t it be nice to build a transparent case? (2) The lens module. I&#x2019;m a true believer of &#x201C;Japanese Design = Precision.&#x201D; The back side of the lens module. (3) The blue glass got some scratches on the front, but I couldn&apos;t find any replacement online. Fine for now.</span></figcaption></figure><p>And here&#x2019;s what it looks like when I tore all the necessary parts apart:</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.53.56.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="1920" height="1598" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-17.53.56.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-17.53.56.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screen-Shot-2022-06-27-at-17.53.56.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.53.56.png 1920w" sizes="(min-width: 720px) 720px"></figure><p>The hardest part is dissembling the lens module. I struggled with the process for a whole night &#x2013; especially the parts where the stepper motor controls the curtain.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.21.13.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="863" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-08-at-15.21.13.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-08-at-15.21.13.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-08-at-15.21.13.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.21.13.png 2372w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">From left to right: (1) Above is the bottom side of the core part inside the lens module. (2) This tiny stepper motor on the side has 4 pins to connect with the flex PCB, which is what I was about to replace. (3) The righthand part is the front cap, where you need to remove it first for the lens dissembling process.</span></figcaption></figure><p>Now I need to pull off the old and broken PCB and replace it with the new one:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.22.00.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="865" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-08-at-15.22.00.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-08-at-15.22.00.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-08-at-15.22.00.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.22.00.png 2362w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">From left to right: (1) The last screw to be removed before I replace the new flex PCB. (2) The 4 pins on the motor. (3) The stepper motor after I re-solder the flex PCB.</span></figcaption></figure><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-18.12.29.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="1281" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-18.12.29.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-18.12.29.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screen-Shot-2022-06-27-at-18.12.29.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-18.12.29.png 2380w" sizes="(min-width: 720px) 720px"></figure><p>Above is the old flex PCB. As you can see, the apparent fracture in the middle of the flex PCB is the problem.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.23.41.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="926" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-08-at-15.23.41.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-08-at-15.23.41.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-08-at-15.23.41.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.23.41.png 2364w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">I accidentally crushed a few (tiny) plastic parts in the front of the lens. So, in the end, I couldn&#x2019;t install the front cap back into the lens. But it brings a &#x201C;cyberpunk&#x201D; look to the camera (as you saw in the first picture of this article). So if anyone is going to repair the camera as I did, remember to be very careful when removing the front cap!</span></figcaption></figure><p>Among all the parts inside GR II, the CMOS sensor board is my fav one. I appreciate how much effort Ricoh&#x2019;s engineers put into this compact body while maintaining the elegancy and precision of it all.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.58.55.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="1330" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-17.58.55.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-17.58.55.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screen-Shot-2022-06-27-at-17.58.55.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-17.58.55.png 2400w" sizes="(min-width: 720px) 720px"></figure><h2 id="putting-everything-back-together">Putting everything back together</h2><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://blog.tjtl.io/content/media/2024/01/output_video___thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://blog.tjtl.io/content/media/2024/01/output_video__.mp4" poster="https://img.spacergif.org/v1/1920x1080/0a/spacer.png" width="1920" height="1080" playsinline preload="metadata" style="background: transparent url(&apos;https://blog.tjtl.io/content/media/2024/01/output_video___thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:05</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.25.02.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="647" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-08-at-15.25.02.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-08-at-15.25.02.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-08-at-15.25.02.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-08-at-15.25.02.png 2362w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-19.38.03.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="1322" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-19.38.03.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-19.38.03.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screen-Shot-2022-06-27-at-19.38.03.png 1600w, https://blog.tjtl.io/content/images/size/w2400/2024/01/Screen-Shot-2022-06-27-at-19.38.03.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The very first photo was captured on the repaired GR II by my girlfriend! Still digging the &quot;Daido&quot; BW effect.</span></figcaption></figure><hr><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-20.03.54.png" class="kg-image" alt="Repairing my Ricoh GR II" loading="lazy" width="2000" height="1221" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screen-Shot-2022-06-27-at-20.03.54.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screen-Shot-2022-06-27-at-20.03.54.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screen-Shot-2022-06-27-at-20.03.54.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screen-Shot-2022-06-27-at-20.03.54.png 2384w" sizes="(min-width: 720px) 720px"></figure><p>Because the front side of the lens module is broken, I could not add the front cap back. So instead, I installed the GH-3 lens hood and had the lens not exposed to the air. I call it,&#xA0;<strong>Ricoh GR II &#x2013; Cyberpunk edition</strong>.</p>]]></content:encoded></item><item><title><![CDATA[Here’s to the next 10 years]]></title><description><![CDATA[<p>It was the Autumn of 2016. I finally met Prof. Gilbert Strang and audited his lecture at MIT campus. He was just affable and witty as he was in his lecture series. We briefly discussed my learning experience in China when I was in high school and the progress of</p>]]></description><link>https://blog.tjtl.io/2021/</link><guid isPermaLink="false">659ded82bc01f0205e8cd4cf</guid><category><![CDATA[Year In Review]]></category><dc:creator><![CDATA[Tommy Liu]]></dc:creator><pubDate>Fri, 01 Jan 2021 08:00:00 GMT</pubDate><media:content url="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-19.29.35.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-19.29.35.png" alt="Here&#x2019;s to the next 10 years"><p>It was the Autumn of 2016. I finally met Prof. Gilbert Strang and audited his lecture at MIT campus. He was just affable and witty as he was in his lecture series. We briefly discussed my learning experience in China when I was in high school and the progress of the Chinese translated version of his book Introduction to Linear Algebra. This unforgettable rendezvous reminds me of my early days in high school, when I was a part-time translator of MOOC lectures, which had not yet become a phenomenon in China. I was responsible for adding bilingual subtitles to Prof. Strang&#x2019;s Introduction to Linear Algebra lecture series. The experience of making high-quality MOOC resources accessible to fellow students in China was indeed a milestone for me. Self-learning and home-schooling became the ways I engage with the world and knowledge. The absence of a formal college education does not seem to extinguish my curiosity to learn but spark my interest to keep learning through practicing.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/image-4.png" class="kg-image" alt="Here&#x2019;s to the next 10 years" loading="lazy" width="1762" height="1206" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-4.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-4.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-4.png 1600w, https://blog.tjtl.io/content/images/2024/01/image-4.png 1762w" sizes="(min-width: 720px) 720px"></figure><p>In high school, I did two things that have had profound impacts on me. During my first semester of 10th grade, I gathered a group of computer enthusiasts and started the only engineering club in our high school. As the founder, I wanted to create a platform where students could engage in hands-on programming and engineering of LEGO RCX/NXT robots using the LEGO Mindstorms NXT software and LeJOS. I also held regular sharing sessions with club members, introducing the (then) latest development of maker projects, which of course included many MIT Media Lab projects. This club marked the starting point of my maker life and motivated me to invite more like-minded high school students from all over the country to form a community of aspiring computer engineers. Later in my 11th grade, I founded the nation-wide Adolescent Developer Community (ADC), which is the first of its kind in China. I devoted much of my spare time to organizing the annual ADC conference, including inviting keynote speakers both from academia and industry as well as securing sponsorship from tech giants.<br><br>To date, the engineering club I founded is still a nice makerspace for young-generation students to learn the fundamentals of computer science and engineering. The ADC annual conference was later held for three years consecutively. I harvested friendship with like-minded students as well as developed budding leadership and entrepreneurship in the STEM field.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-17.08.32.png" class="kg-image" alt="Here&#x2019;s to the next 10 years" loading="lazy" width="1804" height="1010" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/Screenshot-2024-01-09-at-17.08.32.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/Screenshot-2024-01-09-at-17.08.32.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/Screenshot-2024-01-09-at-17.08.32.png 1600w, https://blog.tjtl.io/content/images/2024/01/Screenshot-2024-01-09-at-17.08.32.png 1804w" sizes="(min-width: 720px) 720px"></figure><p>In the summer of 2013, when I received offers from several U.S. universities, a software engineer, Kenny, invited me to work with him at Opera Software. I was encouraged by his warm, tempting invitation and generous recognition of my skill set. If working with a group of brilliant engineers would be my future career, why would I wait till four years later? Why would I not pursue my dream now? At that time, I believed that computer science would be ultimately a skill-oriented subject and I should begin my journey on learning through practicing. I eventually made a decision of passing the ticket to college and working with Kenny at Opera Software. Admittedly, my perspective on college education might be naive and biased. But I was determined to pursue a career in the industry I love, which was just a different path for my future. I enjoyed my time at Opera Software and felt satisfactory with the projects I was involved in, which ranged from developing and testing Sphinx HTML5 Game Engine with the Game Engine team and building the developer relationship community for this project. Thanks to Fredrik and Kenny, I was able to learn from the best. After I left Opera, I focused my career on the field of product design. Later I set up my own design studio, which provided design services to many startup clients. In a word, my post high-school experience was nothing but rewarding and important to my decision of returning to school.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/image-5.png" class="kg-image" alt="Here&#x2019;s to the next 10 years" loading="lazy" width="1780" height="938" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-5.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-5.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-5.png 1600w, https://blog.tjtl.io/content/images/2024/01/image-5.png 1780w" sizes="(min-width: 720px) 720px"></figure><p>In 2016, I met Tony, a PhD student at the Chinese University of Hong Kong. We shared common interests and visions in STEM education and we were both deeply inspired by such technological pioneers as Nicholas Negroponte and Marvin Minsky. The two of us just clicked immediately. I had acquired sufficient skill set from previous work experience and still entertained the idea of advancing the field of STEM education, which was a seed planted when I was in high school. Later Tony and I co-founded the ed-tech startup &#x201C;CocoRobo&#x201D;, a company that provides a one-stop solution for K-12 STEAM education.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/image-6.png" class="kg-image" alt="Here&#x2019;s to the next 10 years" loading="lazy" width="1774" height="1174" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-6.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-6.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-6.png 1600w, https://blog.tjtl.io/content/images/2024/01/image-6.png 1774w" sizes="(min-width: 720px) 720px"></figure><p>Our mission is to create easy-to-use products that embody the concept of PBL curriculum for teachers and students in K-12 classrooms. Our R&amp;D team developed a series of ed-tech products over the span of four years. The hardware part contains a set of plug-and-play electronic modules with B2B connector. There are currently two generations. The first generation focuses on STEAM education solution. The second generation centers on AI STEM education solutions, which consists of an IoT module and an AI module. The software platforms include CocoBlockly&#x2014;an online visual programming environment, CocoCloud&#x2014;a cloud platform for IoT data collection and visualization, and CocoEducation&#x2014;an online education platform for our users. We also implemented aforesaid core technologies into a series of theme-based toolkits surrounding such topics as Creative Electronics, Robots &amp; Mechanicals, and Human-computer Interaction, which have huge appeal to kids. In this year&#x2019;s annual meeting of PyCon China, I shared with the audience my experience of implementing Python and MicroPython in K-12 STEM classrooms in the past four years.</p><figure class="kg-card kg-image-card"><img src="https://blog.tjtl.io/content/images/2024/01/image-7.png" class="kg-image" alt="Here&#x2019;s to the next 10 years" loading="lazy" width="1778" height="656" srcset="https://blog.tjtl.io/content/images/size/w600/2024/01/image-7.png 600w, https://blog.tjtl.io/content/images/size/w1000/2024/01/image-7.png 1000w, https://blog.tjtl.io/content/images/size/w1600/2024/01/image-7.png 1600w, https://blog.tjtl.io/content/images/2024/01/image-7.png 1778w" sizes="(min-width: 720px) 720px"></figure><p>Reflecting on the past four years of starting my own business in the field I am passionate about, I find myself establishing the skills beyond my imagination. Surely, my leadership and entrepreneurship transcended from a club founder to a conference organizer and then to a CTO of a company. Still, I have much to learn and achieve as a leader who is seeking innovative technology solutions for the world. This year, our company participated in a project called &#x201C;Future Classroom.&#x201D; We visited a secondary school in Enshi, Hubei province, which was one of the hardest COVID-hit regions in China. We provided our intuitive products to kids in Enshi and helped them to use our products to learn computer programming and the concept of design thinking. The whole idea of Future Classroom, or making education accessible to kids in every corner of the world, reminds me of my old days in high school. In Prof. Strang&#x2019;s class and the engineering club, I benefited from approachable education and tried to put ideas into practice. I cannot help but ask myself what else I can do in the future.</p><hr><p>My life has progressed from Introduction to Linear Algebra, yet I can trace my path back to that inspiring course I found online.</p>]]></content:encoded></item></channel></rss>