<?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" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Saadnoor's Blog]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://saadnoor.com/</link><image><url>https://saadnoor.com/favicon.png</url><title>Saadnoor&apos;s Blog</title><link>https://saadnoor.com/</link></image><generator>Ghost 5.59</generator><lastBuildDate>Sat, 02 May 2026 12:09:30 GMT</lastBuildDate><atom:link href="https://saadnoor.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Sony vs Lumix Lens Weight Comparison (2025): Why I Didn’t Switch Systems]]></title><description><![CDATA[<p>I was only one call away from selling all my Sony gear and moving to Lumix.</p>
<p>On paper, it made sense. Open gate recording, aggressive pricing, and in 2025 everyone seems to be saying the same thing: <em>Lumix lenses are better now</em>. The idea that you don&#x2019;t really</p>]]></description><link>https://saadnoor.com/sony-vs-lumix-lenses-side-by-side/</link><guid isPermaLink="false">693bd023827aad3503b8ecb5</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Fri, 12 Dec 2025 08:46:39 GMT</pubDate><media:content url="https://saadnoor.com/content/images/16Hqg2BR6zebAYSBO6JIBGxtnJqpcmzrI.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/16Hqg2BR6zebAYSBO6JIBGxtnJqpcmzrI.jpg" alt="Sony vs Lumix Lens Weight Comparison (2025): Why I Didn&#x2019;t Switch Systems"><p>I was only one call away from selling all my Sony gear and moving to Lumix.</p>
<p>On paper, it made sense. Open gate recording, aggressive pricing, and in 2025 everyone seems to be saying the same thing: <em>Lumix lenses are better now</em>. The idea that you don&#x2019;t really need native Lumix glass anymore gets repeated so often that it starts to feel like fact.</p>
<p>But here&#x2019;s the problem. I&#x2019;m already heavily invested in Sony lenses. And I travel a lot. When you live out of a backpack, every gram matters more than spec sheets and YouTube thumbnails.</p>
<p>Instead of trusting reviews or jumping because the internet is excited, I decided to slow down and do something boring. I compared lens weights. Side by side. Category by category. Zooms, primes, travel lenses, the stuff I actually carry.</p>
<p>Not to prove one system is &#x201C;better&#x201D;, but to answer a very selfish question: <em>what would this switch really cost me in weight</em>?</p>
<p>Below is that comparison.</p>
<h2 id="full-frame-lens-weight-comparison">Full-Frame Lens Weight Comparison</h2>
<p>This comparison focuses purely on <strong>weight</strong>.<br>All lenses listed are <strong>full-frame</strong>, and when multiple versions exist, the <strong>latest model</strong> is used.</p>
<h2 id="ultra-wide-zoom-lenses">Ultra-Wide Zoom Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 12&#x2013;24mm f/2.8 GM</td><td>847g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 12&#x2013;24mm f/4 G</td><td>565g</td><td>S 14&#x2013;28mm F4&#x2013;5.6 MACRO</td><td>345g</td></tr></tbody></table>
<hr>
<h2 id="wide-angle-zoom-lenses">Wide-Angle Zoom Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 16&#x2013;35mm f/2.8 GM II</td><td>547g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 16&#x2013;35mm f/2.8 GM</td><td>680g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE PZ 16&#x2013;35mm f/4 G</td><td>353g</td><td>S PRO 16&#x2013;35mm F4</td><td>500g</td></tr></tbody></table>
<hr>
<h2 id="standard-zoom-lenses">Standard Zoom Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 20&#x2013;70mm f/4 G</td><td>488g</td><td>S 20&#x2013;60mm F3.5&#x2013;5.6</td><td>350g</td></tr><tr><td>FE 24&#x2013;50mm f/2.8 G</td><td>440g</td><td>S 24&#x2013;60mm F2.8</td><td>544g</td></tr><tr><td>FE 24&#x2013;70mm f/2.8 GM II</td><td>695g</td><td>S PRO 24&#x2013;70mm F2.8</td><td>935g</td></tr><tr><td>FE 24&#x2013;70mm f/2.8 GM</td><td>886g</td><td>S PRO 24&#x2013;70mm F2.8</td><td>935g</td></tr><tr><td>FE 24&#x2013;105mm f/4 G OSS</td><td>663g</td><td>S 24&#x2013;105mm F4 MACRO O.I.S.</td><td>680g</td></tr><tr><td>FE 28&#x2013;60mm f/4&#x2013;5.6</td><td>167g</td><td>S 20&#x2013;60mm F3.5&#x2013;5.6</td><td>350g</td></tr><tr><td>FE 28&#x2013;70mm f/3.5&#x2013;5.6 OSS</td><td>295g</td><td>S 20&#x2013;60mm F3.5&#x2013;5.6</td><td>350g</td></tr></tbody></table>
<hr>
<h2 id="telephoto-zoom-lenses">Telephoto Zoom Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 70&#x2013;200mm f/2.8 GM OSS II</td><td>1045g</td><td>S PRO 70&#x2013;200mm F2.8 O.I.S.</td><td>1570g</td></tr><tr><td>FE 70&#x2013;200mm f/4 Macro G OSS II</td><td>794g</td><td>S PRO 70&#x2013;200mm F4 O.I.S.</td><td>985g</td></tr><tr><td>FE 70&#x2013;300mm f/4.5&#x2013;5.6 G OSS</td><td>854g</td><td>S 70&#x2013;300mm F4.5&#x2013;5.6 MACRO O.I.S.</td><td>790g</td></tr></tbody></table>
<hr>
<h2 id="all-in-one-travel-zooms">All-in-One Travel Zooms</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>No direct equivalent</td><td>&#x2014;</td><td>S 28&#x2013;200mm F4&#x2013;7.1 MACRO O.I.S.</td><td>413g</td></tr></tbody></table>
<hr>
<h2 id="ultra-telephoto-zoom-lenses">Ultra-Telephoto Zoom Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 100&#x2013;400mm f/4.5&#x2013;5.6 GM OSS</td><td>1395g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 200&#x2013;600mm f/5.6&#x2013;6.3 G OSS</td><td>2115g</td><td>S 100&#x2013;500mm F5&#x2013;7.1 O.I.S.</td><td>1285 gm </td></tr></tbody></table>
<hr>
<h2 id="ultra-wide-prime-lenses">Ultra-Wide Prime Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 14mm f/1.8 GM</td><td>460g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 20mm f/1.8 G</td><td>373g</td><td>S 18mm F1.8</td><td>340g</td></tr></tbody></table>
<hr>
<h2 id="wide-angle-prime-lenses">Wide-Angle Prime Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 24mm f/1.4 GM</td><td>445g</td><td>S 24mm F1.8</td><td>310g</td></tr></tbody></table>
<hr>
<h2 id="standard-prime-lenses">Standard Prime Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 35mm f/1.4 GM</td><td>524g</td><td>S 35mm F1.8</td><td>295g</td></tr><tr><td>FE 40mm f/2.5 G</td><td>173g</td><td>S 35mm F1.8</td><td>295g</td></tr><tr><td>FE 50mm f/1.4 GM</td><td>516g</td><td>S PRO 50mm F1.4</td><td>955g</td></tr><tr><td>FE 50mm f/1.8</td><td>186g</td><td>S 50mm F1.8</td><td>300g</td></tr><tr><td>FE 50mm f/2.5 G</td><td>174g</td><td>S 50mm F1.8</td><td>300g</td></tr><tr><td>FE 55mm f/1.8 ZA</td><td>281g</td><td>S 50mm F1.8</td><td>300g</td></tr></tbody></table>
<hr>
<h2 id="telephoto-prime-lenses">Telephoto Prime Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 85mm f/1.4 GM II</td><td>642g</td><td>S 85mm F1.8</td><td>355g</td></tr><tr><td>FE 85mm f/1.4 GM</td><td>820g</td><td>S 85mm F1.8</td><td>355g</td></tr></tbody></table>
<hr>
<h2 id="macro-lenses">Macro Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 50mm f/2.8 Macro</td><td>~235g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 90mm f/2.8 Macro G OSS</td><td>602g</td><td>S 100mm F2.8 MACRO</td><td>298g</td></tr><tr><td>FE 100mm f/2.8 STF GM OSS</td><td>700g</td><td>S 100mm F2.8 MACRO</td><td>298g</td></tr></tbody></table>
<hr>
<h2 id="super-telephoto-prime-lenses">Super-Telephoto Prime Lenses</h2>
<table><thead><tr><th>Sony Lens</th><th>Weight</th><th>Lumix Lens</th><th>Weight</th></tr></thead><tbody><tr><td>FE 300mm f/2.8 GM OSS</td><td>1470g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 400mm f/2.8 GM OSS</td><td>2895g</td><td>No direct equivalent</td><td>&#x2014;</td></tr><tr><td>FE 600mm f/4 GM OSS</td><td>3040g</td><td>No direct equivalent</td><td>&#x2014;</td></tr></tbody></table>
<h2 id></h2>
<h2 id="travel-kit-weight-examples">Travel Kit Weight Examples</h2>
<h3 id="%E2%80%9Choly-trinity%E2%80%9D-zoom-setup">&#x201C;Holy Trinity&#x201D; Zoom Setup</h3>
<ul><li><strong>Sony</strong><br>16&#x2013;35mm f/2.8 GM II + 24&#x2013;70mm f/2.8 GM II + 70&#x2013;200mm f/2.8 GM II<br><strong>Total:</strong> 2287g</li><li><strong>Lumix</strong><br>16&#x2013;35mm f/4 + 24&#x2013;70mm f/2.8 + 70&#x2013;200mm f/2.8<br><strong>Total:</strong> 3005g</li></ul>
<p><strong>Sony is 718g lighter (24%) and has faster lens on wide end. </strong></p>
<p>After doing this research, I decided to stay with Sony.</p>
<p>Not because Lumix is bad. It&#x2019;s not. In fact, in some areas Lumix is doing genuinely impressive work, especially with compact primes and value-focused zooms. The myth that Lumix lenses are &#x201C;not good enough&#x201D; in 2025 is exactly that, a myth.</p>
<p>But for <em>my</em> use case, travel-heavy, handheld, long days on my feet, Sony still makes more sense. The gap in key zooms is real. The weight savings compound. A few hundred grams here and there doesn&#x2019;t sound dramatic until you add them up and carry them across airports, cities, and countries.</p>
<p>This comparison didn&#x2019;t make me love Sony more. It just reminded me why I chose it in the first place.</p>
<p>Sometimes the smartest decision isn&#x2019;t switching systems. It&#x2019;s understanding the one you already own, and why it still works for you.</p>
<p></p>]]></content:encoded></item><item><title><![CDATA[How to Get a Job in Germany from Bangladesh (The Realistic Way in 2025)]]></title><description><![CDATA[<p>If you&#x2019;re living in Bangladesh and dreaming of a career in Germany, you&#x2019;re not alone. I searched &#x201C;how to get a job in Germany from Bangladesh&#x201D; 5 years ago &#x2014; and found nothing useful. Today, even though there&#x2019;s more information, a lot</p>]]></description><link>https://saadnoor.com/how-to-get-a-job-in-germany-from-bangladesh-the-realistic-way-in-2025/</link><guid isPermaLink="false">682055720a5b60f7a110398b</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Sun, 11 May 2025 07:48:59 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1b8DqoR4SJV0ypsnLjO4AtzItGAokhtQY.png" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1b8DqoR4SJV0ypsnLjO4AtzItGAokhtQY.png" alt="How to Get a Job in Germany from Bangladesh (The Realistic Way in 2025)"><p>If you&#x2019;re living in Bangladesh and dreaming of a career in Germany, you&#x2019;re not alone. I searched &#x201C;how to get a job in Germany from Bangladesh&#x201D; 5 years ago &#x2014; and found nothing useful. Today, even though there&#x2019;s more information, a lot of it is outdated, vague, or flat-out wrong.</p>
<p>So, as someone who made it here and works as a senior software engineer, I want to break down <strong>realistic pathways</strong>, their pros and cons, and then focus on the <strong>most effective one</strong>: applying directly from Bangladesh for a <strong>Blue Card</strong> job.</p>
<hr>
<h3 id="path-1-master%E2%80%99s-in-germany">Path #1: Master&#x2019;s in Germany</h3>
<p>This is still the most common route for young professionals.</p>
<h4 id="pros">Pros:</h4>
<ul><li>Easier visa process with a university admission letter</li><li>18-month job-seeking visa after graduation</li><li>Work part-time (up to 20 hrs/week) while studying</li><li>Easier cultural transition</li></ul>
<h4 id="cons"> Cons:</h4>
<ul><li><strong>Time-consuming</strong>: usually 2&#x2013;2.5 years</li><li><strong>Financial burden</strong>: ~11,000 EUR/year in blocked account (~13&#x2013;14 lakh BDT)</li><li>Limited income as a student</li><li>No job guarantee after graduation</li></ul>
<blockquote>Best suited for recent graduates who can afford the time and cost.</blockquote>
<hr>
<h3 id="path-2-opportunity-card-chancenkarte">Path #2: Opportunity Card (Chancenkarte)</h3>
<p>A new visa launched by Germany allowing skilled people to <strong>enter without a job offer</strong> and search while staying in Germany.</p>
<h4 id="pros-1">Pros:</h4>
<ul><li>Come without a job; search while living in Germany</li><li>Based on a point system (age, skills, education, etc.)</li><li>Allowed to work part-time while job hunting</li></ul>
<h4 id="cons-1">Cons:</h4>
<ul><li>You still need a <strong>blocked account (~17 lakh BDT)</strong></li><li>Only 1 year to find a job</li><li>Competitive if you lack German fluency</li><li>High cost without guaranteed outcome</li></ul>
<blockquote>Best suited for experienced professionals with savings who prefer to search locally.</blockquote>
<hr>
<h2 id="the-best-option-apply-directly-for-a-job-blue-card">The Best Option: Apply Directly for a Job (Blue Card)</h2>
<p>This is how I came to Germany &#x2014; <strong>no blocked account, no degree from Europe</strong>.<br>If you have the skills, you can apply for jobs directly from Bangladesh. When you get an offer, you apply for a <strong>Blue Card</strong> &#x2014; a visa designed for highly qualified professionals.</p>
<h4 id="pros-2">Pros:</h4>
<ul><li>No blocked account needed</li><li>Employer usually pays for relocation (visa, flight, first month&#x2019;s rent)</li><li>Start earning from Day 1</li><li>Blue Card is valid for 4 years, with a fast-track to permanent residency</li></ul>
<h4 id="cons-2">Cons:</h4>
<ul><li>It&#x2019;s harder to get interview calls (initial rejections are common)</li><li>Some companies may not sponsor non-EU applicants</li><li>You need to <strong>stand out</strong> with skills and experience</li></ul>
<p>Now let&#x2019;s break down exactly <strong>how to land that job from Bangladesh</strong>:</p>
<hr>
<h2 id="step-by-step-how-to-get-a-job-in-germany-from-bangladesh">Step-by-Step: How to Get a Job in Germany from Bangladesh</h2>
<h3 id="1-build-strong-fundamentals">1. <strong>Build Strong Fundamentals</strong></h3>
<ul><li>Refresh core programming skills (DSA, problem solving)</li><li>Start solving <strong>Leetcode Easy</strong> level problems regularly</li><li>Become a <strong>domain expert</strong> &#x2014; if you work in backend, master something like Node.js or Spring Boot</li></ul>
<blockquote>Tip: Work at least 1&#x2013;2 years in Bangladesh before applying abroad &#x2014; and specialize.</blockquote>
<hr>
<h3 id="2-start-applying-strategically">2. <strong>Start Applying Strategically</strong></h3>
<p>Getting interview calls is hard. Think of it like dating &#x2014; rejections are normal.</p>
<ul><li>Focus on <strong>typical mid-sized companies</strong>, not just FAANG</li><li>Use job boards like:<ul><li><a href="https://relocate.me/?ref=saadnoor.com">relocate.me</a></li><li><a href="https://www.linkedin.com/?ref=saadnoor.com">LinkedIn</a> (filter for &#x201C;visa sponsorship&#x201D;)</li><li><a href="https://www.xing.com/?ref=saadnoor.com">Xing</a> (popular in Germany)</li></ul></li></ul>
<p>Apply to 100 jobs if needed &#x2014; <strong>5 interviews can turn into 1 job</strong>.</p>
<hr>
<h3 id="3-leverage-referrals">3. <strong>Leverage Referrals</strong></h3>
<p>This matters more than anything. Even strangers will refer you if they believe in your work.</p>
<ul><li>Reach out to seniors and old colleagues</li><li>Don&#x2019;t be shy to ask &#x2014; many companies give bonus for successful referrals (mine offered &#xA3;300!)</li></ul>
<hr>
<h3 id="4-stand-out-with-technical-blogging">4. <strong>Stand Out with Technical Blogging</strong></h3>
<ul><li>If you solve a rare problem at work, write a blog about it</li><li>If someone abroad faces the same issue and finds your post &#x2014; <strong>you&#x2019;ve already made an impression</strong></li><li>Good content builds credibility and may lead to job offers</li></ul>
<hr>
<h2 id="what-to-expect-in-the-interview-process">What to Expect in the Interview Process</h2>
<p>Every company is different, but here&#x2019;s the usual flow:</p>
<ol><li><strong>Intro Call</strong> &#x2013; Casual discussion with recruiter/HR</li><li><strong>Take-Home Assignment</strong> &#x2013; Role-specific task (usually 5&#x2013;7 days)</li><li><strong>Technical Interview</strong> &#x2013; Deep dive into your solution and thought process</li><li><strong>Offer &amp; Salary Discussion</strong> &#x2013; Prepare to negotiate</li><li><strong>Visa Process</strong> &#x2013; Employer usually guides you through Blue Card steps</li></ol>
<blockquote>Some companies may skip the take-home and give 1&#x2013;2 Leetcode questions. These are usually easier than FAANG-level.</blockquote>
<h2 id="salary-negotiation-visa">Salary Negotiation &amp; Visa</h2>
<p>Some companies offer a slightly lower salary, assuming they&#x2019;re sponsoring your visa. It&#x2019;s okay.<br>Once you land in Germany and gain experience, you can easily <strong>switch jobs for higher pay</strong> &#x2014; your past salary isn&#x2019;t considered here.</p>
<hr>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>Getting a job in Germany directly from Bangladesh <em>isn&#x2019;t easy</em>, but it&#x2019;s <strong>absolutely possible</strong>. I&#x2019;ve done it. So have many others.</p>
<p>If you can:</p>
<ul><li>Master your core skills</li><li>Stay persistent through rejection</li><li>Apply strategically</li></ul>
<p>...then you don&#x2019;t need a European degree or 17 lakh in savings. You just need <strong>focus and consistency</strong>.</p>]]></content:encoded></item><item><title><![CDATA[The Reality of Living Abroad As A Bangladeshi Software Engineer]]></title><description><![CDATA[<p></p>
<p>Just landed in Berlin, and it feels like there&apos;s a switch in my brain &#x2014; I call it the <em>Context Switch</em>. The moment I arrive, it flips automatically, and suddenly I&#x2019;m living a completely different life.</p>
<p>That&#x2019;s the tricky part of living between two</p>]]></description><link>https://saadnoor.com/untitled/</link><guid isPermaLink="false">67ffcb9f03849b91b05966a3</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Wed, 16 Apr 2025 15:37:17 GMT</pubDate><media:content url="https://saadnoor.com/content/images/14TyCbvzjt5PQJsHlMclp3sEIB0-LV2-o.png" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/14TyCbvzjt5PQJsHlMclp3sEIB0-LV2-o.png" alt="The Reality of Living Abroad As A Bangladeshi Software Engineer"><p></p>
<p>Just landed in Berlin, and it feels like there&apos;s a switch in my brain &#x2014; I call it the <em>Context Switch</em>. The moment I arrive, it flips automatically, and suddenly I&#x2019;m living a completely different life.</p>
<p>That&#x2019;s the tricky part of living between two countries. But in a way, it&#x2019;s also a gift &#x2014; it lets me experience two parallel lives through a lens most people never get to look through.<br><br>That qualifies me to speak about the pros and cons in a neutral way. In this blog, I&#x2019;ll share what that really feels like.</p>
<hr>
<h3 id="why-i-decided-to-go-abroad">Why I Decided to Go Abroad</h3>
<p>I graduated from MIST and worked at a startup for two years. I enjoyed it a lot, but I started thinking about financial stability and eventually joined Cefalo Bangladesh, a well-known tech company. Then COVID hit.</p>
<p>Though Cefalo is a great company that doesn&#x2019;t usually lay off employees, I saw many clients leaving, and many of my friends from other companies lost their jobs. I come from a middle-class family and am the eldest son. The pressure was real.</p>
<p>At the same time, many of my university friends were moving abroad for MS or PhDs. Their Facebook photos made it look like life abroad was full of charm and adventure.</p>
<p>Looking back now, I think I made the decision partly out of jealousy and boredom. But I was also careful&#x2014;I decided to move only if I could get a job abroad. That way, even if things didn&#x2019;t work out, there would be no financial loss, and I could always return to Bangladesh. And so, I moved.</p>
<hr>
<h3 id="pros-of-living-abroad">Pros of Living Abroad</h3>
<p><strong>1. Financial Stability</strong><br>This was one of the biggest advantages. In Bangladesh, it&#x2019;s very rare to find companies that pay over 3&#x2013;4 lakh BDT a month and are also stable. Abroad, there are many opportunities. After paying rent and personal expenses, saving a few lakh taka each month is very possible.</p>
<p><strong>2. Interesting Work Opportunities</strong><br>In Bangladesh, it&#x2019;s hard to find work on technically complex or exciting projects. Abroad, even startups work with modern technologies. You get the chance to work on things that actually challenge and grow your skills.</p>
<p><strong>3. Job Security and Social Benefits</strong><br>In Germany, for example, if I lose my job, the government will pay me 60% of my salary until I find a new one. I don&#x2019;t need to worry about retirement either&#x2014;my pension will be taken care of. These benefits simply don&#x2019;t exist in Bangladesh.</p>
<p><strong>4. Respect and Equal Treatment</strong><br>Even if you earn a 6-digit salary in Bangladesh, people still ask questions like, &#x201C;Preparing for BCS?&#x201D; Unless you belong to a privileged family, life can be hard. There&#x2019;s a constant pressure and sometimes even humiliation in everyday systems. Abroad, people are treated more equally.</p>
<p><strong>5. Travel and Exposure</strong><br>Europe and America are beautiful&#x2014;clean, organized, and rich in culture. If you love exploring, you&#x2019;ll enjoy life abroad. Meeting new people, experiencing different cultures, and learning new ways of thinking really broadens your perspective. You also learn to appreciate your own culture more deeply.</p>
<p><strong>6. Quality of Life</strong><br>Less corruption, fair systems, free healthcare, clean air&#x2014;all of these make for a better life abroad.</p>
<hr>
<h3 id="so-why-do-i-still-stay-6-months-in-bangladesh">So, Why Do I Still Stay 6 Months in Bangladesh?</h3>
<p>Even with all these advantages, there are downsides.</p>
<p><strong>1. Family</strong><br>You&#x2019;ll miss your family. You won&#x2019;t find your mother abroad. No matter how many video calls you do, it&#x2019;s not the same. This is the hardest part.</p>
<p><strong>2. Food</strong><br>Let&#x2019;s be honest&#x2014;German food is boring. After a long day of work, you won&#x2019;t feel like cooking. I often eat out, and it has led to health issues. Finding good food like we have in Bangladesh is a real struggle.</p>
<p><strong>3. Loneliness</strong><br>People abroad are busy. Finding like-minded friends is tough. In Germany, if you don&#x2019;t know the language, you won&#x2019;t be able to connect with the locals easily. Back home, we are spoiled with social choices. Here, your options are either mixing with people you don&#x2019;t vibe with or being alone. It may not sound serious, but it hits hard over time.</p>
<p><strong>4. Daily Life Challenges</strong><br>In Bangladesh, life is easier if you can spend a little. You&#x2019;ll find help for household chores. Abroad, you have to do everything yourself. Hiring help is expensive. Also, the paperwork and bureaucracy&#x2014;especially in Germany&#x2014;can be frustrating.</p>
<p><strong>5. The Feeling of Not Belonging</strong><br>This is a tough one. Once you leave your country, you may never fully feel at home again. In Europe, no matter how long you stay, your skin colour and accent will always make you an outsider. Back in Bangladesh, people treat you like a visitor too. It often feels like you&apos;re just on vacation wherever you are.</p>
<hr>
<h3 id="so-what-should-you-do">So, What Should You Do?</h3>
<p>There&#x2019;s no single right answer. Don&#x2019;t decide based on random people on the internet. Every life has its pros and cons. I just tried to share mine shortly, and honestly.</p>
<p>Thanks for reading.</p>]]></content:encoded></item><item><title><![CDATA[How To Get Classic Chrome Film Simulation in Sony Cameras]]></title><description><![CDATA[<p>I am a sony user now, but I love fuji.</p>
<p>I used to shoot with Fuji, then I left it for Sony due to Fuji&apos;s shitty autofocus system. Then I returned to Fuji again - for its colors. Eventually, I started using both systems&#x2014;you can call</p>]]></description><link>https://saadnoor.com/how-to-get-classic-chrome-film-simulation-in-sony-cameras/</link><guid isPermaLink="false">670d62e8fc9f0131fa1161a8</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Tue, 15 Oct 2024 10:20:39 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1525101479959-c3e73fd498ab?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE0fHxjYW1lcmElMjBzb255fGVufDB8fHx8MTcyODkzMDU5Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1525101479959-c3e73fd498ab?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE0fHxjYW1lcmElMjBzb255fGVufDB8fHx8MTcyODkzMDU5Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="How To Get Classic Chrome Film Simulation in Sony Cameras"><p>I am a sony user now, but I love fuji.</p>
<p>I used to shoot with Fuji, then I left it for Sony due to Fuji&apos;s shitty autofocus system. Then I returned to Fuji again - for its colors. Eventually, I started using both systems&#x2014;you can call me spoiled!</p>
<p>Now, I primarily shoot videos with Sony and photos with Fuji. But when I&apos;m out shooting video, sometimes I want to take pictures as well. Here&apos;s the problem: I didn&apos;t bring my Fuji. </p>
<p>I miss the colors&#x2014;the film simulations, <em>Classic Chrome</em> to be exact!</p>

<p>After some research, I found a solution that works for me on my <em>Sony ZV-E1</em> and <em>Sony A7C II</em>. There are some tweaks you can do on your Sony camera to get a Classic Chrome look straight out of the camera (SOOC).</p>
<p>At first, I thought the &quot;Creative Look&quot; filters in Sony cameras were just a gimmick. However, by adjusting the settings, we can actually achieve a classic chrome look. </p>
<p><strong>Here are the settings I used:</strong></p>
<ul><li><strong>Creative Look</strong>: IN</li><li><strong>Contrast</strong>: +2</li><li><strong>Highlights</strong>: 0</li><li><strong>Shadows</strong>: -2</li><li><strong>Fade</strong>: 0</li><li><strong>Saturation</strong>: -2</li><li><strong>Sharpness</strong>: 0</li><li><strong>Clarity</strong>: +3</li><li><strong>Tint</strong>: +1</li></ul>
<p>And result? </p>
<figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1WFDCm4LhD_ZOoLAze_EPBAklx6BwiiHP.jpg" width="2000" height="1333" loading="lazy" alt="How To Get Classic Chrome Film Simulation in Sony Cameras"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1BlAJPED1JFLQWh5t2fC06nF3EvKa-sJR.jpg" width="2000" height="1333" loading="lazy" alt="How To Get Classic Chrome Film Simulation in Sony Cameras"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1ud7lHdiNhYR1Ou7nZH9M7JvVjTWdqMf1.jpg" width="2000" height="1336" loading="lazy" alt="How To Get Classic Chrome Film Simulation in Sony Cameras"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1p0t7GqMqm6jxvUvLYP_VlwgegbJt-ILP.jpg" width="2000" height="1333" loading="lazy" alt="How To Get Classic Chrome Film Simulation in Sony Cameras"></div></div></div><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Result by tweaking Creative look &quot;IN&quot; </span></p></figcaption></figure>
<p>Though it&apos;s not perfect, you can tell it&apos;s not classic chrome from the reds. But when I couldn&apos;t bring my fuji - or I need extra depth in a photo, but don&apos;t want to open lightroom - this works like a charm! </p>]]></content:encoded></item><item><title><![CDATA[Why Did You Guys Kill Abu Sayeed? Seeking Answers In Front of Bangladesh Embassy, Berlin]]></title><description><![CDATA[<p><br><br>After seeing the police shoot Abu Sayed&#x2014;a bright student from a poor family who was unarmed and posed no threat&#x2014;I couldn&apos;t stay at home. When I watched the video of this unjust act, I cried and couldn&apos;t work anymore. </p>
<figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1Pj4YKpd2lEuSEconzbqd7zZt8kvPhNaj.jpg" class="kg-image" alt loading="lazy" width="1024" height="576"></figure>
<p>I had a</p>]]></description><link>https://saadnoor.com/why-did-you-guys-kill-abu-sayeed-seeking-answers-in-front-of-bangladesh-embassy-berlin/</link><guid isPermaLink="false">6706ec03fc9f0131fa1160bf</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Wed, 17 Jul 2024 21:07:00 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1cwht-oa7jgdTwACEpIVdQwWXHkKPOI3B.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1cwht-oa7jgdTwACEpIVdQwWXHkKPOI3B.jpg" alt="Why Did You Guys Kill Abu Sayeed? Seeking Answers In Front of Bangladesh Embassy, Berlin"><p><br><br>After seeing the police shoot Abu Sayed&#x2014;a bright student from a poor family who was unarmed and posed no threat&#x2014;I couldn&apos;t stay at home. When I watched the video of this unjust act, I cried and couldn&apos;t work anymore. </p>
<figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1Pj4YKpd2lEuSEconzbqd7zZt8kvPhNaj.jpg" class="kg-image" alt="Why Did You Guys Kill Abu Sayeed? Seeking Answers In Front of Bangladesh Embassy, Berlin" loading="lazy" width="1024" height="576"></figure>
<p>I had a tight deadline, but my body felt so tense that I couldn&apos;t type anything.</p>
<p>To those who are saying that students are protesting just to get government jobs and earn money through corruption&#x2014;I have been working in a private job for eight years. I have never even bought a form for a government job exam. But first, I want those inhumane people to be brought to justice. Secondly, I want the quota system to be reformed.</p>
<p>This is simply a movement against injustice&#x2014;not a protest for jobs. Please use common sense.</p>
<figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1AR9_W5e7zfR_mbQT2GF30MmHj4XAUTrr.jpg" class="kg-image" alt="Why Did You Guys Kill Abu Sayeed? Seeking Answers In Front of Bangladesh Embassy, Berlin" loading="lazy" width="4240" height="2832"></figure>
<p>We&apos;ve endured too much dictatorship; it must end now.</p>
<p></p>]]></content:encoded></item><item><title><![CDATA[When Turning Passion into Work Ruins the Fun: My First (and Last) Videography Gig]]></title><description><![CDATA[<p>I&apos;m a software engineer by trade&#x2014;I write code all day. Never in my wildest dreams did I think I&apos;d buy a camera. </p><p>My photography skills were so bad that my ex was often mad at me for taking so many terrible photos of her.</p>]]></description><link>https://saadnoor.com/my-first-professional-gig-into-videography/</link><guid isPermaLink="false">669645073a55f5575035688f</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Sun, 14 Jul 2024 21:28:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1471999796791-874f5de3b3f4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fHZpZGVvZ3JhcGh5fGVufDB8fHx8MTcyODUwODgyNXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1471999796791-874f5de3b3f4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fHZpZGVvZ3JhcGh5fGVufDB8fHx8MTcyODUwODgyNXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="When Turning Passion into Work Ruins the Fun: My First (and Last) Videography Gig"><p>I&apos;m a software engineer by trade&#x2014;I write code all day. Never in my wildest dreams did I think I&apos;d buy a camera. </p><p>My photography skills were so bad that my ex was often mad at me for taking so many terrible photos of her. So, imagine my surprise when I found myself landing my first gig on a video project.</p><p>A couple of days ago, a lady reached out to me after seeing some of my personal videos. She wanted help getting sponsors for kids who are eager to learn karate. She asked if I could create a video to support their cause.</p><p>I hesitated but ultimately decided to do it.</p><p><strong>The Final Result</strong></p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/LKqvtlqBzyA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Ki Dojo | Berlin | Promotional Film | Sony ZVE1"></iframe></figure><p><strong>The Experience</strong></p><p>It turned out that shooting for other people isn&apos;t as enjoyable as I thought it might be. </p><p>My main reason for getting into videography was to document my own life&#x2014;to capture moments that are meaningful to me. But when I had to put in effort for someone else&apos;s project, the joy just wasn&apos;t there. </p><p>Don&apos;t get me wrong; I loved working with the kids&#x2014;they were fantastic. But when I got home, editing the video was a pain in the ass.</p><p>This experience taught me something valuable: if you monetize your hobby, it stops being your hobby. It becomes work. And for me, that takes away the fun and passion that drew me to videography in the first place.</p><p>So, I&apos;ve decided I won&apos;t spend much time trying to monetize my videography. I&apos;d rather keep it as a personal passion, something I do for myself without any obligations or expectations from others.</p>]]></content:encoded></item><item><title><![CDATA[Street Photography In Munich]]></title><description><![CDATA[<p>When I realized all my recent tours were in cities, I knew I needed a change. I&apos;ve always wanted to visit the Bavarian region of Germany, so I decided to take a tour of K&#xF6;nigssee.</p><p>Since I&apos;ve never been to Munich before, I set</p>]]></description><link>https://saadnoor.com/street-photography-in-munich/</link><guid isPermaLink="false">6682657c117a49fef1a5cc14</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Mon, 01 Jul 2024 09:02:40 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1oeDsaHBh41oJ6Tk1YkbJ7zbX0VnkSZGr.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1oeDsaHBh41oJ6Tk1YkbJ7zbX0VnkSZGr.jpg" alt="Street Photography In Munich"><p>When I realized all my recent tours were in cities, I knew I needed a change. I&apos;ve always wanted to visit the Bavarian region of Germany, so I decided to take a tour of K&#xF6;nigssee.</p><p>Since I&apos;ve never been to Munich before, I set aside a day to explore the city. I don&apos;t particularly appreciate traveling like a typical tourist with a map and a checklist of things to cover. Instead, I prefer to wander around like a local, capturing photos just as I do in my city Berlin.</p><p>Enjoy some of the photos I&apos;ve taken.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1m4WKTH4FGEB1ewZ_FjbzAIdAIKlkcM4B.jpg" width="4240" height="2832" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/15-_1i3RF7kffKldnbWlJ7u5T7kVGvai4.jpg" width="2832" height="4240" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1eCmcGWti8PHRdGdBX85fzgW2ZGSWKzpx.jpg" width="2832" height="4240" loading="lazy" alt="Street Photography In Munich"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1EhcjnVScbC8BKoz__IkHG8lK1eg7KSnU.jpg" width="4240" height="2832" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1414ZaaIYJJC3OJDBtqtziD6JG4YPyHk4.jpg" width="3855" height="2487" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1K71_DHDhswriKkUU1GAiqOBI8WiSCyDc.jpg" width="3055" height="2041" loading="lazy" alt="Street Photography In Munich"></div></div></div><figcaption>Photos Taken on Sony ZVE1 with sigma 85mm 1.4</figcaption></figure><p>The pictures above were taken with my video camera, the ZVE1, and a Sigma 85mm f/1.4 lens. I usually dislike the SOOC Sony colors, but with a few small tweaks, I ended up liking the results more than those from my Fuji XT4, which is my dedicated street photography camera. I&apos;m leaving some photos for comparison, taken with the XT4 and a 35mm f/2 lens.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1kyJcgPbDdurbrsBpkDZdKb_Rj4L0uimC.jpg" width="5843" height="3895" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1KgTXZmkfXrlERXMjs060hGwePrQXXHy_.jpg" width="6240" height="4160" loading="lazy" alt="Street Photography In Munich"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1Db4QQzcNDmTHu17Qh6jph9f-ZqevO_pP.JPG" width="4160" height="6240" loading="lazy" alt="Street Photography In Munich"></div><div class="kg-gallery-image"><img src="https://saadnoor.com/content/images/1fyd2BY7IRHypDvSuRaq3U9xaBGRlmOl6.jpg" width="6240" height="4160" loading="lazy" alt="Street Photography In Munich"></div></div></div><figcaption>XT4 + 35mm f2</figcaption></figure><p>These Fuji pictures are straight out of the camera without any edits, except for the one of the Man Vs Machine Coffee shop. For that, I changed the simulation to Reala Ace in Capture One since the XT4 doesn&apos;t have it.</p><p>Honestly, I&apos;m really impressed with Sony. It&apos;s hard to admit that a camera with no viewfinder and only 12 MP took superior pictures compared to my retro Fuji. However, the experience and joy of taking pictures matter in the end, so I&apos;m not abandoning my beloved Fuji anytime soon.</p>]]></content:encoded></item><item><title><![CDATA[How to Use Fuji's New Reala ACE Film Simulation on Fujifilm XT-4]]></title><description><![CDATA[<h3></h3><p>The instructions in this post are inspired by the original guide on accessing Nostalgic Negative on X-Trans bodies, initially shared by yayatosorus on dpreview. This post aims to simplify the process, allowing you to start using the Reala ACE film simulation quickly and efficiently.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://saadnoor.com/content/images/1DbgHRyCjTbezkxVgWCp1C9pd4ZaM8dqe.jpg" class="kg-image" alt loading="lazy" width="1365" height="2048"><figcaption>Reala Ace Simulation Taken on XT-4</figcaption></figure>]]></description><link>https://saadnoor.com/how-to-use-reala-ace-on-xt4/</link><guid isPermaLink="false">664e8806194d45054f1a63a5</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Thu, 23 May 2024 00:10:52 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1611324695129-562e44565afd?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI2fHxmdWppZmlsbXxlbnwwfHx8fDE3MTY0MjI4Nzd8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h3></h3><img src="https://images.unsplash.com/photo-1611324695129-562e44565afd?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI2fHxmdWppZmlsbXxlbnwwfHx8fDE3MTY0MjI4Nzd8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="How to Use Fuji&apos;s New Reala ACE Film Simulation on Fujifilm XT-4"><p>The instructions in this post are inspired by the original guide on accessing Nostalgic Negative on X-Trans bodies, initially shared by yayatosorus on dpreview. This post aims to simplify the process, allowing you to start using the Reala ACE film simulation quickly and efficiently.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://saadnoor.com/content/images/1DbgHRyCjTbezkxVgWCp1C9pd4ZaM8dqe.jpg" class="kg-image" alt="How to Use Fuji&apos;s New Reala ACE Film Simulation on Fujifilm XT-4" loading="lazy" width="1365" height="2048"><figcaption>Reala Ace Simulation Taken on XT-4 body</figcaption></figure><p><strong>Fujifilm and the Kaizen Concept</strong></p><p>Fujifilm was once renowned for its &quot;Kaizen&quot; philosophy, continuously releasing firmware updates to enhance the user experience of its older cameras. However, this practice has waned recently, leaving many users longing for the latest features and film simulations available only on new camera models. Instead of giving in to the pressure of buying a new camera, let&apos;s explore how you can enjoy the new Reala ACE film simulation on your existing X-Trans camera.</p><h4 id="instructions">Instructions</h4><p>These instructions are tailored for macOS users. Windows users can refer to the original guide and use this post as a reference to adapt the steps accordingly.</p><h4 id="step-0-install-capture-one-pro">Step 0: Install Capture One Pro</h4><p>Download and install Capture One Pro from the <a href="https://www.captureone.com/en?ref=saadnoor.com">official website</a>. You can also use the Fujifilm RAW Converter if you don&apos;t have the paid version of Capture One Pro.</p><h4 id="step-1-locate-the-film-curves-folder">Step 1: Locate the Film Curves Folder</h4><p>Open Finder, go to the menu bar, select Finder -&gt; Go -&gt; Go to Folder, and paste the following path:</p><pre><code>/Applications/Capture One 22.app/Contents/Frameworks/ImageProcessing.framework/Versions/A/Resources/FilmCurves
</code></pre><p>Alternatively, navigate to the application folder, find Capture One 22, right-click to &quot;Show Package Contents,&quot; and go to the specified folder. Note that this path may differ for other versions of Capture One.</p><h4 id="step-2-copy-and-rename-the-reala-ace-files">Step 2: Copy and Rename the Reala ACE Files</h4><p>Download the pre-packaged Reala ACE film simulation files. The files you need to locate in the &quot;Film Curves&quot; folder include:</p><ul><li><strong>.fcrv files:</strong> Camera-specific</li><li><strong>.P1X files:</strong> Sensor-specific</li></ul><p>Identify and select the 9 .P1X files and the .fcrv file related to Reala ACE. To simplify this process, use the following Python script to automate copying and renaming these files.</p><h4 id="python-script-to-copy-and-rename-reala-ace-files">Python Script to Copy and Rename Reala ACE Files</h4><p>Here&apos;s a Python script that automates the copying and renaming process. The script selects the FujiGFX100II files for &quot;REALA&quot; (case-insensitive) and renames them based on your input.</p><pre><code class="language-python">import os
import shutil

def get_reala_files(folder_path):
    reala_files = []
    for file_name in os.listdir(folder_path):
        if &quot;reala&quot; in file_name.lower() and (&quot;FujiGFX100II&quot; in file_name):
            reala_files.append(file_name)
    return reala_files

def copy_and_rename_files(folder_path, camera_name):
    reala_files = get_reala_files(folder_path)
    new_files = []
    for file_name in reala_files:
        new_file_name = file_name.replace(&quot;FujiGFX100II&quot;, camera_name)
        src_file = os.path.join(folder_path, file_name)
        dst_file = os.path.join(folder_path, new_file_name)
        shutil.copy2(src_file, dst_file)
        new_files.append(new_file_name)
    return new_files

def main():
    folder_path = input(&quot;Enter the path to the &apos;Film Curves&apos; folder: &quot;)
    if not os.path.exists(folder_path):
        print(&quot;The specified folder does not exist.&quot;)
        return
    
    camera_name = input(&quot;Enter the camera name (e.g., FujiXT4): &quot;)

    new_files = copy_and_rename_files(folder_path, camera_name)
    
    if new_files:
        print(f&quot;The following files have been created in {folder_path}:&quot;)
        for file_name in new_files:
            print(file_name)
    else:
        print(&quot;No REALA files found for FujiGFX100II.&quot;)

if __name__ == &quot;__main__&quot;:
    main()
</code></pre><h4 id="how-to-use-the-script">How to Use the Script</h4><p><strong>Save the Script:</strong><br>Save the script to a file, for example, <code>rename_reala_files.py</code>.</p><p><strong>Run the Script:</strong></p><ul><li>Open a terminal or command prompt.</li><li>Navigate to the directory where you saved the script.</li><li>Run the script using <code>python rename_reala_files.py</code>.</li></ul><p><strong>Follow the Prompts:</strong></p><ul><li>Enter the path to the &quot;Film Curves&quot; folder.</li><li>Enter your camera name (e.g., FujiXT4).</li></ul><h4 id="step-3-apply-the-film-simulation">Step 3: Apply the Film Simulation</h4><p>Once you have copied and renamed the files, open Capture One Pro and import a RAW file taken by your camera. In the Base Characteristics panel, you should now see the option to apply the &quot;Fujifilm Reala ACE&quot; curve. Select it, and enjoy the new film simulation.</p><p>If everything goes alright - you should able to see the REALA ACE in the list of the simulations. Let me know if the script doesn&apos;t work. </p>]]></content:encoded></item><item><title><![CDATA[My Current Desk Setup]]></title><description><![CDATA[<p>I recently revamped my desk setup to create a more inspiring and efficient work environment, and I couldn&apos;t be happier with the results. In this blog post, I&apos;ll walk you through my current desk setup and share how each item enhances my daily work routine. The</p>]]></description><link>https://saadnoor.com/my-current-desk-setup/</link><guid isPermaLink="false">64f5e5a58c8fff2a4456d5ba</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Mon, 04 Sep 2023 14:37:25 GMT</pubDate><media:content url="https://saadnoor.com/content/images/13k5nE2G17VKjou1ixGDyZxRhNxjdw6ib.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/13k5nE2G17VKjou1ixGDyZxRhNxjdw6ib.jpg" alt="My Current Desk Setup"><p>I recently revamped my desk setup to create a more inspiring and efficient work environment, and I couldn&apos;t be happier with the results. In this blog post, I&apos;ll walk you through my current desk setup and share how each item enhances my daily work routine. The workstation is divided into two parts: &#xA0;</p><h2 id="my-online-corner">My Online Corner</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://saadnoor.com/content/images/1yNs3OB_e9UQ-TBGjDvY84xkFcLCEusYd.jpg" class="kg-image" alt="My Current Desk Setup" loading="lazy"><figcaption>This part connects me to the internet</figcaption></figure><p>This is my primary workstation, </p><p>All the communication with the world is being done here. Apart from visible M1 Macbooks, Logitech MX master keyboard and mouse, bellow are some items I also used to make this setup</p><h3 id="caldigit-ts3-plus-docking-station">Caldigit TS3 Plus Docking Station</h3><p>I was initially sceptical about investing in a high-priced dock like the CalDigit TS3 Plus. I had tried cheaper alternatives in the past, but I ended up returning each one I purchased due to compatibility issues. Some of them didn&apos;t work well with my webcam, and others had trouble with my Rode USB Mini microphone.</p><p>However, after numerous trials and tribulations, I decided to give the CalDigit TS3 Plus a shot. To my surprise, it has been serving me exceptionally well ever since. The investment was worth it, as it not only solved my connectivity issues but also added a level of convenience to my workspace that I hadn&apos;t anticipated.</p><h3 id="rode-nt-usb-mini">Rode NT USB Mini</h3><p>I use the Rode USB Mini. Working remotely often means keeping my MacBook closed during meetings, so having a reliable microphone is essential. The Rode USB Mini fits the bill perfectly. It&apos;s budget-friendly, yet it delivers excellent sound quality, ensuring that my virtual meetings are crystal clear and professional-sounding. It&apos;s a cost-effective solution that doesn&apos;t compromise performance.</p><h3 id="macbook-pro-stand-from-humencentric">MacBook Pro Stand from Humencentric</h3><p>One of the first changes I made was investing in a MacBook Pro stand from Humencentric. This stand saves precious desk space and keeps my MacBook Pro safely secured when not in use. The silicone-lined inner edge ensures that my MacBook remains scratch-free, and I can easily connect it to an external monitor for a seamless desktop-like experience. It&apos;s a game-changer in terms of organization and convenience.</p><h3 id="fujifilm-x100v-camera">Fujifilm X100V Camera</h3><p>Photography is a passion of mine, and having my Fujifilm X100V camera within arm&apos;s reach allows me to capture spontaneous moments throughout the day. Whether snapping photos for work or indulging in personal photography projects, this camera is an integral part of my creative arsenal.</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1GxMGmPz3g6pHuD4bM-eQZwjtekOI8MSo.jpeg" class="kg-image" alt="My Current Desk Setup" loading="lazy" width="875" height="522"></figure><h3 id="govee-hexa-light-and-lightbar-behind-monitor">Govee Hexa Light and Lightbar Behind Monitor</h3><p>Good lighting is essential for a productive workspace. I&apos;ve incorporated Govee Hexa Lights and a lightbar behind my monitor to set the perfect ambience. The customizable colour options and brightness levels let me tailor the lighting to suit my mood and task at hand, whether it&apos;s focused work or a relaxing break.</p><h3 id="ikea-plants-and-bookshelf">IKEA Plants and Bookshelf</h3><p>Bringing a touch of nature into my workspace was another priority. I added some greenery with plants from IKEA, which not only enhances the visual appeal of my desk but also contributes to a healthier indoor environment. Additionally, an IKEA bookshelf provides a stylish way to keep my favourite books and reference materials organized and easily accessible.</p><h3 id="samsung-u28r550uqp-28-inch-4k-monitor">Samsung U28R550UQP 28-inch 4K Monitor</h3><p>The centrepiece of my desk setup is the Samsung U28R550UQP 28-inch 4K monitor. Its crisp display and quick response time make it perfect for both work and leisure. Whether I&apos;m editing photos, watching videos, or multitasking, this monitor offers a fantastic visual experience.</p><h3 id="monitor-light-barquintis-budget-alternative-to-benq">Monitor Light Bar - Quintis (Budget Alternative to BenQ)</h3><p>For improved task lighting, I added a monitor light bar from Quintis. It&apos;s a budget-friendly alternative to the popular BenQ light bars and helps reduce eye strain during long hours of work. The adjustable brightness and colour temperature settings ensure that my screen is evenly illuminated without any glare.</p><h3 id="sand-timer-from-amazon">Sand Timer from Amazon</h3><p>To boost productivity and manage my time effectively, I have a sand timer from Amazon. It&apos;s a simple yet effective way to stay focused on tasks and take short breaks when needed. The visual cue of the sand running out helps me maintain a healthy work rhythm.</p><h2 id="an-offline-corner">An Offline Corner</h2><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1myOmmvr3Lur6y5jkesygVpglERWl5PWQ.jpg" class="kg-image" alt="My Current Desk Setup" loading="lazy" width="6234" height="4156"></figure><p>This corner disconnects me from the internet. I use it for writing, mind mapping and trying to figure out the purpose of life.</p><p>It was kind of my dream and I am glad I did it. I feel happy here now. </p>]]></content:encoded></item><item><title><![CDATA[Streamlining Monitoring: How to Receive AWS Health Check Alerts on Slack]]></title><description><![CDATA[<p>Monitoring health checks in Slack, and getting a notification if something goes wrong seems simple and straightforward. Until it isn&apos;t.</p><p>Mainly because AWS uses the US-east-1 region to maintain the services related to route 53. Which makes things problematic if you use AWS services from other regions. In</p>]]></description><link>https://saadnoor.com/streamlining-monitoring-how-to-receive-aws-health-check-alerts-on-slack/</link><guid isPermaLink="false">64efc7cf8c8fff2a4456d55d</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Wed, 30 Aug 2023 22:54:59 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1563986768609-322da13575f3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNsYWNrfGVufDB8fHx8MTY5MzQzNjA1Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1563986768609-322da13575f3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNsYWNrfGVufDB8fHx8MTY5MzQzNjA1Nnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Streamlining Monitoring: How to Receive AWS Health Check Alerts on Slack"><p>Monitoring health checks in Slack, and getting a notification if something goes wrong seems simple and straightforward. Until it isn&apos;t.</p><p>Mainly because AWS uses the US-east-1 region to maintain the services related to route 53. Which makes things problematic if you use AWS services from other regions. In that case, you need to set up the infrastructure for the US region as well.</p><p>As of today, we can&apos;t trigger an alarm in our desired region (in my case it was the EU). So the idea is like this</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1j_0MWDuhZ5JeeAe2PbxeR75PYElItk61.png" class="kg-image" alt="Streamlining Monitoring: How to Receive AWS Health Check Alerts on Slack" loading="lazy"></figure><ol><li>Configure health check in route 53 [Global]</li><li>Attach an alarm into it [US region]</li><li>Attach a SNS topic to this alarm [US region]</li><li>Create a subscription, and attach a lambda there. This lamba can be any region.</li><li>Write the logic to parse the SNS topic (whether the state is healthy or unhealthy) and send a notification based on this.</li></ol><p>We&apos;ll use AWS Cloudformation in this blog - but you can follow along to do it manually as well.</p><h3 id="prepare-configuration">Prepare Configuration:</h3><p>If a template for the US-east-1 region is absent, update your <code>samconfig.toml</code> file with relevant configuration details. This file helps streamline deployment processes.</p><pre><code class="language-yaml">[us-east-1]
[us-east-1.deploy]
[us-east-1.deploy.parameters]
stack_name = &quot;your_stack_name&quot;
s3_bucket = &quot;your_s3_bucket&quot;
s3_prefix = &quot;whateveryouwant&quot;
region = &quot;us-east-1&quot;
capabilities = &quot;CAPABILITY_IAM CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM&quot;
image_repositories = []
</code></pre><h3 id="set-up-sns-topic">Set Up SNS Topic:</h3><p>Create an SNS, its topic and its subscription. You can keep the endpoint blank for now, we&apos;ll update it later once we write our lambda.</p><pre><code class="language-yaml">AWSTemplateFormatVersion: &quot;2010-09-09&quot;

Resources:
  MySNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: &quot;MyGenericTopic&quot;
      TopicName: &quot;MyGenericTopic&quot;

  MyLambdaSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: lambda
      TopicArn: !Ref MySNSTopic
      Endpoint: &quot;arn:aws:lambda:REGION:ACCOUNT_ID:function:MyLambdaFunction&quot;
</code></pre><h3 id="create-health-checks-and-alarms">Create Health Checks and Alarms</h3><p><br>Craft health checks and associated alarms within a template specific to the US region (e.g., <code>template.us.yaml</code>).</p><pre><code class="language-yaml">AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Transform: AWS::Serverless-2016-10-31
Description: US Stack


Resources:
  FooSNS:
    Type: AWS::Serverless::Application
    Properties:
      Location: {{path to your SNS resource}}

  HealthCheckFoo:
    Type: AWS::Route53::HealthCheck
    Properties:
      HealthCheckConfig:
        FailureThreshold: 1
        FullyQualifiedDomainName: www.example.com
        Port: 443
        RequestInterval: 30
        ResourcePath: /health
        Type: HTTPS

  HealthCheckAlarmFoo:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: HealthCheckAlarmFoo
      ComparisonOperator: LessThanThreshold
      EvaluationPeriods: 1
      MetricName: HealthCheckStatus
      Namespace: AWS/Route53
      Period: 60
      Statistic: Minimum
      Threshold: 1
      Dimensions:
        - Name: &quot;HealthCheckId&quot;
          Value: !Ref HealthCheckFoo
      AlarmDescription: &quot;Foo Health check failed&quot;
      AlarmActions:
        - !GetAtt FooSNS.Outputs.MySNSTopicArn
      OKActions:
        - !GetAtt FooSNS.Outputs.MySNSTopic

</code></pre><p>Quick knowledge: <em>How this <code>HealthCheckAlarmFoo</code> is being attached to this <code>HealthCheckFoo</code>?</em></p><p>It&#x2019;s by these lines.</p><pre><code class="language-yaml">   Dimensions:
        - Name: &quot;HealthCheckId&quot;
          Value: !Ref HealthCheckFoo

</code></pre><p>If you have different types of health checks <a href>e.g.: type calculate</a>, you should use AlarmIdentifier in the health check config. If you try to use this <code>AlarmIdentifier</code> property for basic type healthcare (the one we&#x2019;re creating, you will get a 400 error).</p><p>Now let&#x2019;s create the lambda. In your <code>template.yaml</code> add the configuration for lambda<br></p><pre><code class="language-yaml">  AWSLambdas:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: {{path to your lambda config}}
      Parameters: { }
</code></pre><p>Now let&#x2019;s configure the lambda:<br></p><pre><code class="language-yaml">AWSTemplateFormatVersion: &quot;2010-09-09&quot;
Transform: AWS::Serverless-2016-10-31
Description: Lambda functions

Resources:
  SendSlackNotificationFunction:
    Type: AWS::Serverless::Function
    Architecture: x86_64
    Properties:
      Handler: pathToYourLambdaFunction/index.handler
      Runtime: nodejs18.x [Change it if you use other version]
      CodeUri: [path to the codebase for lambda]
      FunctionName: yourLambdaFunctionNameToSendSlackNotification
      Policies:
        - AWSLambdaBasicExecutionRole

# this is important, otherwise your SNS from US region can&apos;t invoke this
  AllowSNSInvoke:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !GetAtt SendSlackNotificationFunction.Arn
      Principal: &apos;sns.amazonaws.com&apos;

Outputs:
  SendSlackNotificationFunctionArn:
    Description: &quot;Lambda Function ARN for Slack Notifications&quot;
    Value: !GetAtt SendSlackNotificationFunction.Arn

</code></pre><p>And then, let&#x2019;s write the lambda code itself<br></p><pre><code class="language-yaml">const https = require(&apos;https&apos;);

const SLACK_WEBHOOK_URL = &apos;URL FOR SLACK WEBHOOK&apos;;

function getMessageFromTopic(topicName, alarmState) {
	// your logic to generate lamba URL 
}

function handler(event) {

	// Extracting topic name [in case you have multiple sns pointing out same Lambda
    const topicArn = event.Records[0].Sns.TopicArn;
    const topicName = topicArn.split(&apos;:&apos;).pop();
    const alarmMessage = JSON.parse(event.Records[0].Sns.Message);
    const alarmState = alarmMessage.NewStateValue;

    const message = getMessageFromTopic(topicName, alarmState);
    const postData = JSON.stringify({ text: message });

    const options = {
        method: &apos;POST&apos;,
        headers: {
            &apos;Content-Type&apos;: &apos;application/json&apos;,
            &apos;Content-Length&apos;: postData.length
        }
    };

    return new Promise((resolve, reject) =&gt; {
        const req = https.request(SLACK_WEBHOOK_URL, options, (res) =&gt; {
            if (res.statusCode === 200) {
                resolve({ statusCode: 200, body: &apos;Message sent to Slack&apos; });
            } else {
                reject(new Error(`Request to slack returned an error ${res.statusCode}, ${res.statusMessage}`));
            }
        });

        req.on(&apos;error&apos;, (e) =&gt; {
            reject(new Error(e.message));
        });

        req.write(postData);
        req.end();
    });
};

module.exports = {
    handler
};

</code></pre><p>Finally, for deploying you can use these commands<br></p><pre><code class="language-yaml">          sam build --template template.us.yaml --use-container
          sam deploy --config-file samconfig.toml --no-confirm-changeset --no-fail-on-empty-changeset --config-env dev-us-east-1 
</code></pre><p>So, there you go! Handling health check notifications across various parts of AWS doesn&apos;t have to be daunting. With SNS and Lambda, you&apos;re equipped to stay in the loop when issues arise.</p><p><em>Pro tip: You can also do some basic steps to recover your endpoint, may be restarting the server from lambda as well?</em></p>]]></content:encoded></item><item><title><![CDATA[Maximum Subarray Sum: Kadanes Algorithm (Dynamic Programming)]]></title><description><![CDATA[<p><br>Problem: <strong><em>We have to find the maximum subarray sum.</em></strong></p><p>Eg: Lets consider this array &#x21D2; <a href>-10, 5, -9, 1, 3, -2, 3, 4, 7, 2, -9, 6, 3, 1, -5, -4</a>, the answer for maximum subarray sum is 19. (1, 3, -2, 3, 4, 7, 2, -9, 6, 3, 1)</p>]]></description><link>https://saadnoor.com/maximum-subarray-sum-kadanes-algorithm-dynamic-programming/</link><guid isPermaLink="false">64e2807f8c8fff2a4456d432</guid><category><![CDATA[programming]]></category><category><![CDATA[algorithm]]></category><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Sun, 20 Aug 2023 21:08:51 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1jwHOE2G-mKDLT8eri4MHOr6AHNLE6JzS.png" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1jwHOE2G-mKDLT8eri4MHOr6AHNLE6JzS.png" alt="Maximum Subarray Sum: Kadanes Algorithm (Dynamic Programming)"><p><br>Problem: <strong><em>We have to find the maximum subarray sum.</em></strong></p><p>Eg: Lets consider this array &#x21D2; <a href>-10, 5, -9, 1, 3, -2, 3, 4, 7, 2, -9, 6, 3, 1, -5, -4</a>, the answer for maximum subarray sum is 19. (1, 3, -2, 3, 4, 7, 2, -9, 6, 3, 1)</p><p>Solution &#x21D2; Naive approach, brute-force. Generate all the arrays and get the maximum sum.</p><p>From this, we can generate subarrays like,</p><p>-10</p><p>-10, 5</p><p>-10, 5, 9</p><p>-10, 5, 9, 1</p><p>-10, 5, 9, 1 , 3</p><p>...</p><p>...</p><p>5</p><p>5, 9</p><p>5, 9, 1</p><p>5, 9, 1, 3</p><p>5, 9, 1, 3, 2</p><p>..</p><p>...</p><p>We can generate all the subarrays and take the maximum sum, in that case, our code will look like</p><pre><code>// n*n solution
#include &lt;vector&gt;
using namespace std;

int notKadanesAlgorithm(vector&lt;int&gt; array) {
	int n = array.size();
	vector&lt;int&gt; sum;
	int res = INT_MIN;

	//Cumulative Sum
	sum.push_back(array[0]);
	for(int i = 1; i &lt; n; i++)sum.push_back(sum[i-1] + array[i]);

	// Generate every pair and take maximum.
	for(int i = 0; i &lt; n; i++) {
		for(int j = i; j &lt; n; j++  ) {
			res = max(res, sum[j]-sum[i - 1]);
		}
	}
  return res;
}
</code></pre><p>But this has a complexity of O(n^2) we can reduce it to O(n) if we use Kadane&apos;s algorithm. Which uses dynamic programming. While traversing the array, we can keep track of what was the maximum number, if the array was ended here.</p><p>for example, if our array is <a href>-1, 2, 3, -4</a>, we can generate another array which ith position will hold the maximum value if the array was ended here. We&apos;ll get <a href>-1, 2, 5, 1</a></p><p>. Let me explain how.</p><p>In any place, we have either 2 choices. Either we can add the current array item in our sum, or we can start a new array from here.</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1vJtgOgEnmYMa6ajATMD3eVfq4fuiespF.png" class="kg-image" alt="Maximum Subarray Sum: Kadanes Algorithm (Dynamic Programming)" loading="lazy" width="753" height="157"></figure><p>When i = 0, our <code>maxEndingHere[0] = -1</code> &#x21D2; we don&apos;t have any option but to take the first element.</p><p>then i = 1, we get 2 as the current value of the array. Now we have 2 choices:</p><ol><li>We can consider the subarray ends here (index 1, having value 2). The subarray is <a href>-1, 2</a>, in that case, we can get our maximum subarray sum -1+2=-1</li><li>We can consider a new subarray starting from here. The subarray is <a href>2</a>, resulting in maximum subarray sum = 2</li></ol><p>as the second option results in maximum value, we will go with it. So, <code>maxEndingHere[1] = 2</code></p><p>After that when i = 2, we get the maximum subarray sum if we take 3, is 5, or we can start a subarray from here, which will give us 3. So our <code>maxEndingHere[2] = 5</code></p><p>and finally, in the same procedure, we can get <code>maxEndingHere[3] = 1</code>( max( (5 -4), -4)))</p><p>So our resulted maxEndingHere array is &#x21D2; <a href>-1, 2, 5, 1</a></p><p>we can find the maximum number of this array, which is the result, for this example, 5.</p><p>Our code will look like this:</p><pre><code>#include &lt;vector&gt;
using namespace std;

int kadanesAlgorithm(vector&lt;int&gt; array) {
	vector&lt;int&gt;maxEndHere;
	if(array.size()&gt;0)maxEndHere.push_back(array[0]);

	for(int i = 1; i &lt; array.size(); i++){
		int here = max(maxEndHere[i-1]+array[i], array[i]);
		maxEndHere.push_back(	here );
	}

// Finding the maximum array in this vector
	return *max_element(maxEndHere.begin(), maxEndHere.end());
}
</code></pre><p>Now it runs on O(n) but space complexity is still O(n) which we can reduce to O(1) but not store the whole array into <code>maxEndHere.</code> We can just declare an integer and keep the maximum value in it while traversing the array. But this task is for you to do. &#x1F607;</p>]]></content:encoded></item><item><title><![CDATA[Server Side Rendering Visualised]]></title><description><![CDATA[<p>Lets take a look, nowadays, how a modern web app is displayed in browser. A typical response sent by an Angular app looks like this,</p><ol><li>A bare , poor and sad HTML file</li></ol><pre><code>&lt;!doctype html&gt;
	&lt;html lang=&quot;en&quot;&gt;
	&lt;head&gt;
	&#xA0;&#xA0;&#xA0;&lt;</code></pre>]]></description><link>https://saadnoor.com/server-side-rendering-visualised/</link><guid isPermaLink="false">64e2790b8c8fff2a4456d3f5</guid><category><![CDATA[programming]]></category><category><![CDATA[angular]]></category><category><![CDATA[javascript]]></category><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Sun, 20 Aug 2023 20:42:01 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1W4Qaw1OMH3j8VbuB8plGmwnIQQETdQlP.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1W4Qaw1OMH3j8VbuB8plGmwnIQQETdQlP.jpg" alt="Server Side Rendering Visualised"><p>Lets take a look, nowadays, how a modern web app is displayed in browser. A typical response sent by an Angular app looks like this,</p><ol><li>A bare , poor and sad HTML file</li></ol><pre><code>&lt;!doctype html&gt;
	&lt;html lang=&quot;en&quot;&gt;
	&lt;head&gt;
	&#xA0;&#xA0;&#xA0;&lt;title&gt;Angular&lt;/title&gt;
	&#xA0;&#xA0;&#xA0;&lt;base href=&quot;/&quot;&gt;
	&#xA0;&#xA0;&#xA0;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&#xA0;&#xA0;&#xA0;&lt;app-root&gt;&lt;/app-root&gt;
	
	&lt;script type=&quot;text/javascript&quot; src=&quot;inline.f481c2f5e1589433c6b6.bundle.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;polyfills.8135eb80f6191ae1578b.bundle.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;main.7dd036568b70b6284d5d.bundle.js&quot;&gt;&lt;/script&gt;&#xA0;&#xA0;&#xA0;&#xA0;
	
	&lt;/body&gt;
	&lt;/html&gt;</code></pre><p>2. A rich <code>main.js</code> file, which is the life for that app.</p><p>Browsers take this <code>main.js</code> file and parse and render our app, it makes that bare HTML meaningful. But what if, the user disables Javascript on his browser?</p><p>Well, he will see this - an empty and dead page -</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/17uWE8p8juWlMdMN9QSx0YzzsRncrMrNf.png" class="kg-image" alt="Server Side Rendering Visualised" loading="lazy"></figure><p><em>but wait? Seriously? Somebody will disable Javascript in their browser at 2020? Who is that dumb?</em></p><p>well, search engine crawlers are dumb. They will. When they want to index our webpage for search results, they will find a plain old HTML file who has nothing, and a big <code>main.js</code> file for which they don&apos;t have any time or respect. When they see that the javascript file is too big to parse, they will ignore it. So our Angular app performs poorly in terms of SEO.</p><p><em>What&apos;s the solution?</em></p><p>we can use a quick 3rd party-based solution, <a href>prerender.io</a>(http://prerender.io/) . It checks the person who requested your webpage, is a bot or human. If it&apos;s a human, it sends the regular response - a plain HTML with a main.js file. But if it&apos;s a bot, prerender.io opens a browser in itself, renders the app there and then sends the contentful html files.</p><p>So the SEO problem can be solved. But-</p><ol><li>It&apos;s not a good way</li><li>There are more problems to solve, <em>the first meaningful</em> paint problem</li></ol><p>First meaningful paint measures when the primary content of a page is visible to the user. In the picture below we can see user had to wait for 8 seconds to see anything meaningful.</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1Mr8NmuIibLaQwEH3Cxv0JtSd2xcm7rpu.png" class="kg-image" alt="Server Side Rendering Visualised" loading="lazy"></figure><p>A big portion of this 8 seconds time used to -</p><ol><li>Download that <code>main.js</code> file, if the user&apos;s internet is slow - this time will increase.</li><li>Parse and render that <code>main.js</code> file.</li></ol><p>And user didn&apos;t see anything meaningful on the screen, recent study shows that user leaves any webpage that takes more than 3 seconds to load.</p><p>Server-side rendering solves both problems. Instead of sending the a dead blank HTML file, it renders our app in the server ( blessings of Node.js), and sends the HTML to the browser. Now users don&apos;t have to wait for downloading that big <code>main.js</code> file. It can show the server-rendered HTML immediately. So users will able to see some meaningful content very fast.</p><p>Now let&apos;s see how this SSR works:</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/16Hu08Lqp-9GZEjeKAb8bZsvrdUKwAy90.gif" class="kg-image" alt="Server Side Rendering Visualised" loading="lazy"></figure><ol><li>The client makes a GET request to the server for the webpage</li><li>The server parses and renders an HTML file immediately</li><li>Client shows this HTML to the user, the user sees meaningful content but the app isn&apos;t ready yet</li><li>The server also sends the angular/react app (that <code>main.js</code> file)</li><li>Client downloads that file and loads our app background</li><li>Once everything is ready client-side, it seamlessly switches from showing the server-rendered pages to the client-side app. The server gives control to the client when it&apos;s ready.</li></ol><p>As meaningful HTML is served to the user immediately, So first meaningful paint time improves significantly with SSR.</p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1JUMKCLkiyqP5pkVRLnFxxK6vGfO2B-WW.png" class="kg-image" alt="Server Side Rendering Visualised" loading="lazy"></figure><p>In the next post, we will learn how to implement Server Side Rendering with Angular, stay tuned.</p>]]></content:encoded></item><item><title><![CDATA[A Minor Life Update: Embarking on the Digital Nomad Journey]]></title><description><![CDATA[<p></p>
<p>Minor life update: I fulfilled one of my dreams, becoming a digital nomad.</p>
<p>I accepted an offer from a fintech start-up for a senior software engineer role, which will allow me to work from anywhere in the world. </p>
<p>I love to travel, I wanted to work from Paris one morning,</p>]]></description><link>https://saadnoor.com/a-minor-life-update-embarking-on-the-digital-nomad-journey/</link><guid isPermaLink="false">6706fa93fc9f0131fa116176</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Thu, 30 Mar 2023 21:50:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1654355205410-30ca4ba0dc22?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDYxfHxkaWdpdGFsJTIwbm9tYWR8ZW58MHx8fHwxNzI4NTEwNjkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1654355205410-30ca4ba0dc22?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDYxfHxkaWdpdGFsJTIwbm9tYWR8ZW58MHx8fHwxNzI4NTEwNjkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="A Minor Life Update: Embarking on the Digital Nomad Journey"><p></p>
<p>Minor life update: I fulfilled one of my dreams, becoming a digital nomad.</p>
<p>I accepted an offer from a fintech start-up for a senior software engineer role, which will allow me to work from anywhere in the world. </p>
<p>I love to travel, I wanted to work from Paris one morning, Amsterdam another,  and ghurte tired laagle Berlin </p>
<p>I&apos;ve been looking for this opportunity for years, and finally bat e ball e milse.  </p>
<p>Career-wise, I don&#x2019;t know if I made the right choice, I&apos;ve been spinning same old NODEJS microservices for years now, and maybe I should focus more on stability. </p>
<p>But but but at this very moment - this decision made me happy. </p>
<p>And perhaps that&apos;s what matters most at the end of the day.</p>]]></content:encoded></item><item><title><![CDATA[Introduction To Unit Test in .NET Core Applications By Xunit And Moq]]></title><description><![CDATA[<p>Let&#x2019;s assume, I have written some introductory sentences about what is unit testing and why it&#x2019;s important. Let&#x2019;s jump into main topic directly.</p><p>For writing unit test in .NET core applications we have some libraries like MSTest, NUnit , Xunit. In this post, I will</p>]]></description><link>https://saadnoor.com/introduction-to-unit-test-in-net-core-applications-by-xunit-and-moq/</link><guid isPermaLink="false">64e292958c8fff2a4456d483</guid><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Sun, 20 Sep 2020 22:24:00 GMT</pubDate><media:content url="https://saadnoor.com/content/images/1gPHZWX4JK2mw6W3vNUqUjRIoXsM3WLdG.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://saadnoor.com/content/images/1gPHZWX4JK2mw6W3vNUqUjRIoXsM3WLdG.jpg" alt="Introduction To Unit Test in .NET Core Applications By Xunit And Moq"><p>Let&#x2019;s assume, I have written some introductory sentences about what is unit testing and why it&#x2019;s important. Let&#x2019;s jump into main topic directly.</p><p>For writing unit test in .NET core applications we have some libraries like MSTest, NUnit , Xunit. In this post, I will be discussing about Xunit. For getting started, open your IDE and create a solution named <code>HelloWorldUnitTest</code> and add 2 projects, <code>PrimeDetector</code> and <code>PrimeDetectorTest</code></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://saadnoor.com/content/images/1U3gC5VWmTWb5_N9e1RkMGx6OnUyTW2Pg.png" class="kg-image" alt="Introduction To Unit Test in .NET Core Applications By Xunit And Moq" loading="lazy"><figcaption>Alt Text</figcaption></figure><p>Now, we&#x2019;ll write a function first, and then write unit test by using xunit. Lets start by writing the function, Lets add a class in <code>PrimeDetector</code> project named <code>PrimeDetectorModel.cs</code></p><pre><code>    public class PrimeDetectorModel
    {
        public bool IsPrime(int n)
        {
            var isPrime = true;

            for (int i = 2; i &lt; Math.Sqrt(n); i++)
            {
                if (n % i == 0) isPrime = false;
            }

            return isPrime;
        }

    }

</code></pre><p>Now we&apos;ll write unit test for the <code>isPrime()</code>method. Let&apos;s add a class named <code>PrimeDetectorTest.cs</code> in the <code>PrimeDetectorTest</code> project.</p><pre><code>public class PrimeDetectorTest
{
 	[Fact]
        public void Test_If_It_Can_Detect_A_Prime_Number()
        {
           // Arrange
            var primeDetector = new PrimeDetectorModel();

            // Act
            var isPrime = primeDetector.IsPrime(29);

            // Assert
            Assert.Equal(isPrime, true);
        }
}
</code></pre><p><em>What&apos;s happening here?</em></p><p>With the <code>[Fact]</code>attribute, xUnit.net test runner identifies it&apos;s a unit test to execute. Here, we will test whether our isPrime() identify a prime number or not.</p><p>Every unit test has 3 parts:</p><ol><li><strong>Arrange</strong>: this portion will have code required to setup the test, in above example we need an instance of <code>PrimeDetectorModel</code> to call our <code>isPrime()</code> method.</li><li><strong>Act</strong>: In this portion, we&apos;ll call the function which we want to test. Eg: here we called <code>IsPrime()</code> with a prime number</li><li><strong>Assert</strong>: this portion will responsible to judge whether our expectations were met or not. Eg: here, we checked value of <code>isPrime</code> is true or not.</li></ol><p><em>How can we run this test multiple times with different input?</em></p><p>The above example tests whether our <code>isPrime()</code>method works for 29 or not. Now we want to test it for more integers, let&apos;s say for 2, 5, 7, 19 and 23. Instead of copying and pasting the previous test function for 5 times, we can take advantage of <code>[Theory]</code> attribute. Our test function will now look like</p><pre><code>	[Theory]
        [InlineData(2)]
        [InlineData(5)]
        [InlineData(19)]
        [InlineData(23)]
        public void Test_If_It_Can_Detect_Non_Prime_Numbers(int n)
        {


            // Arrange
            var primeDetector = new PrimeDetectorModel();

            // Act
            var isPrime = primeDetector.IsPrime(n);

            // Assert
            Assert.Equal(isPrime, true);
        }
</code></pre><p>If we run this test, we will see our test function ran 4 times with the values we have given with <code>[InlineData(n)]</code> attribute.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://saadnoor.com/content/images/1K9xBfFWk1CI_gxH0vgc6rL1aeRwTJzeG.png" class="kg-image" alt="Introduction To Unit Test in .NET Core Applications By Xunit And Moq" loading="lazy"><figcaption>Alt Text</figcaption></figure><p><code>[Theory]</code> attribute denotes a parameterised test, and by the help of the <code>[InlineData]</code> we provide the values for the parameter.</p><p><em>Summary: When we need to run the test once, we don&apos;t need any parameter to be passed through the test function, we&apos;ll use <code>[Fact]</code> attribute, otherwise we&apos;ll use <code>[Theory]</code> attribute.</em></p><p>There are some limitations with <code>[InlineData]</code> attribute, it works with only constants. What if we need to send an object as a parameter?</p><p>Let&apos;s add a <code>PersonModel</code> Class in <code>PrimeDetector</code> project.</p><pre><code> public class PersonModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
</code></pre><p>Now add <code>HasPrimeId()</code> method, bellow the <code>isPrime()</code> method. It will take an object of PersonModel and check whether the <code>Id</code> property is Prime or not.</p><pre><code>        public bool HasPrimeId(PersonModel person)
        {
            return IsPrime(person.Id);
        }
</code></pre><p>Now, we&apos;ll write unit test for it. Go to the <code>PrimeDetectorTest</code> file and add this chunk of code.</p><pre><code>    public static IEnumerable&lt;object[]&gt; GetTestData()
    {
        yield return new object[] { new PersonModel { Id = 5, Name = &quot;Saadnoor&quot; } };
        yield return new object[] { new PersonModel { Id = 7, Name = &quot;Salehin&quot; } };
    }

    [Theory]
    [MemberData(nameof(GetTestData))]
    public void Test_If_It_Can_Detect_Person_Has_Prime_Id_Or_Not(PersonModel person)
    {

        // Arrange
        var primeDetector = new PrimeDetectorModel();

        // Act
        var hasPrimeId = primeDetector.HasPrimeId(person);

        // Assert
        Assert.Equal(hasPrimeId, true);
    }
</code></pre><p>It will call the test function <code>Test_If_It_Can_Detect_Person_Has_Prime_Id_Or_Not()</code> two times with 2 different <code>PersonModel</code> object.</p><ol><li><code>{ Id = 5, Name = &quot;Saadnoor&quot; }</code></li><li><code>{ Id = 7, Name = &quot;Salehin&quot; }</code></li></ol><p>Note that, we have to set the return type of the <code>GetTestData()</code> method as <code>IEnumerable&lt;object[]&gt;</code> otherwise xUnit will throw an error. If we need 2 or more parameters in our test function, we can do that by adding it to the <code>object[]</code> array.</p><p>We can provide data with <code>[ClassData]</code> attribute also, but I&apos;m skipping it in this post, to keep the post short and simple.</p><p>Now what if we have some dependencies to initiate our <code>PrimeDetectorModel</code>? How will we test it?</p><p><code>Moq</code> will save us here. Let&apos;s assume, to initiate <code>PrimeDetectorModel</code> we have a dependency of <code>PositiveDetectorModel</code> (which helps us to determine whether a number is positive or not).</p><p>Our <code>PrimeDetectorModel</code> class will now look like:</p><pre><code>    public class PrimeDetectorModel
    {
        public PositiveDetector positiveDetector { get; set; }

        public PrimeDetectorModel(PositiveDetector positiveDetector)
        {
            this.positiveDetector = positiveDetector;
        }

        public bool IsPrime(int n)
        {
            if (!positiveDetector.IsNumberPositive(n)) throw new Exception(&quot;Invalid Input&quot;);

            var isPrime = true;

            for (int i = 2; i &lt; Math.Sqrt(n); i++)
            {
                if (n % i == 0) isPrime = false;
            }

            return isPrime;
        }

        public bool HasPrimeId(PersonModel person)
        {
            return IsPrime(person.Id);
        }
    }
</code></pre><p>Now our <code>isPrime()</code> function checks whether the given number is positive or not, if the number isn&apos;t positive, it throws an Exception.</p><p>It takes help from <code>IsNumberPositive</code> method, which comes from <code>PositiveDetector</code> model.</p><p>Now, while writing the test, we will create a mock of <code>PositiveDetectorModel</code>, and we are not bothered with <code>isNumberPositive()</code> method of this class, as we are writing unit test for <code>isPrime()</code> method, we&apos;ll assume that, <code>isNumberPositive</code> works properly, we&apos;ll mock it&apos;s result too. Our test function is now looks like this.</p><pre><code>        [Theory]
        [InlineData(2)]
        [InlineData(5)]
        [InlineData(19)]
        [InlineData(23)]
        public void Test_If_It_Can_Detect_Non_Prime_Numbers(int n)
        {
            // Arrange
            var positiveDetectorMock = new Mock&lt;PositiveDetector&gt;();

            var primeDetector = new PrimeDetectorModel(
            positiveDetectorMock.Object
            );

            positiveDetectorMock
            .Setup(pd =&gt; pd.IsNumberPositive(n)).Returns(true);

            // Act
            var isPrime = primeDetector.IsPrime(n);

            // Assert
            Assert.Equal(isPrime, true);
        }
</code></pre><p>Here, all the inputs (2, 5, 19, 23) are positive numbers, so we are mocking the <code>isNumberPositive()</code> function by returning true for these input.</p><pre><code> positiveDetectorMock
            .Setup(pd =&gt; pd.IsNumberPositive(n)).Returns(true);
</code></pre><p>That&apos;s pretty much covers the basic of writing unit tests with xUnit and Moq, for more details you can go to the resources of the reference section, unfortunately xUnit&apos;s documentation sucks. Let me know if you have any feedback regarding this post by comments.</p><p>All my codes used here will be found here - <a href="https://github.com/saadnoor/UnitTestWithXunit?ref=saadnoor.com">https://github.com/saadnoor/UnitTestWithXunit</a></p><p>References:</p><ol><li><a href="https://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/?ref=saadnoor.com">https://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/</a></li><li><a href="https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/?ref=saadnoor.com">https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/</a></li><li><a href="https://xunit.net/?ref=saadnoor.com#documentation">https://xunit.net/#documentation</a></li><li><a href="https://github.com/Moq/moq4/wiki/Quickstart?ref=saadnoor.com">https://github.com/Moq/moq4/wiki/Quickstart</a></li></ol>]]></content:encoded></item><item><title><![CDATA[GCC vs. Clang and How to use bits/stdc++ header in MacOS]]></title><description><![CDATA[<p>For compiling <code>c++</code>, there are many compilers in the market, but 3 are very popular.</p><ol><li>Visual <code>C++</code></li><li>GNU Compiler Collection (GCC)</li><li>Clang</li></ol><p>Among them, Visual <code>C++</code> was developed by Microsoft, and they don&#x2019;t support other platforms like Linux. (Typical Microsoft &#x1F61B;).</p><p>GNU was a project, started by Richard</p>]]></description><link>https://saadnoor.com/gcc-vs-clang-and-how-to-use-bitsstdc-header-in-macos/</link><guid isPermaLink="false">64e2715b8c8fff2a4456d3b5</guid><category><![CDATA[c++]]></category><category><![CDATA[programming]]></category><dc:creator><![CDATA[MD SAADNOOR SALEHIN]]></dc:creator><pubDate>Fri, 07 Aug 2020 20:09:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1584949091598-c31daaaa4aa9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fGNvZGV8ZW58MHx8fHwxNjkyNDk0MDY0fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1584949091598-c31daaaa4aa9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fGNvZGV8ZW58MHx8fHwxNjkyNDk0MDY0fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="GCC vs. Clang and How to use bits/stdc++ header in MacOS"><p>For compiling <code>c++</code>, there are many compilers in the market, but 3 are very popular.</p><ol><li>Visual <code>C++</code></li><li>GNU Compiler Collection (GCC)</li><li>Clang</li></ol><p>Among them, Visual <code>C++</code> was developed by Microsoft, and they don&#x2019;t support other platforms like Linux. (Typical Microsoft &#x1F61B;).</p><p>GNU was a project, started by Richard Stallman in 1984, which eventually produced many popular open-source software tools like Make, Sed, and Emacs. GCC was one of them. GCC was used by all UNIX-based OS. Apple also used it for macOS. But over time, Apple wanted to add many features to <code>C++</code> for their own requirements which weren&#x2019;t accepted well by GNU developers. So Apple engineers made a separate branch for their own version of <code>c++</code> the compiler, which was eventually called CLANG.</p><p>And that&#x2019;s why some features we get in GCC but not in CLANG. Most competitive programmers include all possible header files that might be needed for writing that program. But if we are using macOS, it can&#x2019;t recognise <code>include&lt;bits/stdc++.h</code>.</p><p>To solve this problem,</p><ol><li>open finder then click <code>Go to folder</code></li></ol><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/19yBtk1t6pNbYu1AncB-tKJUIMSyZSMb5.png" class="kg-image" alt="GCC vs. Clang and How to use bits/stdc++ header in MacOS" loading="lazy" width="496" height="428"></figure><p>2. paste this address <code>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/</code></p><figure class="kg-card kg-image-card"><img src="https://saadnoor.com/content/images/1LYsr4NXDHQqIGemBaWlt8T_KCQ-Ojghc.png" class="kg-image" alt="GCC vs. Clang and How to use bits/stdc++ header in MacOS" loading="lazy" width="447" height="171"></figure><p>3. Create a new folder name <code>bits</code></p><p>4. inside <code>bits</code> create a new file named <code>stdc++.h</code>. To create a file open terminal and inside that folder and type <code>touch stdc++.h</code></p><p>5. paste the code written below inside that file.</p><pre><code>/** @file stdc++.h
 *  This is an implementation file for a precompiled header.
  */


  using namespace std;


  // 17.4.1.2 Headers

  // C
  #ifndef _GLIBCXX_NO_ASSERT
  #include &lt;cassert&gt;
  #endif
  #include &lt;cctype&gt;
  #include &lt;cerrno&gt;
  #include &lt;cfloat&gt;
  #include &lt;ciso646&gt;
  #include &lt;climits&gt;
  #include &lt;clocale&gt;
  #include &lt;cmath&gt;
  #include &lt;csetjmp&gt;
  #include &lt;csignal&gt;
  #include &lt;cstdarg&gt;
  #include &lt;cstddef&gt;
  #include &lt;cstdio&gt;
  #include &lt;cstdlib&gt;
  #include &lt;cstring&gt;
  #include &lt;ctime&gt;

  #if __cplusplus &gt;= 201103L
  #include &lt;ccomplex&gt;
  #include &lt;cfenv&gt;
  #include &lt;cinttypes&gt;
  #include &lt;cstdbool&gt;
  #include &lt;cstdint&gt;
  #include &lt;ctgmath&gt;
  #include &lt;cwchar&gt;
  #include &lt;cwctype&gt;
  #endif

  // C++
  #include &lt;algorithm&gt;
  #include &lt;bitset&gt;
  #include &lt;complex&gt;
  #include &lt;deque&gt;
  #include &lt;exception&gt;
  #include &lt;fstream&gt;
  #include &lt;functional&gt;
  #include &lt;iomanip&gt;
  #include &lt;ios&gt;
  #include &lt;iosfwd&gt;
  #include &lt;iostream&gt;
  #include &lt;istream&gt;
  #include &lt;iterator&gt;
  #include &lt;limits&gt;
  #include &lt;list&gt;
  #include &lt;locale&gt;
  #include &lt;map&gt;
  #include &lt;memory&gt;
  #include &lt;new&gt;
  #include &lt;numeric&gt;
  #include &lt;ostream&gt;
  #include &lt;queue&gt;
  #include &lt;set&gt;
  #include &lt;sstream&gt;
  #include &lt;stack&gt;
  #include &lt;stdexcept&gt;
  #include &lt;streambuf&gt;
  #include &lt;string&gt;
  #include &lt;typeinfo&gt;
  #include &lt;utility&gt;
  #include &lt;valarray&gt;
  #include &lt;vector&gt;

  #if __cplusplus &gt;= 201103L
  #include &lt;array&gt;
  #include &lt;atomic&gt;
  #include &lt;chrono&gt;
  #include &lt;condition_variable&gt;
  #include &lt;forward_list&gt;
  #include &lt;future&gt;
  #include &lt;initializer_list&gt;
  #include &lt;mutex&gt;
  #include &lt;random&gt;
  #include &lt;ratio&gt;
  #include &lt;regex&gt;
  #include &lt;scoped_allocator&gt;
  #include &lt;system_error&gt;
  #include &lt;thread&gt;
  #include &lt;tuple&gt;
  #include &lt;typeindex&gt;
  #include &lt;type_traits&gt;
  #include &lt;unordered_map&gt;
  #include &lt;unordered_set&gt;
  #endif

</code></pre><p>save and exit. After that, it will work fine.<br></p>]]></content:encoded></item></channel></rss>