<?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 Daniel Bogale on Medium]]></title>
        <description><![CDATA[Stories by Daniel Bogale on Medium]]></description>
        <link>https://medium.com/@daniel_bogale?source=rss-3fc5479f231d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*fTddzJY1B8YIsb4LMVKJqw.png</url>
            <title>Stories by Daniel Bogale on Medium</title>
            <link>https://medium.com/@daniel_bogale?source=rss-3fc5479f231d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 07 May 2026 01:05:10 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@daniel_bogale/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[React’s December Security Crisis: From React2Shell to Three Critical CVEs in 8 Days]]></title>
            <link>https://medium.com/@daniel_bogale/reacts-december-security-crisis-from-react2shell-to-three-critical-cves-in-8-days-85e1e8cc9ef4?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/85e1e8cc9ef4</guid>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Fri, 12 Dec 2025 19:08:51 GMT</pubDate>
            <atom:updated>2025-12-12T19:08:51.023Z</atom:updated>
            <content:encoded><![CDATA[<h3>React Server Components: December 2025 security crisis explained</h3><figure><img alt="December 2025 security crisis explained" src="https://cdn-images-1.medium.com/max/1024/1*wp8SmZi51v_DiHELsygEEw.png" /></figure><p>A critical remote code execution vulnerability dubbed “React2Shell” (CVE-2025–55182) shook the JavaScript ecosystem in December 2025, achieving a perfect <strong>CVSS 10.0 severity score</strong> and enabling unauthenticated attackers to execute arbitrary code on servers running React Server Components. Within days, researchers probing the initial patches discovered two additional vulnerabilities, forcing the React team to release emergency updates twice in eight days. Wiz Research found <strong>39% of cloud environments</strong> contained vulnerable React or Next.js instances, with active exploitation by state-sponsored threat groups beginning within 48 hours of disclosure.</p><h3>The React Flight Protocol created a massive attack surface</h3><p>The React Flight Protocol is React’s custom serialization format for transferring component trees and data between server and client in React Server Components architecture. Operating as an RPC-over-HTTP mechanism, it packages data into numbered “chunks” using special prefixes $@ for raw chunk references, $B for blob data, $F for function references that the server reassembles to process requests.</p><p>The vulnerability exploited a fundamental flaw in how Flight deserializes incoming data. Within the reviveModel function in <strong>ReactFlightReplyServer.js</strong>, the code used value.hasOwnProperty(i) to check object properties. This seemingly innocuous pattern performs a method lookup on untrusted user input, allowing attackers to shadow the property with malicious references and traverse JavaScript&#39;s prototype chain to access the <strong>Function constructor, </strong>the gateway to arbitrary code execution.</p><p>The protocol’s design created multiple security problems: it implicitly trusted that clients would never send malicious structures, expanded object properties without sufficient validation, and processed payloads before any authentication or routing logic could intervene. Standard create-next-app deployments were immediately exploitable with nothing more than network access.</p><h3>How React2Shell achieves remote code execution</h3><p>The exploit chains vulnerabilities across four stages to transform a malformed HTTP request into server-side code execution. First, the attacker creates a self-reference loop using the $@ prefix, which returns the raw chunk object rather than its value. This enables access to internal React objects that should remain inaccessible.</p><p>Second, the attack hijacks JavaScript’s Promise resolution mechanism. By pointing an object’s then property to React&#39;s internal Chunk.prototype.then, the attacker tricks JavaScript&#39;s await behavior into calling React&#39;s initializeModelChunk() function with attacker-controlled data.</p><p>Third, setting status: &quot;resolved_model&quot; causes React to parse the .value field as trusted data. Finally, the $B prefix triggers React&#39;s blob handler, which calls .get() on a controlled object. By pointing _formData.get to the Function constructor and _prefix to malicious code, the attacker achieves arbitrary execution:</p><pre>Function(&quot;require(&#39;child_process&#39;). execSync(&#39;id&#39;);//0&quot;)()</pre><p><strong>Critical misconception</strong>: Early reports suggested blocking __proto__ in WAF rules would mitigate the attack. Trend Micro demonstrated this is false, the minimum viable payload uses $1:then:constructor to access the Function constructor without any prototype pollution. This path traverses from chunk 1 to its then property (a function), then to that function&#39;s constructor (the Function constructor itself).</p><h3>Two additional vulnerabilities emerged from patch analysis</h3><p>Security researchers scrutinizing the December 3rd patches discovered two additional vulnerabilities, disclosed on December 11, 2025:</p><p><strong>CVE-2025–55184</strong> (Denial of Service, CVSS 7.5): A crafted HTTP request can trigger an <strong>infinite loop that hangs the server process</strong> and consumes CPU, preventing all future requests. Notably, applications are vulnerable even without implementing Server Function endpoints, the mere presence of React Server Components support creates the attack surface. RyotaK from GMO Flatt Security discovered this vulnerability.</p><p><strong>CVE-2025–55183</strong> (Source Code Exposure, CVSS 5.3): A malicious request can force Server Functions to return the <strong>compiled source code of other Server Functions</strong>, exposing business logic and any hardcoded secrets. Runtime environment variables like process.env.SECRET remain protected. Andrew MacPherson discovered this issue.</p><p><strong>CVE-2025–67779</strong> (Denial of Service, CVSS 7.5): An incomplete fix for CVE-2025–55184, discovered by Shinsaku Nomura on the same day patches released, meaning organizations that upgraded to versions 19.0.2, 19.1.3, or 19.2.2 remained vulnerable and needed to upgrade again immediately.</p><p>The React team acknowledged this pattern, noting: “When a critical vulnerability is disclosed, researchers scrutinize adjacent code paths looking for variant exploit techniques.” They cited Log4Shell as a precedent where multiple CVEs followed the initial disclosure.</p><h3>Version matrix reveals complex patching requirements</h3><p>The affected versions span React 19.x and multiple Next.js release lines. For CVE-2025–55182 (RCE), vulnerable packages include react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack versions 19.0.0, 19.1.0, 19.1.1, and 19.2.0.</p><p><strong>React Patch Versions:</strong></p><ul><li><strong>React 19.0.x</strong> → RCE Patch: 19.0.1 → Full Patch: <strong>19.0.3</strong></li><li><strong>React 19.1.x</strong> → RCE Patch: 19.1.2 → Full Patch: <strong>19.1.4</strong></li><li><strong>React 19.2.x</strong> → RCE Patch: 19.2.1 → Full Patch: <strong>19.2.3</strong></li></ul><p>Next.js patched versions require attention to the specific release line:</p><p><strong>Next.js Fully Patched Versions:</strong></p><ul><li><strong>13.3.x — 14.x</strong> → 14.2.35</li><li><strong>15.0.x</strong> → 15.0.7</li><li><strong>15.1.x</strong> → 15.1.11</li><li><strong>15.2.x</strong> → 15.2.8</li><li><strong>15.3.x</strong> → 15.3.8</li><li><strong>15.4.x</strong> → 15.4.10</li><li><strong>15.5.x</strong> → 15.5.9</li><li><strong>16.0.x</strong> → 16.0.10</li></ul><p>Applications <strong>not affected</strong> include: Next.js Pages Router applications, Edge Runtime deployments (which use V8 isolates without Node.js APIs), apps without server components, and React Native (unless using affected packages in a monorepo).</p><h3>Active exploitation began within hours of disclosure</h3><p>The exploitation timeline demonstrates how rapidly threat actors weaponized CVE-2025–55182. First in-the-wild exploitation was observed <strong>the same day</strong> as disclosure (December 3rd). By December 5th, Trend Micro observed multiple malware campaigns: Cobalt Strike beacons with CrossC2-generated payloads, a Mirai variant calling itself “reactOnMynuts,” Sliver C&amp;C implants accompanied by KINSING cryptominers, and a novel “Secret-Hunter” payload that deploys TruffleHog and Gitleaks to harvest credentials from compromised servers.</p><p>AWS threat intelligence identified <strong>China-nexus groups</strong> including Earth Lamia (targeting financial services, logistics, and government across Latin America, Middle East, and Southeast Asia) and Jackpot Panda (focusing on East and Southeast Asia). AWS MadPot honeypots recorded <strong>116 exploitation requests from a single IP</strong> over 52 minutes, showing active debugging and refinement of techniques. Datadog observed over <strong>800 unique IP addresses</strong> scanning for vulnerable instances.</p><p>CISA added CVE-2025–55182 to the Known Exploited Vulnerabilities catalog on December 6th, requiring federal agencies to patch within tight deadlines.</p><h3>The fix restructures property checking at the protocol level</h3><p>The core fix, authored by Sebastian Markbåge, addresses the property traversal attack by caching a reference to the original hasOwnProperty method at module load time, then using .call() syntax for invocation:</p><pre>// VULNERABLE: method lookup on untrusted object<br>value.hasOwnProperty(i)</pre><pre>// FIXED: uses original prototype method<br>hasOwnProperty.call(value, i)</pre><p>This prevents attackers from shadowing hasOwnProperty because the reference is captured before any untrusted data is processed. Additional defense-in-depth measures include explicit __proto__ handling, a Server Module Map Proxy returning undefined for prototype keys, AES-256-GCM encryption for Server Action bound arguments, and use of ES6 collections (Map, WeakMap) for internal storage that are immune to prototype pollution.</p><h3>Remediation requires multiple actions beyond patching</h3><p>The React team and Vercel issued specific guidance for affected organizations. The immediate priority is upgrading to the December 11th patch versions, <strong>not</strong> the December 3rd versions, which remain vulnerable to DoS and source code exposure.</p><p>Vercel’s advisory states explicitly: “If your application was online and unpatched as of December 4th, 2025 at 1:00 PM PT, we strongly encourage you to rotate any secrets it uses, starting with your most critical ones.” For CVE-2025–55183 specifically, secrets hardcoded in source code should be rotated immediately, though runtime environment variables accessed via process.env were not exposed.</p><p>Organizations should not rely solely on WAF mitigations. While Vercel, Akamai, and other providers deployed blocking rules, these cannot catch all payload variants, particularly those avoiding __proto__ in favor of $1:then:constructor paths. Enable deployment protection on preview environments, audit shareable deployment links, and implement detection rules looking for Next-Action headers combined with $@ patterns, resolved_model strings, or _formData.get in request bodies.</p><h3>Conclusion</h3><p>The React2Shell vulnerability represents one of the most severe security incidents in JavaScript framework history, combining maximum severity (CVSS 10.0), pre-authentication exploitation, and broad ecosystem impact. The subsequent discovery of two additional vulnerabilities during patch analysis demonstrates the depth of security debt accumulated in the React Flight Protocol’s design. Organizations running React Server Components should treat December 11th patch versions as mandatory, assume compromise if unpatched before December 4th, and implement comprehensive monitoring for the specific attack patterns that signature-based WAF rules may miss. The incident underscores that serialization protocols handling untrusted input require rigorous security review, a lesson the industry has learned repeatedly from vulnerabilities like Log4Shell and Java deserialization attacks.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=85e1e8cc9ef4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Qualtrics Integration Guide]]></title>
            <link>https://medium.com/@daniel_bogale/integration-of-dasesa-to-external-tools-752cd18a972c?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/752cd18a972c</guid>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Sat, 06 Jan 2024 12:34:02 GMT</pubDate>
            <atom:updated>2024-08-12T20:54:49.268Z</atom:updated>
            <content:encoded><![CDATA[<p>This guide will walk you through the steps to integrate Dasesa with Qualtrics, enabling you to build surveys and collect responses using Qualtrics, while managing participant recruitment and response approvals through Dasesa.</p><h3>Step 1: Set Up Your External Survey</h3><p>In the Question Design phase while creating your survey, select the “External Survey” tab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KvCX9WhQF2KQbvIRQqvP9g.png" /></figure><h3>Step 2: Link Your Qualtrics Survey</h3><p>Copy the Qualtrics survey link and paste it into the first input field on the External Survey tab in Dasesa.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V_OoEhMMDqAuSXIhrpwr3A.png" /></figure><h3>Step 3: Choose Your ID Recording Method</h3><p>Choose the option to record Dasesa user IDs if you plan to approve or decline responses. If you don’t need to approve all responses, select the “I don’t need to record these” option.</p><ul><li><strong>Manual Entry</strong>: If you select “I’ll add a question in my study,” modify your Qualtrics survey to include a mandatory question asking for the Dasesa user ID. Participants will manually enter their IDs.</li><li><strong>Automatic Entry</strong>: If you choose “I’ll use URL parameters,” Dasesa IDs will be recorded automatically via URL parameters. You can retrieve these IDs from the query string in the study URL on Dasesa, meaning participants won’t need to manually input their IDs into Qualtrics. This process uses Qualtrics’ “<a href="https://www.qualtrics.com/support/survey-platform/survey-module/survey-flow/standard-elements/embedded-data/">Embedded Data</a>” feature.</li></ul><h3>Step 4: Set Up Embedded Data in Qualtrics</h3><ol><li>Add a block to your survey named “Dasesa ID” and create a “Text Entry” question.</li><li>Ensure that the IDs are recorded in your data set. Navigate to “Survey Flow” and add an “Embedded Data” element at the beginning of your study. Enter “dasesa_id” into the embedded data field.</li><li>Go to the survey item that records the participant’s Dasesa ID, right-click on the text-entry field, and select “Default Choices.”</li><li>In the window that opens, click the blue drop-down arrow to the right of the text-entry box, and choose “Embedded Data Field.” Either enter “dasesa_id” manually or select it from the drop-down menu. This will create a string called ${e://Field/dasesa_id}. Click &quot;Save,&quot; and you&#39;re done!</li></ol><h3>Final Step: Review the Dasesa ID Question</h3><p>Your question for the participant’s Dasesa ID should now look something like this:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=752cd18a972c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Import/Export Firebase Firestore Data of a project]]></title>
            <link>https://medium.com/@daniel_bogale/import-export-firebase-firestore-data-of-a-project-8d03b0641b8f?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/8d03b0641b8f</guid>
            <category><![CDATA[firebase]]></category>
            <category><![CDATA[firestore]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[cli]]></category>
            <category><![CDATA[automation]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Wed, 18 Oct 2023 11:37:59 GMT</pubDate>
            <atom:updated>2023-10-18T11:39:00.944Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Are you looking to seamlessly transfer or duplicate Firebase Firestore data from one project to another without the need for manual data input?</em></p><p>In this blog, we’ll explore an automated approach to migrate Firestore data between projects, streamlining the entire process for you.</p><p>First, begin by creating a new project where you intend to duplicate the existing Firebase Firestore data. For example, in this walkthrough, I’ll demonstrate creating a copy of the “Flowius Survey Dev” project as a “Flowius Survey Dev Copy” Firebase project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*unPagilj50YZG2hMMrAIxg.png" /></figure><p>Afterward, proceed to create an app that will establish a connection to your web application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tk1OPB6DXBylowJl98OO7Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4dEjihp_zZVCXKG2FJCfWw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wiud9mkueDaxvb4DE2d3rQ.png" /></figure><p>Next, click on ‘Continue to the Console.’ At this point, you should be able to see both projects listed in your Firebase console.</p><p>Then, proceed to create a database within your new Firebase project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a9wtIrJ9LX7WKaHB9exidg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mNvliU8hPvCrQ9dUZfoa2Q.png" /></figure><p>At this stage, you should observe an empty database in your Firebase project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OivWTPOOXSZ-HTDZ0gxG3A.png" /></figure><p>Next, navigate to ‘Project Settings’ and then to ‘Service Accounts,’ where you can generate a new private key.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JDnF-fbmeovFrbtFKgYXMA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0f7gHgzMNLFF7_p2Z-U1iw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0WarvDz8QC2s-xYAPkUPhA.png" /></figure><p>Similarly, generate a new private key for your existing project from which you intend to export data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Y8geKYq3zlAxGLFq58JmQ.png" /></figure><p>At this point, you should have two JSON files downloaded.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BrxYAv2qoVIeVYogeMIVGw.png" /></figure><p>Now, create an empty JSON file named ‘backup.json.’ Afterward, navigate to the folder where these three files exist using your terminal or command prompt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xTpPJqAlGSJko70emy9s3Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IpG4nYpY9wGIOrW_nWD3vA.png" /></figure><p>Then, execute the following commands to export data from the primary Firestore and import it into the new Firestore:</p><ol><li>Export data from the primary Firestore:</li></ol><pre>npx -p node-firestore-import-export firestore-export -a [primary-firestore-private-key.json] -b backup.json</pre><p>2. Import data into the new Firestore:</p><pre>npx -p node-firestore-import-export firestore-import -a [new-firestore-private-key.json] -b backup.json</pre><p>Replace [primary-firestore-private-key.json] with the private key JSON file for the main Firestore, and [new-firestore-private-key.json] with the private key JSON file for the new Firestore.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LTq_7u-i895fZIy8ypl0lg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YOOL5PkS6KigkOGNSvrpag.png" /></figure><p>By now, your Firestore project data should be successfully migrated from the primary project to the new one. This automated process can save you time and effort, ensuring a seamless transition of your data between Firebase projects. Happy coding and managing your Firebase Firestore databases efficiently.</p><p>If you prefer visual guidance, feel free to watch this helpful video tutorial: <a href="https://www.youtube.com/watch?v=Xx0goSxpVqY">Link</a>. The video provides a step-by-step demonstration of the entire Firebase Firestore data migration process outlined in this blog. Visual aids can further enhance your understanding and implementation. Happy migrating!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8d03b0641b8f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The US Dollar Might Collapse | Jordan B.Peterson and Peter Schiff | Podcast Summary]]></title>
            <link>https://medium.com/@daniel_bogale/the-us-dollar-might-collapse-jordan-b-peterson-and-peter-schiff-podcast-summary-c5d3ff8c12f7?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/c5d3ff8c12f7</guid>
            <category><![CDATA[summary]]></category>
            <category><![CDATA[money]]></category>
            <category><![CDATA[podcast]]></category>
            <category><![CDATA[peter-schiff]]></category>
            <category><![CDATA[jordan-peterson]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Sun, 24 Sep 2023 12:07:34 GMT</pubDate>
            <atom:updated>2023-11-08T12:37:56.787Z</atom:updated>
            <content:encoded><![CDATA[<p><em>What is Inflation? How Money Works: Is the US Dollar on the Brink of Collapse?</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aC8EKV10PiI-ifEOjA6h2g.jpeg" /></figure><p>In a recent episode of The Jordan B. Peterson Podcast, renowned psychologist and author Dr. Jordan B. Peterson engaged in a riveting discussion with economist Peter Schiff. The focal point of this conversation was the precarious state of the US Dollar and the potential impending collapse. Schiff delved into various aspects, shedding light on the gold standard, the vulnerabilities of the fiat system, inflation, and the deceptions perpetuated by politicians.</p><p>1. Inflation and Government Practices:<br>A prominent topic of discussion was the creation of inflation by governments through the excessive printing of money for self-serving interests, often bypassing the need for taxation. This reckless practice sets off a vicious cycle, where the increased money supply exceeds the growth of products, resulting in a surge in consumer prices.</p><p>2. CPI Manipulation:<br>Schiff highlighted the dubious role of the Consumer Price Index (CPI), often manipulated to downplay the true inflation rate for political reasons. This manipulation masks the severity of inflation, presenting a distorted picture to the public.</p><p>3. Debtors and Inflation:<br>The discussion also emphasized how debtors stand to gain from inflation, with governments being the primary debtors in today’s economic landscape. Inflation allows them to repay their debt with devalued money, essentially reducing their financial burden.</p><p>4. Safeguarding Wealth:<br>Schiff proposed a strategy to protect one’s savings from the detrimental effects of inflation: investing in assets like gold. Historically, gold has proven to retain its value and act as a hedge against economic volatility.</p><p>**5. The Future of Currency:**<br>Looking ahead, Schiff suggested that gold-backed cryptocurrencies could represent the future of currency. Combining the stability of gold with the advantages of blockchain technology, these currencies offer a potential solution to the vulnerabilities of fiat money.</p><p>In conclusion, the podcast presented a thought-provoking analysis of the current economic landscape, urging listeners to critically assess the prevailing financial system. It serves as an eye-opener, prompting a reevaluation of traditional beliefs about money and the need for alternative solutions. For those intrigued by the future of currency and concerned about the stability of the US Dollar, this podcast is highly recommended.</p><p>To listen to the full podcast, click <a href="https://spotify.link/1Gp7Tke0lDb">here</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c5d3ff8c12f7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Make Your Organization Visible on GitHub]]></title>
            <link>https://medium.com/@daniel_bogale/how-to-make-your-organization-visible-on-github-ba622d78027e?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/ba622d78027e</guid>
            <category><![CDATA[organization]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[profile]]></category>
            <category><![CDATA[visibility]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Thu, 21 Sep 2023 06:52:12 GMT</pubDate>
            <atom:updated>2023-09-21T06:52:12.707Z</atom:updated>
            <content:encoded><![CDATA[<p>Have you ever wondered why your organization doesn’t show on your GitHub profile?</p><p>It’s because your organization’s membership visibility is set to private.</p><p>Steps to Publicize or Hide Organization Membership:</p><ol><li>In the top right corner of GitHub.com, click on your profile photo, then select “Your organizations.”</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/440/1*Nus8sza-rNXG4j55cSGpzg.jpeg" /></figure><p>2. Click the name of your organization.</p><p>3. Under your organization name, click “People.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8_hG4B16SIEAUvocyMClqw.jpeg" /></figure><p>4. Locate your username in the list of members. If the list is large, you can use the search box to find your username.</p><p>5 ext to your username, select the visibility dropdown menu, then choose a new visibility:</p><ul><li>To publicize your membership, select “Public.”</li><li>To hide your membership, select “Private.”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CBLt6FT5xOkpeFz_HBLLdw.jpeg" /></figure><p>For more information, you can visit the <a href="https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership">GitHub documentation on managing organization membership visibility</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ba622d78027e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Book Review: Influence — The Psychology of Persuasion by Robert B. Cialdini]]></title>
            <link>https://medium.com/@daniel_bogale/book-review-influence-the-psychology-of-persuasion-by-robert-b-cialdini-70a3669d598?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/70a3669d598</guid>
            <category><![CDATA[influence]]></category>
            <category><![CDATA[robert-b-cialdini]]></category>
            <category><![CDATA[book-review]]></category>
            <category><![CDATA[books]]></category>
            <category><![CDATA[psychology]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Mon, 24 Jul 2023 13:34:28 GMT</pubDate>
            <atom:updated>2023-07-24T13:34:28.648Z</atom:updated>
            <content:encoded><![CDATA[<h3>Book Review: Influence — The Psychology of Persuasion by Robert B. Cialdini</h3><p><em>Chapter 1: Introduction</em></p><p>1.1 <strong>Contrast Principle</strong></p><p>In the captivating opening chapter of “Influence,” Robert B. Cialdini delves into the fascinating concept of the contrast principle. This psychological phenomenon affects the way we perceive the difference between two consecutive items presented to us. When the second item differs significantly from the first, our minds tend to exaggerate the contrast, making the second item appear more distinct than it actually is. Cialdini illustrates this point with a simple example: lifting a light object first and then lifting a heavy one. The contrast created by the difference in weight leads us to overestimate the heaviness of the second object compared to lifting it in isolation.</p><p>The contrast principle extends beyond physical sensations like weight perception and finds its place in various aspects of human perception. From aesthetic judgments to social interactions, this principle plays a role in shaping our perceptions. For instance, in a social setting, if we engage in conversation with a stunningly attractive individual and are then joined by someone less attractive, our minds will subconsciously downgrade the attractiveness of the second person relative to the first.</p><p>Cialdini artfully explains how the contrast principle, rooted in psychophysics, has far-reaching implications in understanding the intricacies of human behavior and persuasion. By skillfully incorporating real-life examples and experiments, the author enriches the reader’s understanding of this intriguing concept.</p><p>Reader’s Report</p><p>In an emotionally charged letter from a college coed, Cialdini demonstrates the power of the contrast principle in a humorous yet thought-provoking manner. Through a fictional account of a student’s escapades, the author highlights how our expectations and perceptions can be influenced when contrasting elements are presented. The letter initially shocks the recipient (the parents) with exaggeratedly dire circumstances, only to reveal in the end that the reality is far less extreme and much more mundane — focusing on academic struggles rather than life-threatening incidents.</p><p>This anecdote serves as an amusing example of how the human mind can be swayed by contrasting information, and it reinforces the relevance of the contrast principle in understanding the subtleties of communication and persuasion in our daily lives.</p><blockquote>Dear Mother and Dad:</blockquote><blockquote>Since I left for college I have been remiss in writing and I am sorry for my thoughtlessness in not having written before. I will bring you up to date now, but before you read on, please sit down. You are not to read any further unless you are sitting down, okay? Well, then, I am getting along pretty well now. The skull fracture and the concussion I got when I jumped out the window of my dormitory when it caught on fire shortly after my arrival here is pretty well healed now. I only spent two weeks in the hospital and now I can see almost normally and only get those sick headaches once a day. Fortunately, the fire in the dormitory, and my jump, was witnessed by an attendant at the gas station near the dorm, and he was the one who called the Fire Department and the ambulance. He also visited me in the hospital and since I had nowhere to live because of the burntout dormitory, he was kind enough to invite me to share his apartment with him. It’s really a basement room, but it’s kind of cute. He is a very fine boy and we have fallen deeply in love and are planning to get married. We haven’t got the exact date yet, but it will be before my pregnancy begins to show. Yes, Mother and Dad, I am pregnant. I know how much you are looking forward to being grandparents and I know you will welcome the baby and give it the same love and devotion and tender care you gave me when I was a child. The reason for the delay in our marriage is that my boyfriend has a minor infection which prevents us from passing our pre-marital blood tests and I carelessly caught it from him. Now that I have brought you up to date, I want to tell you that there was no dormitory fire, I did not have a concussion or skull fracture, I was not in the hospital, I am not pregnant, I am not engaged, I am not infected, and there is no boyfriend. However, I am getting a “D” in American History, and an “F” in Chemistry and I want you to see those marks in their proper perspective.</blockquote><blockquote>Your loving daughter</blockquote><p>Stay tuned for more intriguing insights and psychological revelations as we delve deeper into the world of “Influence” by Robert B. Cialdini.</p><p><em>chapter 2 To be continued…</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=70a3669d598" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Automating Development and Production Modes: A Seamless Workflow for MultFirestore Projects]]></title>
            <link>https://medium.com/@daniel_bogale/automating-development-and-production-modes-a-seamless-workflow-for-multfirestore-projects-f234d891b864?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/f234d891b864</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[env]]></category>
            <category><![CDATA[firebase]]></category>
            <category><![CDATA[vites]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Fri, 14 Jul 2023 06:44:57 GMT</pubDate>
            <atom:updated>2023-07-14T09:07:39.689Z</atom:updated>
            <content:encoded><![CDATA[<h3>Automating Development and Production Modes: A Seamless Workflow for Multiple Firestore Projects in Different Modes</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*G19dpkfjmlEhJd9eXqg89g.png" /></figure><p>Introduction: Managing different modes, such as development, testing, and production, is crucial when working on Firestore projects. It allows developers to use distinct secrets without modifying the code, ensuring a smooth transition between environments. In this blog post, we’ll explore a procedure to automate development and production modes using environment variables and provide step-by-step instructions on how to implement it.</p><p>Step 1: Creating the .env File The first step is to create a .env file that will store the secrets for different modes. This file will be used to load environment variables into the application.</p><p>Step 2: Determining the Application Mode To identify whether the application is running in development, testing, or production mode, we can leverage the NODE_ENV environment variable. This variable is automatically set to &#39;development&#39; when using npm start, &#39;test&#39; when using npm test, and &#39;production&#39; when generating a production bundle using npm run build.</p><p>By accessing the process.env.NODE_ENV variable within our application, we can conditionally handle different configurations based on the current mode.</p><p>Step 3: Dynamically Changing Firebase Configurations Next, we need to update the Firebase configuration dynamically based on the application mode. By modifying the Firebase config secret values, we ensure that each mode uses the appropriate configuration without modifying the source code.</p><p>For example, you can refer to the firebase-new-config.js file in the simulated project provided in the resources section. This file demonstrates how the Firebase configuration can be adjusted based on the environment variables.</p><p>Step 4: Testing in Different Modes To validate the effectiveness of our automated workflow, it’s essential to conduct tests in both development and production modes.</p><p>For development mode testing, run the command yarn start and observe the mode in which the application is running. Verify that the appropriate secrets are loaded based on the .env file.</p><p>For production mode testing, you can utilize the “serve” tool to locally host the application. Follow these steps:</p><ol><li>Install the “serve” tool globally using the command: sudo yarn global add serve.</li><li>Build the application using yarn build.</li><li>Start the local server with the command: serve -s build -l 3003.</li></ol><p>This will host the application on the specified port, allowing you to test it as if it were running in a production environment. Ensure that the production secrets are correctly loaded and that the application functions as expected.</p><p>Conclusion: Automating development and production modes in Firestore projects streamlines the workflow for developers by enabling them to use different secrets without modifying the code. By utilizing environment variables and dynamically adjusting configurations based on the application mode, developers can seamlessly transition between different environments.</p><p>To see a practical implementation of this procedure, refer to the repository provided in the resources section. Feel free to explore the code and test it yourself to gain a better understanding of how to automate development and production modes in your Firestore projects.</p><p>By following this procedure, you can enhance the security and efficiency of your development process while ensuring that your Firestore applications function seamlessly across different environments.</p><p>For an illustration of how to implement the procedure described above using a Vite React app, you can refer to my repository at <a href="https://github.com/danibog/firebase-migration-vite">https://github.com/danibog/firebase-migration-vite</a>.</p><p>Feel free to visit my GitHub account for more related projects and resources.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f234d891b864" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“code” command not found|Troubleshooting|Code Installation via Pop Store on Linux]]></title>
            <link>https://medium.com/@daniel_bogale/code-command-not-found-troubleshooting-code-installation-via-pop-store-on-linux-e6f5aee395af?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/e6f5aee395af</guid>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[fix]]></category>
            <category><![CDATA[code-command]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[not-found]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Wed, 17 May 2023 17:06:33 GMT</pubDate>
            <atom:updated>2023-05-17T17:16:55.617Z</atom:updated>
            <content:encoded><![CDATA[<p>Introduction:<br>Visual Studio Code (VS Code) is a popular code editor widely used by developers for its extensive features and versatility. Installing VS Code on Linux distributions is typically a straightforward process, but occasionally, issues may arise, especially when using alternative installation methods. In this article, we’ll address a specific problem encountered when installing VS Code from the Pop Store (Linux Store) and provide a solution.</p><p>The Pop Store Installation Issue:<br>When attempting to install VS Code from the Pop Store on Linux, some users may encounter a problem where the “code” command is not recognized in the terminal. This error message can be frustrating, especially if you’re eager to start coding. However, there is a solution to this issue that involves installing VS Code from the official Visual Studio Code website for Ubuntu.</p><p>Troubleshooting Steps:<br>To resolve the problem and ensure a smooth installation of VS Code on Linux, follow the steps outlined below:</p><blockquote>1. Uninstall the existing VS Code:<br> If you have previously installed VS Code from the Pop Store, it’s essential to remove it before proceeding with the official installation. Run the following command in the terminal:</blockquote><pre>sudo apt remove code</pre><blockquote>or just remove vs code manualy.</blockquote><blockquote>2. Downloading VS Code from the official website:<br> Open your web browser and visit the official Visual Studio Code website for Linux (<a href="https://code.visualstudio.com/Download">https://code.visualstudio.com/Download</a>). Make sure to select the appropriate package for Ubuntu. Once the download is complete, proceed to the next step.</blockquote><p>Conclusion:<br>Installing software from alternative sources, such as the Pop Store, can sometimes lead to unexpected issues. In the case of Visual Studio Code, encountering the “code is not a known command” error message can be resolved by following the troubleshooting steps outlined in this article. By downloading and installing VS Code from the official website for Ubuntu, users can ensure a seamless installation experience and enjoy the full range of features offered by this popular code editor. Happy coding!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e6f5aee395af" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“Cry” By Jon Batiste|The Healing Power of Music in ‘Cry’ by Jon Batiste]]></title>
            <link>https://medium.com/@daniel_bogale/cry-by-jon-batiste-the-healing-power-of-music-in-cry-by-jon-batiste-e66fe86a853b?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/e66fe86a853b</guid>
            <category><![CDATA[lyrics-meaning]]></category>
            <category><![CDATA[cry-music]]></category>
            <category><![CDATA[power-of-music]]></category>
            <category><![CDATA[jon-batiste]]></category>
            <category><![CDATA[cry-lyrics-meaning]]></category>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Sun, 07 May 2023 10:05:26 GMT</pubDate>
            <atom:updated>2023-05-07T10:05:26.163Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*qWfx5FlghMsmfs7PVCrs7A.jpeg" /></figure><p>The year 2020 was one of great upheaval and social unrest, marked by a global pandemic, racial tensions, and political turmoil. Many people were left feeling overwhelmed and helpless in the face of these challenges, struggling to cope with the difficult circumstances of their lives. It was during this time that musician and composer Jon Batiste released his song “Cry,” a soulful and emotionally charged piece that spoke directly to the pain and frustration felt by so many.</p><p>The song begins with the lyrics, “Who do you love? Who you gonna love? Who do you love when push comes to shove?” These lines set the tone for the rest of the song, as Batiste explores the difficulties of love and the need to fight for what is right, even in the face of adversity. He sings about the struggles of immigrants, the wrongful imprisonment of innocent people, and the loss of innocence, all while acknowledging the deep pain and sadness that these experiences can cause.</p><p>Yet, despite the heaviness of these themes, there is also a sense of hope and resilience in the song. Batiste acknowledges that crying can be a cathartic release for those who are struggling, but he also suggests that it is not enough to simply cry and feel sad. Instead, he encourages listeners to take action and fight for what is right, to stand up for those oppressed, and to work towards creating a better world.</p><p>In many ways, “Cry” is a reflection of the difficult times in which it was released. It speaks to the pain and frustration so many people feel while offering a message of hope and empowerment. It is a call to action for those who are struggling, a reminder that even in the darkest of times, there is always something that can be done to make things better.</p><p>For Batiste, “Cry” is more than just a song; it is a powerful expression of the human experience. It speaks to the complexities of love and the challenges of fighting for justice, while also acknowledging the power of vulnerability and emotional release. It is a song that invites listeners to connect with their own pain and frustration, while also inspiring them to take action and create positive change in their own lives and communities.</p><p>In the end, “Cry” is a testament to the power of music to heal, inspire, and to connect us all. It is a reminder that even in the most difficult of times, we are never truly alone, and that there is always hope for a brighter tomorrow.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e66fe86a853b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why is Prettier code formatter not working correctly? on my JSX|React App|Answered]]></title>
            <link>https://medium.com/@daniel_bogale/why-does-prettier-jsx-code-formatting-not-correctly-answered-cd2196a4e826?source=rss-3fc5479f231d------2</link>
            <guid isPermaLink="false">https://medium.com/p/cd2196a4e826</guid>
            <dc:creator><![CDATA[Daniel Bogale]]></dc:creator>
            <pubDate>Mon, 17 Apr 2023 18:36:47 GMT</pubDate>
            <atom:updated>2023-04-17T18:43:16.109Z</atom:updated>
            <content:encoded><![CDATA[<p>I have a code formatting issue with my preferred editor, vs code. I’ll put my JSX code here:</p><pre>return &lt;div className={panelHeadingClassName}&gt;<br>    &lt;h3 className={style.panelTitle}&gt;<br>        &lt;i className={iconStyle[iconClass]}&gt;&lt;/i&gt;<br>        {title}<br>        &lt;small className={style.panelSubTitle}&gt;{subTitle}&lt;/small&gt;<br>    &lt;/h3&gt;<br>&lt;/div&gt;<br></pre><p>I get the following when I use option + shift + F to format:</p><pre>return &lt;div className = {<br>  panelHeadingClassName<br>} &gt;<br>&lt;<br>h3 className = {<br>  style.panelTitle<br>} &gt;<br>&lt;<br>i className = {<br>  iconStyle[iconClass]<br>} &gt; &lt; /i&gt; {<br>  title<br>} &lt;<br>small className = {<br>  style.panelSubTitle<br>} &gt; {<br>  subTitle<br>} &lt; /small&gt; &lt;<br>/h3&gt; &lt;<br>/div&gt;</pre><p>Prettier is not the issue; the issue is with the language that we configured prettier to use to prepare our code.<br>To correct it, click the language choice in the lower right corner of the VS Code Editor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WQEJ0ae0TKLqelLI2zQwng.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EONRsglyYziVBwzYMtonBA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bzm-Hrp2Llba7eoFFANfAQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GdUApHfjtdBLLg7jxHxFig.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dj7KGlW5ZNBEBceJjp7Vfw.png" /></figure><p>Check me out on github if you need more information, and please let me know if I was able to help you.</p><p><a href="https://github.com/danibog">https://github.com/danibog</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cd2196a4e826" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>