<?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">
    <channel>
        <title><![CDATA[Eliseo Martelli]]></title>
        <description><![CDATA[Eliseo Martelli]]></description>
        <link>https://eliseomartelli.it</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Thu, 28 Dec 2023 17:34:52 GMT</lastBuildDate>
        <atom:link href="https://eliseomartelli.it/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Built and deployed a newsletter in an afternoon]]></title>
            <description><![CDATA[<link rel="preload" as="image" href="/posts/2023-12-02-newsletterquick/schematic.png"/><link rel="preload" as="image" href="/posts/2023-12-02-newsletterquick/db.png"/><p>If you are a long-time reader of this blog, you might remember I already had
a newsletter. It was built upon Revue.</p>
<p>Revue was a platform that allowed users to build a newsletter effortlessly. It
had a user-friendly UI and, as a great plus, it offered an API, so you could
build custom interfaces and integrate them with your site.</p>
<p>Revue was later acquired by Twitter on January 26, 2021. After Elon Musk
<del>destroyed</del> bought Twitter for the meme, and he decided to close it down.</p>
<p>Subsequently, I tried to find an alternative to my rather modest newsletter
needs, but couldn&#x27;t find any that satisfied all my points.</p>
<p>At the start of this year, I added &quot;build a newsletter&quot; to my to-do list, but
never had some spare &quot;mental bandwidth&quot; to do it. Until the 1st of December 2023.</p>
<h2>The requirements</h2>
<p>The list of requirements for this project is rather small:</p>
<ul>
<li>Users should be able to subscribe and unsubscribe easily;</li>
<li>I should be able to Create Remove Update Delete (CRUD) a mail draft;</li>
<li>I ultimately decide when to send the email;</li>
<li>Users should be able to browse past issues.</li>
</ul>
<p>Now it was time to sketch the inner workings.</p>
<p><img src="/posts/2023-12-02-newsletterquick/schematic.png" alt="A working schematic"/></p>
<h2>Deciding the stack</h2>
<p>After laying down the foundation, it was now time to decide which tools to use
to build the product.</p>
<p>Since this site is built using the full-stack framework Next.JS, and content
is managed through Contentlayer, I just had to decide what to use to store
subscriptions and how to present past issues to the users.</p>
<p>At this time, I&#x27;m deploying this site on Vercel. Vercel offers a suite of
products to meet user needs, one of the products that caught my attention
is <a href="https://vercel.com/docs/storage/vercel-postgres">Vercel Postgres</a>.</p>
<p>Vercel Postgres is a managed PostgreSQL database. Since I&#x27;m familiar with
Postgres, I decided to add it to the mix. This project is pretty small, and I
didn&#x27;t need an ORM, but, with the idea of building other features for this site,
I decided to go with Prisma because it has a type-safe query builder, and it
handles database migrations for me.</p>
<h2>Building</h2>
<p>How simple can you make the database? Yes.</p>
<p><img src="/posts/2023-12-02-newsletterquick/db.png" alt="Database"/></p>
<p>It&#x27;s just two tables, with one column each. No relationships.
I told you I had basic requirements.</p>
<p>The Prisma models are rather simple.</p>
<figure data-rehype-pretty-code-figure=""><figcaption data-rehype-pretty-code-title="" data-language="prisma" data-theme="one-dark-pro">schema.prisma</figcaption><pre style="background-color:#282c34;color:#abb2bf" tabindex="0" data-language="prisma" data-theme="one-dark-pro"><code data-language="prisma" data-theme="one-dark-pro" style="display:grid"><span data-line=""><span style="color:#ABB2BF">...</span></span>
<span data-line=""><span style="color:#C678DD">model</span><span style="color:#E5C07B"> Subscriber</span><span style="color:#ABB2BF"> {</span></span>
<span data-line=""><span style="color:#E06C75">  email</span><span style="color:#E5C07B">     String</span><span style="color:#61AFEF">   @id</span></span>
<span data-line=""><span style="color:#ABB2BF">}</span></span>
<span data-line=""> </span>
<span data-line=""><span style="color:#C678DD">model</span><span style="color:#E5C07B"> LastSent</span><span style="color:#ABB2BF"> {</span></span>
<span data-line=""><span style="color:#E06C75">  sent</span><span style="color:#E5C07B">      String</span><span style="color:#61AFEF">   @unique</span></span>
<span data-line=""><span style="color:#ABB2BF">}</span></span>
<span data-line=""><span style="color:#ABB2BF">...</span></span></code></pre></figure>
<p>Now I had to add a Contentlayer source to handle the issues.
I purposefully decided to use the filename of the issue to indicate the date
to minimize the number of custom fields needed (I just needed the title, later used as the email&#x27;s subject).</p>
<figure data-rehype-pretty-code-figure=""><figcaption data-rehype-pretty-code-title="" data-language="typescript" data-theme="one-dark-pro">contentlayer.config.js</figcaption><pre style="background-color:#282c34;color:#abb2bf" tabindex="0" data-language="typescript" data-theme="one-dark-pro"><code data-language="typescript" data-theme="one-dark-pro" style="display:grid"><span data-line=""><span style="color:#C678DD">export</span><span style="color:#C678DD"> const</span><span style="color:#E5C07B"> Newsletter</span><span style="color:#56B6C2"> =</span><span style="color:#61AFEF"> defineDocumentType</span><span style="color:#ABB2BF">(() </span><span style="color:#C678DD">=&gt;</span><span style="color:#ABB2BF"> ({</span></span>
<span data-line=""><span style="color:#E06C75">  name</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">&quot;Newsletter&quot;</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">  filePathPattern</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">`newsletter/*.md`</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">  contentType</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">&quot;markdown&quot;</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">  fields</span><span style="color:#ABB2BF">: {</span></span>
<span data-line=""><span style="color:#E06C75">    title</span><span style="color:#ABB2BF">: {</span></span>
<span data-line=""><span style="color:#E06C75">      type</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">&quot;string&quot;</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">      required</span><span style="color:#ABB2BF">: </span><span style="color:#D19A66">true</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#ABB2BF">    },</span></span>
<span data-line=""><span style="color:#ABB2BF">  },</span></span>
<span data-line=""><span style="color:#ABB2BF">}));</span></span></code></pre></figure>
<p>From this point, building the past issues list was trivial.</p>
<figure data-rehype-pretty-code-figure=""><pre style="background-color:#282c34;color:#abb2bf" tabindex="0" data-language="ts" data-theme="one-dark-pro"><code data-language="ts" data-theme="one-dark-pro" style="display:grid"><span data-line=""><span style="color:#C678DD">const</span><span style="color:#E5C07B"> newsletterList</span><span style="color:#56B6C2"> =</span><span style="color:#E06C75"> allNewsletters</span></span>
<span data-line=""><span style="color:#ABB2BF">  .</span><span style="color:#61AFEF">sort</span><span style="color:#ABB2BF">((</span><span style="color:#E06C75;font-style:italic">a</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">b</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=&gt;</span><span style="color:#ABB2BF"> {</span></span>
<span data-line=""><span style="color:#C678DD">    if</span><span style="color:#ABB2BF"> (</span><span style="color:#E5C07B">a</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#56B6C2"> &lt;</span><span style="color:#E5C07B"> b</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#ABB2BF">) {</span></span>
<span data-line=""><span style="color:#C678DD">      return</span><span style="color:#56B6C2"> -</span><span style="color:#D19A66">1</span><span style="color:#ABB2BF">;</span></span>
<span data-line=""><span style="color:#ABB2BF">    }</span></span>
<span data-line=""><span style="color:#C678DD">    if</span><span style="color:#ABB2BF"> (</span><span style="color:#E5C07B">a</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#56B6C2"> &gt;</span><span style="color:#E5C07B"> b</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#ABB2BF">) {</span></span>
<span data-line=""><span style="color:#C678DD">      return</span><span style="color:#D19A66"> 1</span><span style="color:#ABB2BF">;</span></span>
<span data-line=""><span style="color:#ABB2BF">    }</span></span>
<span data-line=""><span style="color:#C678DD">    return</span><span style="color:#D19A66"> 0</span><span style="color:#ABB2BF">;</span></span>
<span data-line=""><span style="color:#ABB2BF">  })</span></span>
<span data-line=""><span style="color:#ABB2BF">  .</span><span style="color:#61AFEF">reverse</span><span style="color:#ABB2BF">()</span></span>
<span data-line=""><span style="color:#ABB2BF">  .</span><span style="color:#61AFEF">map</span><span style="color:#ABB2BF">((</span><span style="color:#E06C75;font-style:italic">newsletter</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">i</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=&gt;</span><span style="color:#ABB2BF"> (</span></span>
<span data-line=""><span style="color:#56B6C2">    &lt;</span><span style="color:#E06C75;font-style:italic">Link</span></span>
<span data-line=""><span style="color:#E06C75">      href</span><span style="color:#56B6C2">=</span><span style="color:#ABB2BF">{</span><span style="color:#98C379">`/</span><span style="color:#C678DD">${</span><span style="color:#E5C07B">newsletter</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#C678DD">}</span><span style="color:#98C379">`</span><span style="color:#ABB2BF">}</span></span>
<span data-line=""><span style="color:#E06C75">      key</span><span style="color:#56B6C2">=</span><span style="color:#ABB2BF">{</span><span style="color:#E06C75">i</span><span style="color:#ABB2BF">}</span></span>
<span data-line=""><span style="color:#56B6C2">    &gt;</span></span>
<span data-line=""><span style="color:#ABB2BF">      &lt;</span><span style="color:#E5C07B">p</span><span style="color:#ABB2BF">&gt;{newsletter.</span><span style="color:#E06C75">title</span><span style="color:#ABB2BF">}</span><span style="color:#56B6C2">&lt;/</span><span style="color:#E06C75">p</span><span style="color:#56B6C2">&gt;</span></span>
<span data-line=""><span style="color:#56B6C2">    &lt;/</span><span style="color:#E06C75">Link</span><span style="color:#56B6C2">&gt;</span></span>
<span data-line=""><span style="color:#ABB2BF">  ))</span></span></code></pre></figure>
<p>You can find all the relative UI code <a href="https://github.com/eliseomartelli/eliseomartelli.it/tree/b1a8d0e0abc8e3cbeffa1218a1326194a5ab27a6/src/app/newsletter">here</a>.</p>
<p>It was time to tie it all together and start sending emails.</p>
<p>Firstly, I added three (well, to be honest, four) API routes to my next app:</p>
<ul>
<li><code>/api/newsletter/subscribe/[email]</code></li>
<li><code>/api/newsletter/unsubscribe/[email]</code></li>
<li><code>/api/newsletter/send</code></li>
<li><code>/api/newsletter/test</code></li>
</ul>
<p>Then I started writing some logic to make the newsletter work.</p>
<p>After retrieving the last newsletter from Contentlayer, I check if the email was already sent.</p>
<figure data-rehype-pretty-code-figure=""><pre style="background-color:#282c34;color:#abb2bf" tabindex="0" data-language="ts" data-theme="one-dark-pro"><code data-language="ts" data-theme="one-dark-pro" style="display:grid"><span data-line=""><span style="color:#C678DD">const</span><span style="color:#E5C07B"> sent</span><span style="color:#56B6C2"> =</span><span style="color:#C678DD"> await</span><span style="color:#E5C07B"> prisma</span><span style="color:#ABB2BF">.</span><span style="color:#E5C07B">lastSent</span><span style="color:#ABB2BF">.</span><span style="color:#61AFEF">findFirst</span><span style="color:#ABB2BF">({</span></span>
<span data-line=""><span style="color:#E06C75">  where</span><span style="color:#ABB2BF">: {</span></span>
<span data-line=""><span style="color:#E06C75">    sent</span><span style="color:#ABB2BF">: { </span><span style="color:#E06C75">equals</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">newsletter</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">_id</span><span style="color:#ABB2BF"> },</span></span>
<span data-line=""><span style="color:#ABB2BF">  },</span></span>
<span data-line=""><span style="color:#ABB2BF">});</span></span></code></pre></figure>
<p>Consequently, I retrieve the list of subscribers and send the newsletter.</p>
<figure data-rehype-pretty-code-figure=""><pre style="background-color:#282c34;color:#abb2bf" tabindex="0" data-language="ts" data-theme="one-dark-pro"><code data-language="ts" data-theme="one-dark-pro" style="display:grid"><span data-line=""><span style="color:#E5C07B">subscribers</span><span style="color:#ABB2BF">.</span><span style="color:#61AFEF">map</span><span style="color:#ABB2BF">(</span><span style="color:#C678DD">async</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">e</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=&gt;</span><span style="color:#ABB2BF"> {</span></span>
<span data-line=""><span style="color:#C678DD">  await</span><span style="color:#E5C07B"> transporter</span><span style="color:#ABB2BF">.</span><span style="color:#61AFEF">sendMail</span><span style="color:#ABB2BF">({</span></span>
<span data-line=""><span style="color:#E06C75">    from</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">    to</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">e</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">email</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">    subject</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">newsletter</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">title</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#E06C75">    html</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">newsletter</span><span style="color:#ABB2BF">.</span><span style="color:#E5C07B">body</span><span style="color:#ABB2BF">.</span><span style="color:#E06C75">html</span><span style="color:#ABB2BF">,</span></span>
<span data-line=""><span style="color:#ABB2BF">  });</span></span>
<span data-line=""><span style="color:#ABB2BF">});</span></span></code></pre></figure>
<p>Similar logic is used for subscribe and unsubscribe API routes, obviously
changing the checks.</p>
<p>You can find the full code for the API routes <a href="https://github.com/eliseomartelli/eliseomartelli.it/tree/b1a8d0e0abc8e3cbeffa1218a1326194a5ab27a6/src/app/api/newsletter">here</a>.</p>
<p>Now I can own my newsletter infrastructure and I don&#x27;t have to pay attention to
commercial decisions by millionaires.</p>]]></description>
            <link>https://eliseomartelli.it/blog/2023-12-02-newsletterquick</link>
            <guid isPermaLink="true">https://eliseomartelli.it/blog/2023-12-02-newsletterquick</guid>
            <category><![CDATA[Programming]]></category>
            <pubDate>Sat, 02 Dec 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Some notes on Polaroid Batteries]]></title>
            <description><![CDATA[<p>Since I recently got into the vintage Polaroid hobby, I started researching how
I can be less wasteful with the material needed to take pictures with those
cameras.</p>
<p>One of the researches I conducted is on battery packs for the Polaroid (or
how to not waste a perfectly good battery with each film cartridge).</p>
<h2>The old</h2>
<p>Back in 1947, Edwin H. Land introduced the Polaroid-Land process. In a nutshell,
the negative film gets exposed inside the camera. It then gets squeezed with rollers, which spread a reagent between the two layers.
The reagent is inside a pod present in each film slide.</p>
<p>The
<a href="https://www.acs.org/education/whatischemistry/landmarks/land-instant-photography.html#introduction_of_instant_photography">piccancle</a>
of this invention was the Polaroid SX-70 system, released in 1972.</p>
<p>One of the innovations brought by the SX-70 system was the PolaPulse battery
present in the film cartridge.</p>
<p>The PolaPulse battery used zinc-chloride chemistry to operate with the cameras
requirements of high-current demand for the motors.</p>
<p>The battery used inside the SX-70 film packs was called P80. More info <a href="http://users.rcn.com/fcohen/">here</a>.</p>
<h2>The Impossible Project</h2>
<p>When The Impossible Project took over the production of Polaroid film, it
started using LiMnO2 batteries in its film packs. In particular, they started
using two CP225040N cells. More info
<a href="https://gmbattery.com/dl/cp4/CP/CP225040.pdf">here</a>.</p>
<p>The new batteries hold a higher capacity but a lower maximum pulse discharge.</p>]]></description>
            <link>https://eliseomartelli.it/blog/2023-12-01-polainvestigation</link>
            <guid isPermaLink="true">https://eliseomartelli.it/blog/2023-12-01-polainvestigation</guid>
            <category><![CDATA[Electronics]]></category>
            <category><![CDATA[Photography]]></category>
            <category><![CDATA[Short]]></category>
            <pubDate>Fri, 01 Dec 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[I bought some Polaroids]]></title>
            <description><![CDATA[<link rel="preload" as="image" href="/posts/polaroids/both.jpeg"/><link rel="preload" as="image" href="/posts/polaroids/polaroid.jpg"/><link rel="preload" as="image" href="/posts/polaroids/polaroid2.jpeg"/><p>I kept a close eye on Polaroids since news about <a href="https://en.wikipedia.org/wiki/Polaroid_B.V.">&quot;The Impossible Project&quot;</a> started surfacing (I was 12 at the time).</p>
<p>I never pulled the trigger and bought a Polaroid camera because I was always scared by the film cartridge prices, but last Saturday, I changed that.</p>
<p>I was reaching the city center with my brother on foot after visiting some friends at <em>Museo Ferroviario Piemontese</em>, working at the workshop near Ponte Mosca in Turin.
We were already near Porta Palazzo and the historical flea market called <a href="https://it.wikipedia.org/wiki/Balon">Balon</a>, a staple of the Aurora district, and after getting lost in the color, smells, lights, and sounds of that market, we reached the booth of a vintage camera and watches seller.</p>
<p>When we arrived, the seller was already packing back the goods for the day, but, in the rightmost corner of the stand, on top of a velvety red cloth, there were two Polaroid cameras: a Polaroid Land 1000 Camera (with a green button), and a Polaroid 636 Autofocus.</p>
<p>I made an impromptu decision, asked the seller for a price, and then quickly bought the two cameras (for €15 each).</p>
<p><img src="/posts/polaroids/both.jpeg" alt="The cameras"/></p>
<p>It was now time to learn some more about the cameras, and after an <em>extreme</em> Wikipedia and Reddit <a href="https://www.reddit.com/r/Polaroid/">(r/Polaroid)</a> search, I found out that the cameras accepted SX-70 film and 600 films, respectively.</p>
<p>The side-quest for the film was hilarious in its way. I first went to a local electronics retailer, Unieuro, where a Polaroid salesman told me I could get I-type film for my camera. Fortunately, I-type film has a big sticker with &quot;Not for vintage cameras&quot; written on it, so I backed out and went to another store: La Rinascente.</p>
<p>La Rinascente was running a sale for Polaroid film, and it was all out-of-stock, so I got out and walked into another shop. Il Grande Marvin. We found some expired SX-70 film, but nothing for my 636. It made me a bit sad. It later occurred to me to check on Amazon, where, surprisingly, I found some 600 films that I immediately ordered.</p>
<p>At home, we put the SX-70 pack inside the Land 1000. We were in awe at the whirring noises coming out of it. I imagine it was a &quot;second birth&quot; for that camera since it probably wasn&#x27;t used in the last 20 to 30 years.
The next day, the film pack for my camera reached our door. I placed it inside the camera and closed the film flap. It whirred. It was as magical as the other one. When I saw the dark slide coming out and getting covered by the <em>tongue</em>, I was ecstatic. I told my brother to take a picture of me, and the camera flashed. After some milliseconds, the slide got ejected.</p>
<p><img src="/posts/polaroids/polaroid.jpg" alt="Hey! A picture of me!"/>
<em>Hey! A picture of me!</em></p>
<p>I went for a walk with my brother later, when he took a chance and took a shot with his camera.
We heard whirring noises. We had another winner.</p>
<p><img src="/posts/polaroids/polaroid2.jpeg" alt="Riva del Po"/>
<em>Riva del Po</em></p>
<p>I fell into the Polaroid rabbit hole now. I&#x27;m planning to mod my camera to use new I-type film. I&#x27;ll write another post if I succeed in that!</p>]]></description>
            <link>https://eliseomartelli.it/blog/2023-11-27-polaroid</link>
            <guid isPermaLink="true">https://eliseomartelli.it/blog/2023-11-27-polaroid</guid>
            <category><![CDATA[Photography]]></category>
            <category><![CDATA[Short]]></category>
            <pubDate>Mon, 27 Nov 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Things happen]]></title>
            <description><![CDATA[<link rel="preload" as="image" href="/posts/happens/happens.jpg"/><p><img src="/posts/happens/happens.jpg" alt="Graduated"/></p>
<p>A few weeks ago, I was reading The Beekeeper by Maxence Fermine.
It&#x27;s a book about a boy who has always dreamed big,
and as I scrolled my eyes through those lines, it seemed like I already knew
that boy.</p>
<p>The essential part of the story is that this fella, against the thoughts of the
people in his small village, started his beekeeping business.
His first season ended abruptly with a fire,
so he decided to travel to seek gold, which, in his case, was honey.</p>
<p>One thing that united his expeditions was that, every time,
Aurelien found himself in a convoy of travelers, and even if these expeditions didn&#x27;t succeed, he still had a wealth of experiences to bring home.</p>
<p>These convoys are a bit like all the people I met in my life.
Each person has made a substantial contribution to how I see things.</p>
<p>The first expeditions laid the foundations for
growth and shaped me into what I am today
(a bit of a dreamer and a bit foolish).</p>
<p>When I arrived in Turin,
a bit disoriented,
I tried to anchor myself to new people,
who with so much patience supported and endured me, for which I thank you.</p>
<p>Aurelien&#x27;s story concludes with him actually finding gold.
It was right in front of his eyes.</p>
<p>I would like to express my appreciation to my family for their support and
encouragement throughout this journey. Their love, understanding, and belief in
me have been a constant source of inspiration. I would also like to extend my
thanks to my friends. Their encouragement has been invaluable, and I am
grateful for their friendship. To all, thank you.</p>
<p>I graduated.</p>]]></description>
            <link>https://eliseomartelli.it/blog/2023-11-25-things-happen</link>
            <guid isPermaLink="true">https://eliseomartelli.it/blog/2023-11-25-things-happen</guid>
            <category><![CDATA[Misc]]></category>
            <category><![CDATA[Short]]></category>
            <pubDate>Sat, 25 Nov 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[RANT: Photography Influencers Should Be Stopped.]]></title>
            <description><![CDATA[<p>&lt;rant&gt;</p>
<p>It&#x27;s so sad to see photography
influencers giving misleading
advice on this platform. One recent example?</p>
<blockquote>
<p>I only shoot with my ISO 800 or
higher</p>
</blockquote>
<p>This statement doesn&#x27;t tell the
full story. ISO, like shutter speed and
aperture, is context dependendant.</p>
<p>The lesson should be to assess the
situation and then make informed
decisions on what settings to pick.</p>
<p>Giving away &quot;magical settings&quot; will
influence a new generation of &quot;bad&quot;
photographers.</p>
<p>Assess, set, shoot.</p>
<p>&lt;/rant&gt;</p>]]></description>
            <link>https://eliseomartelli.it/blog/2023-11-02-photorant</link>
            <guid isPermaLink="true">https://eliseomartelli.it/blog/2023-11-02-photorant</guid>
            <category><![CDATA[Photography]]></category>
            <category><![CDATA[Short]]></category>
            <pubDate>Thu, 09 Nov 2023 00:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>