<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Frank Lawrence</title>
    <description>The latest articles on DEV Community by Frank Lawrence (@frank_lawrence_95abcdfe80).</description>
    <link>https://dev.to/frank_lawrence_95abcdfe80</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1498576%2F0c3ef98b-4d0d-4b21-b904-7a1727e77052.jpg</url>
      <title>DEV Community: Frank Lawrence</title>
      <link>https://dev.to/frank_lawrence_95abcdfe80</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frank_lawrence_95abcdfe80"/>
    <language>en</language>
    <item>
      <title>Building a Rust Crate Recommender:</title>
      <dc:creator>Frank Lawrence</dc:creator>
      <pubDate>Sun, 16 Mar 2025 20:16:56 +0000</pubDate>
      <link>https://dev.to/frank_lawrence_95abcdfe80/building-a-rust-crate-recommender-1dn3</link>
      <guid>https://dev.to/frank_lawrence_95abcdfe80/building-a-rust-crate-recommender-1dn3</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Finding the right libraries (&lt;code&gt;crates&lt;/code&gt;) in Rust can be time-consuming. To solve this, I built a &lt;strong&gt;Rust Crate Recommender&lt;/strong&gt;, a command-line tool that helps developers discover and save Rust libraries based on keywords. This project aligns with the Codecademy &lt;strong&gt;Recommendation Software Project&lt;/strong&gt;, requiring skills in &lt;strong&gt;data structures, algorithms, Git version control, and command-line navigation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this blog, I’ll walk you through the &lt;strong&gt;design, implementation, and skills&lt;/strong&gt; used to build this project, as well as how it can be extended further.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Project Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What Does This Program Do?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Users &lt;strong&gt;enter a keyword&lt;/strong&gt; (e.g., &lt;code&gt;async&lt;/code&gt;, &lt;code&gt;web&lt;/code&gt;, &lt;code&gt;database&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The program &lt;strong&gt;fetches matching Rust crates&lt;/strong&gt; from &lt;code&gt;crates.io&lt;/code&gt; (Rust’s package registry).&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;displays results&lt;/strong&gt;, including:

&lt;ul&gt;
&lt;li&gt;Crate name 📌&lt;/li&gt;
&lt;li&gt;Description 📖&lt;/li&gt;
&lt;li&gt;Download count 📥&lt;/li&gt;
&lt;li&gt;Documentation link 🔗&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Users can &lt;strong&gt;select dependencies&lt;/strong&gt;, which are &lt;strong&gt;saved to a file (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;dependencies.txt&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt;.&lt;/li&gt;

&lt;li&gt;The program &lt;strong&gt;continues running&lt;/strong&gt; until the user decides to exit.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This tool helps Rust developers &lt;strong&gt;quickly find and store useful crates&lt;/strong&gt; instead of manually searching &lt;code&gt;crates.io&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Features &amp;amp; Implementation&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1️⃣ Storing Data in a Data Structure&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We use a &lt;strong&gt;&lt;code&gt;Vec&amp;lt;CrateInfo&amp;gt;&lt;/code&gt;&lt;/strong&gt;** (vector of structs)** to store fetched crate data.&lt;/li&gt;
&lt;li&gt;Each crate is represented as a struct:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;  &lt;span class="nd"&gt;#[derive(Debug,&lt;/span&gt; &lt;span class="nd"&gt;Deserialize)]&lt;/span&gt;
  &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;CrateInfo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;downloads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This allows for &lt;strong&gt;fast iteration, sorting, and filtering&lt;/strong&gt; of the results.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2️⃣ Using an Algorithm to Sort and Search Data&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The results are &lt;strong&gt;sorted by downloads (highest first)&lt;/strong&gt; using Rust’s built-in &lt;code&gt;sort_by()&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;  &lt;span class="n"&gt;crates&lt;/span&gt;&lt;span class="nf"&gt;.sort_by&lt;/span&gt;&lt;span class="p"&gt;(|&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="py"&gt;.downloads&lt;/span&gt;&lt;span class="nf"&gt;.cmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="py"&gt;.downloads&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Users can &lt;strong&gt;filter results&lt;/strong&gt; based on &lt;strong&gt;available documentation&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3️⃣ Implementing User Interaction (Command-Line Navigation)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The program runs &lt;strong&gt;continuously&lt;/strong&gt;, prompting the user for input until they exit.&lt;/li&gt;
&lt;li&gt;Users select crates using &lt;strong&gt;numbered options&lt;/strong&gt;, and their selections are saved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example interaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enter a keyword to search for crates (or 'exit' to quit): web

Recommended Rust Crates:
1. tokio - An async runtime for Rust (287M downloads)
   📖 Docs: https://docs.rs/tokio
2. warp - A web framework for async Rust (98M downloads)
   📖 Docs: https://docs.rs/warp

Enter the number of a crate to add to your dependencies: 1
Added 'tokio' to your dependencies.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;4️⃣ Saving Data for Future Use&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The program &lt;strong&gt;stores selected dependencies&lt;/strong&gt; in &lt;code&gt;dependencies.txt&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;  &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;save_dependencies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;OpenOptions&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
          &lt;span class="nf"&gt;.create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nf"&gt;.append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nf"&gt;.open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dependencies.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to open file"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;crate_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc_link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nd"&gt;writeln!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"{} - Documentation: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;crate_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc_link&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
              &lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to write to file"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This allows developers to &lt;strong&gt;keep track of their selected crates&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Skills Demonstrated in This Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ 1. Data Structures &amp;amp; Algorithms&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;Vec&amp;lt;CrateInfo&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt; for storing crate data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sorting algorithm (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;sort_by()&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt; to rank results by popularity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filtering (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;retain()&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt; to remove crates with missing descriptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ 2. API Requests &amp;amp; JSON Handling&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;code&gt;reqwest&lt;/code&gt; to fetch data from &lt;code&gt;crates.io&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;reqwest&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;.await&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nf"&gt;.text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="k"&gt;.await&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;crate_response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CrateResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;serde_json&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Parses JSON using &lt;code&gt;serde&lt;/code&gt; to extract relevant information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ 3. Git Version Control&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The project was managed using &lt;strong&gt;Git&lt;/strong&gt; with regular commits.&lt;/li&gt;
&lt;li&gt;The repository is available on &lt;strong&gt;GitHub&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ 4. Command-Line &amp;amp; File Navigation&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uses standard input (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;io::stdin&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt; for user interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes to a file (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;dependencies.txt&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt; to store user selections.&lt;/li&gt;
&lt;/ul&gt;







&lt;h2&gt;
  
  
  &lt;strong&gt;Possible Future Improvements&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Although the current implementation works well, here are some potential enhancements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 &lt;strong&gt;Fuzzy Search&lt;/strong&gt; → Improve keyword matching for better recommendations.&lt;/li&gt;
&lt;li&gt;📂 &lt;strong&gt;Auto-Add to Cargo.toml&lt;/strong&gt; → Instead of a text file, directly modify &lt;code&gt;Cargo.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Pagination for Large Results&lt;/strong&gt; → If many crates match, allow users to scroll through pages.&lt;/li&gt;
&lt;li&gt;⏩ &lt;strong&gt;Caching API Responses&lt;/strong&gt; → Avoid repeated API calls for the same search.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Building this &lt;strong&gt;Rust Crate Recommender&lt;/strong&gt; was a great way to apply &lt;strong&gt;Rust programming concepts&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working with APIs (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;reqwest&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handling JSON (&lt;/strong&gt;&lt;strong&gt;&lt;code&gt;serde&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorting &amp;amp; filtering data&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writing interactive CLI applications&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using Git for version control&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Future Innovators Scholarship: How E-Waste Recycling Can Transform Rural Communities</title>
      <dc:creator>Frank Lawrence</dc:creator>
      <pubDate>Thu, 06 Feb 2025 23:38:04 +0000</pubDate>
      <link>https://dev.to/frank_lawrence_95abcdfe80/future-innovators-scholarship-how-e-waste-recycling-can-transform-rural-communities-1mn6</link>
      <guid>https://dev.to/frank_lawrence_95abcdfe80/future-innovators-scholarship-how-e-waste-recycling-can-transform-rural-communities-1mn6</guid>
      <description>&lt;h2&gt;
  
  
  Addressing the Growing Issue of E-Waste
&lt;/h2&gt;

&lt;p&gt;I come from a small rural town where access to technology and awareness of e-waste management are limited. As a result, electronic recycling processes are nearly nonexistent, and outdated technology is often discarded improperly. Without structured disposal methods, harmful waste builds up in landfills, contributing to environmental pollution and wasted resources.&lt;/p&gt;

&lt;p&gt;The rise of digital learning and rapidly evolving technology means that communities like mine need a sustainable approach to handling old electronics before it becomes a major issue. A proactive, community-driven initiative could bridge the digital divide, educate people on e-waste disposal, and repurpose technology for those who need it most.&lt;br&gt;
A Community-Based E-Waste Recycling Solution&lt;/p&gt;

&lt;p&gt;A structured e-recycling program could be implemented through existing public spaces, such as libraries or schools, to collect, clean, and redistribute functional electronics. Volunteers could assist in sorting and refurbishing devices, ensuring that technology remains useful for those who need it.&lt;/p&gt;

&lt;p&gt;For unclaimed devices, we could partner with organizations like TechWaste Recycling to properly dispose of them. This approach would help prevent:&lt;/p&gt;

&lt;p&gt;✅Unnecessary landfill waste from discarded electronics&lt;br&gt;
✅Toxic environmental contamination from improper disposal &lt;br&gt;
✅Wasted opportunities to repurpose working technology for students and low-income families&lt;/p&gt;

&lt;h2&gt;
  
  
  Barriers to E-Waste Recycling &amp;amp; How We Overcome Them
&lt;/h2&gt;

&lt;p&gt;One of the biggest reasons e-waste is improperly discarded is inconvenience. People often don’t know where or how to recycle their electronics, leading them to either store unused technology indefinitely or throw it out improperly.&lt;/p&gt;

&lt;p&gt;Additionally, digital security poses another challenge. Many individuals, particularly in rural areas, are unaware of the risks of discarding devices with intact hard drives. A lack of understanding about digital footprints could leave sensitive personal information vulnerable to identity theft or data breaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A well-structured program could:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Educate the community on secure e-waste disposal&lt;br&gt;
✅ Provide data-cleansing resources to prevent security risks&lt;br&gt;
✅ Create an accessible drop-off system to make recycling easier&lt;/p&gt;

&lt;p&gt;By offering clear disposal guidelines and digital security workshops, we can reduce hesitation in recycling electronics while increasing community engagement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact on Education &amp;amp; Digital Equity
&lt;/h2&gt;

&lt;p&gt;Beyond environmental benefits, this initiative would address a key issue: accessibility to technology.&lt;/p&gt;

&lt;p&gt;Students in rural and low-income communities often struggle with digital learning due to a lack of personal computers or tablets. As technology becomes increasingly essential in education, many students fall behind simply because they lack the resources to complete assignments or engage in online learning.&lt;/p&gt;

&lt;p&gt;By redistributing refurbished technology, we could:&lt;/p&gt;

&lt;p&gt;✅ Give students access to necessary digital tools&lt;br&gt;
✅ Reduce financial barriers for families in need&lt;br&gt;
✅ Normalize tech-sharing and sustainability&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of Volunteers &amp;amp; Skill Development
&lt;/h2&gt;

&lt;p&gt;A program like this doesn’t just benefit the environment—it could also empower community members by providing hands-on experience with technology repairs, data security, and logistics management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volunteers—especially students—could gain:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 Experience in refurbishing and repairing hardware&lt;br&gt;
🔹 Knowledge of cybersecurity best practices&lt;br&gt;
🔹 Project management and organizational skills&lt;/p&gt;

&lt;p&gt;These skills could open doors to career opportunities in IT, cybersecurity, and environmental technology, creating a long-term impact beyond just recycling efforts.&lt;br&gt;
Why I’m Committed to This &amp;amp; How This Scholarship Helps&lt;/p&gt;

&lt;p&gt;I believe in leading by example, which is why I have already taken the first step toward implementing this initiative. I have offered to volunteer at my local library, where I hope to establish a pilot version of this program and gather community interest.&lt;/p&gt;

&lt;p&gt;My passion for technology and sustainability has driven my academic journey. I have worked full-time while pursuing my education, completing my Associate’s Degree at Bellevue University, an intensive Full-Stack Web Development Bootcamp at Colorado Technical University, and now, working toward my Bachelor’s Degree in Computer Science at Southern New Hampshire University, where I currently hold a 4.0 GPA.&lt;/p&gt;

&lt;p&gt;Balancing school, work, and personal responsibilities has been challenging, and financial strain has often determined how many courses I can take per semester. Winning this scholarship would provide the financial support I need to stay on track and graduate by June 2026.&lt;/p&gt;

&lt;p&gt;More importantly, this scholarship would allow me to focus on expanding this initiative, turning an idea into real, measurable change. With the proper credentials and financial backing, I hope to grow this project into a fully developed program that can be replicated in other rural communities.&lt;br&gt;
Building a Sustainable Future Together&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E-waste isn’t just a local issue—it’s a global problem. However, by creating accessible, community-led programs, we can:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌱 Reduce environmental impact by properly recycling electronics&lt;br&gt;
💻 Bridge the digital divide by repurposing technology for those in need&lt;br&gt;
🔧 Equip future innovators with tech repair and data security skills&lt;/p&gt;

&lt;p&gt;What starts as a small community-driven effort could become a model for other towns facing similar challenges. I am excited about the potential of this program and grateful for the opportunity to apply for this scholarship, which would help me continue my education and push this initiative forward.&lt;/p&gt;

&lt;p&gt;This essay is submitted as part of my application for the Future Innovators Scholarship from TechWaste Recycling. If you're interested in learning more or applying yourself, visit T&lt;a href="https://www.techwasterecycling.com/scholarship" rel="noopener noreferrer"&gt;echWaste Recycling’s Scholarship Page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ercycling</category>
      <category>scholarship</category>
      <category>techwasterecycling</category>
      <category>community</category>
    </item>
    <item>
      <title>Battleship.... in the Terminal!</title>
      <dc:creator>Frank Lawrence</dc:creator>
      <pubDate>Wed, 15 May 2024 18:53:41 +0000</pubDate>
      <link>https://dev.to/frank_lawrence_95abcdfe80/battleship-in-the-terminal-8dj</link>
      <guid>https://dev.to/frank_lawrence_95abcdfe80/battleship-in-the-terminal-8dj</guid>
      <description>&lt;p&gt;I have been slowly chipping away at Codecademy's Computer science course over the last few weeks and tackled my first project of the course in the shape of a python script that lets a person battle against the computer component in the classic board-game 'Battleship'.&lt;/p&gt;

&lt;p&gt;It was a rewarding challenge to brush up on my Python skills and implement modularization to keep this project manageable during the two weeks of development.&lt;/p&gt;

&lt;p&gt;Programming a game in the terminal had its own unique set of challenges, the primary being a visual representation of the state of the game so that the player could easily follow along without losing track of their progress.&lt;/p&gt;

&lt;p&gt;I'm particularly proud of the board representation I created using a matrix data structure. It effectively represents the rows and columns of the board, along with alphabetical characters to denote ships and actions that have occurred on each coordinate.&lt;/p&gt;

&lt;p&gt;When I initially started the project, I didn't do any coding until I had vision of how the board would be rendered in a read-able manner. Thanks to the library termcolor - &lt;a href="https://pypi.org/project/termcolor/"&gt;termcolor&lt;/a&gt;. Making my script render the board with color representations made my vision truly pop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x94wykjcfxmyzkbl38m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9x94wykjcfxmyzkbl38m.png" alt="Color functions from the termcolor library making the game board come to life" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second aspect that I am happy with is the function I wrote within the gameFunctions.py, titled boat_spawn() which upon the start of the game randomly places the boats within the matrix following the standard battleship rules of no overlapping boats and no diagonal placements. This functions removed the struggle of the player having to manually enter coordinate by coordinate instructions of where they wanted their boats placed and instead gets the player immediately set into the heat of the game.&lt;/p&gt;

&lt;p&gt;Lastly, I needed to design the computer opponent with an aggressive tendency on their turns when they had recently hit a target instead of consistently randomly generating attack coordinates. This aggression would simulate a second real player that would follow up with investigative shots toward successful attacks. This logic can be found in player.py and in the method titled, computer_turn_initiate(self). This method takes the last four attack calls the computer has made and checks it against the array of existing successful hits. The computer then randomly selects from the four possible adjacent indexes within the matrix data structure. While not not perfect in design, this simple solution adds enough depth to the computer opponent and keeps the game interesting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnrlrsx8zf3z75kmy92c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnrlrsx8zf3z75kmy92c.png" alt="Computer attack function" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm very happy to be done with this project and continue my Codecademy course but I do plan on re-visiting and flushing out this project some more with a true multiplayer feature one day allowing two people over the internet to battle it out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to reach out and check out the repository over @ &lt;a href="https://github.com/FIV95/Battleship/tree/main"&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
