<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://josephharrisonlim.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://josephharrisonlim.com/" rel="alternate" type="text/html" /><updated>2025-12-18T18:18:07+00:00</updated><id>https://josephharrisonlim.com/feed.xml</id><title type="html">Joseph Harrison-Lim</title><subtitle>Joseph Harrison-Lim&apos;s personal website.</subtitle><author><name>Joseph Harrison-Lim</name></author><entry><title type="html">Mobile Browsers: Overflow vs Sticky</title><link href="https://josephharrisonlim.com/blog/2024/10/22/mobile-browsers-overflow-vs-sticky.html" rel="alternate" type="text/html" title="Mobile Browsers: Overflow vs Sticky" /><published>2024-10-22T04:00:00+00:00</published><updated>2024-10-22T04:00:00+00:00</updated><id>https://josephharrisonlim.com/blog/2024/10/22/mobile-browsers-overflow-vs-sticky</id><content type="html" xml:base="https://josephharrisonlim.com/blog/2024/10/22/mobile-browsers-overflow-vs-sticky.html"><![CDATA[<p>A common thing you want on sites is to have a header that is always at the top,
so that users don’t have to scroll all the way up the page to reach the header’s
navigation.</p>

<p>One thing you can try is setting the body to <code class="language-plaintext highlighter-rouge">overflow: hidden</code>, and then
putting <code class="language-plaintext highlighter-rouge">overflow: auto</code> on the content under the header. This will make the
header stay in its spot, while the content underneath can be scrolled.</p>

<p>This works well on desktop browsers (including desktop browsers that are in
“mobile mode”), but on mobile browsers, it doesn’t work as expected. Instead,
you can’t scroll fully. This is because the mobile browser includes its own
header and footer in height calculations, so you can’t actually scroll to see
the bottom of the page.</p>

<div style="text-align: center;">
<img src="/assets/images/2024-10-22-mobile-browsers-overflow-vs-sticky/overflow.png" alt="Overflow" style="width: 100%; max-width: 400px;" />
</div>

<p>If you instead use <code class="language-plaintext highlighter-rouge">position: sticky</code> on the header, it will stay in its spot,
and you can scroll to the bottom of the page.</p>

<div style="text-align: center;">
<img src="/assets/images/2024-10-22-mobile-browsers-overflow-vs-sticky/sticky.png" alt="Sticky" style="width: 100%; max-width: 400px;" />
</div>]]></content><author><name>Joseph Harrison-Lim</name></author><category term="blog" /><category term="css" /><category term="mobile" /><summary type="html"><![CDATA[A common thing you want on sites is to have a header that is always at the top, so that users don’t have to scroll all the way up the page to reach the header’s navigation.]]></summary></entry><entry><title type="html">OpenAI API Rate Limit on First Request</title><link href="https://josephharrisonlim.com/blog/2024/10/21/openai-api-rate-limit-on-first-request.html" rel="alternate" type="text/html" title="OpenAI API Rate Limit on First Request" /><published>2024-10-21T04:00:00+00:00</published><updated>2024-10-21T04:00:00+00:00</updated><id>https://josephharrisonlim.com/blog/2024/10/21/openai-api-rate-limit-on-first-request</id><content type="html" xml:base="https://josephharrisonlim.com/blog/2024/10/21/openai-api-rate-limit-on-first-request.html"><![CDATA[<p>I decided to try out OpenAI’s API for the first time yesterday. From what I saw
within the developer dashboard, it seemed like I would be use it without paying
anything up until a certain token or request limit. It seems like this was not
the case. If you make an API request with the token you generate and you haven’t
added any payment information and credits, you will always get a 429 error.</p>

<p>Ultimately it’s cheap enough to start with so I don’t mind, but worth sharing in
case anyone else runs into this.</p>

<hr />

<p>If you want to see what I’m using it for, check out <a href="https://total-thought.com">total-thought</a>. In Total
Thought, users are able to write out topics to discuss, such as “Should I use
the gym or build my own home gym?”, write the pros and cons of each (others can
also contribute!), and then crowdsource upvotes on each pro and con. I am using
gpt-4o-mini to summarize all of this data and try to give a reasonable
suggestion on which one to choose.</p>]]></content><author><name>Joseph Harrison-Lim</name></author><category term="blog" /><category term="ai" /><category term="openai" /><category term="rate limit" /><category term="429" /><summary type="html"><![CDATA[I decided to try out OpenAI’s API for the first time yesterday. From what I saw within the developer dashboard, it seemed like I would be use it without paying anything up until a certain token or request limit. It seems like this was not the case. If you make an API request with the token you generate and you haven’t added any payment information and credits, you will always get a 429 error.]]></summary></entry><entry><title type="html">Getting from Deep Learning to LLMs</title><link href="https://josephharrisonlim.com/blog/2024/10/18/getting-from-deep-learning-to-llms.html" rel="alternate" type="text/html" title="Getting from Deep Learning to LLMs" /><published>2024-10-18T15:58:00+00:00</published><updated>2024-10-18T15:58:00+00:00</updated><id>https://josephharrisonlim.com/blog/2024/10/18/getting-from-deep-learning-to-llms</id><content type="html" xml:base="https://josephharrisonlim.com/blog/2024/10/18/getting-from-deep-learning-to-llms.html"><![CDATA[<p>5 years ago, I felt fairly in tune with the ML world. I understood how to solve
classification and clustering problems. I learned about neural networks and the
process of deep learning, and I tried writing my own feed-forward network to
showcase it. Of course this is a little bit ironic, because 2017 is when the
<a href="https://en.wikipedia.org/wiki/Attention_Is_All_You_Need">Attention Is All You Need</a> paper was authored.</p>

<p>Fast track until now, and I’m completely behind. LLMs are a big change that
happened and I didn’t know what led to its fruition. I wasn’t sure how neural
networks fit into the picture anymore. Luckily I was recently recommended
<a href="https://www.youtube.com/watch?v=eMlx5fFNoYc&amp;list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&amp;index=6">a 3b1b video</a> which explained this to me very well. This channel released many
useful videos which I watched those 5 years ago, and they taught me how key
concepts worked such as back-propagation. Early this year they
released follow up videos to connect the dots.</p>

<p>What I learned is that the feed-forward neural network is still relevant; it is
now the multilayer perceptron inside the transformer. In fact, there are
multiple multilayer perceptrons inside the transformer. The big new piece of the
puzzle is the attention block mechanism. Again, the 3b1b video explains it very
well, much better than I can do via markdown. To summarize anyway, it does some
mathematical tricks with dot products to find relevance from one word to
another, and this is represented via the dimensionality of the vector produced.</p>

<p>This bit of catch-up was a great relief. I feel primed to learn more, and
hopefully start developing with this stuff soon.</p>]]></content><author><name>Joseph Harrison-Lim</name></author><category term="blog" /><category term="ai" /><category term="llm" /><category term="deep learning" /><summary type="html"><![CDATA[5 years ago, I felt fairly in tune with the ML world. I understood how to solve classification and clustering problems. I learned about neural networks and the process of deep learning, and I tried writing my own feed-forward network to showcase it. Of course this is a little bit ironic, because 2017 is when the Attention Is All You Need paper was authored.]]></summary></entry><entry><title type="html">Jekyll, to Gatsby, to Jekyll</title><link href="https://josephharrisonlim.com/blog/2024/10/17/jekyll-to-gatsby-to-jekyll.html" rel="alternate" type="text/html" title="Jekyll, to Gatsby, to Jekyll" /><published>2024-10-17T00:25:03+00:00</published><updated>2024-10-17T00:25:03+00:00</updated><id>https://josephharrisonlim.com/blog/2024/10/17/jekyll-to-gatsby-to-jekyll</id><content type="html" xml:base="https://josephharrisonlim.com/blog/2024/10/17/jekyll-to-gatsby-to-jekyll.html"><![CDATA[<p>Originally I had used <a href="https://jekyllrb.com">Jekyll</a> to create my personal website. I wasn’t acquainted
with Ruby at the time, and still, it was simple to learn and manage. Eventually
I discovered <a href="https://www.gatsbyjs.com">Gatsby</a>. Gatsby fills a similar purpose. Both are static site
generators that make it easy to host a site through GitHub pages. Gatsby is
based on Node.js rather than Ruby, and lets you use React and GraphQL. This
sounded really good to me at the time since I was familiar with the stack, and
it was easy for me to add some code for page transitions and animations,
especially with <a href="https://www.react-spring.dev">react-spring</a>.</p>

<p>Fast-forward 4 years and my priorities have shifted. I wanted to update my site
again, however the maintenance cost was too high. I had an overwhelmingly large
amount of packages that needed major version updates, and it was overbearing to
look at. This isn’t the type of project I wanted to have for my personal site,
so I switched back to Jekyll.</p>

<p>With Jekyll, I don’t have to worry about this. Jekyll doesn’t require many gems
to run, whereas Gatsby required multiple packages from all of the plugins.
Gatsby would of course have me install the world through node_modules, whereas
Jekyll requires very little. The Gemfile.lock is under 200 lines! For a casual
project with a low update frequency, this is far more bearable. I will happily
sacrifice my beloved TypeScript, React, GraphQL, Et Al for simplicity.</p>

<p>To my surprise, GitHub Pages can also now automatically deploy jekyll sites
without us needing to write any CI YAML files ourselves!</p>]]></content><author><name>Joseph Harrison-Lim</name></author><category term="blog" /><category term="jekyll" /><category term="update" /><summary type="html"><![CDATA[Originally I had used Jekyll to create my personal website. I wasn’t acquainted with Ruby at the time, and still, it was simple to learn and manage. Eventually I discovered Gatsby. Gatsby fills a similar purpose. Both are static site generators that make it easy to host a site through GitHub pages. Gatsby is based on Node.js rather than Ruby, and lets you use React and GraphQL. This sounded really good to me at the time since I was familiar with the stack, and it was easy for me to add some code for page transitions and animations, especially with react-spring.]]></summary></entry></feed>