<?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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ memes - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ memes - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 16 Jun 2026 21:36:14 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/memes/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Meme Definition ]]>
                </title>
                <description>
                    <![CDATA[ A meme is an idea, joke, behavior, or some other element of culture that's passed from person to person, like a gene. Professor Richard Dawkins first coined the term "meme" in the book The Selfish Gene. Dawkins combined the word "mimeme", or "somethi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/meme-definition/</link>
                <guid isPermaLink="false">66c35b3d71e87702d4e5b710</guid>
                
                    <category>
                        <![CDATA[ memes ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tech Terms ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 17 Mar 2021 04:49:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/605ac4e6687d62084bf6b944.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>A meme is an idea, joke, behavior, or some other element of culture that's passed from person to person, like a gene.</p>
<p>Professor Richard Dawkins first coined the term "meme" in the book <em>The Selfish Gene</em>. Dawkins combined the word "mimeme", or "something imitated" in Greek, with the word "gene".</p>
<p>He recognized that the spread of ideas throughout a culture is like the spread of genes. They both move from person to person, mutate, and while the good ones survive, others are forgotten and die.</p>
<p>But the word meme can also refer to short video or audio clips, popular quotes, or other viral content that's easy to imitate.</p>
<p>Here are some examples of programming memes:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/what-they-think-meme.jpg" alt="Image" width="600" height="400" loading="lazy">
_Source: <a target="_blank" href="https://www.reddit.com/r/ProgrammerHumor/comments/censlq/i_made_a_programming_meme/">I made a programming meme</a>_</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/what-they-think-meme.jpg" alt="Image" width="600" height="400" loading="lazy">
_Source: <a target="_blank" href="https://www.reddit.com/r/ProgrammerHumor/comments/censlq/i_made_a_programming_meme/">I made a programming meme</a>_</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/comments-meme.jpeg" alt="Image" width="600" height="400" loading="lazy">
<em>Source: <a target="_blank" href="https://levelup.gitconnected.com/the-best-programming-memes-b435d1bf918d">The Best Programming Memes</a></em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The new Meme order: changing the game with simple browser caching ]]>
                </title>
                <description>
                    <![CDATA[ By Philipp Even in 2018, not all humans have access to 3G internet and are trapped inside a memeingless world. It’s time to stop this madness. In case you are not familiar with the meme concept, a meme is typically an image associated with a specific... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/changing-the-meme-game-bcd24a07dc3e/</link>
                <guid isPermaLink="false">66c3472feb0555cdb6fd9acb</guid>
                
                    <category>
                        <![CDATA[ Design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ memes ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 13 Jun 2018 19:49:43 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*sa36HnySp33Inkm62q-Scw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Philipp</p>
<p>Even in 2018, not all humans have access to 3G internet and are trapped inside a memeingless world. It’s time to stop this madness.</p>
<p>In case you are not familiar with the <strong>meme</strong> concept, a meme is typically an image associated with a specific context or idea.</p>
<p>Adding different text to those images — memes — is mostly used as a way to ridicule human behaviour, or to describe situations. Memes are spread widely online, especially through social media and image platforms.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Nw3DnbmpuEBnbtP-gdqyfg.png" alt="Image" width="494" height="492" loading="lazy">
<em>Your typical next door Meme</em></p>
<h3 id="heading-there-is-a-problem">There is a problem</h3>
<p>Each of these memes has been used millions of times to make millions of jokes. Right now, all search engines, social media, and image platforms load each of these images separately. This causes <strong>megabytes</strong> of traffic, and requires data capacity on your phone.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Bt-YmOk2Aa2F4Hbj1FaQIw.png" alt="Image" width="800" height="450" loading="lazy">
<em>Search results for “Bad Luck Brian”</em></p>
<h3 id="heading-my-idea">My idea</h3>
<p>I came up with the idea to save the most used meme images once, and append the rest of the text later dynamically.</p>
<p>This works great for memes, since the images stay the same and only the text changes.</p>
<p>The huge advantage is the reduced data transfer. Ten to fifteen “normal” images can easily transfer 1MB of data. I can load 1000 memes and more with the same 1MB of data transfer, because palin text is much lighter than images.</p>
<p>So, for example, the second meme from this Medium article is saved as an image and is over <strong>80kB</strong> but could be also be saved as</p>
<ol>
<li><p><strong>Image :</strong> ”success_kid.jpg”</p>
</li>
<li><p><strong>Top Text :</strong> ”Heavy night of drinking”</p>
</li>
<li><p><strong>Bottom Text:</strong> ”Woke up with keys, wallet and phone”</p>
</li>
</ol>
<p>This would require just <strong>0.1kB</strong> as long the “success_kid.jpg” image was cached once before. If the image is not in the browser cache, it would be downloaded once. It could then be repeatedly used forever without any further data transfer.</p>
<p>The user benefits from a huge decrease in loading time and data usage. With this system, it does not matter if your mobile provider throttled your bandwidth — you can still meme around like crazy. The system also saves storage space on your phone.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ZMaYMU0jYu1hLypBslw_pA.png" alt="Image" width="625" height="435" loading="lazy">
<em>Each “Type XHR” = 15 Memes, Document = Code for layout and functionality</em></p>
<p>To load <strong>100</strong> memes, only <strong>15kB</strong> were transferred in total since the images are already “cached” (“Transferred” <strong>0B</strong>) and 15 posts require less than <strong>1.5kB</strong> of data. The website itself is less than <strong>10kB</strong>. I achieved this by:</p>
<ol>
<li><p><strong>Not using</strong> any plug-ins/libraries and writing native code.</p>
</li>
<li><p><strong>Not using</strong> images to create the layout and high quality images in general.</p>
</li>
<li><p>Keeping everything <strong>plain simple</strong>.</p>
</li>
</ol>
<p>Since the memes are so lightweight, it made sense to keep the layout and functionality lean as well so the website is compact and fast.</p>
<p>People around the world have problems loading webpages because it takes too much time to open them. The <a target="_blank" href="https://www.wired.com/2016/04/average-webpage-now-size-original-doom/">average webpage is about 2.300kB</a>, and imageboards or video platforms are often unreachable because the content is to big to download with a weak or throttled connection.</p>
<p>I hope that this cache system will help by providing an alternative which requires less data usage. It’s time to make the internet and people’s lives more memeingfull by making this piece of internet culture accessible to everybody at anytime.</p>
<p>The rest of the article is about the technical implementation and a bit about myself. If you simply want to take a look at the project go to <strong>CacheMe.me</strong> (Make sure to check out tools like the offline Memeviewer and many more by opening the Menu(☰) → Gadgets).</p>
<h3 id="heading-technical-part">Technical part</h3>
<p>To demonstrate the idea, I created a little example. I used ten typical memes and, after that, endless memes with random generated numbers (ain’t nobody got time to generate infinity real examples).</p>
<p><strong>To turn this example into a real meme machine</strong>, query a database and append the returned content. If you want to see full examples check out my <a target="_blank" href="https://github.com/Cachememe/Cachememes">GitHub</a>. The front end (HTML, CSS, JS, Kotlin and Swift) is going to be open source, anyway.</p>
<h4 id="heading-front-end">Front end</h4>
<p>This article will <strong>focus</strong> on the web implementation of the concept. There is an app for Android but I will not go into any details in this article. If you want me to write about it, leave a comment.</p>
<p><strong>Html/CSS:</strong> The <code>&lt;d</code>iv&gt; I use as a meme container needs to have the CSS pro<code>perty position:rel</code>ative; so the text will be on the image<code>, and text-align:</code>center to align the text in the center (who would have guessed).</p>
<pre><code><span class="hljs-comment">/* CSS class for the top and bottom meme text */</span>.text1, .text2 {   <span class="hljs-attr">left</span>: <span class="hljs-number">0</span>;   font-family: Impact,sans-serif <span class="hljs-comment">/*sans-serif as fallback*/</span>;   width: <span class="hljs-number">100</span>%;   color: white;   position: absolute;   z-index: <span class="hljs-number">99</span>;   pointer-events: none;   text-align: center;   -webkit-text-stroke: <span class="hljs-number">1</span>px #<span class="hljs-number">000</span> }
</code></pre><p>The text gets a <code>font-family: Impact; color: white; -webkit-text-stroke: 1px #000</code> to achieve the typical meme styled text. The<code>position:absolute</code> attribute, in combination with the meme container <code>position:relative</code>, is used to get the text on top of the image. By adding attributes like<code>z-index:99</code> and <code>pointer-events:none</code> I made the meme feel more like a usual image.</p>
<pre><code>&lt;!-- The Meme structure <span class="hljs-keyword">in</span> its natural shape --&gt;<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>title<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></span><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">”position:</span> <span class="hljs-attr">relative</span>;<span class="hljs-attr">text-align:</span> <span class="hljs-attr">center</span>;”&gt;</span>  <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">”text1</span>"&gt;</span>first text<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">”image_url</span>"&gt;</span>  <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">”text2</span>"&gt;</span>second text<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></span>
</code></pre><p><strong>JavaScript:</strong> To get more/endless content, I call a function in this case with Ajax/XHR (so the site won’t reload). This sends a request to the server for more content. If the response is in HTML format, I append it directly like so:</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get_memes</span>(<span class="hljs-params"></span>) </span>{   <span class="hljs-keyword">var</span> xhr = <span class="hljs-keyword">new</span> XMLHttpRequest();   xhr.open(<span class="hljs-string">'GET'</span>, <span class="hljs-string">"url"</span>);   xhr.onload = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{     <span class="hljs-keyword">if</span> (xhr.status === <span class="hljs-number">200</span>) {<span class="hljs-comment">// if the response is already HTMLdocument.getElementsByTagName("body").[0].insertAdjacentHTML("beforeend", xhr.responseText)}   };xhr.send();};</span>
</code></pre><p>If the <code>resposeText</code> is JSON formatted, I parse the response text first, then create HTML from the content within a <code>for-loop</code> like so:</p>
<pre><code>...var meme collection = <span class="hljs-built_in">JSON</span>.parse(xhr.responseText)<span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt;= meme_collection.length; i++) {  <span class="hljs-keyword">var</span> o = <span class="hljs-string">'&lt;h2&gt;title&lt;/h2&gt;&lt;div style="position: relative;"&gt;&lt;span class="text1"&gt;'</span>+meme_collection[i][<span class="hljs-string">"text1"</span>]+<span class="hljs-string">'&lt;/span&gt;&lt;img src="'</span>+meme_collection[i][<span class="hljs-string">"image"</span>]+<span class="hljs-string">'"&gt;&lt;span class="text2"&gt;'</span>+meme_collection[i][<span class="hljs-string">"text2"</span>]+<span class="hljs-string">'&lt;/span&gt;&lt;/div&gt;'</span>
</code></pre><pre><code>  <span class="hljs-built_in">document</span>.getElementsByTagName(<span class="hljs-string">"body"</span>).[<span class="hljs-number">0</span>].insertAdjacentHTML(<span class="hljs-string">"beforeend"</span>, o)}
</code></pre><p>The best part: I don’t even have to write a function to cache the images, every web-browser does this by default. You can simply reuse the same image link and the ?magic is already happening.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*pAmE_dqKdzDrjO6_deW2vg.png" alt="Image" width="489" height="273" loading="lazy"></p>
<h4 id="heading-backend">Backend</h4>
<p>The effect of data savings is a result of the way the front end (HTML/XML) is structured — so the backend isn’t really relevant for the data saving effect. Basically, a server that returns HTML or JSON formatted data (top text, bottom text, image name) is all that is required.</p>
<p>For my project, I chose <a target="_blank" href="https://www.djangoproject.com"><strong>Django</strong></a> (a Python web framework). I also integrated some <a target="_blank" href="https://golang.org"><strong>Golang</strong></a>. Django/Python takes care of the platform in general (Users, Content and HTML) while Golang jumps in to handle API requests and to serve JSON to the client. Both programming languages work with the same <strong>PostgreSQL</strong> database<strong>.</strong></p>
<h3 id="heading-whoami">$whoami</h3>
<p>My name is Philipp, and last year I started to learn coding next to my studies. I always wanted to learn how to code, but was scared of code since I imagined it to be very abstract and complex. I was partly right. There is web, mobile, and desktop application development and each of them requires a different skill set. There are a ton of different languages, frameworks, and libraries out there, and everybody is recommending to learn something different.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ZQ-nJEzv6ONWBlfNHFpMZw.png" alt="Image" width="800" height="678" loading="lazy">
_Major topics in programming and how they are connected. From [StackOverflow Survey](https://insights.stackoverflow.com/survey/2018/#technology-how-technologies-are-connected" rel="noopener" target="<em>blank" title=")</em></p>
<p>Luckily I came across <a target="_blank" href="https://www.freecodecamp.org">freeCodeCamp</a>, which was an awesome starting point to learn and get into coding. I could decide on my own when and where to learn and, most importantly, the clear course path kept me on track what to learn next. It always helped to see that other people had similar problems and I wasn’t the only one who struggled to solve “easy” algorithms.</p>
<p>The freeCodeCamp community was supportive enough to carry me through these first weeks/months of frustration, and guided me a way to start projects on my own. After finishing my front end certificate, I started to get into Python and after 6 months I was able to get a Full Stack Junior Position (part-time since I have to finish my studies) in a young company.</p>
<p>Thanks to the entire programming community. Without freeCodeCamp, StackOverflow, and GitHub, I wouldn’t have come so far. Also thanks to all my fellow memeing humans, your memes were there when no one else was.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*HqjMpHNELDuu8UzEreH7kQ.png" alt="Image" width="800" height="282" loading="lazy">
<em><strong>The new Meme order</strong></em></p>
<p>To enjoy some cached Memes, and join the revolution, go to <a target="_blank" href="https://www.cacheme.me">CacheMe.me</a> or download the <a target="_blank" href="https://play.google.com/store/apps/details?id=com.herokuapp.meme_maschine.low_data">Android App</a>!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
