<?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: Sergey</title>
    <description>The latest articles on DEV Community by Sergey (@kaplich).</description>
    <link>https://dev.to/kaplich</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%2F671309%2F7955993d-acae-45ee-b8f4-39bd1072758c.jpg</url>
      <title>DEV Community: Sergey</title>
      <link>https://dev.to/kaplich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaplich"/>
    <language>en</language>
    <item>
      <title>I Analyzed 100 Vibe-Coded Websites and Found These Common Mistakes</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Wed, 06 Aug 2025 14:21:51 +0000</pubDate>
      <link>https://dev.to/kaplich/i-analyzed-100-vibe-coded-websites-and-found-these-common-mistakes-5275</link>
      <guid>https://dev.to/kaplich/i-analyzed-100-vibe-coded-websites-and-found-these-common-mistakes-5275</guid>
      <description>&lt;p&gt;&lt;em&gt;TL;DR: AI-generated websites look stunning but often ship with basic technical issues that hurt their performance and accessibility. Here's what I discovered.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vibe-coded websites are having a moment. Built with AI tools like Loveable, v0, Bolt, Mocha, and others, these sites showcase what's possible when you can generate beautiful designs in minutes instead of weeks.&lt;/p&gt;

&lt;p&gt;The aesthetic quality is genuinely impressive – clean layouts, modern typography, thoughtful color schemes (sometimes basic though), and smooth interactions that feel professionally crafted. AI has democratized design in a way that seemed impossible just a few years ago.&lt;/p&gt;

&lt;p&gt;But after running 100 of these AI-generated websites through &lt;a href="https://www.cheeeck.com/" rel="noopener noreferrer"&gt;Cheeeck&lt;/a&gt;, I noticed a pattern of technical oversights that could be easily avoided.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Analysis Process
&lt;/h2&gt;

&lt;p&gt;I collected URLs from the landing pages of popular vibe-coding services – the showcase sites they use to demonstrate their capabilities – plus additional examples from Twitter that had the telltale signs of AI generation.&lt;/p&gt;

&lt;p&gt;Then I put them through Cheeeck to see what technical issues might be hiding behind the beautiful interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Common Issues
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The OpenGraph Problem
&lt;/h3&gt;

&lt;p&gt;The majority of sites had incomplete or missing OpenGraph metadata. When someone shares your site on social media, these tags control how it appears – the preview image, title, and description that determine whether people click through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Your site might look perfect when visited directly, but if it displays poorly when shared on Twitter, LinkedIn, or Discord, you're missing opportunities for organic discovery and social proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  Missing Alt Text for Images
&lt;/h3&gt;

&lt;p&gt;Accessibility was a major blind spot. Many sites had multiple images with no alt attributes, making them impossible for screen readers to describe to visually impaired users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Alt text serves dual purposes – it makes your site accessible to users with visual impairments and helps search engines understand and index your images. Without it, you're excluding users and missing out on image search traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Broken Typography Hierarchy
&lt;/h3&gt;

&lt;p&gt;Despite having beautiful visual typography, many sites had poor semantic structure. Heading tags were used inconsistently or skipped entirely, with sites jumping from H1 to H4 or using divs with custom styling instead of proper heading elements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Search engines rely on heading hierarchy to understand your content structure and context. When this is broken, your content becomes harder to index and rank properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Default Favicons and Outdated Content
&lt;/h3&gt;

&lt;p&gt;A surprising number of sites still displayed default favicons or placeholder icons. Even more noticeable were sites showing 2024 copyright dates when we're now in 2025, particularly common among Loveable-generated sites that hadn't been customized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; These details might seem minor, but they signal to users whether a site is actively maintained and professionally managed. They affect credibility and trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile Experience Issues
&lt;/h3&gt;

&lt;p&gt;While most sites looked great on desktop, mobile experiences often suffered. Missing viewport meta tags, touch targets that were too small (or too big), and layouts that didn't adapt properly to smaller screens were common problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; With mobile traffic dominating web usage, a poor mobile experience directly impacts user engagement and search rankings. Google's mobile-first indexing means your mobile version is what gets evaluated for search results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Bottlenecks
&lt;/h3&gt;

&lt;p&gt;Many sites loaded slowly due to unoptimized images, inefficient code, or missing performance optimizations. Large hero images and uncompressed assets were particularly common issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Site speed affects both user experience and search rankings. Users expect fast loading times, and search engines factor performance into their ranking algorithms.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO Fundamentals
&lt;/h3&gt;

&lt;p&gt;Basic SEO elements were often incomplete – missing or generic meta descriptions, poor title tag optimization, and lack of structured data to help search engines understand the content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Without proper SEO foundation, even the most beautiful sites struggle to gain organic visibility. Good technical SEO is essential for discoverability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;This isn't meant as criticism of AI design tools – they're genuinely revolutionary and have made professional-quality design accessible to everyone.&lt;/p&gt;

&lt;p&gt;The issue is that these tools excel at the creative and visual aspects but sometimes overlook the technical foundation that makes websites perform well in the real world. It's the difference between creating something beautiful and creating something that works beautifully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making AI-Generated Sites Complete
&lt;/h2&gt;

&lt;p&gt;The good news is that these issues are entirely fixable. With the right knowledge or tools, you can maintain the aesthetic excellence of AI-generated designs while ensuring they're technically sound.&lt;/p&gt;

&lt;p&gt;This is exactly why I built &lt;a href="https://www.cheeeck.com/" rel="noopener noreferrer"&gt;Cheeeck&lt;/a&gt; – to help bridge the gap between beautiful design and technical execution. It provides a comprehensive analysis of your site's technical health in seconds, identifying issues that might not be visible but could impact performance, accessibility, and discoverability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Vibe-Coded Sites
&lt;/h2&gt;

&lt;p&gt;AI design tools will only get better at handling both the creative and technical aspects of web development. But for now, understanding these common pitfalls can help you ship sites that don't just look professional – they perform professionally too.&lt;/p&gt;

&lt;p&gt;The web is better when it's both beautiful and accessible, fast and functional, creative and technically sound. AI has given us incredible tools for achieving the first part – we just need to make sure we don't forget about the second.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want to check how your site measures up? Run it through &lt;a href="https://www.cheeeck.com/" rel="noopener noreferrer"&gt;Cheeeck&lt;/a&gt; for a complete technical analysis in 10 seconds. Whether AI-generated or hand-coded, every site deserves a solid technical foundation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you noticed other patterns in AI-generated websites? What technical details do you think these tools should focus on improving?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Why your website isn’t ready for production</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Wed, 30 Jul 2025 16:10:08 +0000</pubDate>
      <link>https://dev.to/kaplich/why-your-website-isnt-ready-for-production-5fc8</link>
      <guid>https://dev.to/kaplich/why-your-website-isnt-ready-for-production-5fc8</guid>
      <description>&lt;p&gt;You’ve poured hours into coding your website, tweaking the design, and testing the features. It looks ready to launch, but hold up. There’s a good chance it’s hiding some sneaky issues that could trip up users, tank your SEO, or worse, leave you vulnerable. Launching a site with these problems is like shipping a shiny new app with bugs you didn’t catch. &lt;/p&gt;

&lt;p&gt;Let’s talk about why your website might not be production-ready and how you can fix it in a snap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The risk of launching with hidden issues
&lt;/h2&gt;

&lt;p&gt;As developers, we know the thrill of pushing a site live. But launching without a thorough check can lead to headaches. Broken links, sluggish load times, or missing security features can frustrate users, hurt your search rankings, or even expose sensitive data. The worst part? Many of these issues are invisible until someone (or something, like a search engine crawler) stumbles across them.&lt;/p&gt;

&lt;p&gt;The good news is, with a quick scan and some targeted fixes, you can launch with confidence and avoid those post-launch fire drills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common production pitfalls to watch out for
&lt;/h2&gt;

&lt;p&gt;Here are some of the most common issues that can sneak into your website, even when you think it’s good to go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Missing SSL Certificate: If your site isn’t using HTTPS, browsers will flag it as “Not Secure,” scaring off users and hurting your SEO. Check your SSL setup with tools like &lt;code&gt;openssl s_client -connect yoursite.com:443&lt;/code&gt; to confirm it’s active and properly configured.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slow Loading Times: If your site takes more than a couple of seconds to load, users will bounce. Large images, unoptimized JavaScript, or server issues are often the culprits. Use browser dev tools to check your Time to First Byte (TTFB) and optimize assets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Custom 404 Page: A default 404 page is a missed opportunity to keep users engaged. A custom 404 with your branding and a link back to your homepage can turn a dead end into a better experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessibility Oversights: Missing alt text for images or poor keyboard navigation can exclude users and violate accessibility standards. For example, ensure all images have descriptive alt attributes like &lt;code&gt;&amp;lt;img src="logo.png" alt="Company logo"&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security Vulnerabilities: Outdated dependencies or misconfigured headers can leave your site open to attacks. Check for issues like missing Content Security Policy (CSP) headers or outdated libraries using tools like npm audit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues are easy to miss during development but can have a big impact once your site is live. Catching them early saves you time and keeps your users happy.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to fix issues fast
&lt;/h2&gt;

&lt;p&gt;I’ve launched tons of websites. Some for my own products, others for clients, and let me tell you, I’ve made my fair share of mistakes. Even with detailed checklists, I’d miss things like broken links or accessibility issues. The final straw came when I shared a project on LinkedIn, only to see a blank OpenGraph preview staring back at me. lol&lt;/p&gt;

&lt;p&gt;That was my “enough is enough” moment. So, I built &lt;a href="https://www.cheeeck.com/" rel="noopener noreferrer"&gt;Cheeeck&lt;/a&gt; to help devs and entrepreneurs catch these issues before they become embarrassing problems.&lt;/p&gt;

&lt;p&gt;Cheeeck scans your website in about 10 seconds, checking over 20 things like SEO, performance, accessibility, and security. All you do is paste your URL, and it gives you a clear report with prioritized fixes and straightforward instructions. For example, if it spots missing alt text it’ll tell you which images need work.&lt;/p&gt;

&lt;p&gt;It’s like having a super-smart friend who catches the stuff you miss, minus the long coffee chats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up: Launch with Confidence
&lt;/h2&gt;

&lt;p&gt;Launching a website is exciting, but it’s worth taking a moment to make sure it’s truly ready for the spotlight. A quick pre-launch check can catch those hidden issues that could trip you up later—whether it’s a missing SSL certificate, a sluggish page, or an accessibility oversight.&lt;/p&gt;

&lt;p&gt;By addressing these problems before your users (or search engines) find them, you’ll set your site up for success.&lt;/p&gt;

&lt;p&gt;Your users (and your future self) will thank you for it!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>CI, workflows and frustrated interviews</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Fri, 06 May 2022 15:38:48 +0000</pubDate>
      <link>https://dev.to/kaplich/ci-workflows-and-frustrated-interviews-451a</link>
      <guid>https://dev.to/kaplich/ci-workflows-and-frustrated-interviews-451a</guid>
      <description>&lt;p&gt;While I’m job hunting, I’ll post each day on my &lt;a href="https://www.linkedin.com/in/skaplichniy/" rel="noopener noreferrer"&gt;LinkedIn page&lt;/a&gt; what I did the day before and what challenges I overcame. And here — once a week — I am going to post a summary of these statuses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni8xaf2i2fj5fs5kb29u.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni8xaf2i2fj5fs5kb29u.jpeg" alt="workplace" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last &lt;strong&gt;Friday&lt;/strong&gt;, I devoted a lot of time to studying algorithms (I am still struggling with that). And I had a wonderful interview with the tech company. The recruiter said that they are more than happy to have an entry-level developer in their team, and that I could fit well in their team. So I hope that the second interview will be soon.&lt;/p&gt;

&lt;p&gt;And at the end of the day, I got an email from my dream company. I had an interview with them and then I got the test assignment. After three weeks of waiting for a response and following up, they informed me that they would not be moving forward with me. Oh, that was brutal. You see, I spent two days (and two nights!) finishing that test order, and I was really proud of myself for getting it done. But still, I am not good enough for them. That’s tough. And my Friday night was ruined by pretty frustrated thoughts. But still, I know I can achieve more. And I’ll try again, over and over, and eventually I’ll find something for me. I should just keep going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday&lt;/strong&gt; was a day full of practical knowledge. I found out what Continuous Integration is and how to use DevOps tools when working on and publishing my projects. So I learned how to use GitHub Actions and how to create my own workflows to speed up the production process.&lt;/p&gt;

&lt;p&gt;Oh, and I got the confirmation for the second interview at the company I had the call with last week. Hope it will work out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday&lt;/strong&gt; I spent all day again trying to understand how Github Actions work and how to create workflows that automate tests and doployments. Phew! It wasn’t easy and I’m still struggling with a few bugs, but I hope to overcome them today. I asked for help in chat with other students and have received some hits.&lt;/p&gt;

&lt;p&gt;Well, on &lt;strong&gt;Wednesday&lt;/strong&gt; I had a great experience with looking for answers. Sometimes you just don’t know what to do. You do everything the way it says in the instructions, and it goes well, but then an error comes along. You try this and that, but the error persists. You ask a friend, another, and another, but all the options are wrong. Then you look at the log file, but still no clue. Then you google each step, trying to find something. And finally, someone – just an unknown from the discussion on the Github page – shares the solution that worked for him. And it works for you too!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic0ijxvvp2y7o5hgjtsv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic0ijxvvp2y7o5hgjtsv.jpeg" alt="Github helps" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love things like this. And I’m really glad that there are such strangers who like to share their experiences. I don’t know you, mannyanebi, but thank you so much!&lt;/p&gt;

&lt;p&gt;So I finished my actions on Github and now when I push something to my project it gets tested, deployed and I get a message that everything is ok. Automatically!&lt;/p&gt;

&lt;p&gt;As for the interviews (I’d two appointments), it was terrible. The first was the second interview with the company’s CTO. He started right off by saying that I don’t have enough experience and that they don’t use Python, only Java, so he doesn’t know why the recruiter said to me that I’m right for the job. Oh boy. And the second one – an interview with the recruiter who was recommended to me by another recruiter – just didn’t call me and disappeared.&lt;/p&gt;

&lt;p&gt;I know this is the part of the journey and everything will be fine, but sometimes it’s really hard. Regardless, I’ve the technical interview today and I hope it goes well.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Thursday&lt;/strong&gt; I had a great technical interview. It was the second interview with this company and lasted more than 1.5 hours. I talked to three engineers about my experience and code. There were many questions about time and project management, learning new things, concept discussions, and more. Then I showed several projects I had worked on. After that, we talked about their technologies and workflows. It went smoothly and I found the atmosphere in the team and the tasks they work on very interesting.&lt;/p&gt;

&lt;p&gt;During this interview, I felt very confident and was sure that I would get another round. So I really expected to receive the email without keywords like “unfortunately” and “thank you for your interest”.&lt;/p&gt;

&lt;p&gt;But no. I was rejected.&lt;/p&gt;

&lt;p&gt;I asked for feedback, as I always do, but I’m not sure I’ll get a response.&lt;/p&gt;

&lt;p&gt;Maybe it’s a mistake? Maybe I wasn’t good enough? Maybe they didn’t understand my accent? Maybe my projects were too simple? Maybe I asked too many questions?&lt;/p&gt;

&lt;p&gt;I don’t know.&lt;/p&gt;

&lt;p&gt;For sure I’ll keep on moving. But right now I’m pretty frustrated.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>job</category>
      <category>career</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Interviews, docker compose and algorithms</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Fri, 29 Apr 2022 19:56:28 +0000</pubDate>
      <link>https://dev.to/kaplich/interviews-docker-compose-and-algorithms-j2n</link>
      <guid>https://dev.to/kaplich/interviews-docker-compose-and-algorithms-j2n</guid>
      <description>&lt;p&gt;While I’m job hunting, I’ll post each day on my &lt;a href="https://www.linkedin.com/in/skaplichniy/" rel="noopener noreferrer"&gt;LinkedIn page&lt;/a&gt; what I did the day before and what challenges I overcame. Here and on my &lt;a href="https://skaplichniy.com/blog/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; — once a week — I am going to post a summary of these statuses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wzwvdehxwustpk7c9oh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wzwvdehxwustpk7c9oh.jpeg" alt="Workplace" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last &lt;strong&gt;Friday&lt;/strong&gt; was spent mostly on daily tasks and planning. I updated my resume (for the 5th or 6th time, I think), got another badge on LinkedIn (CSS this time), and created a new cover letter template for companies that require one.&lt;/p&gt;

&lt;p&gt;I also know that my weak point is algorithms and data structures, so I watched a few videos and found trusted sources to understand this topic and start grinding Leetcode. I hope to do much better this time.&lt;/p&gt;

&lt;p&gt;And I haven’t forgotten my coding exercises either. Right now I’m in the middle of the task where I have to update and check settings and package my API project in Docker. I don’t have much time left, so I really want to finish it as soon as possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday&lt;/strong&gt; was a real Docker Day! I sat down at the computer at 8 am and did not finish until 9 pm. Only took small breaks to talk to &lt;a href="https://www.linkedin.com/in/ACoAADlOWxUBOK20o2raBopBrM_DuGG6ype5GJ8" rel="noopener noreferrer"&gt;Andrew Clarkson&lt;/a&gt; (hey buddy 👋🏻), go to the post office and eat something. But all the other time — Docker.&lt;/p&gt;

&lt;p&gt;I had the task on my Bootcamp and was supposed to finish it yesterday. But a lot of things did not work out. First I misplaced directories in my project, then there were weird issues with DockerHub. But finally, I managed to fix all the bugs and get my project up and running. And I was so extremely proud of myself!&lt;/p&gt;

&lt;p&gt;As for &lt;strong&gt;Tuesday&lt;/strong&gt;, it was a pretty productive day! First, I fixed some bugs in my Docker project, and now it’s working smoothly. Then I finished two test assignments, and in the evening I received another one from another company that wants to hire young software engineers. I also have three interviews with recruiters scheduled for this week and next, and I hope things go well.&lt;/p&gt;

&lt;p&gt;Oh, and I have not forgotten to apply for more jobs and make contacts with interesting people.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Wednesday&lt;/strong&gt; I finally got the reviewer’s approval for my Docker project (yes, yes, yes!). I’ve done it a few days before the deadline, so now I have some free time to study more. So I decided to work with my knowledge of algorithms and data structures. Oh, man, this is really hard. But I hope that one day I will understand the basics and manage to solve Leetcode problems. By the way, while looking for a simple explanation, I found this helpful YouTube video. If you are struggling with algos, check it out: &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/oz9cEqFynHU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Also I had an interview with the recruiter of a great company. She promised to get back to me in a few days and let me know the next steps. Will see!&lt;/p&gt;

&lt;p&gt;As usual on &lt;strong&gt;Thursdays&lt;/strong&gt;, I had a phone call with my mentor &lt;a href="https://www.linkedin.com/in/ACoAACZl1lgBfvhYb1L2cEXtj9xu5Ndgcz6FLEk" rel="noopener noreferrer"&gt;Daniil Volynkin&lt;/a&gt; and we talked about my job search strategy, some of his projects, and the necessity of studying algorithms and data structures.&lt;/p&gt;

&lt;p&gt;So I spent the next few hours studying and coding.&lt;/p&gt;

&lt;p&gt;Then I had several interviews. One of them went smoothly, and I really enjoyed the process. I like seeing my progress, because with each new interview I feel more confident. It’s especially nice when the interviewer is friendly, appreciates your time and asks you smart questions. I wish I had more cool interviews like that. And I hope that I will be lucky enough to get this job.&lt;/p&gt;

&lt;p&gt;And some stats:&lt;br&gt;
&lt;strong&gt;Applications submitted&lt;/strong&gt;: 15&lt;br&gt;
&lt;strong&gt;EasyApplies&lt;/strong&gt;: 34&lt;br&gt;
&lt;strong&gt;Interviews&lt;/strong&gt;: 4&lt;/p&gt;

&lt;p&gt;I hope me and my new job will meet soon.&lt;/p&gt;

&lt;p&gt;P.S. If you like the idea — join in and use the hashtags &lt;strong&gt;#dailystandup&lt;/strong&gt; and &lt;strong&gt;#todayilearned&lt;/strong&gt; on LinkedIn. Let's support each other, newbie coders!&lt;/p&gt;

</description>
      <category>job</category>
      <category>career</category>
      <category>motivation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Daily standups while seeking for a job</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Fri, 22 Apr 2022 20:40:02 +0000</pubDate>
      <link>https://dev.to/kaplich/daily-standups-while-seeking-for-a-job-4gck</link>
      <guid>https://dev.to/kaplich/daily-standups-while-seeking-for-a-job-4gck</guid>
      <description>&lt;p&gt;Hey! Ok, I am a little tired of looking for work opportunities every day and just being with myself. So I decided to do daily stand-up meetings on my &lt;a href="https://www.linkedin.com/in/skaplichniy/" rel="noopener noreferrer"&gt;LinkedIn page&lt;/a&gt; before I find a real team. I’ll post what I did the day before and what challenges I overcame each day. And here and on &lt;a href="https://skaplichniy.com/blog/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt; — once a week — I am going to post a summary of these statuses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh360s2j27rw4t6jfs7n.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh360s2j27rw4t6jfs7n.jpeg" alt="My workplace" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Monday&lt;/strong&gt; I spent the whole day working with a remote server. One of the tasks from my bootcamp is to create a social network and publish it. So first I managed to transfer a folder from the local to the remote server (oh, that magic scp tool!). Then I dove into Gunicorn and installed Nginx. After that, I figured out how to apply SSL certificate from the terminal window. And after that, I tried to transfer my data into PostgreSQL, but something went wrong.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Tuesday&lt;/strong&gt; I tried to transfer my data in PostgreSQL from local to remote server, but got some errors again. After some googling and stackoverflowing I managed to find lost libraries, installed them and everything worked like a charm. Here is the &lt;a href="https://funkysocial.ddns.net/" rel="noopener noreferrer"&gt;result&lt;/a&gt; (I know it’s in Cyrillic, I’ll translate it to English soon).&lt;/p&gt;

&lt;p&gt;After that, I learned how to create backup files (you never know when you’ll need them!). And I signed up for UptimeRobot and now I can see when my website is down. I love this tool! Then I started my journey with Docker. I never used this tool before, so now it’s like a new incredible world for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday&lt;/strong&gt; I spent all my time learning more about Docker. I looked into images and containers, created a few, added another one with Nginx in it, and figured out how to log everything to monitor your work. After that, I signed up for DockerHub and now all my containers live in the cloud. Wow!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday&lt;/strong&gt; started as always — I had a call with my mentor Daniil Volynkin who helped me a lot by explaining how exactly Docker works and what’s under the hood of this technology.&lt;/p&gt;

&lt;p&gt;After that, I started to accomplish my home task from the Bootcamp. I need to create a new project and run it in Docker. Hope to finish it next week.&lt;/p&gt;

&lt;p&gt;And I dedicated an hour to writing follow-up emails to recruiters who’ve disappeared or haven’t replied for a long time. And then I passed a few tests to get LinkedIn badges. So now I’m a confirmed owner of HTML and Django skills 🙂&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some stats:&lt;/strong&gt;&lt;br&gt;
Applications submitted: 20&lt;br&gt;
EasyApplies: 31&lt;br&gt;
Test assignments received: 1&lt;br&gt;
Rejections: 3&lt;/p&gt;

&lt;p&gt;Oh, and while doing all these, I found a Chrome extension called &lt;a href="https://chrome.google.com/webstore/detail/autofill/nlmmgnhgdeffjkdckmikfpnddkbbfkkk/related?hl=en" rel="noopener noreferrer"&gt;Autofill&lt;/a&gt;. It has a weird UI, but it really helps to save time when applying for jobs. So if you fill out the information about yourself every day, you should definitely try this extension.&lt;/p&gt;

&lt;p&gt;Also, I found a really inspiring &lt;a href="https://jvns.ca/blog/2022/03/08/tiny-programs/" rel="noopener noreferrer"&gt;article by Julia Evans&lt;/a&gt; about small projects she built in her spare time. If you are looking for another idea for your pet project, this article is a good place to start.&lt;/p&gt;

&lt;p&gt;I hope me and my new job will meet soon.&lt;/p&gt;

&lt;p&gt;P.S. If you like the idea — join in and use the hashtags &lt;strong&gt;#dailystandup&lt;/strong&gt; and &lt;strong&gt;#todayilearned&lt;/strong&gt; on LinkedIn. Let's support each other, newbie coders!&lt;/p&gt;

</description>
      <category>python</category>
      <category>job</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>5 awesome projects that inspire me to learn to code</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Thu, 03 Mar 2022 20:24:26 +0000</pubDate>
      <link>https://dev.to/kaplich/5-awesome-projects-that-inspire-me-to-learn-to-code-j81</link>
      <guid>https://dev.to/kaplich/5-awesome-projects-that-inspire-me-to-learn-to-code-j81</guid>
      <description>&lt;p&gt;People have different reasons to learn programming. Some are really interested in technologies, some want to have a well-paying job, some love to &lt;em&gt;build&lt;/em&gt; new things. And for sure you can combine all these reasons.&lt;/p&gt;

&lt;p&gt;And there's an interesting group of developers who use their knowledge to make fun or artistic projects. So here are 5 of my favorite projects that really inspire me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pudding
&lt;/h2&gt;

&lt;p&gt;These guys are my favorites! They &lt;a href="https://pudding.cool/" rel="noopener noreferrer"&gt;create&lt;/a&gt; visual essays with data. And all of them are awesome! For example, &lt;a href="https://pudding.cool/projects/vocabulary/" rel="noopener noreferrer"&gt;Rappers, ranked by the number of unique words used in their lyrics&lt;/a&gt;, &lt;a href="https://pudding.cool/2018/04/birthday-paradox/" rel="noopener noreferrer"&gt;an interactive experiment about the birthday paradox&lt;/a&gt; and &lt;a href="https://pudding.cool/2018/06/gayborhoods/" rel="noopener noreferrer"&gt;how 'gayborhoods' in 15 major American cities are divided by gender&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40g7c5b3njgxqul3xome.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40g7c5b3njgxqul3xome.png" alt="Pudding" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't stop being inspired!&lt;/p&gt;

&lt;h2&gt;
  
  
  Orville the Crow
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/stephaniecodes" rel="noopener noreferrer"&gt;Stephanie Nemeth&lt;/a&gt; made a fun project with the help of the crow. Yes, real crow! She set up the Raspberry Pi to run JavaScript and &lt;a href="https://twitter.com/orvillethecrow" rel="noopener noreferrer"&gt;share&lt;/a&gt; live photos of a hooded crow that really loves peanuts.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1285566810209824773-59" src="https://platform.twitter.com/embed/Tweet.html?id=1285566810209824773"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1285566810209824773-59');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1285566810209824773&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I think the crow really appreciates Stephanie's programming skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Telegram bot as a doorbell
&lt;/h2&gt;

&lt;p&gt;My friend &lt;a href="https://arturpaikin.com/" rel="noopener noreferrer"&gt;Artur Paikin&lt;/a&gt; made a really cool project using JavaScript and &lt;a href="http://esp8266.net/" rel="noopener noreferrer"&gt;ESP8266&lt;/a&gt;. When Artur lived in New York, he didn't have a doorbell. So he built a Telegram bot that sends a message when a delivery man push the special (self-made) button downstairs.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/CvorlYi4L_c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I can't stop thinking about how fun it was to build this thing!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flemish Scrollers
&lt;/h2&gt;

&lt;p&gt;Belgian developer Dries Depoorter has developed a Python project that analyzes livestreams of the flemish government meetings. When a livestream starts the software scans for cell phones, identifies a distracted politician, and sends &lt;a href="https://twitter.com/FlemishScroller" rel="noopener noreferrer"&gt;blaming tweets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uho9vrec4gsu7gptwcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uho9vrec4gsu7gptwcp.png" alt="Flemish Scrollers" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't forget to check out other &lt;a href="https://driesdepoorter.be/" rel="noopener noreferrer"&gt;projects by Dries Depoorter&lt;/a&gt;. You'll be inspired, I promise!&lt;/p&gt;

&lt;h2&gt;
  
  
  All the lonely people
&lt;/h2&gt;

&lt;p&gt;Ilia Blinderman – as I know he's part of The Pudding team – analyzed data from Craiglist's Missing Persons section and created a &lt;a href="http://iliablinderman.com/connections/" rel="noopener noreferrer"&gt;visual map of missing person reports&lt;/a&gt;. The idea and the visualization of the data are really great.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbqg9ce0l89zdabexmnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbqg9ce0l89zdabexmnh.png" alt="All the lonely people" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the end of the &lt;a href="http://iliablinderman.com/connections/" rel="noopener noreferrer"&gt;article&lt;/a&gt; Ilia shares the methodology of creating this project.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post is from my &lt;a href="http://skaplichniy.com/blog/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;. Right now I'm looking for a job as a Software Engineer. So if you want to work with me, don't hesitate to message me on &lt;a href="https://www.linkedin.com/in/skaplichniy/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>petprojects</category>
      <category>inspiration</category>
      <category>python</category>
      <category>javascript</category>
    </item>
    <item>
      <title>houry: A Simple Python App That Beeps Every Hour</title>
      <dc:creator>Sergey</dc:creator>
      <pubDate>Sat, 08 Jan 2022 00:10:06 +0000</pubDate>
      <link>https://dev.to/kaplich/houry-a-simple-python-app-that-beeps-every-hour-2pb</link>
      <guid>https://dev.to/kaplich/houry-a-simple-python-app-that-beeps-every-hour-2pb</guid>
      <description>&lt;p&gt;A few years ago, in the ‘pre-Apple-Watch’ era, I had a &lt;a href="https://www.wikiwand.com/en/Casio_F-91W" rel="noopener noreferrer"&gt;Casio F-91W&lt;/a&gt;. It was a very cheap watch, but it had a nice feature. There was a special setting that allowed it to &lt;em&gt;beep every hour&lt;/em&gt;. And that was amazing! It was like a special notification for me to notice the moment. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every time I heard a beep, I wondered if the thing I was doing was distracting me or helping me? In other words, that beep was very useful to me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But then I bought the Apple Watch and the magic disappeared. I tried to find an app on my phone or laptop that would beep every hour, but could not.&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;let's bring the magic back!&lt;/strong&gt; I am going to use Python to create a little app for my computer with OS X that will make a sound every hour. Let’s go!&lt;/p&gt;

&lt;p&gt;First, we need to teach our app to understand the time and play a sound. Google says these libraries should help with that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;playsound&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;playsound&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let’s find the sound. Go to &lt;a href="https://www.soundjay.com/" rel="noopener noreferrer"&gt;Soundjay&lt;/a&gt; and choose something you like. I chose this &lt;a href="https://www.soundjay.com/buttons/sounds/beep-07a.mp3" rel="noopener noreferrer"&gt;beep-sound&lt;/a&gt; and saved it to my project folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;beep&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;playsound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/beep.wav&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let’s play it every hour at 00 minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:00&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;do&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;beep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And as the documentation says, I should add this to make a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_pending&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s try it. Everything works fine.&lt;/p&gt;

&lt;p&gt;Now I want to make it a standalone app for my Mac. But I don’t like it to show up in the dock or menu bar. I just want it to run in the background, so here are some magic words for the setup.py file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;

&lt;span class="n"&gt;APP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;houry.py&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;DATA_FILES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;OPTIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;argv_emulation&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;iconfile&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;icon.icns&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;plist&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CFBundleShortVersionString&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0.2.0&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;LSUIElement&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;APP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data_files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;beep.wav&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;py2app&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;setup_requires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;py2app&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, I created an icon for this app. Yes, you will only see it when you run this app, but I still wanted it to look nice. So I just took an emoji from &lt;a href="https://emojipedia.org/" rel="noopener noreferrer"&gt;Emojipedia&lt;/a&gt;, converted it via &lt;a href="https://anyconv.com/png-to-icns-converter/" rel="noopener noreferrer"&gt;Anyconv&lt;/a&gt;, and saved it in the main folder of my project.&lt;/p&gt;

&lt;p&gt;And the last step. To create an app, we should type this in the Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;py2app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. Now you can find your app in the ‘dist’ folder. Do not forget to move it to the ‘Application’ folder and &lt;a href="https://support.apple.com/en-us/HT201476" rel="noopener noreferrer"&gt;add it to Login Options&lt;/a&gt; on your Mac.&lt;/p&gt;

&lt;p&gt;Happy houry!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/skaplichniy/houry" rel="noopener noreferrer"&gt;Project on GitHub →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>desktop</category>
      <category>app</category>
    </item>
  </channel>
</rss>
