<?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 Mahfuza Humayra Mohona on Medium]]></title>
        <description><![CDATA[Stories by Mahfuza Humayra Mohona on Medium]]></description>
        <link>https://medium.com/@mhmohona?source=rss-594b806706c6------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*fJPTKNuczWcwENEnUlCpoA.png</url>
            <title>Stories by Mahfuza Humayra Mohona on Medium</title>
            <link>https://medium.com/@mhmohona?source=rss-594b806706c6------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 24 Jun 2026 23:47:46 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mhmohona/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[Whispers in the Machine]]></title>
            <link>https://medium.com/@mhmohona/whispers-in-the-machine-1e01381aa19f?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/1e01381aa19f</guid>
            <category><![CDATA[gpu]]></category>
            <category><![CDATA[miners]]></category>
            <category><![CDATA[celium]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Sat, 05 Jul 2025 20:51:50 GMT</pubDate>
            <atom:updated>2025-07-05T20:51:50.391Z</atom:updated>
            <content:encoded><![CDATA[<p>Amina stared at her laptop screen, frustration simmering. Her university project — an AI model that could predict crop yields for small farmers — had hit a wall. Her laptop’s graphics card whimpered under the workload. “Three weeks to train this?” the error message seemed to mock her. The campus computing lab was booked solid. Cloud services demanded credit cards she didn’t have.</p><p>That’s when her friend mentioned <a href="https://celiumcompute.ai/">Celium</a>. <em>“It’s like borrowing a supercomputer from someone down the street,”</em> he’d said. Skeptical but desperate, Amina typed <a href="https://celiumcompute.ai/">celiumcompute.ai</a> into her browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DwYM8ayEV65ciMl-e_tcWA.jpeg" /><figcaption>AI Generated Image</figcaption></figure><h3>Renting Power: Amina’s Journey</h3><p>The website felt clean and quiet — no flashy ads, no confusing charts. She clicked <em>“Get Started”</em> and made an account with her email. A payment screen appeared. <em>“What if I run out of money mid-training?”</em> she worried — until she spotted <em>“Auto Top-Up.”</em> She turned it on, linked her debit card, and sighed in relief. She filtered by <em>“cheap + available now”</em> and found one — an NVIDIA RTX 4090 in Lisbon, costing less per hour than her coffee. She clicked Rent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tsnx85Vr_VCseeRTsBwiDQ.png" /><figcaption><a href="https://celiumcompute.ai/">Celium</a> Dashboard</figcaption></figure><p>A box appeared: <em>“Upload your task.”</em> She dragged her Python training script into it. One more click — <em>“Run.”</em></p><p>A progress bar crawled to life.</p><p><em>Training epoch 1/100... 4x faster than local GPU</em></p><p>She closed her laptop, went to sleep, and woke to an email:</p><blockquote>“Your task completed. Download results.”</blockquote><p>Her model — finished in hours, not weeks.</p><h3>The Quiet Earner: Mark’s Story</h3><p>Across the ocean, Mark sat in his dimly lit gaming room in Lisbon. His powerful GPU — the same RTX 4090 Amina used — usually just glowed idle while he worked his day job. <em>“Such a waste,”</em> he’d mutter. Electricity bills piled up.</p><p>Then he discovered Celium’s miner program. He downloaded it — a simple installer — and ran it. The software quietly scanned his PC:</p><ul><li>Recognized his GPU</li><li>Tested its speed</li><li>Checked his internet</li></ul><p>He set two rules:</p><ol><li><em>Only rent when I’m not gaming.</em></li><li><em>Never exceed 80% GPU load.</em></li></ol><p>Then… he forgot about it.</p><h3>The Invisible Handshake</h3><p>While Amina’s crop model trained on Mark’s GPU, three things happened in the background — none requiring either to lift a finger:</p><ol><li>Validators — guardians of the network — connected to Mark’s PC. They verified:</li></ol><ul><li>Was his GPU real? (Yes.)</li><li>Did it deliver the speed promised? (Yes.)</li><li>Did it stay online? (Yes.)</li><li>Was the temperature stable? (Yes.)</li></ul><p>2. Bittensor’s blockchain recorded Mark’s contribution, including:</p><ul><li>GPU utilization metrics</li><li>Task completion status</li><li>Resource quality score</li></ul><p>3. $TAO tokens dripped into Mark’s digital wallet — automatic payment for the hours Amina used, calculated based on:</p><ul><li>GPU performance tier</li><li>Actual usage time</li><li>Network demand</li><li>Quality of service</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*J6dpJbe1_KrYXH6YLl0TPQ.png" /><figcaption>Task Execution Flow</figcaption></figure><h3>The Ripple Effect</h3><p>A week later:</p><ul><li>Amina presented her AI model to farmers in Kenya.</li><li>Mark used his $TAO earnings to cover his electricity bill — and bought a new game.</li><li>The GPU in Lisbon kept working. A researcher in Seoul rented it next to simulate protein folds.</li></ul><p>No one talked about “decentralized subnetworks” or “blockchain protocols.” They didn’t need to. Celium became what tools ought to be:</p><blockquote>Useful. Silent. Unnoticed until needed.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/943/1*jwXvVr9tbNmazeRasSw6eg.png" /><figcaption>Validation &amp; Rewards</figcaption></figure><h3>How You Start</h3><p>f you’re like Amina (needing power):</p><ol><li>Go to <a href="https://celiumcompute.ai/">celiumcompute.ai</a></li><li>Sign up with email or GitHub</li><li>Pick a GPU based on your needs (RTX 4090 for AI, A4000 for basic tasks)</li><li>Run your task with automatic optimization</li></ol><p>If you’re like Mark (owning a GPU):</p><ol><li>Download the miner tool from Celium’s site</li><li>Let it scan your hardware and verify compatibility</li><li>Set your rules (availability, load limits, minimum payout)</li><li>Earn while you sleep, with automatic payouts in $TAO</li></ol><p>That’s it.<br>No jargon. No complexity.<br>Just a tool matching need with resource — <br>while the world keeps turning.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1e01381aa19f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From Insta to Web3: Your Feed, Your Rules]]></title>
            <link>https://medium.com/@mhmohona/from-insta-to-web3-your-feed-your-rules-65863997de34?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/65863997de34</guid>
            <category><![CDATA[web3]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Mon, 24 Mar 2025 19:26:04 GMT</pubDate>
            <atom:updated>2025-03-24T19:26:04.621Z</atom:updated>
            <content:encoded><![CDATA[<p>Let us imagine this — you spent hours capturing <em>perfect</em> sunset shots on your Bali vacation. You post them on Instagram, tagging friends and adding that fire emoji 🔥. But here’s the catch: <strong>you don’t actually own those photos</strong>. Meta (Instagram’s parent company) does. They decide who sees your posts, whether to delete your account, and they pocket the ad revenue from <em>your</em> content. If Instagram vanished tomorrow, your photos, followers, and digital identity could disappear too. It’s like renting an apartment — you live there, but the landlord holds all the power.</p><p>Sound unfair? That’s <strong>Web2</strong> — the internet we use today, where corporations control platforms and profit from <em>your</em> creativity.</p><h3>Web3: The Internet Where You Own the Keys</h3><p>Web3 is like a <strong>user-owned Instagram revolution</strong>. Instead of your photos sitting on Meta’s servers, they’d live on a <em>decentralized network</em> (think of it as a global web of computers working together, not controlled by any single company). Here’s how it flips the script:</p><h4>1. You Actually Own Your Stuff</h4><p>In Web3, your photos would be stored on a <strong>blockchain</strong> — a shared, unchangeable digital ledger. Think of it like a digital safety deposit box only <em>you</em> can open. You could:</p><ul><li>Move your photos to a different app <em>without losing followers</em>.</li><li>Prove you created them (no more stolen memes!).</li><li>Decide who sees them, forever.</li></ul><p>No more fearing a platform’s “terms of service” or arbitrary bans.</p><h4>2. You Get Paid, Not Just the Platform</h4><p>Today, Instagram makes money by showing ads next to <em>your</em> content. In Web3, if someone views your photos, you could earn <strong>cryptocurrency</strong> (like digital coins) directly. Artists, creators, and even casual posters could monetize their work without middlemen taking a cut. Imagine tipping your favorite travel blogger in crypto with one click!</p><h4>3. You Help Make the Rules</h4><p>Web3 platforms are governed by <strong>decentralized communities</strong>, not CEOs. Want a new feature? Vote on it. Hate an update? Propose a change. It’s like a digital democracy where users collectively steer the platform’s future.</p><h3>How Web3 Fixes the Instagram Nightmare</h3><p>Let’s revisit our Bali photos:</p><ul><li><strong>No More Landlords</strong>: Instead of Meta’s servers, your content lives on a blockchain — maintained by thousands of computers worldwide. No single company can delete it.</li><li><strong>Your Followers Follow <em>You</em></strong>: Your audience isn’t locked to Instagram. Switch apps? Your followers come with you, like email contacts.</li><li><strong>Community-Driven Creativity</strong>: Want a “dislike” button or better filters? Rally users and vote — no need to beg Meta’s HQ.</li></ul><h3>Web3 in Simple Terms: From Renting to Owning</h3><p>Today’s internet (Web2) is like renting: you decorate the apartment, but the landlord can evict you. <strong>Web3 is owning the house</strong>. You control the walls, the garden, and even rent out a room for extra cash. It’s a shift from <em>platforms owning us</em> to <em>us owning the platforms</em>.</p><p><strong>The Bottom Line</strong><br>Web3 isn’t just about crypto or NFTs — it’s about rebuilding the internet to put power back in <em>your</em> hands. Will it be perfect? Probably not. But for the first time, we’re asking: <em>What if the internet worked for us, not corporations?</em></p><p>What would <em>you</em> do if you truly owned your digital life? 💡</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=65863997de34" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Adding Authorization to Your Flask App: A Beginner’s Guide]]></title>
            <link>https://medium.com/@mhmohona/adding-authorization-to-your-flask-app-a-beginners-guide-66d48db11176?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/66d48db11176</guid>
            <category><![CDATA[cerbos]]></category>
            <category><![CDATA[flask]]></category>
            <category><![CDATA[authentication]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Tue, 26 Nov 2024 02:48:05 GMT</pubDate>
            <atom:updated>2024-11-26T12:48:32.187Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lgTJe-Kxi2rws6zh" /><figcaption>Image source: github.com/cerbos/cerbos</figcaption></figure><p>Ever wondered how to add proper user permissions to your <a href="https://flask.palletsprojects.com/en/stable/">Flask app</a>? For example, making sure admins can do admin things, and regular users stay in their lane?</p><p>Let’s build something cool together using Flask and Cerbos!</p><h4>What We’re Building</h4><p>We’re creating a simple dashboard where:</p><p>- Admins can view, edit, and delete content (the almighty role)<br>- Editors can view and edit (but not delete!)<br>- Viewers can only look (no touching!)<br>- And some users get no access at all</p><p>Sound complicated? Don’t worry! We’ll break it down into bite-sized pieces.</p><h4>How Cerbos Handles Authorization</h4><p>Here is a diagram that shows how Cerbos processes a user request for authorization by evaluating role policies, applying rules, and ultimately returning a decision to either grant or deny access in our project:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mbE_ujpjFHkvuGdgsSvi5Q.png" /></figure><h4>Setting Up Project</h4><p>First, let’s get our files organized. Here’s what we need:</p><pre>our-flask-app/<br>├── app.py # Main Flask app<br>├── cerbos_service.py # Handles permissions<br>├── cerbos-policies/ # Where we define who can do what<br>├── templates/ # HTML files<br>│ ├── dashboard.html<br>│ └── index.html<br>└── requirements.txt # Project dependencies</pre><h4>Step 1: Define the rules</h4><p>Let’s start with the fun part — deciding who gets to do what! We’ll create a simple policy file named resource_policy.yaml under cerbos-policies folder:</p><pre>apiVersion: api.cerbos.dev/v1<br>resourcePolicy:<br>  version: &quot;default&quot;<br>  resource: &quot;dashboard&quot;<br>  rules:<br>    - actions: [&quot;view&quot;]<br>      effect: EFFECT_ALLOW<br>      roles: [&quot;admin&quot;, &quot;editor&quot;, &quot;viewer&quot;, &quot;guest&quot;]<br>    - actions: [&quot;edit&quot;]<br>      effect: EFFECT_ALLOW<br>      roles: [&quot;admin&quot;, &quot;editor&quot;]<br>    - actions: [&quot;delete&quot;]<br>      effect: EFFECT_ALLOW<br>      roles: [&quot;admin&quot;]<br>    - actions: [&quot;view&quot;]<br>      effect: EFFECT_DENY<br>      roles: [&quot;restricted&quot;]</pre><p>Think of this like a security guard’s rulebook — it tells us exactly who’s allowed to do what!</p><h4>Step 2: Creating Permission Checker</h4><p>Now we need a way to check these permissions. Here’s the part of our <a href="https://github.com/mhmohona/demo_flask_project/blob/main/cerbos_service.py">cerbos_service.py</a> file:</p><pre>def is_authorized(user, action, resource):<br> &quot;&quot;&quot;<br> Checks if a user can perform an action.<br> Think of it like asking &quot;Can this person do this thing?&quot;<br> &quot;&quot;&quot;<br> payload = construct_payload(user, action, resource)<br> response = call_cerbos_api(payload)<br> <br> # Returns True if allowed, False if not<br> return response.get(&quot;resourceInstances&quot;, {})<br> .get(&quot;instance_id&quot;, {})<br> .get(&quot;actions&quot;, {})<br> .get(action) == &quot;EFFECT_ALLOW&quot;</pre><h4>Step 3: Building Flask App</h4><p>Here’s where it all comes together in our <a href="https://github.com/mhmohona/demo_flask_project/blob/main/app.py">app.py</a> file:</p><pre>from flask import Flask, render_template, request<br>from cerbos_service import is_authorized<br>app = Flask(__name__)<br>@app.route(&#39;/dashboard&#39;)<br>def dashboard():<br> # Get the user&#39;s role from the URL (in real life, this would come from login)<br> role = request.args.get(&#39;role&#39;, &#39;guest&#39;)<br> user = {&quot;id&quot;: &quot;user1&quot;, &quot;roles&quot;: [role]}<br> <br> # First, check if they can even see the dashboard<br> if not is_authorized(user, &quot;view&quot;, &quot;dashboard&quot;):<br> return &quot;Sorry, no access for you! 🚫&quot;, 403<br> <br> # Check what else they can do<br> can_edit = is_authorized(user, &quot;edit&quot;, &quot;dashboard&quot;)<br> can_delete = is_authorized(user, &quot;delete&quot;, &quot;dashboard&quot;)<br> <br> return render_template(<br> &#39;dashboard.html&#39;,<br> role=role,<br> can_edit=can_edit,<br> can_delete=can_delete<br> )</pre><h4>Try It Yourself!</h4><p>Want to see it in action? Here’s how:</p><ol><li>Clone the demo:</li></ol><pre>git clone https://github.com/mhmohona/demo_flask_project</pre><p>2. Install what you need:</p><pre>pip install -r requirements.txt</pre><p>3. Run the app:</p><pre>python app.py</pre><p>4. Try these URLs:<br> — <a href="http://localhost:5000/dashboard?role=admin">http://localhost:5000/dashboard?role=admin</a> (full access!)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*W70OJP0q92KYz9PDl1Beyw.png" /></figure><p>— <a href="http://localhost:5000/dashboard?role=editor">http://localhost:5000/dashboard?role=editor</a> (can edit but not delete)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*qGCF4uRULzU1Ig-Tvv8-iA.png" /></figure><p>— <a href="http://localhost:5000/dashboard?role=viewer">http://localhost:5000/dashboard?role=viewer</a> (look but don’t touch)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*nkGNBJ8pM_FPKGdlEPNrxw.png" /></figure><p>— <a href="http://localhost:5000/dashboard?role=restricted">http://localhost:5000/dashboard?role=restricted</a> (no access)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*umnuiiyjCGGHa6filjPZNQ.png" /></figure><h4>Cool Things About This Approach</h4><p>1. <strong>Super Clean Code</strong>: Your Flask routes stay nice and tidy<br>2. <strong>Easy to Change</strong>: Want to add a new role? Just update the policy file!<br>3. <strong>Security First</strong>: All permission checks in one place = fewer mistakes</p><h4>What’s Next?</h4><p>Now that you’ve got the basics down, you could:<br>- Add more roles (maybe a “moderator”?)<br>- Create different resources (like “posts” or “comments”)<br>- Add user authentication (who’s actually logged in?)</p><h4>Need Help?</h4><p>- Check out the full code in the <a href="https://github.com/mhmohona/demo_flask_project">demo repo</a><br>- Read more in the <a href="https://docs.cerbos.dev">Cerbos docs</a><br>- Try different roles, policies and see what happens!</p><p>Happy coding! 🎉</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66d48db11176" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ins and Outs of Scribe-Data CLI]]></title>
            <link>https://medium.com/@mhmohona/ins-and-outs-of-scribe-data-cli-bd51202aa7c6?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/bd51202aa7c6</guid>
            <category><![CDATA[scribe-data]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Fri, 11 Oct 2024 19:30:15 GMT</pubDate>
            <atom:updated>2024-10-11T19:30:15.437Z</atom:updated>
            <content:encoded><![CDATA[<p>Command-line interface (CLI) can significantly increase user experience. In this blog post, I will share my journey of creating the Scribe-Data CLI, detailing the features I implemented, the challenges I faced, and the lessons I learned along the way.</p><h3>Development Process</h3><p>The motivation behind creating the Scribe-Data CLI was to provide users with an efficient way to interact with language data from various sources, including Wikidata. The development process involved several key steps:</p><p>1. <strong>Designing the CLI Structure</strong>: With the help of my GSoC mentors, I started by outlining the commands and options that the CLI would support.<br>2. <strong>Implementing Command Handlers</strong>: Each command was implemented in separate modules for better organization.<br>3. <strong>Testing and Iteration</strong>: I continuously tested the CLI to ensure it met user needs and fixed any bugs that arose. I also added unittest to ensure CLI’s quality.</p><h3>Key Features</h3><p><strong>Global Options</strong></p><p>The CLI supports several global options that enhance usability:</p><pre># python:src/scribe_data/cli/main.py<br>parser.add_argument(<br> &quot;-h&quot;, &quot; - help&quot;, action=&quot;help&quot;, help=&quot;Show this help message and exit.&quot;<br>)<br>parser.add_argument(<br> &quot;-v&quot;, &quot; - version&quot;, action=&quot;version&quot;, version=&quot;Scribe-Data CLI v1.0&quot;<br>)<br>parser.add_argument(<br> &quot;-u&quot;, &quot; - upgrade&quot;, action=&quot;store_true&quot;, help=&quot;Upgrade the Scribe-Data CLI.&quot;<br>)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-p7eboJMmz8Ah518_Y5dDA.png" /></figure><h3>Commands Overview</h3><p>The Scribe-Data CLI supports the following commands:</p><ol><li><strong>list</strong>: Lists available languages and data types.</li><li><strong>get</strong>: Retrieves data from Wikidata.</li><li><strong>total</strong>: Checks the total available data.</li><li><strong>convert</strong>: Converts data to different file formats.</li></ol><h4>List Command</h4><p>The `list` command allows users to view available languages and data types supported by Scribe-Data.</p><pre># src/scribe_data/cli/list.py<br>def list_languages():<br> # Fetch and display available languages<br> languages = fetch_languages_from_source()<br> for lang in languages:<br> print(f&quot;{lang[&#39;name&#39;]} - {lang[&#39;iso&#39;]} - {lang[&#39;qid&#39;]}&quot;)</pre><p>This function fetches the list of languages from a data source and prints each language’s name, ISO code, and QID. It demonstrates how the CLI interacts with the underlying data to provide users with meaningful information.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/668/1*7jGwh115QHfM1pDZ-D9PQg.png" /></figure><h4>Get Command</h4><p>The `get` command retrieves data based on user specifications.</p><pre># python:src/scribe_data/cli/get.py<br>def get_data(language, data_type):<br> # Logic to fetch data from Wikidata<br> data = fetch_data_from_wikidata(language, data_type)<br> if data:<br> save_data(data)<br> else:<br> print(f&quot;No data found for {language} and {data_type}.&quot;)</pre><p>This function fetches data for a specified language and data type from Wikidata. If data is found, it saves it; otherwise, it notifies the user.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JPWzmWRG0jZ2DGKOlmH6DQ.png" /></figure><h4>Total Command</h4><p>The `total` command checks on Wikidata the total number of available lexemes.</p><pre># python:src/scribe_data/cli/total.py<br>def get_total_lexemes(language, data_type):<br> # Logic to calculate total lexemes<br> total = calculate_total_lexemes(language, data_type)<br> print(f&quot;Total number of lexemes for {language} and {data_type}: {total}&quot;)</pre><p>This function calculates and displays the total number of lexemes for a specified language and data type, providing users with a quick overview of available data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/962/1*94Z5jym_UVs1BUlwKLMqwQ.png" /></figure><h4>Convert Command</h4><p>The `convert` command allows users to convert data files into different formats.</p><pre># python:src/scribe_data/cli/convert.py<br>def convert_file(file_path, output_format):<br> # Logic to convert file to the specified format<br> if output_format == &#39;json&#39;:<br> convert_to_json(file_path)<br> elif output_format == &#39;csv&#39;:<br> convert_to_csv(file_path)</pre><p>This function handles the conversion of data files to various formats, allowing users to choose their preferred output type.</p><h4>Interactive Mode</h4><p>The interactive mode enhances user experience by allowing users to select options through a guided interface. This mode is particularly useful for those who may not be familiar with the command syntax.</p><pre># python:src/scribe_data/cli/interactive.py<br>def run_interactive_mode():<br> &quot;&quot;&quot;<br> Run the interactive mode for Scribe-Data CLI.<br> &quot;&quot;&quot;<br> selected_languages = select_languages()<br> selected_data_types = select_data_types()<br> output_options = get_output_options()<br># Process the selections</pre><p>In this function, users are guided through selecting languages, data types, and output options. The interactive mode simplifies the process, making it accessible for users who prefer a more visual approach.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l9tJ1ghLqRaSZOvdC38O7A.png" /></figure><p>Creating the Scribe-Data CLI was a rewarding experience that taught me valuable lessons about user needs and command-line design.</p><p>Feel free to check out the<a href="https://github.com/scribe-org/Scribe-Data/tree/main/src/scribe_data"> Scribe-Data GitHub repository</a> for the complete code and further details.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bd51202aa7c6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Final Stretch: GSoC Journey with Scribe-Data]]></title>
            <link>https://medium.com/@mhmohona/the-final-stretch-gsoc-journey-with-scribe-data-1740084c958d?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/1740084c958d</guid>
            <category><![CDATA[gsoc]]></category>
            <category><![CDATA[scribe-data]]></category>
            <category><![CDATA[wikimedia]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Tue, 03 Sep 2024 17:38:30 GMT</pubDate>
            <atom:updated>2024-09-03T17:43:25.771Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/724/0*DCoNl3LVikLGIl39.png" /><figcaption>Image from github.com/scribe-org/Scribe-Data</figcaption></figure><p>We’re almost at the finish line of GSoC, and I can’t believe how fast the time has flown by!</p><h4>The Latest Progresses</h4><p><strong>Docker Dilemmas </strong><br>This week was all about Docker — well, trying to make friends with Docker (even though my device didnt support me)! I was deep into learning the ins and outs of containerizing our CLI, but I’ll be honest, it felt like wrestling an octopus at times. I made some progress understanding deployment strategies, but there’s still some way to go before I master it.</p><p><strong>Command Central </strong><br>Docker wasn’t quite playing nice, so I decided to focus on some fun stuff instead! I rolled up my sleeves and got to work on some new commands for the CLI. I added the `version` command to help users check which version of the tool they’re using and then `upgrade` command.</p><p><strong>Smooth Sailing… Almost! </strong><br>I’ve been refining and tweaking to make sure everything runs smoothly. Added some unittests to make sure our CLI works as expected. And yes, I’m still wrestling with Docker a bit (a bit??!!!), but I’m determined to figure it out. You know what they say — slow and steady wins the race, right (finger crossed)? My mentor, Will really helped me to figure it out where and why I am facing the problem, and it was super helpful.</p><h4>The Ups, the Downs, and Everything in Between</h4><p>These last few weeks have been a mixed bag of emotions — some days I feel like I’m on top of the world, and other days, it feels like I’m stuck in a coding maze with no exit in sight. 😂 The Docker stuff has been tricky, and there were days I didn’t make any headway at all. For some reason it occupies too much space which results crashing, slowing down, freezing my device.</p><h4>Feeling All the Feels</h4><p>I have to give a huge shoutout to my mentors, Will, Andrew, and Henrik — you guys are the real MVPs! 🙌 Thanks for the support. Your guidance has been everything! ❤️</p><p>I’m so excited to see where this project goes and to finally see our Scribe-Data CLI making waves in the Wikidata world. 🚀</p><p>Until then, I’ll be here, coding away with my fingers crossed and my dance moves ready for every little win (with my sweet little toddler)! 💃✌️</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1740084c958d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Vitess: Game Changer for Your Database Needs]]></title>
            <link>https://medium.com/@mhmohona/vitess-game-changer-for-your-database-needs-10a826babb82?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/10a826babb82</guid>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Fri, 16 Aug 2024 03:33:59 GMT</pubDate>
            <atom:updated>2024-08-16T03:33:59.749Z</atom:updated>
            <content:encoded><![CDATA[<p>Struggled to manage large scaled database? And getting worried about scaling MySQL database without breaking everything, cost efficiency, making things easy… I mean database is enough to give you gray hair? Been there too!</p><p>Let me introduce you with Vitess — the super-smart assistant for your databases, making them work better together and grow more easily.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lfuO7HJqOsAzJsNi.png" /><figcaption>Image from <a href="https://vitess.io/">vitess.io</a></figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10a826babb82" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Halfway There: My GSoC Adventure with Scribe-Data CLI]]></title>
            <link>https://medium.com/@mhmohona/halfway-there-my-gsoc-adventure-with-scribe-data-cli-2ffe6d727ecb?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/2ffe6d727ecb</guid>
            <category><![CDATA[scribe-data]]></category>
            <category><![CDATA[gsoc]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Fri, 26 Jul 2024 02:16:48 GMT</pubDate>
            <atom:updated>2024-07-26T02:16:48.312Z</atom:updated>
            <content:encoded><![CDATA[<p>Hey everyone! 👋 Can you believe we’re already halfway through GSoC? Time flies when you’re having fun (and debugging code 😅). I wanted to share what I’ve been up to with the Scribe-Data project.</p><h4>What I’ve Been Working On</h4><p>So, remember how I said we were turning<a href="https://medium.com/@mhmohona/first-month-as-a-gsoc-intern-building-scribe-data-cli-d0c12c9e8371"> Scribe-Data into a command-line tool</a>? Well, we’re making it happen! Here’s what I’ve been up to:</p><ol><li><strong>Feature Implementation</strong>: I’ve submitted <a href="https://github.com/scribe-org/Scribe-Data/pulls/mhmohona">several pull requests</a> that add crucial functionality to our CLI:</li></ol><ul><li>Added timestamp functionality to our data outputs (PR #162)</li><li>Implemented new features for data retrieval and storage (PRs #167, #168)</li><li>Worked on improving the overall structure and usability of the CLI</li></ul><ol><li><strong>Documentation</strong>: I’ve started developing comprehensive documentation for the CLI (PR #170). This will be crucial for future users and contributors to understand and utilize our tool effectively.</li><li><strong>Deployment Preparations</strong>: I’ve been studying Docker deployment strategies to ensure our CLI can be easily distributed and run in various environments.</li></ol><h4>The Ups and Downs</h4><p>Not gonna lie, some days I feel like a coding wizard, and other days… well, let’s just say Stack Overflow, chatgpt become my best friend. But hey, that’s how we learn, right?</p><p>The best part? Every time I solve a problem, I do a little victory dance. My two years olf toddler judges me, but whatever. 🐱💃</p><p>Also currently there is a critical situation going on for my country, which caused internet blackout for straight 7 days, and I had no choice but to stop working on my project.</p><h4>What My Mentors Think</h4><p>Okay, so my mentors gave me some feedback, and I’m not crying, you’re crying! They said:</p><blockquote>“Your input on the structure of the CLI has been of great importance, and your focus on the end user has really helped guide us towards a better product. We’re more than confident that the latter stages of the project will go well, and can’t wait for you to start documenting and sharing information on what Scribe-Data can do!”</blockquote><p>I’m going to print this out and stick it on my wall for motivation. Maybe get it framed? Too much? 😂</p><h4>What’s Next?</h4><p>So, what’s the plan for the rest of GSoC? Glad you asked!</p><p>1. Finish writing that guide (future users will thank me)<br>2. Make sure anyone can easily install our tool<br>3. Get our tool running smoothly in Docker<br>4. Keep adding cool features to make the tool even more awesome</p><p>I’m super excited about where this project is going. We’re creating something that’s going to make working with Wikidata language packs so much easier. How cool is that?</p><p>Stay tuned for more updates! Catch you on the flip side! ✌️</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2ffe6d727ecb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[First Month as GSoC Intern: Building Scribe-Data CLI]]></title>
            <link>https://medium.com/@mhmohona/first-month-as-a-gsoc-intern-building-scribe-data-cli-d0c12c9e8371?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/d0c12c9e8371</guid>
            <category><![CDATA[scribe-data]]></category>
            <category><![CDATA[gsoc]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Wed, 26 Jun 2024 03:35:52 GMT</pubDate>
            <atom:updated>2024-06-26T03:37:02.483Z</atom:updated>
            <content:encoded><![CDATA[<p>I’m excited to share my experience as a Google Summer of Code (GSoC) intern working on the Scribe-Data project. My task is to turn <a href="https://phabricator.wikimedia.org/T358064">Scribe-Data into a command-line</a> tool for Wikidata language packs. Let me tell you what I’ve been up to in my first month!</p><p><strong>Week 1: Getting Started</strong></p><p>I kicked things off by meeting my mentors to plan out the project. We decided how to <a href="https://etherpad.wikimedia.org/p/scribe-dev-sync-2024-6-1">organize everything</a>, which was super helpful. I also wrote a SPARQL query to find Bangla adjectives and prepositions in Wikidata. At first, I was worried when I didn’t get the results I expected, but Andrew (my mentor) helped me figure it out. I learned a lot about how to use Wikidata’s search system!</p><p><strong>Week 2: Building the Basics</strong></p><p>This week, I started creating the actual command-line tool. I made it show a list of available languages and word types for each language.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/899/0*TpAsRsOuE9IZbvDf" /></figure><p>It was challenging, but I learned many things about how command-line tools are structured. I also planned to add more features next week, like searching for specific words and changing how the results are saved.</p><p><strong>Week 3: Making Progress</strong></p><p>I spent this week improving the tool. I finalized how all the files should be organized in our <a href="https://github.com/scribe-org/Scribe-Data">GitHub repository</a>. With the help of mentor, I also made the tool better at searching for words based on language and word type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GCtEO2gXAWgDooY973w8PA.png" /></figure><p>I’m starting to understand more about how Scribe-Data works as a whole.</p><p><strong>Week 4: Putting It All Together</strong></p><p>The changes I’ve been working on for weeks finally got <a href="https://github.com/scribe-org/Scribe-Data/pull/140">approved</a> and added to the main project. That felt amazing! I also added some new features:</p><ul><li>Users can now choose where to save their results.</li><li>The CLI tool can create different types of files (.json, .csv, and .tsv) to store the data.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G4xLABKYm47apQt7oUg5wA.png" /></figure><p><strong>A Big Thank You to My Amazing Mentors!</strong></p><p>I couldn’t talk about my GSoC experience without mentioning the incredible mentors guiding me every step of the way. They’ve been super helpful, supportive, and kind throughout this journey. I want to give a special shoutout to:</p><ul><li>Will Yoshida</li><li>Andrew McAllister</li><li>Henrik Thomasson</li></ul><p>These awesome folks have been there for me whenever I’ve had questions or felt stuck. Their expertise and encouragement have made this experience so much more rewarding.</p><p>Whether it’s helping me understand complex concepts, reviewing my code, or just offering words of encouragement, my mentors have been instrumental in my progress. I’m incredibly grateful for their patience and dedication. They’re not just mentors; they’re becoming role models for my future in open-source development.</p><p>To Will, Andrew, and Henrik: Thank you for your time, knowledge, and support. You’re making this GSoC experience unforgettable. ❤️</p><p><strong>What’s Next?</strong></p><p>I’m not done yet! There are so many things I need to and want to do for this project. My goals for the coming week are to:</p><p>1. Finish adding all the planned features to the tool.</p><p>2. Fix any bugs I find.</p><p>3. Start writing documentation on how to use the tool</p><p>I’m having a blast working on this project. It’s challenging, but I’m learning so much. I can’t wait to see what the rest of the summer brings!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d0c12c9e8371" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding Buildpacks]]></title>
            <link>https://medium.com/@mhmohona/understanding-buildpacks-78d7b0a50864?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/78d7b0a50864</guid>
            <category><![CDATA[cloud-native-buildpacks]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Wed, 01 May 2024 21:37:03 GMT</pubDate>
            <atom:updated>2024-05-01T22:13:50.572Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*KFj3s-_k6GovDki3" /><figcaption>Photo by <a href="https://unsplash.com/@marvelous?utm_source=medium&amp;utm_medium=referral">Marvin Meyer</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Sometime building applications from source code can be a challenging task. You need to install all the different software, set up the right environments, handle multiple dependencies and follow specific steps to create a working program… and then after doing all the hassle you can expect the application to run.</p><p>Wouldn’t it be wonderful if someone could do all of the job for you? That’s where <a href="https://buildpacks.io/">buildpacks</a> come in!</p><h3>What are Buildpacks?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*47Hr_J_HTPeyj6nSc3UuWw.jpeg" /><figcaption>Image from <a href="https://buildpacks.io/">https://buildpacks.io/</a></figcaption></figure><p>Buildpacks is the tool that helps you to create ready-to-run applications without all the ground work. It is like a personal assistant that take your application code and transform it into a complete package, including all the necessary software and settings.</p><p>For example, if you want to bake a cake, you need to gather ingredients, prepare the batter, and bake it in the oven. With buildpacks, all you need to do is providing the recipe (your code), and they’ll take care of everything else, from gathering the ingredients to baking the cake!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/657/1*CMSN2qHTafI6bxjM_0rBjg.png" /><figcaption>Buildpacks ecosystem</figcaption></figure><h3>Why Use Buildpacks?</h3><p>1.<strong> Easy Peasy</strong>: Buildpacks simplify the process of creating applications. You don’t need to worry about installing dependencies, setting up environments or anything. Just provide your code, and the buildpack will take care of the rest.</p><p>2. <strong>Consistency is Key</strong>: Buildpacks ensure that your application is built the same way every time, no matter where you’re building it. This means you won’t have to deal with “it works on my machine” issues.</p><p>3. <strong>Language Lovers</strong>: Buildpacks supports a wide range of programming languages and frameworks, so you can use your favorite languages and frameworks to build your applications.</p><p>4. <strong>Cloud-Ready</strong>: Buildpacks are designed to work seamlessly with containers, which are like portable boxes for applications. This makes it easy to run your applications in the cloud or on different machines.</p><h3>Getting Started with Buildpacks</h3><p>To start using buildpacks, you’ll need to install a tool called the `pack` CLI, which helps you build your applications using buildpacks.</p><p>Here’s how you can install it:</p><p>- <strong>macOS</strong>: Run `brew install buildpacks/tap/pack` in your terminal.<br>- <strong>Linux</strong>: Follow the instructions in the <a href="https://github.com/buildpacks/pack#linux">pack repository</a> for your specific Linux distribution.<br>- <strong>Windows</strong>: Download the <a href="https://github.com/buildpacks/pack/releases">pack executable</a> and add it to your system’s PATH.</p><p>Once you have the `pack` CLI installed, you can build your application by running the following command in your project folder:</p><pre>pack build my-app - path .</pre><p>This command tells the `pack` CLI to look at your application code in the current folder (`.`) and use a buildpack to create a container image called `my-app`.</p><h3>Exploring Buildpacks</h3><p>The `pack` CLI comes with some default buildpacks, but you can also use other buildpacks created by the community. The [Cloud Native Buildpacks organization](<a href="https://github.com/buildpacks">https://github.com/buildpacks</a>) on GitHub has official buildpacks for popular languages like Java, Node.js, Go, and more.</p><p>To use a specific buildpack, you can pass the ` — buildpack` flag to the `pack build` command:</p><pre>pack build my-app - path . - buildpack=gcr.io/paketo-buildpacks/nodejs</pre><p>This command tells the `pack` CLI to use the official Node.js buildpack from Paketo Buildpacks to build your application.</p><h3>Real-Life Example</h3><p>Let’s say you have a simple Node.js application with a few files: `index.js`, `package.json`, and some other files. Without buildpacks, you would need to install Node.js, install all the dependencies listed in `package.json`, and then run your `index.js` file.</p><p>With buildpacks, you can skip all those steps! Just run the `pack build` command, and the buildpack will:</p><ol><li>Install Node.js for you<br>2. Install all the dependencies from `package.json`<br>3. Compile your code<br>4. Create a container image with your application ready to run</li></ol><p>We can see below diagram to understand the steps involved in using buildpacks to transform your Node.js application into a container image, ready to run:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/501/1*mqtr3Dss3q6AVbGygTuEsA.png" /></figure><p>That’s it! You can then run your application using the container image without worrying about setting up the environment or installing dependencies.</p><h3>Conclusion</h3><p>Buildpacks are amazing tools that make building applications much easier and more consistent. They handle all the tedious setup and installation tasks, so you can focus on writing great code. With the `pack` CLI and the wide variety of available buildpacks, getting started is simple, even for beginners. Give buildpacks a try and experience the convenience and power they bring to your development workflow!</p><p>If you want to learn more about buildpacks, check out the <a href="https://buildpacks.io/docs/">official Cloud Native Buildpacks documentation</a> and the <a href="https://buildpacks.io/community/">Cloud Native Buildpacks community resources</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=78d7b0a50864" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Scribe-Data: A Guide to Open Source Language Data]]></title>
            <link>https://medium.com/@mhmohona/scribe-data-a-guide-to-open-source-language-data-a801c59db4c9?source=rss-594b806706c6------2</link>
            <guid isPermaLink="false">https://medium.com/p/a801c59db4c9</guid>
            <category><![CDATA[scribe]]></category>
            <dc:creator><![CDATA[Mahfuza Humayra Mohona]]></dc:creator>
            <pubDate>Fri, 05 Apr 2024 04:08:30 GMT</pubDate>
            <atom:updated>2024-04-05T09:29:51.973Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XBldcxdjIAghgKbW.png" /><figcaption>image from <a href="https://github.com/scribe-org">github.com/scribe-org</a></figcaption></figure><p>Welcome to the world of Scribe-Data, a fascinating project that’s all about making language data more accessible and useful for everyone. This blog post will take you through the basics of <a href="https://github.com/scribe-org/Scribe-Data/">Scribe-Data</a>, how it works, and how you can contribute to this exciting project.</p><h3>What is Scribe-Data?</h3><p>Scribe-Data is an open-source project that provides scripts and tools for extracting and formatting linguistic data from Wikidata and Wikipedia. This data powers various applications developed by <a href="https://github.com/scribe-org">Scribe</a>, which aims to create tools and applications that help people learn and use different languages. The data collected by Scribe-Data comes from sources like Wikidata and Wikipedia, and the data is then used to power commands in Scribe applications to allow users to conjugate verbs and translate from one language to another.</p><p>At its core, Scribe-Data contains <a href="https://github.com/scribe-org/Scribe-Data/tree/main/src/scribe_data">Python scripts</a> that interact with the Wikidata and Wikipedia APIs to retrieve and process information related to languages and writing systems. This data is then used to build language interfaces and input methods for Scribe’s cross-platform applications.</p><h3>How Does Scribe-Data Work?</h3><p>Scribe-Data uses SPARQL to query data from Wikidata. SPARQL is a bit like asking a librarian for books on a specific topic. In this case, it’s asking for information about languages, words, and how they’re used. This data is then organized and made available for Scribe applications to use.</p><p>The main data update process is initiated by running a script named `<a href="https://github.com/scribe-org/Scribe-Data/blob/main/src/scribe_data/extract_transform/wikidata/update_data.py">update_data.py</a>`. This script triggers SPARQL queries to query language data from Wikidata.</p><p>To run the `update_data.py` script, you use a command-line interface (CLI) command from the <a href="https://github.com/scribe-org/Scribe-Data">Scribe Data folder</a>:<br>```<br>python3 src/scribe_data/extract_transform/wikidata/update_data.py<br>```<br>This command is executed to start the data update process, which is a fundamental part of how Scribe-Data works to keep language tools current and effective.</p><p>There are other scripts for retrieving popular words from Wikidata and the words that typically follow them to create an effective autosuggestion feature. This feature is crucial for enhancing the user experience by providing relevant suggestions as users type. Additionally, emojis are sourced from <a href="https://github.com/scribe-org/Scribe-Data/tree/main/src/scribe_data/extract_transform/unicode">Unicode</a>, ensuring a rich and engaging user interface.</p><h3>Accessing and Using Scribe-Data</h3><p>The Scribe-Data project is hosted on GitHub at the following repository: <a href="https://github.com/scribe-org/Scribe-Data">https://github.com/scribe-org/Scribe-Data</a>. Developers and users can access the project’s source code, scripts, and documentation from this central location.</p><p>The repository’s directory structure is organized as follows:</p><ul><li>extract_transform/: Contains scripts and tools for extracting and transforming language data from sources like Wikidata and Wikipedia, preparing it for use in Scribe applications.</li><li>load/: Includes scripts and utilities for loading and processing language data into a usable format for Scribe applications.</li><li>resources/: contains commands and metadata about supported languages, including their names, codes, scripts, writing directions and plural rules, which are used to configure language tools in Scribe applications.</li></ul><p>The project’s README file offers detailed guidance on setting up the development environment, running the data extraction scripts, and understanding the overall project structure. This documentation serves as a valuable resource for those who want to get started with Scribe-Data.</p><h3>Benefits of Using Scribe-Data</h3><p>Scribe-Data offers so many benefits, making it an invaluable resource for developers and users :</p><p>- <strong>Rich Language Data</strong>: By leveraging the vast amount of <a href="https://github.com/scribe-org/Scribe-Data/tree/main/src/scribe_data/extract_transform/languages">language data</a> from Wikidata and Wikipedia, Scribe-Data enables the creation of language applications that support a wide range of languages and writing systems.<br>- <strong>Cross-Platform Tools</strong>: The data and scripts provided by Scribe-Data facilitate the development of language tools that are not only functional and feature-rich but also compatible across different platforms, including iOS, Android, and Desktop.<br>- <strong>Accessibility and Communication</strong>: Scribe-Data plays a crucial role in promoting accessibility and breaking down communication barriers. It provides effective language input and interface solutions, making it easier for people from different linguistic backgrounds to communicate and interact.</p><h3>Contributing to Scribe-Data</h3><p>Scribe-Data welcomes contributions from the community. Whether you’re reporting bugs, working on new features, or adding language data via Wikidata, there’s a place for you in the Scribe-Data project. The repository’s <a href="https://github.com/scribe-org/Scribe-Data?tab=readme-ov-file#contributing">contributing</a> and <a href="https://github.com/scribe-org/Scribe-Data/blob/main/README.md">README</a> section provides detailed guidelines and resources for those interested in contributing. For first-time contributors, issues marked with `<a href="https://github.com/scribe-org/Scribe-Data/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issue</a>` are designed to help you get started.</p><p>Whether you’re a language enthusiast, a developer interested in open-source projects, or someone seeking to break down communication barriers, Scribe-Data is a project worth exploring and supporting. By getting involved, you can play a vital role in shaping the future of language-focused applications and making a positive impact on the way people learn, communicate, and connect across the world.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a801c59db4c9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>