added SVD tidbit
24
config.toml
@ -2,6 +2,7 @@ baseURL = "https://connerchu.com"
|
||||
title = "Conner Chu"
|
||||
languageCode = "en-us"
|
||||
theme = "hello-friend-ng"
|
||||
copyright = "© Copyright 2024"
|
||||
|
||||
# googleAnalytics = ""
|
||||
|
||||
@ -10,8 +11,17 @@ buildFuture = false
|
||||
buildExpired = false
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
[markup.goldmark.extensions.passthrough]
|
||||
enable = true
|
||||
[markup.goldmark.extensions.passthrough.delimiters]
|
||||
block = [['\[', '\]'], ['$$', '$$']]
|
||||
inline = [['\(', '\)']]
|
||||
|
||||
[[module.imports]]
|
||||
path = "github.com/mfg92/hugo-shortcode-gallery"
|
||||
|
||||
[params]
|
||||
math = true
|
||||
# Home subtitle of the index page.
|
||||
#
|
||||
homeSubtitle = "Physics at Berkeley"
|
||||
@ -35,9 +45,9 @@ buildExpired = false
|
||||
# If you want, you can easily override the default footer with your own content.
|
||||
#
|
||||
[params.footer]
|
||||
trademark = 2024
|
||||
copyright = true
|
||||
bottomText = [
|
||||
"Powered by Hugo and Djordje Atlialp"
|
||||
"Powered by Hugo and Djordje"
|
||||
]
|
||||
|
||||
# Colors for favicons
|
||||
@ -60,7 +70,7 @@ buildExpired = false
|
||||
# Uncomment this if you want a portrait on your start page
|
||||
#
|
||||
[params.portrait]
|
||||
path = "/img/headshot.png"
|
||||
path = "/img/headshot.webp"
|
||||
alt = "Portrait"
|
||||
# maxWidth = "50px"
|
||||
|
||||
@ -97,4 +107,10 @@ buildExpired = false
|
||||
identifier = "Tidbits"
|
||||
name = "Tidbits"
|
||||
url = "tidbits/"
|
||||
weight = 3
|
||||
weight = 3
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "Photography"
|
||||
name = "Photography"
|
||||
url = "photography/"
|
||||
weight = 4
|
7
content/photography.md
Normal file
@ -0,0 +1,7 @@
|
||||
+++
|
||||
title = 'Photography'
|
||||
date = 2024-07-29T14:47:44-07:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
{{< gallery match="photos/*" sortOrder="desc" rowHeight="150" margins="5" thumbnailResizeOptions="600x600 q90 Lanczos" showExif=true previewType="blur" embedPreview=true loadJQuery=true >}}
|
BIN
content/photos/alaska.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
content/photos/blacksand.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
content/photos/burnedtrees.webp
Normal file
After Width: | Height: | Size: 5.0 MiB |
BIN
content/photos/camping.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
content/photos/chair21.webp
Normal file
After Width: | Height: | Size: 603 KiB |
BIN
content/photos/chair9.webp
Normal file
After Width: | Height: | Size: 908 KiB |
BIN
content/photos/chair9face.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
content/photos/chopper.webp
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
content/photos/cistern.webp
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
content/photos/cruise.webp
Normal file
After Width: | Height: | Size: 828 KiB |
BIN
content/photos/embarcadero.webp
Normal file
After Width: | Height: | Size: 861 KiB |
BIN
content/photos/grandcanyon.webp
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
content/photos/hawaii.webp
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
content/photos/hooverdam.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
content/photos/iguana.webp
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
content/photos/july4.webp
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
content/photos/lobos.webp
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
content/photos/maine.webp
Normal file
After Width: | Height: | Size: 4.1 MiB |
BIN
content/photos/newport.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
content/photos/rice.webp
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
content/photos/tulum.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |
@ -1,6 +1,6 @@
|
||||
+++
|
||||
title = 'Cross-Polarized Attosecond Transient Absorption Spectroscopy of Elemental Tellurium'
|
||||
date = 2024-07-26T14:20:39-07:00
|
||||
date = 2024-07-26
|
||||
draft = false
|
||||
+++
|
||||
This summer, I had the pleasure of working under Jonah Adelman in Prof. Stephen Leone's group at UC Berkeley. Our group specializes in attosecond transient absorption pump-probe spectroscopy via high-harmonic generation, and my lab specifically focuses on applying this technique towards solid-state materials. Over the course of two months, my main objective was familiarizing myself with the first principles governing this spectroscopic method, and to conduct an experiment of my own, namely cross-polarizing the VIS-NIR pump beam and XUV probe beam in our setup to quantify the potential differences in absorption in elemental Tellurium. You can see my end of summer presentation [here](https://docs.google.com/presentation/d/18qOD7k15k1lwhhwlrlWDNouyAlk_hKV5bYY0upQgMSc/edit?usp=sharing). Look in the speaker notes for details! One thing to note was following my presentation, I conducted the alternating wave plate scan mentioned in the "Future Steps" slide. Unfortunately, we found no difference in the absorption or phonon generation between the co-polarized or cross-polarized pump-probe measurements. This likely indicates that the anisotropic characteristics of Tellurium are not manifested in the effects of core-level excitation.
|
@ -1,6 +1,6 @@
|
||||
+++
|
||||
title = 'Resume'
|
||||
date = 2023-12-17T21:40:43-08:00
|
||||
date = 2024-07-26
|
||||
draft = false
|
||||
+++
|
||||
<object data="/Conner Chu's Resume.pdf" type="application/pdf" width="100%" height="1020px">
|
||||
|
@ -1,6 +1,6 @@
|
||||
+++
|
||||
title = 'Earbuds and Airplane Toilets'
|
||||
date = 2022-08-03T00:37:26-08:00
|
||||
date = 2022-08-03
|
||||
draft = false
|
||||
+++
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
+++
|
||||
title = 'SFMM'
|
||||
date = 2023-12-15T22:06:28-08:00
|
||||
title = 'Six Flags Magic Mountain'
|
||||
date = 2023-12-15
|
||||
draft = false
|
||||
+++
|
||||
|
||||
@ -22,4 +22,4 @@ After going to Six Flags Magic Mountain for the second time today, I wanted to m
|
||||
14. New Revolution: Night time ride ftw
|
||||
15. Gold Rusher
|
||||
|
||||
![JPro and I on X2](/img/X2.png)
|
||||
![JPro and I on X2](/img/X2.webp)
|
@ -1,5 +1,44 @@
|
||||
+++
|
||||
title = 'SVD'
|
||||
date = 2024-07-26T14:24:59-07:00
|
||||
draft = true
|
||||
title = 'Singular Value Decomposition'
|
||||
date = 2024-07-29
|
||||
draft = false
|
||||
+++
|
||||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
|
||||
Singular Value Decomposition (SVD) is probably one of the coolest concepts in mathematics I have learned so far. Seen by many as the grand finale of an introductory linear algebra course, SVD combines many pervasive topics seen throughout physics and applied math, including eigenvalues/eigenvectors and unitary matrices. Although SVD was not covered in my introductory mathematical physics course, I tried my best to develop a basic understanding of this factorization tool so that I could comfortably use it when decomposing transient absorption data in my work at the Leone Group.
|
||||
|
||||
Note: As a prerequisite to this tidbit, I recommend watching 3Blue1Brown's Essence of Linear Algebra series to gain intuition into how matrices act as linear transformations on some vector space. His visualizations are truly unmatched!
|
||||
|
||||
I think its best to begin with eigenvalue decomposition. Suppose we have some arbitrary matrix \(A \in \mathbb{C}^{n \times n}\) with n linearly independent eigenvectors. Eigenvalue decomposition allows you to represent this linear transformation as a composition of 3 other matrices, namely
|
||||
|
||||
$$A = Q \Lambda Q^{-1}$$
|
||||
|
||||
As is convention in matrix multiplication, we interpret this composition from right to left. \(Q^{-1}\) is an nxn matrix whose columns contain the original basis written in terms of the eigenvectors of \(A\), \(\Lambda\) is the diagonal matrix containing the eigenvalues of \(A\), and \(Q\) is an nxn matrix whose columns contain the eigenvectors written in terms of the original basis. More eloquently, what this essentially does when applied to some arbitrary vector is first transform the vector space into one represented by the eigenvectors. Then, because eigenvectors are those that solely scale under some linear transformation, our original transformation matrix A is nothing more than a scaling of this eigenvector space. Finally, applying matrix \(Q\) returns us back into the vector space described by our original basis.
|
||||
|
||||
Remember that eigenvectors and their corresponding eigenvalues only exist for square matrices because non-square ones encode some dimensionality reduction or extension. How then are we able to generalize this idea to non-square matrices? Enter singular value decomposition.
|
||||
|
||||
A quick search online often returns a definition similar to this: Any matrix \(M \in \mathbb{C}^{m \times n}\) can be unconditionally decomposed into three matrices,
|
||||
|
||||
$$M = U \Sigma V^{\dagger}$$
|
||||
|
||||
where U is an mxm unitary matrix, \(\Sigma\) is an mxn diagonal matrix, and V\(^{\dagger}\) is the conjugate transpose of an nxn unitary matrix. But what do these matrices do, what do they contain, and why?
|
||||
|
||||
Well it turns out that there lies a very intuitive interpretation if we just step back and think about how we can find similarities within a dataset in the first place. Naturally, it would make sense that we take the inner product between each combination of columns of our matrix M in order to quantify the orthogonality of each of our data points with respect to one another. \(M^{\dagger}M\) does exactly this by creating a column-wise correlation matrix for M. Equally motivated, we do the same for our rows of M, namely \(MM^{\dagger}\).
|
||||
|
||||
Great, we have these column-wise and row-wise correlation matrices for M, but how do we extract the most meaningful information from them? It makes sense then to try finding the eigenvectors and eigenvalues of these matrices.
|
||||
|
||||
The diagonal elements of a correlation matrix represents the variance of each variable, while the off-diagonal elements represent the covariance between variables. When applying a correlation matrix onto some vector space, it acts as a linear transformation, stretching or shrinking hyper-dimensional space in each direction depending on whether each pair of dimensions have high or low correlation. Because eigenvectors are those that do not orient and only scale following a transformation, the eigenvectors of a correlation matrix are the principle axis of the data. In other words, they are the directions in which the data has the most variance. We use our column-wise eigenvectors (called the left singular vectors) to form the columns of our matrix \(U\), and the conjugate transpose of our row-wise eigenvectors (called the right singular vectors) to form the columns of \(V^{\dagger}\). Lastly, our diagonal matrix is formed by the square roots of the shared eigenvalues (shared because both are PSD matrices).
|
||||
|
||||
Assuming SVD is true, a simple proof tying all of this together follows.
|
||||
|
||||
$$ M^{\dagger}M = V \Sigma U^{\dagger} U \Sigma V^{\dagger} = V \Sigma^2 V^{\dagger} \implies M^{\dagger}M V = V \Sigma^2 $$
|
||||
|
||||
$$ MM^{\dagger} = U \Sigma V^{\dagger} V \Sigma U^{\dagger} = U \Sigma^2 U^{\dagger} \implies MM^{\dagger} U = U \Sigma^2 $$
|
||||
|
||||
Note: Both U and V are unitary matrices because they are formed by the orthonormal eigenvectors of their respective correlation matrices, and the eigenvectors are orthonormal because the correlation matrices are symmetric.
|
||||
|
||||
We see clearly then that our final expressions take the form of the characteristic equation, where \(U\) and \(V\) are the eigenvectors and \(\Sigma^2\) are the eigenvalues.
|
||||
|
||||
Throughout my math courses, I have always preferred geometric intuition over any other. However in the case of SVD, I find it most satisfying and complete to see it as a decomposition that captures the dominant correlations between each variable in a dataset. Sure, SVD can be visualized as first a rotation/reflection governed by \(V^{\dagger}\), followed by some scaling factor \(\Sigma\) and dimensionality reducer/extender, followed by a final rotation/reflection governed by \(U\). But I feel this interpretation does not emphasize enough the construction behind these unitary and diagonal matrices.
|
||||
|
||||
In closing, many of these data analysis techniques that we normally abstract away by calling some NumPy function, have far deeper meanings than we would oftentimes expect. I have only barely covered the surface of this topic, and would love to learn more eventually. One of the most important lessons I have learned throughout the past year is to balance and access the opportunity costs of the concepts one dedicates time to understand. If you would like any clarification on these topics, I highly recommend watching [Steve Brunton's series](https://youtube.com/playlist?list=PLMrJAkhIeNNSVjnsviglFoY2nXildDCcv&si=3Inxq5egolTj3Lij) along with [Visual Kernel's video](https://www.youtube.com/watch?v=vSczTbgc8Rc). For those seeking more, I found [this](https://stats.stackexchange.com/questions/2691/making-sense-of-principal-component-analysis-eigenvectors-eigenvalues), [this](https://stats.stackexchange.com/questions/217995/what-is-an-intuitive-explanation-for-how-pca-turns-from-a-geometric-problem-wit), and [this](https://stats.stackexchange.com/questions/10251/what-is-the-objective-function-of-pca/10256#10256) helpful.
|
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
||||
module github.com/cchuster/connerchu.com
|
||||
|
||||
go 1.18
|
||||
|
||||
require github.com/mfg92/hugo-shortcode-gallery v1.2.0 // indirect
|
2
go.sum
Normal file
@ -0,0 +1,2 @@
|
||||
github.com/mfg92/hugo-shortcode-gallery v1.2.0 h1:gkCZ08gNSoU/RymTScnR+Dh0gEwhlaxEjI0o2NTpWbA=
|
||||
github.com/mfg92/hugo-shortcode-gallery v1.2.0/go.mod h1:zKnMCx7OJJPTfVNalUAFGkNVABLCqIuPl57NeBtSFc0=
|
@ -85,7 +85,7 @@
|
||||
<span class="header__right">
|
||||
|
||||
<nav class="menu">
|
||||
<ul class="menu__inner"><li><a href="/resume/">Resume</a></li><li><a href="/research/">Research</a></li><li><a href="/tidbits/">Tidbits</a></li>
|
||||
<ul class="menu__inner"><li><a href="/resume/">Resume</a></li><li><a href="/research/">Research</a></li><li><a href="/tidbits/">Tidbits</a></li><li><a href="/photography/">Photography</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@ -126,9 +126,9 @@
|
||||
|
||||
<div class="footer__inner">
|
||||
<div class="footer__content">
|
||||
<span>© 2024</span>
|
||||
|
||||
|
||||
<span>© Copyright 2024</span>
|
||||
|
||||
|
||||
</div>
|
||||
@ -137,7 +137,7 @@
|
||||
|
||||
<div class="footer__inner">
|
||||
<div class="footer__content">
|
||||
<span>Powered by Hugo and Djordje Atlialp</span>
|
||||
<span>Powered by Hugo and Djordje</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -86,7 +86,7 @@
|
||||
<span class="header__right">
|
||||
|
||||
<nav class="menu">
|
||||
<ul class="menu__inner"><li><a href="/resume/">Resume</a></li><li><a href="/research/">Research</a></li><li><a href="/tidbits/">Tidbits</a></li>
|
||||
<ul class="menu__inner"><li><a href="/resume/">Resume</a></li><li><a href="/research/">Research</a></li><li><a href="/tidbits/">Tidbits</a></li><li><a href="/photography/">Photography</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@ -128,9 +128,9 @@
|
||||
|
||||
<div class="footer__inner">
|
||||
<div class="footer__content">
|
||||
<span>© 2024</span>
|
||||
|
||||
|
||||
<span>© Copyright 2024</span>
|
||||
|
||||
|
||||
</div>
|
||||
@ -139,7 +139,7 @@
|
||||
|
||||
<div class="footer__inner">
|
||||
<div class="footer__content">
|
||||
<span>Powered by Hugo and Djordje Atlialp</span>
|
||||
<span>Powered by Hugo and Djordje</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
<description>Recent content in Categories on Conner Chu</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<copyright>&copy Copyright 2024</copyright>
|
||||
<atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>
|
||||
|
BIN
public/img/20150326_134552.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
public/img/20150326_134552.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/20150327_110543.jpg
Normal file
After Width: | Height: | Size: 3.0 MiB |
BIN
public/img/20150327_110543.webp
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
public/img/20150618_001642.jpg
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
public/img/20150618_001642.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/20180629_164216.jpg
Normal file
After Width: | Height: | Size: 5.2 MiB |
BIN
public/img/20180629_164216.webp
Normal file
After Width: | Height: | Size: 4.1 MiB |
BIN
public/img/20190415_094938.jpg
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/20190415_094938.webp
Normal file
After Width: | Height: | Size: 908 KiB |
BIN
public/img/20190415_094941.jpg
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
public/img/20190415_094941.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
public/img/20210402_093850.jpg
Normal file
After Width: | Height: | Size: 4.1 MiB |
BIN
public/img/20210402_093850.webp
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
public/img/20210402_160915.jpg
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
public/img/20210402_160915.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
public/img/20210615_094213.jpg
Normal file
After Width: | Height: | Size: 3.3 MiB |
BIN
public/img/20210615_094213.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/20220628_153955.jpg
Normal file
After Width: | Height: | Size: 613 KiB |
BIN
public/img/20220628_153955.webp
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
public/img/20220704_174108.jpg
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
public/img/20220704_174108.webp
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
public/img/20230406_132905.jpg
Normal file
After Width: | Height: | Size: 6.3 MiB |
BIN
public/img/20230406_132905.webp
Normal file
After Width: | Height: | Size: 5.0 MiB |
BIN
public/img/20230623_142018.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
public/img/20230623_142018.webp
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
public/img/20230628_144745.jpg
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
public/img/20230628_144745.webp
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
public/img/20230629_103219.jpg
Normal file
After Width: | Height: | Size: 3.4 MiB |
BIN
public/img/20230629_103219.webp
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
public/img/20230629_104255.jpg
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
public/img/20230629_104255.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
public/img/20230630_115433.jpg
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/20230630_115433.webp
Normal file
After Width: | Height: | Size: 828 KiB |
BIN
public/img/20240109_170009.jpg
Normal file
After Width: | Height: | Size: 3.0 MiB |
BIN
public/img/20240109_170009.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
public/img/20240310_124159.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
public/img/20240310_124159.webp
Normal file
After Width: | Height: | Size: 603 KiB |
BIN
public/img/20240510_170744.jpg
Normal file
After Width: | Height: | Size: 3.0 MiB |
BIN
public/img/20240510_170744.webp
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
public/img/20240619_120654.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
public/img/20240619_120654.webp
Normal file
After Width: | Height: | Size: 861 KiB |
BIN
public/img/Unconfirmed 327395.crdownload
Normal file
BIN
public/img/X2.webp
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
public/img/alaska.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/blacksand.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/burnedtrees.webp
Normal file
After Width: | Height: | Size: 5.0 MiB |
BIN
public/img/camping.webp
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
public/img/chair21.webp
Normal file
After Width: | Height: | Size: 603 KiB |
BIN
public/img/chair9.webp
Normal file
After Width: | Height: | Size: 908 KiB |
BIN
public/img/chair9face.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
public/img/chopper.webp
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
public/img/cistern.webp
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
public/img/cruise.webp
Normal file
After Width: | Height: | Size: 828 KiB |
BIN
public/img/drive-download-20240729T220514Z-001.zip
Normal file
BIN
public/img/embarcadero.webp
Normal file
After Width: | Height: | Size: 861 KiB |
BIN
public/img/grandcanyon.webp
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
public/img/hawaii.webp
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
public/img/headshot.webp
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
public/img/hooverdam.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
public/img/iguana.webp
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
public/img/july4.webp
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
public/img/lobos.webp
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
public/img/maine.webp
Normal file
After Width: | Height: | Size: 4.1 MiB |
BIN
public/img/newport.webp
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
public/img/rice.webp
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
public/img/tulum.webp
Normal file
After Width: | Height: | Size: 1.7 MiB |