<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: tumao</title>
    <description>The latest articles on DEV Community by tumao (@ondratuma).</description>
    <link>https://dev.to/ondratuma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F544133%2Fe2f211a2-8615-41dc-8528-76ddf594a00c.jpeg</url>
      <title>DEV Community: tumao</title>
      <link>https://dev.to/ondratuma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ondratuma"/>
    <language>en</language>
    <item>
      <title>Digital Ocean Hackathon: Submission!</title>
      <dc:creator>tumao</dc:creator>
      <pubDate>Sun, 10 Jan 2021 17:17:03 +0000</pubDate>
      <link>https://dev.to/ondratuma/digital-ocean-hackathon-submission-1mon</link>
      <guid>https://dev.to/ondratuma/digital-ocean-hackathon-submission-1mon</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Minimalist, multilingual personal portfolio.&lt;br&gt;
Built with &lt;a href="https://strapi.io/"&gt;Strapi&lt;/a&gt; and &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt;, hosted completely on &lt;a href="https://www.digitalocean.com/products/app-platform/"&gt;DigitalOcean App Platform&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Personal Site/ Portfolio&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://tumao.dev"&gt;tumao.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jokV8L9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/shh3xrlyyf0d7y8k84fv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jokV8L9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/shh3xrlyyf0d7y8k84fv.png" alt="front"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GCqiRTKn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r0f9f1bai0kd4r1tv6vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GCqiRTKn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r0f9f1bai0kd4r1tv6vu.png" alt="projects"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TJp8DF6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7tx0smrltcphhnativ7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TJp8DF6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7tx0smrltcphhnativ7o.png" alt="contact"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;Representative, minimalist, easy to manage and great looking portfolio for briefly presenting your projects that anyone can deploy in minutes. Based on Strapi and Next.js. &lt;br&gt;
With integrated cron runner to execute (not only) wordpress cron jobs.&lt;br&gt;
Currently supported translations are /cs, /en. Switching automatically based on browser preferences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ondratuma/tumao-portfolio-next"&gt;Next.js&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ondratuma/tumao-portfolio-next"&gt;Strapi&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://choosealicense.com/licenses/mit/"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I am a student and freelance developer.&lt;/p&gt;

&lt;p&gt;I had static html portfolio, and adding new projects started to get time consuming. &lt;br&gt;
I was thinking about building new portfolio for quite some time.&lt;br&gt;
So I took this challenge as a sign that I had to build a new one. &lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;First, I wrote down the requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modern looking&lt;/li&gt;
&lt;li&gt;server side rendered&lt;/li&gt;
&lt;li&gt;easy to manage cms&lt;/li&gt;
&lt;li&gt;easy translation&lt;/li&gt;
&lt;li&gt;project filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have experience with React, so naturally, I selected Next.js as front-end.&lt;br&gt;
It is well integrated with i18n for translation and has great static-site generation capabalities.&lt;/p&gt;

&lt;p&gt;Next decision was cms. Strapi seemed like pretty obvious choice here.&lt;/p&gt;

&lt;p&gt;I utilized DigitalOcean’s App Platform to host the next.js app, as well as strapi backend. Each one residing in it's own project.&lt;/p&gt;

&lt;p&gt;Additionally, I am using aws lambda in conjunction with AWS SES to send the contact form submissions to my email.&lt;/p&gt;

&lt;p&gt;So basically, everything except the email is hosted on DO.&lt;/p&gt;

&lt;p&gt;And everything is working great. &lt;/p&gt;

&lt;p&gt;This was my first experience with DO App Platform.&lt;br&gt;
Before , I would host front-end on Vercel, and strapi on Heroku.&lt;br&gt;
Now, I can have both parts at one place.&lt;/p&gt;

&lt;p&gt;The experience with setting up one-click deployments is great. If I had to create the exact same portfolios for my clients, I would definitely give App Platform another shot.&lt;/p&gt;

&lt;p&gt;I learned how easy it can be to create reusable projects. I did not thing that it could be that easy for anyone to setup a project. Now you can just click a single button, set few environment variables, and have your own modern portfolio set-up in minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;p&gt;I decided to create blank repos before publishing, to prevent the possible leaks of personal data, urls and other string that might have been hardcoded before.&lt;/p&gt;

</description>
      <category>dohackathon</category>
    </item>
    <item>
      <title>Find if any page is hosted in the cloud.</title>
      <dc:creator>tumao</dc:creator>
      <pubDate>Tue, 22 Dec 2020 18:17:07 +0000</pubDate>
      <link>https://dev.to/ondratuma/find-if-any-page-is-hosted-in-the-cloud-4g81</link>
      <guid>https://dev.to/ondratuma/find-if-any-page-is-hosted-in-the-cloud-4g81</guid>
      <description>&lt;h2&gt;
  
  
  Nov 25 AWS outage
&lt;/h2&gt;

&lt;p&gt;Shortly after the AWS outage, I was looking around if I can easily see what pages are running on what cloud providers.&lt;/p&gt;

&lt;p&gt;I could not find any suitable tool. The closest was simple iplookup/whois. &lt;/p&gt;

&lt;p&gt;I though there must be a better way.&lt;/p&gt;

&lt;p&gt;It looks like every decent cloud provider (Looking at you, Microsoft) provides public lists of IP ranges. But there was no tool to check it against given website.&lt;/p&gt;

&lt;h2&gt;
  
  
  ISITIN.cloud
&lt;/h2&gt;

&lt;p&gt;So I decided to create easy way to lookup this information.&lt;br&gt;
&lt;a href="https://isitin.cloud"&gt;isitin.cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the first version, I scanned the whole website, grabbed all the links resolved the DNS, compared it to the list.&lt;/p&gt;

&lt;p&gt;It took some time, and it was probably not worth it, I did not really care that much about the subsequent requests. But if you wanted it, the functionality is there waiting to be turned on again.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ALLm97nX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oh0629o3bqueh8w99tmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ALLm97nX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oh0629o3bqueh8w99tmu.png" alt="out (1)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In current version, I only check the requested domain.&lt;/p&gt;

&lt;p&gt;I hope you will find it useful.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Next app</title>
      <dc:creator>tumao</dc:creator>
      <pubDate>Mon, 21 Dec 2020 15:45:37 +0000</pubDate>
      <link>https://dev.to/ondratuma/next-app-13bl</link>
      <guid>https://dev.to/ondratuma/next-app-13bl</guid>
      <description>&lt;p&gt;So, I decided that my front-end would be in &lt;strong&gt;Next.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The norm for Next.js is Vercel, but since this is DO hackaton, I decided that trying alternative is the way to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  But there came a problem.
&lt;/h3&gt;

&lt;p&gt;Image loading is &lt;strong&gt;waaay too slow&lt;/strong&gt;. I am aware that next does image optimization on-the-fly.&lt;br&gt;
So I decided to upgrade to the $10 plan, to see if that is acceptable. Not better at all.&lt;/p&gt;

&lt;p&gt;Vercel uses CDN for caching the images. So I decided to use Cloudflare to eliminate this issue.&lt;/p&gt;

&lt;p&gt;And I found this quote in the docs &lt;strong&gt;"App Platform apps cannot be routed through your own Cloudflare account and must instead use App Platform's built-in CDN functionality."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The built-in CDN does not seem to be helping AT ALL.&lt;/p&gt;

&lt;p&gt;Anyone got a solution?&lt;/p&gt;

&lt;h2&gt;
  
  
  Update
&lt;/h2&gt;

&lt;p&gt;The solution was to change the Cache headers on the images hosted on S3. Next.js app would then use the cache settings from the header.&lt;/p&gt;

&lt;p&gt;So what was happening?&lt;br&gt;
Next.js app was caching the generated images for only 60 seconds, which ment that almost every visitor would be  waiting.&lt;/p&gt;

&lt;p&gt;After this, the development was super easy. Everything worked as expected.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>dohackathon</category>
    </item>
    <item>
      <title>Getting to know DO App platform</title>
      <dc:creator>tumao</dc:creator>
      <pubDate>Sun, 20 Dec 2020 19:21:54 +0000</pubDate>
      <link>https://dev.to/ondratuma/getting-to-know-do-app-platform-12bp</link>
      <guid>https://dev.to/ondratuma/getting-to-know-do-app-platform-12bp</guid>
      <description>&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;I am junior dev, but I have previous experience with Heroku and DO droplets. So I decided that I should try an alternative.&lt;/p&gt;

&lt;h3&gt;
  
  
  First step
&lt;/h3&gt;

&lt;p&gt;So I decided to deploy strapi to DO App platform, just to test it.&lt;/p&gt;

&lt;p&gt;Setup seemed &lt;strong&gt;easy&lt;/strong&gt;, evnironment, databases, everything one click.&lt;/p&gt;

&lt;h3&gt;
  
  
  But then came the &lt;strong&gt;deployment&lt;/strong&gt;.
&lt;/h3&gt;

&lt;p&gt;I was waiting up to &lt;strong&gt;20 minutes&lt;/strong&gt; for some deployments!!!&lt;br&gt;
One single change in strapi? Waiting 20 minutes. Just like that. I hope it is only for the first build. &lt;br&gt;
I am using the $5 plan, but waiting 20 minutes every time would be unacceptable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update
&lt;/h3&gt;

&lt;p&gt;Any subsequent builds run on average for 3 minutes, which is on par with heroku. So I see no problem here.&lt;/p&gt;

&lt;p&gt;I will be updating as I progress.&lt;br&gt;
Do you have similar experience, or some tips?&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>node</category>
      <category>typescript</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
