<?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: ccaldwell11</title>
    <description>The latest articles on DEV Community by ccaldwell11 (@ccwell11).</description>
    <link>https://dev.to/ccwell11</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%2F1236024%2Fab05240b-3333-459e-97a6-c6239b95ff3b.jpeg</url>
      <title>DEV Community: ccaldwell11</title>
      <link>https://dev.to/ccwell11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ccwell11"/>
    <language>en</language>
    <item>
      <title>Intro to Bluetooth</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 19 Aug 2024 13:39:17 +0000</pubDate>
      <link>https://dev.to/ccwell11/intro-to-bluetooth-520e</link>
      <guid>https://dev.to/ccwell11/intro-to-bluetooth-520e</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;There is a very good chance that you currently own a Bluetooth device, if not multiple, thanks to how dynamic it allows us to become as users no matter the use case. Although it seems to be everywhere we seem to step foot, not many people know how it works or all that it takes to get a successful Bluetooth-enabled product working. Bluetooth helps free up cables to allow us to move how we please while the tech and guidelines behind Bluetooth involve rapidly moving connections and a thorough app screening process.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Bluetooth?
&lt;/h2&gt;

&lt;p&gt;Bluetooth is a wireless technology that uses radio waves along the 2.4GHz ISM band to transmit data to and from compatible Bluetooth devices. The current Bluetooth range has a common average of around 35 feet, giving users a significant amount of space to move about freely. Giving developers the freedom to select from two different Bluetooth “radio options”, is also favored by many for the flexibility that it provides.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bluetooth Classic
&lt;/h3&gt;

&lt;p&gt;Bluetooth Classic can utilize up to 79 channels to stream data and uses peer-to-peer connection strictly. Although Bluetooth Classic may appear restrictive due to its sole connectivity option, the 3Mb/s data transfer speeds more than makeup for it. Bluetooth Classic's radio is primarily used for streaming audio as that has become the "standard radio protocol behind wireless speakers, headphones, and in-car entertainment systems" as the years progressed (Bluetooth).&lt;/p&gt;

&lt;h3&gt;
  
  
  Bluetooth Low Energy (LE)
&lt;/h3&gt;

&lt;p&gt;Bluetooth Low Energy differs from Bluetooth Classic in one way: it only uses 40 channels instead of 79. The data transfer speed of Bluetooth Low Energy (LE) is also a bit slower in comparison to Bluetooth Classic with LE having a speed of 2Mb/s. Another more significant difference between the two Bluetooth radios is the additional two connectivity options for Low Energy that include &lt;strong&gt;broadcast&lt;/strong&gt; and &lt;strong&gt;mesh&lt;/strong&gt;. &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%2Fpjb15zf2n49arqkgmgep.jpeg" 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%2Fpjb15zf2n49arqkgmgep.jpeg" alt="Image description" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Peer-to-peer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct connection between devices&lt;/li&gt;
&lt;li&gt;Ex: Bluetooth speaker pairing, Apple CarPlay &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Broadcast&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending data without establishing a direct connection&lt;/li&gt;
&lt;li&gt;Ex: Retail beacons ("walk past, get notified") &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Mesh&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compatible technology with established connections to other tech creating a "web" of interconnected devices&lt;/li&gt;
&lt;li&gt;Ex: Smart homes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Does Bluetooth Work?
&lt;/h2&gt;

&lt;p&gt;Bluetooth operates on an industrial, scientific, and medical (ISM) frequency band whose range is divided between various channels. When potentially connecting devices are within range of each other, they bounce between these channels to establish and continue to maintain their wireless communication. Due to this unique method of connection and the low power usage that Bluetooth consumes, other technologies that use the same ISM band, such as Wi-Fi and microwaves, do not interfere with the functionality of the Bluetooth-enabled devices when in use.&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%2Fewetq7w5c9z4bl4rj4og.jpeg" 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%2Fewetq7w5c9z4bl4rj4og.jpeg" alt="Image description" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Developing with Bluetooth
&lt;/h2&gt;

&lt;p&gt;Bluetooth does not have an explicit programming language that devs can use to create/connect Bluetooth-compatible devices, however, there are a few ways to go about creating with Bluetooth with plenty of community support and documentation made available from Bluetooth directly as well as other dev-focused forums. To begin development with Bluetooth technology, certain prerequisites are required to ensure the quality of the product created is up to Bluetooth's standards.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register as a member
Before anything can be done involving the Bluetooth tech that is so common around the world, you must first register! A Bluetooth Special Interest Group (SIG) membership is required to have the proper permissions and necessary information to develop with BT incorporation in mind. Upon registration, a member receives:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;A license to build products using Bluetooth&lt;/li&gt;
&lt;li&gt;A license to use Bluetooth trademarks&lt;/li&gt;
&lt;li&gt;Access to certain development and testing tools&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Build a product&lt;br&gt;
With the provided resources given to you along with your other SIG membership credentials and perks, it is now time to actually begin the incorporation of the tech into your product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Qualify the product&lt;br&gt;
A qualification check is to ensure that both the Bluetooth Patent &amp;amp; Copyright License Agreement and the Bluetooth Trademark License Agreement are being adhered to accordingly when it comes to how your product is used and has set up Bluetooth. This must be completed before the finished product can be placed on the market for its public release&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Brand the product&lt;br&gt;
Not known by many, Bluetooth SIG owns the trademark for the word 'Bluetooth' and all associated imaging and references. To uphold the brand image of Bluetooth and its tech outreach, Bluetooth SIG ensures that proper logos, themes, and other related concerns align with the organization's predetermined guidelines from its brand style guide. One of these interests pertains to ensuring that the Bluetooth logo remains blue&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bluetooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; 

&lt;span class="n"&gt;target_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My Phone&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# looking for device with this name
&lt;/span&gt;&lt;span class="n"&gt;target_address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

&lt;span class="n"&gt;nearby_devices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;discover_devices&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# receives all nearby &amp;amp; detected devices
&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;nearby_devices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target_name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;lookup_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="c1"&gt;# connects to each device to receive name
&lt;/span&gt;&lt;span class="n"&gt;target_address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;
&lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target_address&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;found target bluetooth device with address &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_address&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;could not find target bluetooth device nearby&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  The above code snippet is an example of how Bluetooth devices may "choose a communication partner" using a library called PyBluez. Functions from the library allow for Python programming with Bluetooth connectivity.
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# python findmyphone.py
&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="n"&gt;bluetooth&lt;/span&gt; &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;67&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;AB&lt;/span&gt;

&lt;span class="err"&gt;…&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bluetooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; 

&lt;span class="n"&gt;target_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My Phone&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;67&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;AB&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  This is an example of how the above code snipped would update if the targeted device was found.
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Bluetooth technology is a very useful technology that involves a more incremental approach when building a product, but that is simply to ensure consistency, reliability, and quality are present at all times when navigating the product that was created. It establishes connections by rapidly hopping between channels which also helps avoid interference from other wireless connections. Bluetooth helps connect us to the products and interests that we own and the Bluetooth SIG will do its best to make sure the name of Bluetooth presents itself nicely no matter who dons it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://people.csail.mit.edu/rudolph/Teaching/Articles/BTBook.pdf" rel="noopener noreferrer"&gt;https://people.csail.mit.edu/rudolph/Teaching/Articles/BTBook.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.android.com/develop/connectivity/bluetooth/find-bluetooth-devices" rel="noopener noreferrer"&gt;https://developer.android.com/develop/connectivity/bluetooth/find-bluetooth-devices&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bluetooth.com/" rel="noopener noreferrer"&gt;https://www.bluetooth.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.intel.com/content/www/us/en/products/docs/wireless/what-is-bluetooth.html" rel="noopener noreferrer"&gt;https://www.intel.com/content/www/us/en/products/docs/wireless/what-is-bluetooth.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.britannica.com/story/how-does-bluetooth-work" rel="noopener noreferrer"&gt;https://www.britannica.com/story/how-does-bluetooth-work&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Intro to CockroachDB (No exterminator needed!)</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 05 Aug 2024 05:57:17 +0000</pubDate>
      <link>https://dev.to/ccwell11/intro-to-cockroachdb-no-exterminator-needed-bmk</link>
      <guid>https://dev.to/ccwell11/intro-to-cockroachdb-no-exterminator-needed-bmk</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As many of the more traditional ways of interaction and other branches of life begin to phase out and transition to include digital integration, our data must be stored securely and remain consistent. Data integrity and accessibility are some of the most important requirements for an application to build and maintain trust with its targeted audience. This is because developers and users alike want to know that their information is available whenever they need it and expect it to be served promptly. This is where the data-replicating, "invincible" database known as CockroachDB truly makes sense of its name.   &lt;/p&gt;

&lt;h2&gt;
  
  
  What is CockroachDB?
&lt;/h2&gt;

&lt;p&gt;CockroachDB is an open-source SQL database that was designed with "high availability, effortless scale, and control over data placement" as the main goals it was tasked to achieve. In short, it was created to be an extremely reliable database that is as adaptable and resilient as the infamous cockroach with the addition of being a lot easier to manage. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd15shllkswkct0.cloudfront.net%2Fwp-content%2Fblogs.dir%2F1%2Ffiles%2F2022%2F05%2Fcockroach_db_header-1634549116493.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd15shllkswkct0.cloudfront.net%2Fwp-content%2Fblogs.dir%2F1%2Ffiles%2F2022%2F05%2Fcockroach_db_header-1634549116493.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;There are many capabilities that CockroachDB provides that allow for it to be such a dependable resource that can be tied to the four main features that set it apart from other SQL databases: &lt;em&gt;Resilience&lt;/em&gt;, &lt;em&gt;Scalability&lt;/em&gt;, &lt;em&gt;Consistency&lt;/em&gt;, and &lt;em&gt;Geo-Partitioning&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resiliency
&lt;/h3&gt;

&lt;p&gt;CockroachDB automatically replicates data amongst multiple nodes to ensure continuous accessibility and operational integrity at all times. This built-in replication creates at minimum 3 copies of a data entry by default that are saved at different locations, or in this instance, nodes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2F00voh0j35590%2F5Rh0zw0AbWrgwHSU5DJHfb%2Ffff3d016a61d56b1714b7a1d556f4019%2Fcockroachdb-replication-database-data-loss.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2F00voh0j35590%2F5Rh0zw0AbWrgwHSU5DJHfb%2Ffff3d016a61d56b1714b7a1d556f4019%2Fcockroachdb-replication-database-data-loss.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This results in protections against potential system failures or downtimes. If one or two nodes were to experience issues that result in data access being blocked or an unforeseen error occurs, CockroachDB's fault tolerance system has allowed for data to remain accessible from a different node. With multiple sources of truth existing in various locations, data loss protection is increased significantly for potential non-ideal circumstances.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// how to start a node
cockroach start \
--insecure \
--store=fault-node1 \
--listen-addr=localhost:26257 \
--http-addr=localhost:8080 \
--join=localhost:26257,localhost:26258,localhost:26259
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Multiple nodes must be created with the "join" corresponding to the other nodes in the cluster to ensure load balancing can happen
&lt;/h6&gt;

&lt;h3&gt;
  
  
  Scalability
&lt;/h3&gt;

&lt;p&gt;Horizontal scaling, also known as scaling out, is a technique that CockroachDB uses to properly handle the growing database and any additional resources that may be needed to accommodate the increasing amounts of data (nodes in this instance). Horizontal scaling differs from the more common scaling technique, vertical scaling (scaling up) because horizontal scaling revolves around using &lt;strong&gt;more&lt;/strong&gt; machines as opposed to vertical scaling involving using a &lt;strong&gt;larger&lt;/strong&gt; or more capable machine. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.cloudzero.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fhorizontal-vs-vertical-scaling.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.cloudzero.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fhorizontal-vs-vertical-scaling.webp" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the context of CockroachDB, more nodes can be added as needed to divide the workload between other nodes. Associated nodes, called clusters, automatically rebalance data as new additions and their respective additions are made. The split workload between the nodes ultimately allows for a heavier workload to be tasked to the node cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consistency
&lt;/h3&gt;

&lt;p&gt;Upon investigating the official site for CockroachLabs, it becomes apparent that they pride themselves in their consistency. Stating that CockroachDB is "100% ACID" compliant, its creators have incorporated a way for data and the replications that came from it to remain in sync with each other through the use of transactions. By not immediately sending requests and instead waiting for the source of origin to succeed before continuing to do the same for the other nodes, many issues involving discrepancies between node data can be avoided completely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Geo-partitioning
&lt;/h3&gt;

&lt;p&gt;Geo-partitioning is another beneficial feature that CockroachDB has to offer. With this feature, data can have a "region" association to be established that is a determinant of the user's location.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE houses (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    purchase_date TIMESTAMPTZ DEFAULT now(),
    region STRING NOT NULL, // region column
    total_amount DECIMAL
) PARTITION BY LIST (region);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Regions are stored within their own columns inside of the data tables
&lt;/h6&gt;

&lt;p&gt;This region info is then used to make decisions on which server or node to receive the data from. Ideally, the server that is closest to the data's established region is the one that is chosen to reduce latency as data travels over a network. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2F00voh0j35590%2F1RJqVteOfAAY0IUe5Bz1cj%2Fc37172525ca2ebb515f0a0e89ffe59c3%2Fgeopartitioned-leaseholders_telecom.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2F00voh0j35590%2F1RJqVteOfAAY0IUe5Bz1cj%2Fc37172525ca2ebb515f0a0e89ffe59c3%2Fgeopartitioned-leaseholders_telecom.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;CockroachDB is an SQL database that is full of functionality that has been designed to cater to those who need a database that's reliable, consistent, and adaptable. By using horizontal scaling to manage workload delegation, this database is capable of performing more demanding requests at higher frequencies by increasing the number of nodes the cluster is using. This along with the multiple sources of data that originated from the same entry and the use of transactions to make sure only successful requests will make it to other nodes, CockroachDB has proved that the power built within it sets it apart from the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.cockroachlabs.com/docs/v24.1/demo-fault-tolerance-and-recovery" rel="noopener noreferrer"&gt;https://www.cockroachlabs.com/docs/v24.1/demo-fault-tolerance-and-recovery&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cockroachlabs.com/docs/v24.1/why-cockroachdb" rel="noopener noreferrer"&gt;https://www.cockroachlabs.com/docs/v24.1/why-cockroachdb&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Don't Fear Near Field Communication (NFC)</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 22 Jul 2024 05:46:41 +0000</pubDate>
      <link>https://dev.to/ccwell11/nfc-5ha</link>
      <guid>https://dev.to/ccwell11/nfc-5ha</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this modern age of technology, it is fairly common (if not expected) for devices to have some form of wireless connection compatibility. Many businesses have already begun their transition into the wireless communications market and, are currently striving to improve the existing technologies or discover innovative ways to incorporate them that have never been seen before. With Wi-Fi and Bluetooth being the more known data transfer methods between devices, NFC technology is a lesser-known one used by almost everyone. NFC tech can be found in credit cards, cell phones, and even some vehicles which are just a few examples to highlight how frequently used it is, but not many know what it is or how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NFC?
&lt;/h2&gt;

&lt;p&gt;NFC stands for Near Field Communication, as the name suggests, the technology uses proximity-based connectivity to establish a wireless connection. Specifically, a short-range distance of up to 4cm is essential for this type of wireless connection to be created and transfer or send data properly. Devices that use NFC connection communicate with other NFC-enabled devices by introducing one to another. Most people are familiar with this usage in the form of "tap to pay" when using Google Pay, compatible debit cards, or "toy-to-life" figurines such as Amiibo and Skylanders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Foyster.ignimgs.com%2Fmediawiki%2Fapis.ign.com%2Fnintendo-nx%2F4%2F43%2FAmiibo_01.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Foyster.ignimgs.com%2Fmediawiki%2Fapis.ign.com%2Fnintendo-nx%2F4%2F43%2FAmiibo_01.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does NFC work?
&lt;/h2&gt;

&lt;p&gt;Near Field Communication uses high-frequency radio waves to send and receive data between NFC devices that are categorized into two categories referred to as &lt;strong&gt;active&lt;/strong&gt; and &lt;em&gt;passive&lt;/em&gt;. Passive NFC devices are responsible for sending data and aren't expected to receive anything in the exchange between the NFC components. This category of NFC devices also does not have a power source. Active NFC devices, on the other hand, can send and receive data while additionally requiring a power source. The passive device uses the active device's magnetic field as its power source similar to that of Radio Frequency Identification (RFID) technology eliminating the need of a passive device needing its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.mdpi.com%2Fsensors%2Fsensors-15-13348%2Farticle_deploy%2Fhtml%2Fimages%2Fsensors-15-13348-g001-1024.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.mdpi.com%2Fsensors%2Fsensors-15-13348%2Farticle_deploy%2Fhtml%2Fimages%2Fsensors-15-13348-g001-1024.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication Modes
&lt;/h3&gt;

&lt;p&gt;NFC has three distinct connection modes that refer to the way that data is being exchanged: &lt;strong&gt;reader/writer&lt;/strong&gt;, &lt;strong&gt;peer-to-peer&lt;/strong&gt;, and &lt;strong&gt;card emulation&lt;/strong&gt;. Reader/writer allows for a device to read data from or write data to an NFC tag. This is commonly seen in smart business cards and public transport passes/cards. Peer-to-peer connection allows for two devices to exchange data directly with each other, which means that data can be read and written back and forth. Smartphones that allow users to tap their phones together to share files are using peer-to-peer when performing that action. Lastly, card emulation mode. This mode allows an NFC-compatible device to behave similarly to a smart card which allows for users to make wireless purchases by tapping their phone to the card reader at places of business.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgototags.com%2Fwp-content%2Fuploads%2Fsites%2F12%2F2021%2F07%2Fposts_ios13_nfc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgototags.com%2Fwp-content%2Fuploads%2Fsites%2F12%2F2021%2F07%2Fposts_ios13_nfc.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;Although NFC has proven to be fairly useful considering the number of use cases it has, it still has many limitations that make other wireless communication more applicable or better suited for certain tasks. The main limitation that sets NFC apart is the extremely short range it has before a connection is established. This may be viewed as inconvenient as there are other ways to establish a connection with less physical interaction. Other limitations include the minuscule maximum data storage size which some may desire to be larger and the slower data transfer speeds compared to Bluetooth or Wi-Fi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;NFC does not have a programming language, but there are plenty of resources available that add compatibility to a select few of the modern (languages with some being in experimental phases). &lt;a href="https://developer.android.com/develop/connectivity/nfc/nfc" rel="noopener noreferrer"&gt;Android&lt;/a&gt; provides well-organized documents on how to implement NFC connectivity within an application. &lt;/p&gt;

&lt;p&gt;The provided code snippet from their docs is an example of how to search for "intents", an object to request an action, within &lt;em&gt;&lt;a href="https://developer.android.com/index.html" rel="noopener noreferrer"&gt;https://developer.android.com/index.html&lt;/a&gt;&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;intent-filter&amp;gt;
    &amp;lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&amp;gt;
    &amp;lt;category android:name="android.intent.category.DEFAULT"/&amp;gt;
   &amp;lt;data android:scheme="https"
              android:host="developer.android.com"
              android:pathPrefix="/index.html" /&amp;gt;
&amp;lt;/intent-filter&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper.android.com%2Fstatic%2Fimages%2Fnfc_tag_dispatch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper.android.com%2Fstatic%2Fimages%2Fnfc_tag_dispatch.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  How an NFC tag is dispatched to the app
&lt;/h5&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, NFC technology proves to be very useful as it is viewed almost everywhere throughout our everyday lives without many people even knowing of its existence. It allows for the transfer of data from device to device and in some usages bi-directionally but at the cost of having to physically tap a device to another. This may sometimes feel like an intrusion of space at times, but near-field communication technology is truly one made for more personal interactions that happen to include text as the medium.&lt;/p&gt;

&lt;p&gt;Sources:&lt;br&gt;
&lt;a href="https://www.pxl-vision.com/en/blog/nfc-near-field-communication-explained#:%7E:text=NFC%20technology%20works%20in%20three,exchange%20data%20with%20each%20other" rel="noopener noreferrer"&gt;https://www.pxl-vision.com/en/blog/nfc-near-field-communication-explained#:~:text=NFC%20technology%20works%20in%20three,exchange%20data%20with%20each%20other&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mdpi.com/sensors/sensors-15-13348/article_deploy/html/images/sensors-15-13348-g001-1024.png" rel="noopener noreferrer"&gt;https://www.mdpi.com/sensors/sensors-15-13348/article_deploy/html/images/sensors-15-13348-g001-1024.png&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.android.com/develop/connectivity/nfc/nfc" rel="noopener noreferrer"&gt;https://developer.android.com/develop/connectivity/nfc/nfc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.st.com/content/st_com/en/support/learning/essentials-and-insights/connectivity/nfc/nfc-chips.html#:%7E:text=RFID%20reader%20ICs-,The%20NFC%20tag%20chip,for%20example%2C%20a%20smartphone" rel="noopener noreferrer"&gt;https://www.st.com/content/st_com/en/support/learning/essentials-and-insights/connectivity/nfc/nfc-chips.html#:~:text=RFID%20reader%20ICs-,The%20NFC%20tag%20chip,for%20example%2C%20a%20smartphone&lt;/a&gt;).&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Are you a robot?: Intro to CAPTCHA</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 17 Jun 2024 06:19:14 +0000</pubDate>
      <link>https://dev.to/ccwell11/captcha-49hb</link>
      <guid>https://dev.to/ccwell11/captcha-49hb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Whenever you try to log into a website or participate in an online poll, you may notice a tiny check box that inquires:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  "Are you a robot?"
&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;p&gt;This may seem like such a pointless, silly, and easily receivable way to see if the person using the site is a human or a robot, but I'll be the person to let you know that there is a lot more going on in the background than what is being shown. Chances are, the necessary data needed to determine your status as a member of the human race will have been collected before your mouse even reaches the white box to click. That check box test is a type of CAPTCHA test used to make sure that the number of robots present on an application is significantly reduced if not removed entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CAPTCHA?
&lt;/h2&gt;

&lt;p&gt;According to the Official CAPTCHA &lt;a href="http://www.captcha.net/"&gt;website&lt;/a&gt;,  CAPTCHA is a "program that protects websites against bots by generating and grading tests that humans can pass but current computer programs cannot." This means that the intended purpose of the CAPTCHA tests is to determine if a "user" is truly a human or a component of some form of automated program (bot). Short for &lt;em&gt;Completely Automated Public Turing test to tell Computers and Humans Apart&lt;/em&gt;, the full phrase that the acronym represents makes it much more apparent as to what the intended function of these programs is. These tests usually appear at specific moments during a user's navigation of an application or website, typically at locations where user input is required in some way, form, or fashion (i.e. login pages, online polls, form submissions, etc.). CAPTCHA can also be triggered by the detection of suspicious behaviors that humans are unlikely to replicate (Cloudflare, "How CAPTCHAs work").&lt;/p&gt;

&lt;h2&gt;
  
  
  How CAPTCHA Works
&lt;/h2&gt;

&lt;p&gt;The way that CAPTCHA works is by presenting a task to the client that would be considered relatively easy for &lt;em&gt;mostly&lt;/em&gt; all humans to work out but much more challenging for an autonomous program to decipher with little to no human intervention. These tasks can make it much more apparent as to what users need to be blocked from proceeding further into an application to avoid automated events from being inflicted. There are currently different versions of CAPTCHA tests that are programmed to check for bots in a variety of ways, but the most infamous trail is the &lt;del&gt;dreaded&lt;/del&gt; "distorted text" test. &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%2Fp7ldwjzzejdf19ic3ffx.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%2Fp7ldwjzzejdf19ic3ffx.png" alt="Image description" width="620" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This test uses an algorithmically constructed photographic image that has been distorted in a way that makes it visually different from common fonts and text patterns and expects the user to respond with the text that is displayed in the provided image. This test played on the known failures involved with the digitization of text and used this weakness in the current technology in order to provide an additional layer of protection for all internet citizens. Similarly, an audio equivalent of this CAPTCHA test exists that reads the characters to be typed aloud instead of showing the user visually. This proved to not be as inclusive as one would have wanted as members of the deaf-blind community did not have an accessible alternative for that respective demographic (Google, "What is CAPTCHA?"). &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%2Fgwxp6pe9ikiynpekvd6c.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%2Fgwxp6pe9ikiynpekvd6c.png" alt="Image description" width="312" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges &amp;amp; Concerns
&lt;/h2&gt;

&lt;p&gt;After some time passed from its initial introduction in 2000, CAPTCHA began to receive many critiques due to it taking additional time (up to 30 seconds) for some users to complete. This got to the point where one of the co-cretor's friends allegedly mentioned it to him personally on numerous occasions. With it being a newer technological concept, people still were not fully used to it. The adjustment frustrated and confused many people, and rightfully so. Another major issue was the seemingly unwavering battle between good and bad automatic processes. As time progressed, so did the technology that was created to bypass these security measures that were put in place. A select few bots were able to accurately provide the necessary input to be perceived as a human or closely emulate it which is a major problem. Even in the instances where bots were not able to fool CAPTCHA by itself, "click farms", locations populated with people who manually complete CAPTCHA tests, were being used as well.&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%2F5u6yxje9r4q66ozrob49.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%2F5u6yxje9r4q66ozrob49.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;In response to user criticism and other apparent improvements to security that were needed, reCAPTCHA was introduced. reCAPTCHA is a service that is now being provided and maintained by Google to better ensure the security of websites while also providing a more user-friendly experience. reCAPTCHA includes automatic bot behavior detection that keeps track of potential evidence that could prove or disprove a user as a bot. Things like sharp &amp;amp; precise mouse movements, biometric data, IP addresses, and cookie logs are just a few of the factors that can be considered.&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%2F9hlfgoumen81pexudg2k.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%2F9hlfgoumen81pexudg2k.png" alt="Image description" width="413" height="639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;reCAPTCHA also has access to Google's fraud intelligence department and uses the gathered information within its possession to identify and block any users that are probable to have malicious intentions. This paired with artificial intelligence/machine learning-powered threat detection that's "capable of identifying active attacks and uncovering the connections between adversaries and their operations" allows users &amp;amp; site owners to feel more secure while also contributing more to the autonomy of the user end to comfortably combat the autonomy of malicious software or programs (Google, "What is CAPTCHA?"). With all that was included in the reCAPTCHA technology rollout, there should not be a question as to why it is the current officially recommended CAPTCHA implementation by the creators of CAPTCHA.&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%2F5sh3wfds4vs2smrv5buw.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%2F5sh3wfds4vs2smrv5buw.png" alt="Image description" width="620" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CAPTCHA Creator
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;captcha&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// Clear old input&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Access the element to store&lt;/span&gt;
    &lt;span class="c1"&gt;// the generated captcha&lt;/span&gt;
    &lt;span class="nx"&gt;captcha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;uniquechar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomchar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Generate captcha for length of&lt;/span&gt;
    &lt;span class="c1"&gt;// 5 with random character&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;uniquechar&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;randomchar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;randomchar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Store generated input&lt;/span&gt;
    &lt;span class="nx"&gt;captcha&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;uniquechar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printmsg&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;usr_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Check whether the input is equal&lt;/span&gt;
    &lt;span class="c1"&gt;// to generated captcha or not&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;usr_input&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;captcha&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Matched&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;not Matched&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nf"&gt;generate&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;p&gt;In &lt;a href="https://www.geeksforgeeks.org/captcha-generator-using-html-css-and-javscript/"&gt;this&lt;/a&gt; code snippet example provided by GeekforGeeks, the code for a simplified version of a "distorted text" CAPTCHA can be created and ran to produce an output like so:&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%2Fp5ya5josa7ni1vegy9c2.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%2Fp5ya5josa7ni1vegy9c2.png" alt="Image description" width="655" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It is apparent that CAPTCHA technology is needed in this day and age, especially with how common it is for people to have sensitive information about themselves stored on a digital platform. CAPTCHA can not only assist with the security of a user's information and accounts but also prevent biases in data from being formed from the use of repetitive inputs from a bot. Although CAPTCHA programs are not perfect and can allow bots to slip through its cracks every now and then, without them the state of the internet would not be what it is today with its lack of user confidence.&lt;/p&gt;

&lt;h4&gt;
  
  
  Sources
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/bots/how-captchas-work/"&gt;https://www.cloudflare.com/learning/bots/how-captchas-work/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.captcha.net/"&gt;http://www.captcha.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/security/products/recaptcha?hl=en"&gt;https://cloud.google.com/security/products/recaptcha?hl=en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/captcha-generator-using-html-css-and-javscript/"&gt;https://www.geeksforgeeks.org/captcha-generator-using-html-css-and-javscript/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Intro to Embedded Systems</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 10 Jun 2024 02:59:34 +0000</pubDate>
      <link>https://dev.to/ccwell11/intro-to-embedded-systems-5c7p</link>
      <guid>https://dev.to/ccwell11/intro-to-embedded-systems-5c7p</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;No matter where you are right now, chances are is that an embedded system is within arms reach. These systems are so common people never take the time to acknowledge the tech that may be incorporated in their day-to-day lives. Embedded systems are present within products like television remotes, microwaves, automobiles, watches, and a lot more. Embedded systems help for products like these and others that may vary to behave how they are supposed to by dividing the tasks of a product into microcomputers designed to handle their own respective task.&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%2Fjjyt7zfx6xqc4b4radp6.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%2Fjjyt7zfx6xqc4b4radp6.png" alt="Image description" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What are Embedded Systems?
&lt;/h3&gt;

&lt;p&gt;An embedded system is typically referred to as a combination of computer hardware, software, and occasionally firmware in order to fulfill a specific function or task. These systems are labeled as embedded because they are only a single component of a much larger computational operation. These embedded systems are capable of being reprogrammed if necessary, but they are typically designed with fixed functionality in order to maintain the overall functionality of an entire system. The main reasons for the separation of entire systems into smaller, embedded systems are to cut back on costs which improves the efficiency of mass production, and to isolate certain functions similar to the separation of components when developing an application. &lt;/p&gt;

&lt;h3&gt;
  
  
  Embedded Systems: Key Concepts
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Efficiency
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Resource management

&lt;ul&gt;
&lt;li&gt;Low-power consumption&lt;/li&gt;
&lt;li&gt;Specified usage of computational components&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Real-time performance

&lt;ul&gt;
&lt;li&gt;Precise timing for time-sensitive data responses&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Reliability &amp;amp; Stability
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Robust

&lt;ul&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Definitive design

&lt;ul&gt;
&lt;li&gt;Modifications to code not needed consistently&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Scalability
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Custom layout and complexity

&lt;ul&gt;
&lt;li&gt;Ability to design hardware &amp;amp; software compatibility to meet 
varying application requirements&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Different processors

&lt;ul&gt;
&lt;li&gt;Microprocessor&lt;/li&gt;
&lt;li&gt;Microcontroller&lt;/li&gt;
&lt;li&gt;Multiprocessors/system-on-chip (SoC)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Components of Embedded Systems
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Hardware
&lt;/h4&gt;

&lt;p&gt;The hardware, the physical components inside of an electrical device, of an embedded system are comprised of a processor, power supply, a memory unit, and some type of communication interface. As mentioned previously, there are a few options when it comes to processors in an embedded system: microcontrollers, microprocessors, and system-on-chip’s. Microprocessors are categorized as such because of their reliance on other peripherals within the system such as memory and are known to require more support. Microcontrollers on the other hand have access to their own interface peripherals. SoC’s utilize multiple processors and interfaces on a single chip to handle more complex algorithms. The communication interface is responsible for transmitting data from the processor to other system components in order to continue the chain of action prerequisites for proper functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjE0lFeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/xwxknivhjv1b/1YE6oOCOD1MsRWYI4SOCie/5a0d19b9e97b164782ddaeb1d81138d1/what_is_hardware.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjE0lFeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/xwxknivhjv1b/1YE6oOCOD1MsRWYI4SOCie/5a0d19b9e97b164782ddaeb1d81138d1/what_is_hardware.svg" alt="Image description" width="366" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Software
&lt;/h4&gt;

&lt;p&gt;The software, the programs utilized by a device, of an embedded system commonly include firmware and an operating system (OS). Firmware is a type of low-level software that allows for hardware and additional software interact with each other properly. It is part of the reason as to why the processor can access data that may be stored within memory. Operating systems are another key component when it comes to software. It is mostly necessary when real time operating system (RTOS) come into play. The more common OS used in embedded systems when real-time operation is needed is a “stripped-down version of Linux” (Ben Lutkevich, 'What is an Embedded System?)". &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XkUU6ocf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/BTB86HeZVwk/sddefault.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XkUU6ocf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/BTB86HeZVwk/sddefault.jpg" alt="Image description" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Classifications
&lt;/h3&gt;

&lt;p&gt;There are three main classifications of embedded systems (excluding the other few that may be more controversial) that can be used to determine and identify the type of embedded system along with the function they may serve in the overarching flow of the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subsystems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subsystems are simply classified as a smaller component that is used in conjunction with other parts. They usually do not perform the entire task that will eventually be completed upon all system successes but instead are in charge of managing and reporting the data of certain input or responses. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standalone &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Standalone embedded systems are exactly as they sound, systems designed to be used independently of other products or systems. They still do not possess the ability to perform a multitude of actions but can still perform a limited set of behaviors that it has been made to do. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Networked Systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Networked systems are systems that have some involvement with network connectivity. Usually mentioned in conversations with Internet of Things (IoT), this type of embedded system has become increasingly  popular in today's modern society. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fv6w4Sv9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://d2ms8rpfqc4h24.cloudfront.net/uploads/2021/02/Types-of-Embedded-System.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fv6w4Sv9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://d2ms8rpfqc4h24.cloudfront.net/uploads/2021/02/Types-of-Embedded-System.jpg" alt="Image description" width="788" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript &amp;amp; Embedded Systems
&lt;/h3&gt;

&lt;p&gt;Although, JavaScript is not a language that is used in high frequencies when it come embedded systems, there seems to be an increase in the usage for development. In GitHub user cesanta's repo, &lt;a href="https://github.com/cesanta/elk?tab=readme-ov-file"&gt;Elk&lt;/a&gt;, JavaScript was given more functionality during the development stage by using the Elk engine which was designed to use C-language firmware in place of JavaScript and vice-versa. Below is an example of how it may be used to make a LED light flash on an Arduino board using the Elk engine to have JS compatibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;js_eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;let pin = 13;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;// LED pin. Usually 13, but double-check&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpio.mode(pin, 1);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;// Set OUTPUT mode on a LED pin&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;for (;;) {&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  delay(300);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  gpio.write(pin, 1);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  delay(300);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;  gpio.write(pin, 0);&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In conclusion, embedded systems are crucial for almost all technological and tangible devices due to their wide variety of usages and cheap production cost. With a large population of internet  citizens in today's current age, the use of networked systems has grown larger as time goes on. With an estimate market of around $116 billion dollars in 2025 and top tech giants backing and manufacturing chipsets for use in embedded systems (Texas Instruments, IBM, Google...), it is apparent that embedded systems have and will continue to innovate the world. &lt;/p&gt;

&lt;h4&gt;
  
  
  Sources
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/cesanta/elk/blob/master/examples/BlinkyJS/BlinkyJS.ino"&gt;https://github.com/cesanta/elk/blob/master/examples/BlinkyJS/BlinkyJS.ino&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://d2ms8rpfqc4h24.cloudfront.net/uploads/2021/02/Types-of-Embedded-System.jpg"&gt;https://d2ms8rpfqc4h24.cloudfront.net/uploads/2021/02/Types-of-Embedded-System.jpg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://images.ctfassets.net/xwxknivhjv1b/1YE6oOCOD1MsRWYI4SOCie/5a0d19b9e97b164782ddaeb1d81138d1/what_is_hardware.svg"&gt;https://images.ctfassets.net/xwxknivhjv1b/1YE6oOCOD1MsRWYI4SOCie/5a0d19b9e97b164782ddaeb1d81138d1/what_is_hardware.svg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://i.ytimg.com/vi/BTB86HeZVwk/sddefault.jpg"&gt;https://i.ytimg.com/vi/BTB86HeZVwk/sddefault.jpg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.techtarget.com/iotagenda/definition/embedded-system"&gt;https://www.techtarget.com/iotagenda/definition/embedded-system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.spiceworks.com/tech/tech-general/articles/what-are-embedded-systems/"&gt;https://www.spiceworks.com/tech/tech-general/articles/what-are-embedded-systems/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oPn_adlC1Q0"&gt;https://www.youtube.com/watch?v=oPn_adlC1Q0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Intro to Procedural Generation.</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Sun, 02 Jun 2024 20:00:14 +0000</pubDate>
      <link>https://dev.to/ccwell11/procgen-14j9</link>
      <guid>https://dev.to/ccwell11/procgen-14j9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Procedural Generation is a term that may have been heard by many, but only some people are aware of what it actually is and all that is involved for it to be used effectively. It is an important method that is responsible for adding a sense of authenticity or distinctiveness to many of the games, movies, songs, and other forms of media &amp;amp; technology present in our modern society. Franchises like Minecraft and Lord of the Rings are a just a couple of the places where this concept has been used to improve the quality of a product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Procedural Generation?
&lt;/h2&gt;

&lt;p&gt;Procedural generation, also referred to as Proc Gen, is a method of data creation that heavily relies on the combination of algorithmic methods and existing data inputs. The data created from procedural generation have the potential to be used for a variety of things that span media and art alike. A lot of the “heavy lifting” that an individual (or team of individuals) may have to endure can usually be avoided with the use of Proc Gen. With it being a subcategory of synthetic media, Proc Gen, in short aims to create a "mostly unique" result based on data modifications it makes according to provided inputs and other pre-determined values. Seed values are typically provided as numerical values to act as a guide for how "randomness" will be established. This differs from traditional data creation methods by significantly reducing the time, effort, and storage size that otherwise would have been consumed by use of manual creation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Efficiency: 

&lt;ul&gt;
&lt;li&gt;Unlimited potential for content generation with storage needs remaining minimal&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Innovation: 

&lt;ul&gt;
&lt;li&gt;Different uses entirely dependent on the individual's creativity&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Scalability: 

&lt;ul&gt;
&lt;li&gt;Can be used to create many features and change some too&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Noise
&lt;/h2&gt;

&lt;p&gt;Procedural generation uses a concept called noise. Noise is a set of randomly created and arranged values that are set up in a way that produces a picture. This picture is constructed of a pixels that get modified depending on certain factors and inputs that are determined by the developer. &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%2Fwi23zlfseatg8d2x7cuh.jpeg" 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%2Fwi23zlfseatg8d2x7cuh.jpeg" alt="Image description" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each value's position in the noise being used corresponds directly to components that will eventually be combined together to have a finished product. Noise is in charge of ensuring that the unique combinations of possibilities remain different and hard to replicate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;noise.seed(Math.random());

for (var x = 0; x &amp;lt; canvas.width; x++) {
  for (var y = 0; y &amp;lt; canvas.height; y++) {
    // All noise functions return values in the range of -1 to 1.

    // noise.simplex2 and noise.perlin2 for 2d noise
    var value = noise.simplex2(x / 100, y / 100);
    // ... or noise.simplex3 and noise.perlin3:
    var value = noise.simplex3(x / 100, y / 100, time);

    image[x][y].r = Math.abs(value) * 256; // Or whatever. Open demo.html to see it used with canvas.
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Courtesy of josephg's &lt;a href="https://github.com/josephg/noisejs"&gt;repo&lt;/a&gt; on GitHub
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Applications of Procedural Generation
&lt;/h2&gt;

&lt;p&gt;Procedural generation can and has been used in an almost innumerable amount of ways that are only truly limited by the confines of what is possible with today's current technology and the creativity of the developer using it. While it would be impossible to cover every use, there are a few more common usages that many of us have been exposed to and have no idea of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Games
&lt;/h3&gt;

&lt;p&gt;The most popular usage of procedurally generated data can be observed in video games. With the help of the technology involved, many of the landscapes available to explore in certain games are created from Proc Gen algorithms. Games like Minecraft, No Man's Sky, and Terraria are just a handful of titles that make use of the method for world creation and expansion. Texture creation/mapping is another usage that allows for game textures to be made with certain guidelines to ensure that they align with their appropriate locations (i.e. rocks on the ground, scales on a dragon, etc.). Three-dimensional models can also be generated to add to the atmosphere and improve immersion (furniture, characters, clothing).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_sWiIe25--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://forum.godotengine.org/uploads/default/optimized/2X/0/082ddef006d8bf46480ed47dc81a0ae7bbc4c958_2_1380x394.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_sWiIe25--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://forum.godotengine.org/uploads/default/optimized/2X/0/082ddef006d8bf46480ed47dc81a0ae7bbc4c958_2_1380x394.png" alt="Terraria similar to noise example" width="800" height="228"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;a href="https://forum.godotengine.org/t/how-to-world-generate-a-world-like-terrarias/19419"&gt;Terraria's pixel graphics&lt;/a&gt; make it easier to visualize how "noise" can be used to create a landscape
&lt;/h6&gt;

&lt;h3&gt;
  
  
  Movies
&lt;/h3&gt;

&lt;p&gt;Procedural generation is used in movies a lot in instances where it would be extremely time-consuming to manually design and detail specific scenes in order to "sell the illusion". Proc Gen comes into play when these cinematic scenes that may be lacking in one way or another and adding certain details (both major and minimal) may be needed. An example of this can be seen in the movie Avatar, in which multiple algorithms were used to create the alien plant life in the movie based on data pertaining gathered from real trees. Crowds of people are also generated sometimes in movies as well due to the lack of time needed to individually design or style characters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oZKKzDNV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lumiere-a.akamaihd.net/v1/images/a_avatarpandorapedia_04_hometree_16x9_2697_dad5ed33.jpeg%3Fregion%3D0%252C0%252C1920%252C1080" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oZKKzDNV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lumiere-a.akamaihd.net/v1/images/a_avatarpandorapedia_04_hometree_16x9_2697_dad5ed33.jpeg%3Fregion%3D0%252C0%252C1920%252C1080" alt="Avatar flora" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Trees from &lt;a href="https://www.avatar.com/pandorapedia/aranahe-hometree"&gt;Avatar&lt;/a&gt; movie
&lt;/h6&gt;

&lt;h3&gt;
  
  
  Music and Sound
&lt;/h3&gt;

&lt;p&gt;Music and sound don't rely on procedural generation as heavily but it is still used occasionally to create unique compositions based on the same principle of algorithmic logic. It can be used to bridge certain gaps in a songs melody or change it in someway as well as be used to create entire songs that are outwardly unique. &lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges in Procedural Generation
&lt;/h2&gt;

&lt;p&gt;Some challenges that many developers and creatives are known to face when trying to make use of this conceptual method are the ones that involve data and biases. Sometimes the data obtained to be used as an input for the Proc Gen algorithm can contain biases that may sway the desired results to be a certain way instead of being something more reminiscent of a "random" result (computers typically rely on pseudo-randomness for "randomness" in programs). Another issue that developers must be conscious of is the "procedural oatmeal" problem. &lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  Perceptual uniqueness is the real metric, and it’s darn tough.
&lt;/h4&gt;
&lt;h6&gt;
  
  
  Kate Compton, &lt;a href="https://golancourses.net/2022f/wp-content/uploads/2022/09/kate-compton-oatmeal.pdf"&gt;"So you want to build a generator"&lt;/a&gt;
&lt;/h6&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  10,000 Bowls of Oatmeal
&lt;/h3&gt;

&lt;p&gt;Originally explained by Kate Compton, a person is capable of preparing "&lt;a href="https://golancourses.net/2022f/wp-content/uploads/2022/09/kate-compton-oatmeal.pdf"&gt;10,000 bowls of oatmeal&lt;/a&gt;" in a variety of mathematically different ways and preparation styles, but the person receiving the oatmeal will just see oatmeal and nothing more. This scenario was described to highlight that uniqueness is just as important as vastness. The purpose of procedural generation begins to get lost as soon as results become barely indistinguishable. Even with how expansive creations can be from the use of certain seed values, "random generations" can look very similar and may as well be perceived as the same as far as the user is concerned. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, procedural generation is a method that is widely used by creative minds as well as tech enthusiasts alike for the capabilities it offers to whatever you can think of. With the assistance it provides by lightening the workload of indie game devs or creating funky art to look at, Proc Gen allows for users to modify and adjust their algorithms and datasets to help out with their desired task.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.mit.edu/%7Ejessicav/6.S198/Blog_Post/ProceduralGeneration.html"&gt;https://www.mit.edu/~jessicav/6.S198/Blog_Post/ProceduralGeneration.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://joeiddon.github.io/projects/javascript/perlin.html"&gt;https://joeiddon.github.io/projects/javascript/perlin.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://golancourses.net/2022f/wp-content/uploads/2022/09/kate-compton-oatmeal.pdf"&gt;https://golancourses.net/2022f/wp-content/uploads/2022/09/kate-compton-oatmeal.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gamedevacademy.org/what-is-procedural-generation/#Create_Noise_Maps_for_Procedural_Generation"&gt;https://gamedevacademy.org/what-is-procedural-generation/#Create_Noise_Maps_for_Procedural_Generation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.smashingmagazine.com/2016/03/procedural-content-generation-introduction/"&gt;https://www.smashingmagazine.com/2016/03/procedural-content-generation-introduction/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Procedural_generation"&gt;https://en.wikipedia.org/wiki/Procedural_generation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>LESS is more...</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 15 Apr 2024 02:22:57 +0000</pubDate>
      <link>https://dev.to/ccwell11/less-is-more-289d</link>
      <guid>https://dev.to/ccwell11/less-is-more-289d</guid>
      <description>&lt;h2&gt;
  
  
  What is LESS?
&lt;/h2&gt;

&lt;p&gt;LESS, also known as Leaner Style Sheets, is a dynamic stylesheet language that was designed by Alex Sellier as an extension to CSS (Cascading Style Sheets) back in 2009. By offering additional capabilities to an already widely used language, LESS only further enhances what can be done. LESS empowers developers by providing additional features like variables, mixins, nesting, and functions, allowing for cleaner, more maintainable, and efficient stylesheets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcynoteck.com%2Fwp-content%2Fuploads%2F2021%2F07%2Fimage-2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcynoteck.com%2Fwp-content%2Fuploads%2F2021%2F07%2Fimage-2.jpeg" alt="Picture comparing the few syntax differences between LESS and SASS."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Similarly, SASS (Syntactically Awesome Stylesheets) serves as another popular option, differing primarily in syntax, some functionalities, and compatibility with the Ruby language.
&lt;/h6&gt;

&lt;h2&gt;
  
  
  LESS Features
&lt;/h2&gt;

&lt;p&gt;LESS offers a range of features that streamline and enhance stylesheet development. Variables enable the definition of reusable values, promoting maintainability by generalizing properties such as colors and font sizes. Mixins encapsulate reusable styles and behaviors, fostering cleaner code through code reuse and modularity. Nesting improves readability, maintainability, and reduces repetition, while also mitigating the risk of specificity issues with selectors. Additionally, LESS provides built-in functions for manipulating values, such as math operations and color manipulation, enabling dynamic styling based on computed values.&lt;/p&gt;

&lt;h2&gt;
  
  
  LESS compared to CSS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// LESS&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;base&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;base&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;base&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;darken&lt;/span&gt;&lt;span class="p"&gt;(@&lt;/span&gt;&lt;span class="nd"&gt;base&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// CSS&lt;/span&gt;
&lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;d2d2d&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;h6&gt;
  
  
  LESS simplifies styling by allowing the definition of variables like @base-color, promoting consistency and ease of maintenance. CSS, on the other hand, requires repeated manual entry of color values, potentially leading to inconsistencies. Additionally, LESS offers functions like darken() for dynamic color adjustments, enhancing design flexibility.
&lt;/h6&gt;

&lt;h3&gt;
  
  
  Mixins
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// LESS&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&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;span class="nx"&gt;mixin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt;  &lt;span class="err"&gt;{
  .&lt;/span&gt;&lt;span class="nc"&gt;a&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;span class="nx"&gt;mixin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nf"&gt;b&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&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;span class="nx"&gt;mixin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt;  &lt;span class="err"&gt;{
  &lt;/span&gt;&lt;span class="nc"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&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;span class="nx"&gt;mixin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&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;h6&gt;
  
  
  LESS simplifies CSS syntax by allowing the use of variables and mixins, making stylesheets more concise and easier to maintain compared to traditional CSS.
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, LESS enhances CSS capabilities with features like variables, mixins, effective nesting techniques, and many more features. This ultimately guides developers towards the direction of writing more efficient stylesheets while also ensuring the code remains clean.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Excited About End-to-End?</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 01 Apr 2024 08:43:32 +0000</pubDate>
      <link>https://dev.to/ccwell11/excited-about-end-to-end-en</link>
      <guid>https://dev.to/ccwell11/excited-about-end-to-end-en</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this day and age, technology can be observed any and everywhere no matter where you look. As the years progressed and people began integrating more and more tech into their daily lives, it was only a matter of time before privacy became a major concern as more threats made themselves apparent. With the increasing digitization of communication and information relay, making sure&lt;br&gt;
 that these potentially sensitive and more than likely private conversations and data transmissions &lt;em&gt;remain&lt;/em&gt; private. This concern for the safety of one's information is what led us to the development of &lt;strong&gt;end-to-end encryption&lt;/strong&gt;, a communication process with security as its top priority.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is End-to-End Encryption?
&lt;/h2&gt;

&lt;p&gt;End-to-end encryption, also referred to as E2EE, is a cryptography technique that ensures the security and privacy of digital communications from one recipient to another, or &lt;strong&gt;end-to-end&lt;/strong&gt;. This means that any potentially sensitive information, such as files, messages, calls, contacts, passwords, or any other forms of info is encrypted on the sender's device and remains encrypted up until the point it reaches the recipient's device. Once the encrypted data has made it to its designated location, it is then decrypted and able to be viewed by the recipient. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CnSvu3Fu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.ttgtmedia.com/rms/onlineimages/how_end_to_end_encryption_works-f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CnSvu3Fu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.ttgtmedia.com/rms/onlineimages/how_end_to_end_encryption_works-f.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How Does it Work?
&lt;/h2&gt;

&lt;p&gt;E2EE utilizes public key encryption, which is the storage of cryptographic keys on the endpoints of the communication between senders and recipients. A public key is shared amongst those the sender wants to have access to be used for encryption and any messages sent with the encryption must be decrypted using a private key, also called a decryption key. A user's public key is used to encrypt a message to send to their desired recipient who was given access to the private key to be able to access the data being sent. This ensures that even telecommunication companies like WhatsApp and Telegram cannot observe what a user may be sending or discussing which is a topic of controversy for some.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @fileoverview Base class for the implementation of a cryptographic algorithm.
 */&lt;/span&gt;

&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.Algorithm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.AlgorithmImpl&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forwardDeclare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.cipher.Algorithm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forwardDeclare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.signer.Algorithm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.cipher.key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;goog.asserts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;goog.object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;goog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requireType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e2e.algorithm.WebCryptoKeyPair&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * @interface
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * The algorithm being implemented.
 * @type {!e2e.signer.Algorithm|!e2e.cipher.Algorithm}
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;algorithm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * @type {e2e.cipher.key.Key|e2e.signer.key.Key|null}
 * @protected
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * @type {e2e.algorithm.WebCryptoKeyPair}
 * @protected
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;webCryptoKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * @type {number}
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keySize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * Returns a copy of the key that can be modified.
 * @return {e2e.cipher.key.Key|e2e.signer.key.Key|null} The key or null if not
 *     yet set.
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="cm"&gt;/**
 * Changes the key of the algorithm.
 * @param {!e2e.cipher.key.Key|!e2e.signer.key.Key} key The key.
 * @param {number=} opt_keySize The key size in bytes.
 */&lt;/span&gt;
&lt;span class="nx"&gt;e2e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Algorithm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setKey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  &lt;strong&gt;Snippet provided by Google&lt;/strong&gt;
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Benefits of E2EE
&lt;/h2&gt;

&lt;p&gt;End-to-end encryption offers many benefits that make it especially needed in today's modern society. With the increasing prevalence of digital communication (which will almost certainly persist) and the large amount of personal information being shared digitally that people would like to keep private, E2EE serves as a safeguard against prying eyes and other unauthorized access. This assurance of privacy is the main draw that brings users to E2EE, but this also cultivates a sense of confidence between the user and the software or application they may be using. The trust that is built from using such a promising tool in online interactions helps uphold the integrity of a vast amount of digital software and platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems of E2EE
&lt;/h2&gt;

&lt;p&gt;While end-to-end encryption is widely known for its amazing security that protects a user and any information they may be interacting with, it is understandably difficult to implement due to the challenge of endpoint definition between user devices. As mentioned earlier, there is a lot of controversy as well regarding how much encryption is put in place. Many believe it to be a dangerous resource for "everyday citizens" to have access to due to the possibility of it being used for immoral or illicit communications instead of innocent ones. Lastly, even though the contents of an encrypted relay remain encrypted from point A to point B, the metadata can still be observed. Metadata is descriptive information about a particular piece of data, files, or info such as date of creation and location to name a few examples. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JEPf7xXI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://static.ts.360.com/blog/wp-content/uploads/2016/10/chart-01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JEPf7xXI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://static.ts.360.com/blog/wp-content/uploads/2016/10/chart-01.png" alt="Image description" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, end-to-end encryption is critical for protecting one's privacy or that of an organization. E2EE is a great tool for significantly reducing the chances of private information getting exposed, leaked, or stolen by ensuring that only authorized parties have access to sensitive information. Even with the potential risks that are associated with its access to most if not all parts of the population, E2EE remains a great resource and will continue to be as technology progresses further.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Let's Look at VR/AR</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 26 Feb 2024 13:57:23 +0000</pubDate>
      <link>https://dev.to/ccwell11/lets-look-at-vrar-1fd6</link>
      <guid>https://dev.to/ccwell11/lets-look-at-vrar-1fd6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's society, useful technology is introduced and innovated frequently to improve the general well-being of others. A relatively new technology involving the manipulation of one's perception of their surroundings has been rapidly increasing in popularity. The technology in question is augmented reality (AR) and virtual reality (VR). With both augmented and virtual reality designed to manipulate the user's view to varying degrees, the capabilities are near limitless.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Virtual Reality?
&lt;/h2&gt;

&lt;p&gt;Virtual reality, commonly referred to as 'VR', is a type of immersive experience technology designed to completely overtake your sense of vision to give off the impression of being present within a virtual environment. VR uses head-tracking mechanics to allow for the user's real-time head motion to be mapped and reflected in the digital landscape. This paired with the wireless controllers that usually are a part of the hardware grants the user the ability to simulate moving and interacting with the world. Virtual reality's popularity mainly stems from this ability to seemingly enter new locations and possibly assume new identities that would be possible by no other means otherwise. &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%2Frap68jsh4y9wh1i0b5ks.jpeg" 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%2Frap68jsh4y9wh1i0b5ks.jpeg" alt="Beat Saber" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Games - Players can play as the character directly instead of controlling one&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More immersive experience&lt;/li&gt;
&lt;li&gt;Oculus Rift&lt;/li&gt;
&lt;li&gt;Minecraft Virtual Reality, Superhot, Beat Saber&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Tourism - Tourists can see what it's like to be at certain landmarks without leaving the comfort of their home&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boosts tourism&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Syntax Intro (VR)
&lt;/h2&gt;

&lt;h5&gt;
  
  
  Below is a very simple example of how the movement of a turtle character may be mapped in a VR environment. The environment being displayed to the user has access to three dimensions that can be directly targeted with the use of coordinates.
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

class Turtle {
private:
    float positionX;
    float positionY;
    float positionZ;

public:
    Turtle(float startX, float startY, float startZ) {
        positionX = startX;
        positionY = startY;
        positionZ = startZ;
    }

    void moveForward(float distance) {
        // Move the turtle forward along its current orientation
        positionX += distance * sin(orientation);
        positionZ += distance * cos(orientation);
    }

    void rotate(float angle) {
        // Rotate the turtle by the given angle
        orientation += angle;
    }

    void displayPosition() {
        // Display the current position of the turtle
        std::cout &amp;lt;&amp;lt; "Turtle's current position: (" &amp;lt;&amp;lt; positionX &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; positionY &amp;lt;&amp;lt; ", " &amp;lt;&amp;lt; positionZ &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
    }
};

int main() {
    // Create a turtle named Moono starting at position (0, 0, 0)
    Turtle Moono(0, 0, 0);

    // Move Moono forward by 22 units
    Moono.moveForward(22);

    // Rotate Moono by 68 degrees
    Moono.rotate(68);

    // Display Moono's final position
    Moono.displayPosition();

    return 0;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What is Augmented Reality?
&lt;/h2&gt;

&lt;p&gt;Augmented Reality, AR, may appear to be the same as Virtual Reality to some, but there are key differences that set them apart. Unlike VR, AR allows for the true environment of the user to be seen as well as digital overlays. This combination of technology and reality is truly innovative because it returns the view of one's surroundings to the wearer of the AR headset. Because of these additional features that set AR and VR apart, augmented reality headsets usually sell for noticeably higher prices when compared to their technological predecessor (i.e. Apple's Vision Pro). The top four most common languages used in AR/VR programming are C, C++, Java, and JavaScript.&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%2Fb1698ezbma90ll29u980.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%2Fb1698ezbma90ll29u980.png" alt="Augmented Reality Car Repair" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Maintenance and Repairs - Users are allowed to receive live support or use research materials while being able to see everything they are doing in the process&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Having a car repair video playing directly next to your engine bay for convenience and ease\&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Training - On-job training can be performed while employees work their shift&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Training video relevant to the designated task will better assist the new employee &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pokemon GO&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, the introduction of reality altering technologies has allowed for an entire new world of possibilities. No matter the use, there is always a new and creative way to assist the average person in their tasks no matter the occupation or hobby. Whether it be using VR to relax on a beach after a long day of work or using AR to have an internet browser in reach and present at all times, there is an interactive experience that anyone can benefit from.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Let's Look at Machine Learning</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 19 Feb 2024 12:14:26 +0000</pubDate>
      <link>https://dev.to/ccwell11/lets-look-at-machine-learning-1ef9</link>
      <guid>https://dev.to/ccwell11/lets-look-at-machine-learning-1ef9</guid>
      <description>&lt;blockquote&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;The capability of a machine to imitate intelligent human behavior&lt;/em&gt;
&lt;/h3&gt;
&lt;h6&gt;
  
  
  -Sara Brown, "Machine Learning, explained"
&lt;/h6&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Intro to Machine Learning
&lt;/h2&gt;

&lt;p&gt;Stepping into the world of machine learning opens up a whole new world of possibilities. At its core, machine learning (ML) is a branch of artificial intelligence (AI) that uses specific algorithms to process and decipher data autonomously. Unlike most programming paradigms, ML allows systems to make decisions and reason independently from human beings. Machine learning is a machine's attempt at replicating human thought processes.&lt;/p&gt;

&lt;p&gt;Building on this, machine learning algorithms autonomously extract insights and predict outcomes based on (usually) large datasets and past experiences. This capability drives innovation across industries. As we explore the complexities of machine learning, we dive into its principles, applications, and ethical considerations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Importing necessary libraries
and import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# Load the dataset
bird_data = pd.read_csv('bird_data.csv') # Replace 'bird_data.csv' with the path to your CSV file
# Split the dataset into features (X) and target variable (y)
X = bird_data.drop(columns=['bird_name']) # Features: all columns except 'bird_name'
y = bird_data['bird_name'] # Target variable: 'bird_name'
# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create a Decision Tree classifier
clf = DecisionTreeClassifier()
# Train the classifier
clf.fit(X_train, y_train)
# Make predictions on the testing data
predictions = clf.predict(X_test)
# Evaluate the accuracy of the model
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
#This is also a supervised algorithm, which will be elaborated on down below
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Algorithms&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Machine learning algorithms include supervised, unsupervised, and reinforcement learning. These parts of ML enable systems to learn from data, uncover patterns, and make predictions using autonomy:&lt;/p&gt;

&lt;h2&gt;
  
  
  Supervised Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Teaches computers using labeled examples, where input data and corresponding outputs are provided.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: Training a model to recognize cats in images by showing it pictures of cats labeled as "cat" as opposed to pictures of dogs labeled "dog."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Algorithms include linear regression for predicting continuous values and logistic regression for classification.&lt;br&gt;&lt;br&gt;
Widely used in tasks like image and speech recognition software as well as predictive modeling.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Unsupervised Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Let computers find patterns in data without labels.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ex: Sorting similar movies into sorted recommendations based on movie genres without telling the machine what each movie is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standard algorithms include clustering methods like hierarchical clustering.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*Used in tasks like unseen detections and recommendation systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reinforcement Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Teaches computers through trial and error, where they learn by receiving rewards for good behavior.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For example, train a game-playing AI to win by rewarding it when it makes the right moves.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Algorithms include Q-networks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ethical Considerations
&lt;/h2&gt;

&lt;p&gt;Navigating the world of machine learning presents challenges and ethical considerations that require careful consideration. One significant challenge is the presence of algorithmic bias issues within machine learning systems. These biases can lead to unfair outcomes or discrimination that stem from historical data or unintentional prejudices during model training. Many countermeasures are implemented within the machine that can be updated as needed. Specific strategies are also used to identify bias in data and model performance results.&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%2Fhj5be03oaleirxozlxmm.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%2Fhj5be03oaleirxozlxmm.png" alt="Bias/varianceTradeoff" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another thing to consider in ML is the capabilities of the model. The knowledge it can process and access and what it can do with said knowledge are all other morality topics to think about.&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%2Fmf3l4ka71bcd68r5wjhy.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%2Fmf3l4ka71bcd68r5wjhy.png" alt="Ethical/legalitygraPhic" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Platforms for ML
&lt;/h2&gt;

&lt;p&gt;Traversing through machine learning platforms requires considering factors like compatibility, usability, and scalability within existing and possibly changing infrastructure. Companies can identify the platform that best aligns with their assigned tasks by carefully evaluating these aspects. Popular ML platforms encompass a diverse array of options, including cloud-based solutions and open-source frameworks, each offering unique features. Assessing platform capabilities and vendor support is crucial for making informed decisions and helping organizations optimize their ML endeavors effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, machine learning presents a vast array of opportunities for innovation across industries, driven by its ability to learn and make predictions from data autonomously. However, it also brings ethical considerations regarding biases and model capabilities that require careful navigation. By understanding the principles, algorithms, and platforms involved, organizations can harness the power of machine learning to drive meaningful advancements while ensuring fairness and ethical practices.&lt;/p&gt;

&lt;h4&gt;
  
  
  Writer's Note
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;h5&gt;
  
  
  Machine learning is a challenging thing to get into, but its learning curve is not too steep, with some coding knowledge under your belt. It is satisfying when your 'creation' works, even if it is a simple number predictor. Starting small and working up to more demanding ML projects is worth a try. All you need is a source code editor (like VSCode) and a suitable language (I used Python) to get started!
&lt;/h5&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Let's Look at C++</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 05 Feb 2024 14:35:51 +0000</pubDate>
      <link>https://dev.to/ccwell11/lets-look-at-c-46o9</link>
      <guid>https://dev.to/ccwell11/lets-look-at-c-46o9</guid>
      <description>&lt;h2&gt;
  
  
  What is C++?
&lt;/h2&gt;

&lt;p&gt;C++ is an object-oriented programming language that was developed by Danish scientist, Bjarne Stroustrup. Stroustrup created this extension of the C language to support objects and classes (a feature that the C programming language lacks). C++ is a powerful language that has many useful capabilities and support libraries that make it a top contender for high-performance software development.&lt;/p&gt;

&lt;p&gt;Due to C++'s main base being sourced from the C language, the two languages are almost entirely compatible with each other. C++ is also compatible with other languages with shared origins or similar syntactical structures. Allowing developers to have manual control over memory is another feature of C++ that is another feature the language has that sets it apart from others. The most desirable feature of C++, however, is its object-oriented programming (OOP) model. OOP is the use of objects and classes to structure code in a way that allows code to be reusable. Although the use of objects and classes are heavily utilized in the JavaScript language as well, there are still a few differences that set them apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  C++ vs JavaScript
&lt;/h2&gt;

&lt;p&gt;C++ was developed for the purpose of handling high-performance applications while allowing access to memory and certain system properties. JavaScript was created to help developers create webpages and incorporate interactive elements into them. Another major difference between the languages is that C++ is a compiled language, one that will run unless the program is converted into "&lt;em&gt;machine language&lt;/em&gt;". JS is an already interpreted language which means that it gets passed through an interpreter that reads and runs the program line by line.&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%2Fk91bzf87ypq2qd52l9ln.jpeg" 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%2Fk91bzf87ypq2qd52l9ln.jpeg" alt="Difference between compiler and interpretor" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;p&gt;The key advantages of C++ may not be extremely obvious at first glance, but they are extremely useful for many coding tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Object-oriented allows for better factorization of similar code blocks &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helps with efficiency, readability, and code manipulation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Precise memory control&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large library support to assist with repetitive programming tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;p&gt;The few disadvantages that set JS and C++ apart will ultimately decide which language is best for your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual memory access can be more hazardous or inconveniencing due to the sensitivity of the data and the ease of causing unexpected manipulations&lt;/li&gt;
&lt;/ul&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%2F7jevr4wg0pq53xgjl16j.jpeg" 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%2F7jevr4wg0pq53xgjl16j.jpeg" alt="Visualization of memory in C++" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is it used?
&lt;/h2&gt;

&lt;p&gt;C++ is used in a multitude of things due to its widespread capabilities as a language. Some technologies as important as space rovers and items we interact with every day include them as well. Below are a few more places where C++ is commonly used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Video games&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operating systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Package Managers &amp;amp; Build Systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Syntax Introduction to C++
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*Library header - allows certain functions to be performed 
in C++. This one allows for inputs and outputs to be used.*/
#include &amp;lt;iostream&amp;gt; 

/*This is the 'standard library' being declared 
to allow access to named variables*/
using namespace std;

int main() { //Main function declaration
  cout &amp;lt;&amp;lt; "Hello World!"; //"Hello World" output using cout
  return 0; //Function must have a return
} //End of function
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The language created by Bjarne Stroustrup known as C++, is a very useful language for advanced and high-performance software and applications. With it being a highly compatible language and using objects to maximize runtime efficiency, C++ is undoubtedly a valuable tool for the older and new generations of developers alike.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Talking about Scopes</title>
      <dc:creator>ccaldwell11</dc:creator>
      <pubDate>Mon, 18 Dec 2023 14:27:58 +0000</pubDate>
      <link>https://dev.to/ccwell11/talking-about-scopes-424e</link>
      <guid>https://dev.to/ccwell11/talking-about-scopes-424e</guid>
      <description>&lt;p&gt;Scopes are a way to determine the accessibility and location of specific variables that may be located within a program. This becomes useful to many (if not all) programmers due to the assistance it provides when debugging code, increasing code efficiency, and significantly reducing the amount of variable [name] conflicts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Global scope
&lt;/h2&gt;

&lt;p&gt;The global scope refers to the scope that the entire program is able to access (hence the name global). Any variable declared outside of a function or code block is a global variable. Additionally, any value that has been assigned to variables that have not been defined &amp;amp; variables that begin with the 'var' keyword are also found in this scope.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Global scope
var globalVar = "I am in the global scope";

function globalExample() {
  console.log("This is in the global scope");
}

globalExample();
console.log("This isn't in the global scope");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Function scope
&lt;/h2&gt;

&lt;p&gt;Each function that is created simultaneously creates a function scope. Variables declared inside of a function's curly brackets are considered 'function-scoped variables' and can only be accessed within that function it was declared in or any scope that encases the specific function. 'Let' and 'const' variable declarations can be found here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function functionExample() {
  // Function-scoped
  let functionVar = "I am in the function scope";
  console.log("This is in the function scope");
}

functionExample();
// Attempting to access functionVar here would result in an error
console.log("This isn't in the function scope");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Block scope
&lt;/h2&gt;

&lt;p&gt;Block-scoped variables simply refer to any variable that has been declared within a 'block' (the contents between a set of curly brackets '{}'). Variables declared in this scope can only be accessed by parent scopes or from within the block scope itself. This feature was introduced in the ES6 update of JavaScript which was published in 2015.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function blockExample() {
    // Block scope
    let blockVar = "I am in the block scope";
    console.log("This is in the block scope");
    console.log(blockVar);
  }

  // blockVar cannot be accessed here due to it residing between curly brackets
  console.log("This isn't in the block scope");
}

blockExample();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scopes refer to the context in which a certain variable is defined and accessed. This becomes useful when variables share the same name or are being accessed incorrectly and those issues need to be resolved. With the logic of scopes, programmers can avoid bugs and unwanted variable manipulation as well.&lt;/p&gt;

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