<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Fatma Janna on Medium]]></title>
        <description><![CDATA[Stories by Fatma Janna on Medium]]></description>
        <link>https://medium.com/@fatma_2377?source=rss-f2161936d0be------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*nMUbtl8OET6GuV8H.jpg</url>
            <title>Stories by Fatma Janna on Medium</title>
            <link>https://medium.com/@fatma_2377?source=rss-f2161936d0be------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 19 Jun 2026 20:18:57 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@fatma_2377/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Leveraging Technology to Shape Indonesia’s Future]]></title>
            <link>https://medium.com/@fatma_2377/leveraging-technology-to-shape-indonesias-future-8ae6e2be8a09?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/8ae6e2be8a09</guid>
            <category><![CDATA[innovation]]></category>
            <category><![CDATA[nation]]></category>
            <category><![CDATA[dream-big-to-achieve-big]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Wed, 28 Aug 2024 03:13:11 GMT</pubDate>
            <atom:updated>2024-08-28T03:13:11.296Z</atom:updated>
            <content:encoded><![CDATA[<p>As Indonesia stands on the cusp of a new era, the potential of technology to transform our nation is limitless. With the right resources and commitment, we can tackle some of the most pressing challenges facing our country. If I were given the chance to shape Indonesia’s future, I would focus on three pivotal areas: handling corruption, improving education, and revolutionizing waste management. These areas, if addressed effectively through technological advancements, could unlock Indonesia’s full potential and pave the way for a stronger and more prosperous nation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yHAppvMYhvcE764Tncughg.jpeg" /><figcaption>Ideas and Innovation for our nation, image illustration <a href="https://www.freepik.com/free-vector/hand-drawn-innovative-idea-illustrated_20286047.htm#fromView=keyword&amp;page=1&amp;position=0&amp;uuid=13b98b4b-c106-4533-b6d1-3d366fabfb4c">source</a></figcaption></figure><p><strong>Combating Corruption with AI</strong></p><p>Corruption has long been a significant hurdle in Indonesia’s path to progress. It siphons resources away from essential public services, undermines trust in government institutions, and stifles economic growth. To address this, I would implement advanced AI systems to analyze and detect any indications of corruption and gratification. By leveraging machine learning and big data, these AI systems could monitor financial transactions, contracts, and government projects in real time.</p><p>Whenever a suspicious activity is detected, a notification would be sent to a specialized task force, ensuring immediate action. This technology-driven approach would help secure the nation’s resources from being exploited by corrupt individuals. Furthermore, those found guilty of corruption would face severe consequences, extending to their extended family and anyone who benefited from the illicit activities. This would serve as a powerful deterrent, ensuring that the nation’s wealth is preserved and used for the common good.</p><p><strong>Revolutionizing Education for a Brighter Future</strong></p><p>Education is the cornerstone of any nation’s progress, and in Indonesia, it holds the key to unlocking the potential of our youth. With the money saved from eradicating corruption, I would invest heavily in building schools and educational facilities across the country, particularly in underserved areas. This would ensure that every Indonesian, regardless of their socioeconomic background, has access to quality education.</p><p>Subsidized fees would be provided for the poor and marginalized communities, allowing them to pursue their educational aspirations without financial barriers. Additionally, I would establish specialized schools for gifted Indonesian students who have the potential to think outside the box and develop innovative solutions to our nation’s challenges. By nurturing these young minds, we can cultivate a generation of leaders, thinkers, and innovators who will drive Indonesia’s future success.</p><p><strong>Transforming Waste Management with Technology</strong></p><p>Indonesia’s waste management system has long needed an overhaul. Improper disposal methods, such as burning waste, contribute to pollution and health issues across the country. To address this, I would implement an end-to-end technological solution that covers every aspect of waste management, from collection and sorting to recycling and disposal.</p><p>Advanced sensors and AI could be employed to optimize waste collection routes, ensuring that no waste is left uncollected. Recycling plants would be upgraded with state-of-the-art technology to maximize efficiency and minimize environmental impact. Furthermore, I would enforce strict penalties for those who burn waste or engage in other harmful disposal practices. By embracing technology in this way, we can create a cleaner, healthier environment for all Indonesians.</p><p><strong>A Smoke-Free Future</strong></p><p>In addition to these initiatives, I would take bold steps to address another public health concern: smoking. Smoking in public places not only harms the smoker but also exposes others to secondhand smoke, posing significant health risks. I would implement severe punishments for those who smoke in public spaces, and eventually, I would work towards banning cigarettes altogether. This may seem extreme, but the long-term benefits for public health would be immeasurable.</p><p><strong>Conclusion</strong></p><p>Indonesia stands at a crossroads, with the potential to become a global leader in innovation and progress. We can build a stronger, more prosperous nation by leveraging technology to combat corruption, revolutionize education, and transform waste management. With bold ideas, unwavering commitment, and the power of technology, Indonesia’s future is bright, and the possibilities are endless.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8ae6e2be8a09" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Let’s learn about graph]]></title>
            <link>https://medium.com/@fatma_2377/lets-learn-about-graph-66aed7a885e4?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/66aed7a885e4</guid>
            <category><![CDATA[graph]]></category>
            <category><![CDATA[data-structure-algorithm]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Fri, 02 Aug 2024 01:12:48 GMT</pubDate>
            <atom:updated>2024-08-02T01:12:48.431Z</atom:updated>
            <content:encoded><![CDATA[<p>Graphs are fundamental to computer science and mathematics, which model relationships between entities. They consist of nodes (also known as vertices) and edges (the connections between nodes). Graphs are versatile and can represent a wide array of real-world problems, from social networks to transportation systems.</p><p>Understanding and solving graph problems involves several key steps: understanding graph theory basics, learning about different types of graphs and common graph algorithms, and applying problem-solving strategies.</p><p>Before we jump in further, let’s learn the key concepts around graphs.</p><h4>Key Concepts</h4><ul><li><strong>Nodes (Vertices)</strong>: These represent the entities or objects in the graph. For example, in a social network, nodes could represent people.</li><li><strong>Edges</strong>: These are the connections between nodes. They can be directed (showing a one-way relationship) or undirected (showing a bidirectional relationship). For instance, in a transportation network, edges might represent roads or flights between cities.</li><li><strong>Weights</strong>: In weighted graphs, edges have values (weights) that represent the cost, distance, or time associated with the connection. For example, in a graph representing a road network, weights could represent distances between cities.</li><li><strong>Paths and Cycles</strong>: A path is a sequence of edges that connect a series of nodes, while a cycle is a path that starts and ends at the same node without retracing any edge.</li></ul><h3>Graph Representations</h3><p><strong>Adjacency Matrix</strong>: A 2D array where cell (i, j) indicates if there&#39;s a direct connection between node i and node j. Useful for dense graphs.</p><pre>adj_matrix = [<br>    [0, 1, 1],<br>    [1, 0, 0],<br>    [1, 0, 0]<br>]</pre><p>Here’s how to interpret and visualize it:</p><ul><li>The matrix is a 3 x 3 matrix representing a graph with 3 nodes.</li><li>The element at position (i, j) indicates whether there is an edge between node i and node j. In an undirected graph, the matrix is symmetric.</li></ul><h4>Interpreting the Matrix</h4><ol><li><strong>Node 0</strong>: Connected to Node 1 and Node 2 (because both adj_matrix[0][1] and adj_matrix[0][2] are 1).</li><li><strong>Node 1</strong>: Connected to Node 0 (because adj_matrix[1][0] is 1).</li><li><strong>Node 2</strong>: Connected to Node 0 (because adj_matrix[2][0] is 1).</li></ol><h4>Visual Representation</h4><p>The graph can be visualized as follows:</p><pre>   0<br>  / \<br> 1   2</pre><h4>Explanation</h4><ul><li><strong>Node 0</strong> has edges to both Node 1 and Node 2.</li><li><strong>Node 1</strong> and <strong>Node 2</strong> are only connected to Node 0, and they are not connected to each other.</li></ul><p><strong>Adjacency List</strong>: A list where each node has a list of connected nodes. This is space-efficient for sparse graphs.</p><pre>adj_list = {<br>    0: [1, 2],  <br>    1: [5, 6],     <br>    2: [3, 4],<br>    3: [],<br>    4: [7],<br>    5: [],<br>    6: [],<br>    7: []       <br>}</pre><p>Here’s how to interpret and visualize this graph:</p><ul><li><strong>Node 0</strong> connects to Nodes 1 and 2.</li><li><strong>Node 1</strong> connects to Nodes 5 and 6.</li><li><strong>Node 2</strong> connects to Nodes 3 and 4.</li><li><strong>Node 3</strong> has no outgoing edges.</li><li><strong>Node 4</strong> connects to Node 7.</li><li><strong>Nodes 5, 6, and 7</strong> have no outgoing edges.</li></ul><h3>Visual Representation</h3><p>The graph can be visualized as follows:</p><pre>      0<br>     / \<br>    1   2<br>   /|   |\<br>  5 6   3 4<br>           \<br>            7</pre><p>This directed graph shows:</p><ul><li><strong>0 → 1</strong> and <strong>0 → 2</strong>: Node 0 points to Nodes 1 and 2.</li><li><strong>1 → 5</strong> and <strong>1 → 6</strong>: Node 1 points to Nodes 5 and 6.</li><li><strong>2 → 3</strong> and <strong>2 → 4</strong>: Node 2 points to Nodes 3 and 4.</li><li><strong>4 → 7</strong>: Node 4 points to Node 7.</li></ul><p><strong>Edge List</strong>: A collection of all edges in the graph, each represented as a pair of nodes. Simple but not as efficient for querying connections.</p><pre>edge_list = [<br>    (0, 1),  # Edge from Node 0 to Node 1<br>    (0, 2),  # Edge from Node 0 to Node 2<br>    (1, 5),  # Edge from Node 1 to Node 5<br>    (1, 6),  # Edge from Node 1 to Node 6<br>    (2, 3),  # Edge from Node 2 to Node 3<br>    (2, 4),  # Edge from Node 2 to Node 4<br>    (4, 7)   # Edge from Node 4 to Node 7<br>]</pre><h4>Visual Representation</h4><p>The graph can be visualized as follows:</p><pre>      0<br>     / \<br>    1   2<br>   /|   |\<br>  5 6   3 4<br>           \<br>            7<br>            </pre><h4>Explanation</h4><ul><li><strong>(0, 1)</strong>: Node 0 → Node 1</li><li><strong>(0, 2)</strong>: Node 0 → Node 2</li><li><strong>(1, 5)</strong>: Node 1 → Node 5</li><li><strong>(1, 6)</strong>: Node 1 → Node 6</li><li><strong>(2, 3)</strong>: Node 2 → Node 3</li><li><strong>(2, 4)</strong>: Node 2 → Node 4</li><li><strong>(4, 7)</strong>: Node 4 → Node 7</li></ul><p>The edge list provides a straightforward representation of the directed edges in the graph, showing how each node connects to others.</p><h3>Applications</h3><p>Graphs are used in numerous applications, including:</p><ul><li><strong>Social Networks</strong>: Modeling relationships and connections between users.</li><li><strong>Web Page Link Analysis</strong>: Understanding how pages are linked to each other.</li><li><strong>Routing Algorithms</strong>: Finding the shortest path in navigation systems.</li><li><strong>Recommendation Systems</strong>: Suggesting products or content based on user preferences and interactions.</li></ul><p>Understanding graphs and their properties is crucial for solving many computational problems and for developing algorithms that efficiently manage and analyze complex networks.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66aed7a885e4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Art of Garbage Collection: Keeping Our Code Clean and Efficient]]></title>
            <link>https://medium.com/@fatma_2377/the-art-of-garbage-collection-keeping-our-code-clean-and-efficient-be25b8699aa0?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/be25b8699aa0</guid>
            <category><![CDATA[garbage-collection]]></category>
            <category><![CDATA[efficiency]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Fri, 26 Jul 2024 22:48:04 GMT</pubDate>
            <atom:updated>2024-07-26T22:48:04.277Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introduction</h3><p>Imagine living in a house where no one ever takes out the trash. The place would quickly become unlivable, right? The same concept applies to the world of programming. In the vast digital landscapes we create, garbage collection is the process that keeps our “homes” clean, ensuring our applications run smoothly and efficiently. But what exactly is garbage collection, and why is it so important?</p><h3>What is Garbage Collection?</h3><p>Garbage collection (GC) is an automatic memory management feature found in many programming languages, such as Java, Python, and C#. Its main job is to identify and dispose of objects that are no longer needed by a program, freeing up memory resources for future use. This helps prevent memory leaks and ensures that applications don’t consume more memory than necessary.</p><h3>The Garbage Collection Process</h3><p>To understand how garbage collection works, let’s break it down into simple steps:</p><ol><li><strong>Allocation</strong>: When a program needs memory, it requests it from the system. This memory is allocated to store objects created during the program’s execution.</li><li><strong>Identification</strong>: The GC identifies which objects are no longer in use. These are objects that no longer have any references pointing to them, meaning they can’t be accessed by the program anymore.</li><li><strong>Reclamation</strong>: The GC reclaims the memory occupied by these unused objects, making it available for new objects that the program might create.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AGhoqlCveuRXXoSGAEGb-A.jpeg" /><figcaption>Garbage Collection Illustration — <a href="https://www.freepik.com/free-vector/isometric-garbage-waste-recycling-set-with-waste-collecting-sorting-burning-industrial-facilities-with-human-characters-vector-illustration_26766180.htm#fromView=search&amp;page=1&amp;position=24&amp;uuid=96c7845c-4f61-4bb3-832c-92a75def3512">image source</a></figcaption></figure><h3>Types of Garbage Collection Algorithms</h3><p>Different programming languages use different garbage collection algorithms. Here are a few popular ones:</p><ol><li><strong>Mark-and-Sweep</strong>: This algorithm involves two phases. In the mark phase, the GC traverses the object graph, starting from the root references, and marks all reachable objects. In the sweep phase, it reclaims the memory occupied by unmarked objects.</li><li><strong>Reference Counting</strong>: Each object has a count of the number of references pointing to it. When the reference count drops to zero, the object can be safely deleted. However, this method has a drawback: it can’t handle cyclic references.</li><li><strong>Generational GC</strong>: This approach is based on the observation that most objects have a short lifespan. It divides objects into generations and collects younger objects more frequently than older ones. This improves efficiency by focusing efforts on areas where garbage is most likely to accumulate.</li></ol><h3>Why Garbage Collection Matters</h3><p>Effective garbage collection is crucial for several reasons:</p><ol><li><strong>Performance</strong>: By automatically managing memory, GC helps prevent memory leaks, which can slow down or crash applications.</li><li><strong>Developer Productivity</strong>: GC frees developers from manually managing memory, allowing them to focus on writing code that solves actual problems.</li><li><strong>Security</strong>: Automatic memory management reduces the risk of security vulnerabilities caused by improper memory handling, such as buffer overflows.</li></ol><h3>Common Garbage Collection Challenges</h3><p>Despite its benefits, garbage collection is not without challenges:</p><ol><li><strong>Pause Times</strong>: During garbage collection, the application might pause, which can be problematic for real-time systems requiring consistent performance.</li><li><strong>Overhead</strong>: Garbage collection consumes CPU resources, which might impact the overall performance of the application.</li><li><strong>Complexity</strong>: Understanding and tuning GC can be complex, especially for large-scale applications with demanding performance requirements.</li></ol><h3>Tips for Effective Garbage Collection</h3><p>Here are a few tips to help you make the most of garbage collection in your applications:</p><ol><li><strong>Profile and Monitor</strong>: Use profiling tools to monitor memory usage and GC activity. This can help identify potential memory issues and optimize GC performance.</li><li><strong>Optimize Code</strong>: Write efficient code that minimizes unnecessary object creation. Reuse objects when possible to reduce the burden on the GC.</li><li><strong>Tune GC Settings</strong>: Many programming languages allow you to customize GC settings. Experiment with different configurations to find the optimal balance between performance and memory usage.</li></ol><h3>Conclusion</h3><p>Garbage collection is an essential part of modern programming, keeping our digital environments clean and efficient. By understanding how it works and adopting best practices, we can ensure that our applications remain fast, reliable, and secure. So next time you run your code, take a moment to appreciate the unsung hero working behind the scenes: the garbage collector.</p><p>Happy coding!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be25b8699aa0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding and Resolving the “FATAL ERROR: JavaScript heap out of memory” Issue]]></title>
            <link>https://medium.com/@fatma_2377/understanding-and-resolving-the-fatal-error-javascript-heap-out-of-memory-issue-aac8da6b73fe?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/aac8da6b73fe</guid>
            <category><![CDATA[error-handling]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[heap-out-of-memory]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Fri, 22 Mar 2024 01:23:00 GMT</pubDate>
            <atom:updated>2024-03-23T13:56:07.211Z</atom:updated>
            <content:encoded><![CDATA[<p>Have you encountered the dreaded “FATAL ERROR: JavaScript heap out of memory” while building your JavaScript application? It can be frustrating, right? You’re not alone. Let’s dive deeper into what this error means, what can cause it, and strategies to effectively handle it.</p><figure><img alt="Error image illustration, Image by &lt;a href=”https://pixabay.com/users/mohamed_hassan-5229782/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=6984855&quot;&gt;Mohamed Hassan&lt;/a&gt; from &lt;a href=”https://pixabay.com//?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=6984855&quot;&gt;Pixabay&lt;/a&gt;" src="https://cdn-images-1.medium.com/max/1024/1*ta0SSOp_gt0qBg_1JXjWGQ.png" /><figcaption>Error — image by <a href="https://pixabay.com/users/mohamed_hassan-5229782/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=6984855">Muhammad Hassan</a> from <a href="https://pixabay.com//?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=6984855">source</a></figcaption></figure><blockquote>First thing first, what does this error message, “FATAL ERROR: JavaScript heap out of memory”, mean?</blockquote><p>The “FATAL ERROR: JavaScript heap out of memory” error occurs when a JavaScript application <strong>exceeds the memory limit</strong> allocated to its heap by the Node.js runtime. This heap is where JavaScript objects are stored and managed during program execution. You can read further explanation on JavaScript Memory Management <a href="https://felixgerschau.com/javascript-memory-management/">here</a>.</p><p>Ok, now we know what the error message means, let’s learn what are the things that can cause it:</p><ol><li>Memory Leaks: Memory leaks occur when objects are continuously created without being properly disposed of, causing memory usage to gradually increase over time until it reaches the heap limit.</li><li>Large Data Processing: Applications that process large amounts of data or perform intensive computations may consume more memory than is available in the allocated heap.</li><li>Recursive Functions: Recursive functions that don’t have proper termination conditions can lead to stack overflow errors, which can ultimately result in memory exhaustion.</li><li>Inefficient Code: Inefficient algorithms or data structures can cause excessive memory usage, especially when dealing with large datasets.</li></ol><p>Here’s an example code that will result in the heap out-of-memory issue:</p><figure><img alt="React code that calls recursive function indefinitely resulting in OOM issue" src="https://cdn-images-1.medium.com/max/1024/1*l6bUI53CEjGtB7mVwPsjZA.png" /><figcaption>A sample code that calls recursive function indefinitely</figcaption></figure><p>Here’s how you can add a termination condition to stop the recursion after a certain depth. This way, it shouldn’t result in the heap OOM issue.</p><figure><img alt="Recursive function with termination on certain condition" src="https://cdn-images-1.medium.com/max/1024/1*TwwNKspn9OK4NdCoHTLCHg.png" /><figcaption>Terminate the recursive function with a certain condition</figcaption></figure><p>Now that you have encountered the issue, how should we handle it?</p><ol><li>Increase Heap Size: One approach is to increase the maximum heap size available to the Node.js runtime using the --max-old-space-size flag. For example, node --max-old-space-size=4096 app.js set the maximum heap size to 4GB.</li><li>Memory Profiling: Use memory profiling tools like Chrome DevTools’ Memory tab or Node.js’s built-in --inspect flag with Chrome DevTools to identify memory-intensive areas in your code and optimize them.</li><li>Code Optimization: Review and optimize your code for memory efficiency. This includes optimizing data structures, reducing unnecessary object creation, and properly disposing of resources when they’re no longer needed.</li><li>Streaming and Chunking: When processing large datasets, consider using streaming or chunking techniques to process data in smaller, more manageable pieces rather than loading everything into memory at once.</li><li>Memory Management Libraries: Utilize memory management libraries like node-memwatch or heapdump to monitor memory usage and detect memory leaks in real-time.</li></ol><p>Conclusion:</p><p>The “FATAL ERROR: JavaScript heap out of memory” error can be challenging to deal with, however with a better understanding of its causes and effective strategies for handling it, you can ensure that your JavaScript applications run smoothly and efficiently. By optimizing your code, monitoring memory usage, and employing memory management techniques, you can mitigate the impact of this error and deliver a more reliable user experience.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aac8da6b73fe" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Project Zusammen Chronicles: Lessons Learned on the Collaborative Road]]></title>
            <link>https://medium.com/@fatma_2377/project-zusammen-chronicles-lessons-learned-on-the-collaborative-road-7e4a09e4a183?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/7e4a09e4a183</guid>
            <category><![CDATA[lessons-learned]]></category>
            <category><![CDATA[teamwork]]></category>
            <category><![CDATA[collaboration]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Fri, 08 Mar 2024 02:52:13 GMT</pubDate>
            <atom:updated>2024-03-08T02:52:13.561Z</atom:updated>
            <content:encoded><![CDATA[<p>Hey there, fellow developers! As we navigate the twists and turns of Project Zusammen, our side project journey, it’s time to unpack the lessons we’ve gathered along the way. Building something collectively teaches us more than just code; it’s about adapting, strategizing, and learning from each other’s unique perspectives. Join us as we reflect on the highs, lows, and the valuable insights gained from this collaborative endeavour.</p><figure><img alt="&lt;a href=”https://www.freepik.com/free-vector/creative-team-concept-illustration_10769819.htm#query=collaboration&amp;position=1&amp;from_view=keyword&amp;track=sph&amp;uuid=61279e8e-f9f5-4d25-83bb-4c3ef18f11d1&quot;&gt;Image by storyset&lt;/a&gt; on Freepik" src="https://cdn-images-1.medium.com/max/1024/1*V3lbTEFGDvolzDSw7IZmsA.jpeg" /><figcaption>Collaboration — image <a href="https://www.freepik.com/free-vector/creative-team-concept-illustration_10769819.htm#query=collaboration&amp;position=1&amp;from_view=keyword&amp;track=sph&amp;uuid=61279e8e-f9f5-4d25-83bb-4c3ef18f11d1">source</a></figcaption></figure><p>People Come and Go:</p><p>First things first, people are like the ebb and flow of the tides — even with careful selection, enthusiasm can wane. It’s a bit disheartening when team members leave towards the project’s end, but considering it’s a side project, we’ve learned not to take it too personally. Lesson one: don’t let external factors dictate your feelings; it’s all part of the journey. For future Project Zusammen ventures, a strategy to encourage commitment might be on the horizon.</p><p>Preparation is Key:</p><p>Lesson two underscores the importance of preparation. Initially, we underestimated the need for solid project planning, but the arrival of mentors later in the project shifted our perspective. Before diving into code, we’re now committed to understanding what we’re building, ensuring the team grasps the flow, even if we lack dedicated roles like a product manager or UI/UX designer. Learning beyond our software engineering scope pays off in a better development experience.</p><p>Choosing the Right Framework:</p><p>Lesson three is all about flexibility in tech. Instead of sticking to React Vite or Python Flask, we’re contemplating other options like React alternatives or Python FastAPI/Django for our next project. It’s a lesson in adaptability and finding the right tools for the job.</p><p>Database Dilemmas:</p><p>Lesson four hits us with database complexities. Flask DB migration headaches led us to ponder alternatives, like MongoDB, a NoSQL database. It’s less rigid, making updates smoother, especially in a group setting. Aiming for simplicity, maybe ditching MySQL for future projects could be the way to go.</p><p>Deployment Dilemmas:</p><p>Lesson five brings us to deployment decisions. With limited resources, we aimed for free or nearly free plans, resulting in both good and not-so-great providers. It’s a reminder that the right deployment choice is crucial for success.</p><p>Micro-Management Matters (to a certain extent):</p><p>Lesson six touches on micro-management, especially for industry newcomers. Starting with guidance and resources, transitioning to autonomy is the goal. Pair programming has proven to be an effective tool in this process.</p><p>Communication is Crucial:</p><p>Lesson seven is a fundamental truth — communication is key. Asynchronous work and adapting to different communication styles keep our collaborative efforts on track, steering us towards our project goals.</p><p>Embracing Uniqueness:</p><p>Lastly, lesson eight brings a reminder that people are unique. Understanding diverse personalities and communication styles fosters a collaborative environment. It’s not about judging but stepping into each other’s shoes to build robust interpersonal relationships.</p><p>Closing Thoughts:</p><p>These lessons, woven into the fabric of our ongoing Project Zusammen, guide us forward. What other lessons do you think we could learn from our project? Share your insights, and let’s continue learning together!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7e4a09e4a183" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Beginner’s Guide to SQL and NoSQL]]></title>
            <link>https://medium.com/@fatma_2377/a-beginners-guide-to-sql-and-nosql-85a16324d1e3?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/85a16324d1e3</guid>
            <category><![CDATA[database]]></category>
            <category><![CDATA[nosql]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Thu, 07 Mar 2024 13:37:33 GMT</pubDate>
            <atom:updated>2024-03-07T13:37:33.902Z</atom:updated>
            <content:encoded><![CDATA[<p>In the ever-evolving landscape of software development, a solid understanding of databases is a cornerstone for building robust and scalable applications. In this post, we’ll explore the fundamentals of relational databases, commonly associated with SQL, and NoSQL databases like MongoDB and Redis. Whether you’re a budding developer or a seasoned professional, mastering these database types is essential for creating efficient and dynamic systems.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i_aN_4Kc0nGbQSWZfK6SrA.jpeg" /><figcaption>SQL — image <a href="https://www.freepik.com/free-vector/hand-drawn-flat-design-sql-illustration_21901980.htm#query=database&amp;position=13&amp;from_view=keyword&amp;track=sph&amp;uuid=8ffebc08-7f9f-40b5-9c75-6aa00e1e0b55">source</a></figcaption></figure><h3>Understanding Relational Databases (SQL)</h3><p>1. What is SQL? <br>Structured Query Language (SQL) is the standard language for managing and manipulating relational databases. It provides a powerful set of commands for creating, retrieving, updating, and deleting data.</p><p>2. Key Concepts:</p><ul><li>Tables: Data is organized into tables, each with its own set of columns and rows.</li><li>Schema: Describes the structure of the database, including tables, fields, and relationships.</li><li>Queries: SQL queries allow you to interact with the database, retrieve information, and perform operations.</li></ul><p>3. Learn by Doing:</p><ul><li>Set up a local database using tools like MySQL or PostgreSQL.</li><li>Practice writing basic and complex SQL queries to manipulate data.</li><li>Understand normalization and denormalization for effective database design.</li></ul><h3>Exploring NoSQL Databases</h3><p>1. What is NoSQL? <br>NoSQL databases provide a flexible, schema-less data model, making them suitable for diverse data types and dynamic schemas. We’ll focus on two popular types: document-oriented (MongoDB) and key-value stores (Redis).</p><p>2. MongoDB — Document-Oriented Database:</p><ul><li>Documents: Data is stored in JSON-like documents, allowing for nested structures.</li><li>Scalability: MongoDB excels in horizontal scalability, making it suitable for large-scale applications.</li><li>Use Cases: Ideal for content management systems, e-commerce, and applications with rapidly changing data.</li></ul><p>3. Redis — Key-Value Store:</p><ul><li>Key-Value Pairs: Data is stored as key-value pairs, enabling fast data retrieval.</li><li>In-Memory Storage: Redis primarily stores data in RAM, providing rapid access.</li><li>Use Cases: Caching, real-time analytics, and messaging systems benefit from Redis’s speed.</li></ul><h3>Practical Steps for Mastery</h3><p>1. Hands-On Projects:</p><ul><li>Create a simple web application and implement a relational database for user management.</li><li>Build a real-time chat application using Redis for message queuing.</li></ul><p>2. Online Resources:</p><ul><li>Explore online courses on platforms like Coursera and Udemy for in-depth learning.</li><li>Leverage documentation and tutorials provided by SQL and NoSQL database vendors.</li></ul><p>3. Engage with the Community:</p><ul><li>Join forums like Stack Overflow and participate in discussions to learn from the community.</li><li>Attend meetups or webinars hosted by database experts.</li></ul><h3>Conclusion</h3><p>Mastering the fundamentals of both relational databases and NoSQL databases empowers you to make informed decisions when architecting systems. Whether your project demands the structure of SQL or the flexibility of NoSQL, a comprehensive understanding of both ensures you’re well-equipped for the dynamic world of software development.</p><p>Embark on this learning journey, experiment with databases in practical scenarios, and don’t shy away from challenges. The knowledge gained will not only enhance your technical skills but also open doors to exciting opportunities in the ever-growing tech industry. Happy coding!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=85a16324d1e3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Comprehensive Guide to Unit Testing in React.js with Vite]]></title>
            <link>https://medium.com/@fatma_2377/a-comprehensive-guide-to-unit-testing-in-react-js-with-vite-ea362d0daade?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/ea362d0daade</guid>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[unit-testing]]></category>
            <category><![CDATA[reactjs]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Wed, 06 Mar 2024 03:37:56 GMT</pubDate>
            <atom:updated>2024-03-06T03:37:56.715Z</atom:updated>
            <content:encoded><![CDATA[<h3>A Comprehensive Guide to Unit Testing in React.js</h3><h3>Introduction</h3><p>Unit testing in React.js using Vite is a crucial aspect of building robust and reliable applications. In this guide, we’ll explore best practices for writing effective unit tests, covering scenarios such as rendering components with arguments, checking PropTypes, testing user interactions, mocking fetch data, and handling environment variables like API_URL.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3dsZ09jhFzFNkOcP4KSRDA.jpeg" /><figcaption>Unit Testing Image Illustration— image <a href="https://www.freepik.com/free-vector/woman-working-new-app_10276620.htm#query=react%20developer&amp;position=0&amp;from_view=keyword&amp;track=ais&amp;uuid=c5dc3fe7-e405-455c-bf8b-066891f38036">source</a></figcaption></figure><h3>1. Rendering Components with Arguments</h3><p>When testing React components, it’s essential to ensure that they render correctly with given arguments. Let’s take a look at an example using the popular testing library, Jest, and testing-library/react:</p><pre>// MyComponent.jsx<br><br>import React from &#39;react&#39;;<br>import PropTypes from &#39;prop-types&#39;;<br><br>const YourComponent = ({ arg1, arg2, onHandle }) =&gt; {<br>  return (<br>    &lt;div data-testid=&quot;your-component&quot;&gt;<br>      &lt;p data-testid=&quot;arg1-element&quot;&gt;{arg1}&lt;/p&gt;<br>      &lt;span data-testid=&quot;arg2-element&quot;&gt;{arg2}&lt;/span&gt;<br>      &lt;button data-testid=&quot;clickable-element&quot; onClick={onHandle}&gt;<br>        Click me<br>      &lt;/button&gt;<br>    &lt;/div&gt;<br>  );<br>};<br><br>YourComponent.propTypes = {<br>  arg1: PropTypes.string.isRequired,<br>  arg2: PropTypes.number.isRequired,<br>  onHandle: PropTypes.func.isRequired,<br>};<br><br>export default MyComponent;</pre><pre>import { render } from &#39;@testing-library/react&#39;;<br>import MyComponent from &#39;./MyComponent&#39;;<br><br>test(&#39;renders correctly with given arguments&#39;, () =&gt; {<br>  // Render the component with specified arguments<br>  const { getByTestId, getByText } = render(<br>    &lt;YourComponent arg1=&quot;example&quot; arg2={42} onHandle={() =&gt; {}} /&gt;<br>  );<br><br>  // Assert that the main container is present<br>  const mainContainer = getByTestId(&#39;your-component&#39;);<br>  expect(mainContainer).toBeInTheDocument();<br><br>  // Assert the presence of elements displaying the provided arguments<br>  expect(getByTestId(&#39;arg1-element&#39;)).toHaveTextContent(&#39;example&#39;);<br>  expect(getByTestId(&#39;arg2-element&#39;)).toHaveTextContent(&#39;42&#39;);<br><br>  // Assert the presence of the clickable element<br>  const clickableElement = getByTestId(&#39;clickable-element&#39;);<br>  expect(clickableElement).toBeInTheDocument();<br><br>  // Simulate a click event on the clickable element<br>  fireEvent.click(clickableElement);<br>});</pre><h3>2. Checking PropTypes</h3><p>React PropTypes help catch potential bugs by validating the types of props passed to a component. Let’s incorporate PropTypes checks into our unit tests:</p><pre>import PropTypes from &#39;prop-types&#39;;<br><br>MyComponent.propTypes = {<br>  argument: PropTypes.string.isRequired,<br>  // Add other propTypes as needed<br>};<br><br>test(&#39;checks propTypes&#39;, () =&gt; {<br>  const consoleError = jest.spyOn(console, &#39;error&#39;).mockImplementation(() =&gt; {});<br>  render(&lt;MyComponent argument={123} /&gt;);<br>  expect(consoleError).toHaveBeenCalled();<br>});</pre><h3>3. Testing User Interactions</h3><p>For components that involve user interactions, such as clicking or handling functions, it’s crucial to test if these interactions work as expected:</p><pre>import { render, fireEvent } from &#39;@testing-library/react&#39;;<br><br>test(&#39;handles onClick function correctly&#39;, () =&gt; {<br>  const handleClick = jest.fn();<br>  const { getByText } = render(&lt;MyComponent onClick={handleClick} /&gt;);<br>  fireEvent.click(getByText(&#39;Click me&#39;));<br>  expect(handleClick).toHaveBeenCalled();<br>});</pre><h3>4. Mocking Fetch Data</h3><p>To isolate your tests from external dependencies, such as API calls, use mocks to simulate data fetching:</p><pre>import { render, waitFor } from &#39;@testing-library/react&#39;;<br>import &#39;@testing-library/jest-dom/extend-expect&#39;;<br><br>jest.mock(&#39;./api&#39;, () =&gt; ({<br>  fetchData: jest.fn(() =&gt; Promise.resolve({ data: &#39;mockedData&#39; })),<br>}));<br><br>test(&#39;renders data fetched from API&#39;, async () =&gt; {<br>  const { getByText } = render(&lt;MyComponent /&gt;);<br>  await waitFor(() =&gt; expect(getByText(&#39;mockedData&#39;)).toBeInTheDocument());<br>});</pre><h3>5. Handling .env for API_URL</h3><p>To handle environment variables like API_URL, utilize Vite’s built-in support for .env files:</p><pre>// .env.test<br>API_URL=https://test-api.example.com</pre><p>In your test file:</p><pre>import { render } from &#39;@testing-library/react&#39;;<br><br>test(&#39;uses API_URL from .env.test&#39;, () =&gt; {<br>  process.env.API_URL = &#39;https://test-api.example.com&#39;;<br>  const { getByText } = render(&lt;MyComponent /&gt;);<br>  // Your test logic here<br>});</pre><h3>Conclusion</h3><p>By following these best practices and examples, you’ll be well-equipped to create effective unit tests for your React.js components using Vite. Embrace the power of testing to enhance the reliability and maintainability of your applications. Happy testing!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ea362d0daade" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Empowering Future Developers: Unveiling Project Zusammen’s Collaborative Journey]]></title>
            <link>https://medium.com/@fatma_2377/empowering-future-developers-unveiling-project-zusammens-collaborative-journey-6cd476257109?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/6cd476257109</guid>
            <category><![CDATA[developer-community]]></category>
            <category><![CDATA[fun-projects]]></category>
            <category><![CDATA[collaboration]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Tue, 05 Mar 2024 00:58:43 GMT</pubDate>
            <atom:updated>2024-03-05T00:58:43.638Z</atom:updated>
            <content:encoded><![CDATA[<p>Embarking on a side project can be a transformative experience, a journey of growth that not only enriches your portfolio but also contributes to the greater tech community. My journey with side projects took a significant turn when I completed the <a href="https://goto-impact.org/mentor-fellowship">Mentor Fellowship</a> with the <a href="https://goto-impact.org/">GoTo Impact Foundation</a>. Inspired by the lessons learned and the joy of mentoring, I founded Project Zusammen — a collaborative initiative to bring together aspiring developers, mentors, and the spirit of learning.</p><figure><img alt="&lt;a href=”https://www.freepik.com/free-vector/forming-team-leadership-concept-illustration_35294599.htm#query=illustrations&amp;position=32&amp;from_view=keyword&amp;track=sph&amp;uuid=89adc156-2572-4e38-8f7a-8c4965dccdd1&quot;&gt;Image by storyset&lt;/a&gt; on Freepik" src="https://cdn-images-1.medium.com/max/1024/1*0nPVB2e_L5eCqgBb1inSQw.jpeg" /><figcaption>Collaboration —<a href="https://www.freepik.com/free-vector/forming-team-leadership-concept-illustration_35294599.htm#query=illustrations&amp;position=32&amp;from_view=keyword&amp;track=sph&amp;uuid=89adc156-2572-4e38-8f7a-8c4965dccdd1"> image source</a></figcaption></figure><p>The Genesis:</p><p>Like many, my initial attempts at side projects faced distractions and eventual discontinuation. However, the mentor fellowship became a turning point. Serving as a tech mentor and facilitating as a coach for a full-stack web program, I witnessed the power of collaboration and the impact it had on the mentees.</p><p>Motivated by the desire to continue this journey, Project Zusammen was born. The vision was clear: create an environment where participants could learn, share, and collaboratively build web development projects that would serve as a valuable addition to their portfolios.</p><p>The Journey Unfolds:</p><p>Project Zusammen operates on asynchronous collaboration, with just one weekly meeting. This flexibility allows participants to engage at their own pace while adapting agile methodologies to suit the project’s needs. Key elements such as project boards, git flow, and other best practices are incorporated to ensure a holistic learning experience.</p><p>Project Highlights:</p><p>Announcing the project registration in December initially aimed to select three mentees. To my surprise, over 50 enthusiastic individuals signed up, accompanied by three mentors offering their support. The unexpected surge in interest led to the selection of 15 participants, divided into three groups.</p><p>Despite a somewhat impulsive beginning, the project quickly gained momentum. The initial mentorship team reorganized due to unforeseen circumstances, leaving me as the sole mentor. This presented challenges and lessons that will be instrumental in refining the project for future iterations.</p><p>Why Project Zusammen?</p><p>The name “Zusammen,” a German word meaning “together,” perfectly encapsulates the essence of the project. Project Zusammen is not just about coding; it’s about learning and having fun collectively. It emphasizes the value of collaboration, mutual growth, and the joy derived from working together towards a common goal.</p><p>Main Objectives:</p><ol><li>Building Portfolios and Tech Interview Experience: Project Zusammen serves as a platform for participants to create meaningful projects that enhance their portfolios and provide hands-on experience, crucial for success in tech interviews.</li><li>Mentorship for Tech Community Empowerment: Through mentoring, Project Zusammen aims to empower aspiring developers by providing guidance, sharing experiences, and fostering a supportive community.</li><li>Mutual Learning: The collaborative nature of the project fosters an environment where both mentors and mentees learn from each other, gaining valuable insights and skills.</li></ol><p>Conclusion:</p><p>Project Zusammen is more than just a side project; it’s a community-driven initiative that empowers developers on their journey. As we continue to iterate and improve, the project stands as a testament to the potential of collaborative learning, highlighting the importance of coming together to create something meaningful in the ever-evolving world of web development. Join us, and let’s code and learn zusammen!</p><p>If you’re passionate about web development and eager to contribute to a collaborative community, we welcome you to be a part of Project Zusammen. Whether you envision yourself as a mentee seeking valuable experience or a seasoned developer ready to mentor, your presence can make a significant impact. Reach out to me at fatma.janna.utp@gmail.com, and let’s embark on this learning journey together!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6cd476257109" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What not to do in public]]></title>
            <link>https://medium.com/@fatma_2377/what-not-to-do-in-public-f43aba21bca5?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/f43aba21bca5</guid>
            <category><![CDATA[assumptions]]></category>
            <category><![CDATA[lessons-learnt]]></category>
            <category><![CDATA[it-is-ok]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Fri, 01 Mar 2024 23:08:17 GMT</pubDate>
            <atom:updated>2024-03-01T23:08:17.835Z</atom:updated>
            <content:encoded><![CDATA[<p>Recently, I did something pretty terrible I would say.</p><p>What was it, you ask? Well, I accused an online seller of selling a fake product based on my assumption. Yup, I wrote a bad review and claimed their product was dupe. Pretty stupid wasn’t it?</p><p>After some more research, I realised that it was a great mistake. I know I shouldn’t have done that. I should have just messaged the seller personally with a question instead.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OoYysSLf_ivm8avIysrbpw.jpeg" /><figcaption>Bad assumptions/judgements towards others aren’t cool at all, image <a href="https://www.freepik.com/free-vector/flat-people-group-asking-questions_13560778.htm#query=illustrations&amp;position=13&amp;from_view=keyword&amp;track=sph&amp;uuid=b416b17f-69eb-4da5-90af-62452c3d75ca">source</a></figcaption></figure><p>So, here’s the thing you should not do in public.</p><p>Judge/accuse/criticise someone in public even if that someone is a stranger or random person. You don’t know what side effect it will cause for doing such a thing.</p><p>Always remember that people are just unique and different. If others do not like what you like, it’s fine, completely normal. If you have some suspicious or bad feelings about something, do your research well. Think twice before sending that criticism/judgement. What will the person feel after reading it? Change your perspective, move your point of view. What if you were that person whom you judge? What would you feel if someone judged you? Let alone a stranger not knowing you in person.</p><p>So, yeah. I learnt a great lesson.</p><p>This is one of my principles that I should remind myself again and again.</p><p>Never accuse/criticise someone in public.</p><p>Do compliment people in public, and praise them with whatever they deserve. But never accuse/criticise someone in public.</p><p>So, how do I cope with this super guilty feeling? Let’s go back to the 10 10 rule mentioned by Ali Abdaal in his <a href="https://www.feelgoodproductivity.com/">Feel Good Productivity</a> book.</p><p>The 10 10 rule, what is it?</p><p>So you got a rejection letter after applying for a scholarship? Or you’ve gone through interviews but still ended up not receiving an offer? How would you feel about it? Sad, disappointed, regrets, like the world is ending?</p><p>It is normal to feel bad about not getting what you want/expect. But let’s see what happens in 10 minutes after you get that rejection letter. Still feel awful probably. OK, what about after 10 days? You will still remember it but it will be just ok. And then what will happen after 10 weeks, yeah probably it’s just another thing that happened in the past. What about after 10 years? Will you still remember this event? Probably not.</p><p>There it is, you change your perspective towards the future to not feel that bad about something because that thing is just an event that occurred in the past. And that is how you learn how to move on.</p><p>Thanks for reading, I hope you learn something from this article. See you on the next one. :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f43aba21bca5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Crafting an Exceptional Scholarship Essay: A Guide to Success]]></title>
            <link>https://medium.com/@fatma_2377/crafting-an-exceptional-scholarship-essay-a-guide-to-success-9ffd54591b55?source=rss-f2161936d0be------2</link>
            <guid isPermaLink="false">https://medium.com/p/9ffd54591b55</guid>
            <category><![CDATA[tips-to-write-essay]]></category>
            <category><![CDATA[scholarship-essay]]></category>
            <dc:creator><![CDATA[Fatma Janna]]></dc:creator>
            <pubDate>Mon, 08 Jan 2024 05:43:59 GMT</pubDate>
            <atom:updated>2024-01-08T05:43:59.616Z</atom:updated>
            <content:encoded><![CDATA[<p>Securing a scholarship is a competitive endeavour, and your scholarship essay plays a pivotal role in making a lasting impression on the selection committee. In this guide, we will explore key strategies to enhance your scholarship essay, ensuring it aligns with formal writing standards, addresses selection criteria, and captivates readers with clear and impactful communication.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/612/1*8RDCT9THnvS_5MNX4cg7jQ.jpeg" /><figcaption>Study abroad with scholarship, <a href="https://www.istockphoto.com/id/search/2/image?mediatype=illustration&amp;phrase=study+abroad+scholarship">image source</a></figcaption></figure><ol><li>Formal Writing Excellence: <br>Avoid Short Forms: Ensure your scholarship essay maintains a formal tone by eschewing short forms like I’m, that’s, and you’re. Always use full terms to enhance readability. For instance, prefer “I am,” “that is,” “you are,” etc.<br>Clarify Abbreviations: Introduce abbreviations like Digital Core Analysis (DCA) by providing the full term initially. This ensures clarity, especially when the selection committee may have diverse backgrounds. For example, “I want to pursue the Digital Core Analysis (DCA) course…”</li><li>Align with Selection Criteria: <br>Align your essay with the specific criteria outlined by the scholarship provider. Use the Australia Awards Scholarship selection criteria as an example, which emphasises academic competence, potential outcomes, and leadership attributes. Connect potential outcomes with your chosen field of study to highlight your commitment to creating positive change.</li><li>Pay Attention to Language Spelling: Be conscious of language spelling based on the scholarship destination. Utilize Australian or British spelling for scholarships in Australia, British spelling for scholarships in the UK, and American spelling for other regions. Maintain consistency throughout your essay to showcase attention to detail.</li><li>Deductive Writing Style: Adopt a deductive writing style to answer questions at the beginning of each paragraph. Present your main idea early on to engage readers and maintain their interest. Remember, clarity and conciseness are key to keeping the selection committee engaged.</li><li>Understand the Essay Question: Thoroughly comprehend the essay question or instructions before writing. Carefully analyze each component to ensure your essay fully addresses all points. Take your time in understanding complex questions and consider seeking clarification if needed.</li><li>Avoid Relying Solely on Translators: If English is not your native language, use a translator cautiously. After translating, review and refine the content to ensure natural, coherent language. Overreliance on translators can compromise the quality of your essay.</li><li>Start Early and Conduct Research: Initiate the writing process early, even before the application opens. Research thoroughly about the scholarship, its requirements, and potential essay topics. Look for examples online to gain insights into effective essay structures and content.</li><li>Revise and Proofread: Allocate sufficient time for multiple revisions. Continuously refine your essay to enhance its quality. Before seeking external feedback, use tools like <a href="https://app.grammarly.com/">Grammarly</a> to correct grammar and spelling errors. Present a polished essay that reflects your dedication and attention to detail.</li></ol><p>Conclusion:</p><p>Crafting a compelling scholarship essay requires time, dedication, and meticulous attention to detail. By adhering to formal writing standards, addressing selection criteria, and employing clear and impactful communication, you can increase your chances of standing out and securing the scholarship you desire. Remember, making your writing accessible to a diverse audience is key to leaving a lasting impression on the selection committee.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9ffd54591b55" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>