<?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: ryan cooper</title>
    <description>The latest articles on DEV Community by ryan cooper (@rcooper47).</description>
    <link>https://dev.to/rcooper47</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%2F869337%2Fd8e0f763-3dd2-4a3f-8e69-1a7e8565f5a8.jpeg</url>
      <title>DEV Community: ryan cooper</title>
      <link>https://dev.to/rcooper47</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rcooper47"/>
    <language>en</language>
    <item>
      <title>Building a Pokedex App to Learn SwiftUI! Part One: UI</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Sat, 19 Aug 2023 19:50:15 +0000</pubDate>
      <link>https://dev.to/rcooper47/lets-learn-swiftui-by-building-a-pokedex-app-part-one-ui-3p2p</link>
      <guid>https://dev.to/rcooper47/lets-learn-swiftui-by-building-a-pokedex-app-part-one-ui-3p2p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I wouldn't be half the engineer I am today without watching Ash Ketchum ̶c̶r̶a̶s̶h̶ ̶a̶n̶d̶ ̶b̶u̶r̶n̶ learn from his mistakes so many times growing up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What are we Building?
&lt;/h2&gt;

&lt;p&gt;We're building an app that you, the aspiring Pokemon master and budding programmer can use to identify any Pokemon you find in the wild.&lt;/p&gt;

&lt;p&gt;This project will expose you to several crucial topics for growing as an iOS developer including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;The MVVM Design Pattern (Model-View-ViewModel)&lt;/li&gt;
&lt;li&gt;Navigation in SwiftUI&lt;/li&gt;
&lt;li&gt;SwiftUI Syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first version of our app will look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3-9f7_if--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e8mf68ugv8e8htq90hxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3-9f7_if--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e8mf68ugv8e8htq90hxr.png" alt="Final Red Pokedex Preview in Xcode" width="513" height="929"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;Our app will allow users to input the name of a Pokemon and receive information about it including an image, its types, and its abilities.&lt;/p&gt;

&lt;p&gt;If you want to follow along as you read, &lt;a href="https://github.com/rcooper47/pokedex-app"&gt;here is a link&lt;/a&gt; to the GitHub repo with the source code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial UI Code
&lt;/h2&gt;

&lt;p&gt;Without further ado, let's start coding!&lt;/p&gt;

&lt;p&gt;Open up a fresh project in XCode and within that project, make a new folder called Views.&lt;/p&gt;

&lt;p&gt;Move your ContentView file into your Views folder (not absolutely necessary so don't move your ContentView file if it gives you headaches), and create a fresh SwiftUI View File called PokedexSearchView.&lt;/p&gt;

&lt;p&gt;So far, everything should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6AxB6ln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7fz7tvvrwobvcuunmnf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6AxB6ln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7fz7tvvrwobvcuunmnf.png" alt="Initial Code" width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first thing we're gonna do is give our app some color, so delete the line that says Text() (Line 11), and add a ZStack.&lt;br&gt;
Next, within that ZStack, add a red color view and an empty VStack.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ZStack {
  Color.red
  VStack {
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thanks to those 5 lines of code, we now have a red background. &lt;/p&gt;

&lt;p&gt;The ZStack lets us stack things along the Z-axis, and the VStack does the same thing but along the Y-axis.&lt;/p&gt;

&lt;p&gt;Next, we want to add a new struct to serve as our search screen. &lt;/p&gt;

&lt;p&gt;Outside of that struct, make a new struct called SearchScreen and add the following lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct SearchScreen: View {
    var body: some View {
        ZStack {
            Rectangle().fill(.white).frame(width: 320, height: 430)
            Rectangle().fill(.blue).frame(width: 300, height: 400)
        }
    }
}

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

&lt;/div&gt;



&lt;p&gt;This creates 2 Rectangle views within a ZStack. There is a blue rectangle on top of a slightly larger, whit rectangle. Let's add the SearchScreen to our PokedexSearchView to see how it looks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AiHmO_D_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5z9jmb12d5oaa7j9b5zw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AiHmO_D_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5z9jmb12d5oaa7j9b5zw.png" alt="Intial Red Pokedex with Blue rectangle Overlay" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, create a new struct called PokeSearchBar and add the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Binding var pokemonName: String
    var body: some View {
        TextField("Who's that Pokemon?", text: $pokemonName)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding()
    }

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

&lt;/div&gt;



&lt;p&gt;This creates a &lt;a href="https://developer.apple.com/documentation/swiftui/binding"&gt;Binding property&lt;/a&gt; called pokemonName. Bindings in SwiftUI are used when you need to &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fblog.devgenius.io%2Fswiftui-state-vs-binding-727262600884"&gt;create a two way connection between a view and its underlying data&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Binding should be used here because our PokeSearchBar view will receive the value of pokemonName from the parent view, PokedexSearchView.&lt;/p&gt;

&lt;p&gt;Add a variable for pokemonName to the PokedexSearchView, and then add the PokeSearchBar to the line directly below SearchScreen. &lt;/p&gt;

&lt;p&gt;Pass the pokemonName variable into PokeSearchBar. Xcode is complaining at this point, so add the pokemonName variable with a value of empty string to your Preview Provider to fix that error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4kHYLgTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7tvponj9ujrynf0tjnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4kHYLgTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7tvponj9ujrynf0tjnx.png" alt="Red Pokedex with Blue rectangle Overlay and White Search Bar" width="800" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For last step, we'll add some buttons that will be mostly decorative but will eventually allow users to navigate the Pokedex.&lt;/p&gt;

&lt;p&gt;Create a struct called PokedexButtons.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct PokedexButtons: View {
    var body: some View{
        HStack {
            Circle().fill(.gray).frame(width: 100, height: 100).padding(.trailing, 100)

            ZStack {

            Rectangle().fill(.gray).frame(width: 100, height: 40)
            Rectangle().fill(.gray).frame(width: 40, height: 100)
            }
        }
    }
}

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

&lt;/div&gt;



&lt;p&gt;Add it to the parent view and we're done for the day!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YmjjqqLt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qv8rigmkvrrt7swqsyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YmjjqqLt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qv8rigmkvrrt7swqsyd.png" alt="Final Pokedex with Code" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next Part of the tutorial, we will begin adding functionality to our app, and we will get started with the PokeAPI. See you next time and thanks for following along!&lt;/p&gt;

&lt;p&gt;If you enjoyed this, be sure to like the post and follow me for more content on APIs, iOS Development, and more!&lt;/p&gt;

&lt;p&gt;SwiftUI Learning Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="//hackingwithswift.com/"&gt;Hacking with Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cs193p.sites.stanford.edu/"&gt;That Free Stanford Course everyone loves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://swiftsenpai.com/"&gt;Swift Senpai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@tundsdev"&gt;Tunds Dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>mobile</category>
      <category>beginners</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>3 Ways to Make Your API Beautiful</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Sat, 12 Aug 2023 01:03:42 +0000</pubDate>
      <link>https://dev.to/rcooper47/3-keys-to-making-a-beautiful-api-46la</link>
      <guid>https://dev.to/rcooper47/3-keys-to-making-a-beautiful-api-46la</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Building an API is a lot like building a toilet.&lt;br&gt;
If you're not sure the experience is easy for the people using it, you're doing something wrong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The phenomenal book Web API Design: The Missing Link has inspired me to post my key takeaways about what makes an API great.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Links In Your APIs
&lt;/h2&gt;

&lt;p&gt;APIs with links save Application Developers time reading through documentation to understand how to retrieve data.&lt;br&gt;
Imagine for a second that you're an application developer using the Game of Thrones API. No spoilers here! (Some judgement though).&lt;/p&gt;

&lt;p&gt;The data looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// The actual API uses links. This has been edited to show my point.
// I also removed any possible spoilers for you :)

{
 "id": "583",
 "name": "Jon Snow",
 "gender": "Male",
 "culture": "Northmen",
 "born": "In 283 AC",
 "father": "2342",
 "mother": "1243",
 "spouse": "4553",
 ...,
 "playedBy": [
  "Kit Harington"
 ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want to build a website that maps all Game of Thrones characters and their relationships, but in order to do that, you have to check the documentation for the URI template to build a URL for the resource with id "2342", "1243", "4553", …&lt;/p&gt;

&lt;p&gt;This clearly isn't ideal.&lt;/p&gt;

&lt;p&gt;If the API Developer had instead used links when modeling their data, the application developer wouldn't have such a hard time using the t̶o̶i̶l̶e̶t̶ API.&lt;/p&gt;

&lt;p&gt;This is a much better pattern.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
 "id": "https://anapioficeandfire.com/api/characters/583",&lt;br&gt;
 "name": "Jon Snow",&lt;br&gt;
 "gender": "Male",&lt;br&gt;
 "culture": "Northmen",&lt;br&gt;
 "born": "In 283 AC",&lt;br&gt;
 "father": "https://anapioficeandfire.com/api/characters/2342",&lt;br&gt;
 "mother": "https://anapioficeandfire.com/api/characters/1243",&lt;br&gt;
 "spouse": "https://anapioficeandfire.com/api/characters/4553",&lt;br&gt;
 ...,&lt;br&gt;
 "playedBy": [&lt;br&gt;
  "Kit Harington"&lt;br&gt;
 ]&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Now the application developer can write general-purpose code to &lt;br&gt;
follow API links without having to comb through the docs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Query URLs Should be Predictable
&lt;/h2&gt;

&lt;p&gt;There are plenty of places to inject creativity into your &lt;br&gt;
programming, but query URLs are not one of them.&lt;/p&gt;

&lt;p&gt;Which query URL pattern is easier for you to remember?&lt;/p&gt;

&lt;p&gt;Option A:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://dogtrackercom/person/{personId}/dogs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or Option B:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://dogtrackercom/getPeopleFunction/{personId}/getAlldogs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In addition to being easy to remember, Option A more clearly demonstrates the relationship between the person entity and the dog entity.&lt;/p&gt;

&lt;p&gt;Designing a query language specific to your API can be helpful to you during development, but it makes it much harder to use your API.&lt;/p&gt;
&lt;h2&gt;
  
  
  Give Developers Only What They Need
&lt;/h2&gt;

&lt;p&gt;APIs that return large collections of objects must provide a way for clients to retrieve smaller subsets of the collections at a time. These APIs need pagination.&lt;/p&gt;

&lt;p&gt;I'm more likely to retain users if my application calls the API that returns 100 pictures of puppies in .083 ms than I am with the API that returns 1000000 pictures of puppies in 2.32 s.&lt;/p&gt;

&lt;p&gt;It's common for APIs to follow a pattern of pagination like this:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
self": "https://dogtracker.com/dogs?limit=25,offset=0",&lt;br&gt;
"kind": "Page",&lt;br&gt;
"pageOf": "https://dogtracker.com/dogs",&lt;br&gt;
"next": "https://dogtracker.com/dogs?limit=25,offset=25",&lt;br&gt;
"contents": [&lt;br&gt;
{"self": "https://dogtracker.com/dogs/12344",&lt;br&gt;
"kind": "Dog",&lt;br&gt;
"name": "Fido",&lt;br&gt;
"furColor": "white"&lt;br&gt;
},&lt;br&gt;
{"self": "https://dogtracker.com/dogs/12345",&lt;br&gt;
"kind": "Dog",&lt;br&gt;
"name": "Rover",&lt;br&gt;
"furColor": "brown"&lt;br&gt;
},&lt;br&gt;
… (23 more)&lt;br&gt;
]&lt;br&gt;
  }&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Where "pageOf" represents the original collection, "next" references the page after, and "previous" describes the page before (previous is missing in this example because it is the first page).&lt;br&gt;
The "offset" and "limit" parameters allow the application developer to request the amount of resources they need at a time. "Offset" defines the starting point, and "limit" defines desired the number of objects.&lt;/p&gt;

&lt;p&gt;Additionally, it can be useful to have optional fields that developers can use to retrieve only the information they need about a resource.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://dogtracker.com/dogs?fields=name,color,location&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will retrieve only the names, colors, and locations of all dogs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;In conclusion, whether you are designing a toilet or an API, it is important to make the job as easy as possible on the people who will be using it.&lt;br&gt;
Standardize things as much as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  TLDR:
&lt;/h2&gt;

&lt;p&gt;Use Links in your APIs&lt;br&gt;
Standardize your query templates&lt;br&gt;
Make Pagination easy&lt;/p&gt;

&lt;p&gt;If you enjoyed this, be sure to like the post and follow me for more content on APIs, Software Development, and more!&lt;/p&gt;

</description>
      <category>backend</category>
      <category>api</category>
      <category>beginners</category>
      <category>java</category>
    </item>
    <item>
      <title>Online Learning: Scary but Cool</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Sun, 04 Sep 2022 19:16:30 +0000</pubDate>
      <link>https://dev.to/rcooper47/online-learning-scary-but-cool-3ea1</link>
      <guid>https://dev.to/rcooper47/online-learning-scary-but-cool-3ea1</guid>
      <description>&lt;p&gt;&lt;code&gt;Online Learning??  You mean like Coursera?&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What?
&lt;/h1&gt;

&lt;p&gt;Online learning is a method of machine learning where data flows in over time rather than being available all at once.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FkpBpueh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3l85pyuorc2cai0060l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FkpBpueh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3l85pyuorc2cai0060l.png" alt="What Netflix thinks Josh should watch" width="285" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why?
&lt;/h1&gt;

&lt;p&gt;Imagine this: it's been a month since you've ~binged~ watched Stranger Things at a healthy pace and you want to find your next show to watch (it's Breaking Bad).  In the dystopia without online learning, you'd have to wait a whole month* for Netflix engineers to train their ML Model based on your input data from the previous month before you they had an updated recommendation list for you.  &lt;/p&gt;

&lt;p&gt;Online learning algorithms allow them dynamically provided updates over time based on your engagement with shows and movies on the platform.&lt;/p&gt;

&lt;p&gt;*The timespan of a month was chosen arbitrarily, the point is that it would likely be slower.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Intro to Data Structures &amp; Algorithms</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Fri, 12 Aug 2022 15:56:52 +0000</pubDate>
      <link>https://dev.to/rcooper47/intro-to-data-structures-algorithms-3pik</link>
      <guid>https://dev.to/rcooper47/intro-to-data-structures-algorithms-3pik</guid>
      <description>&lt;h2&gt;
  
  
  What are Data Structures?
&lt;/h2&gt;

&lt;p&gt;Data Structures are exactly what they sound like--structures that hold data on our computer.  More formally, they're specific implementations of abstract data types.  &lt;del&gt;Wait...wtf are abst-&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E1_5cSc1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/82cbt19yt2zgukgu5u3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E1_5cSc1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/82cbt19yt2zgukgu5u3u.png" alt="Quora Advanced Explanation" width="800" height="464"&gt;&lt;/a&gt;&lt;br&gt;
Uhhhh too hard for my brain...Let's keep looking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1Pk026gm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xozd3l4u8kwza1xgim08.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Pk026gm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xozd3l4u8kwza1xgim08.png" alt="Quora ELI5 Explanation" width="480" height="760"&gt;&lt;/a&gt;&lt;br&gt;
Okay.  I can work with this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Abstract Data Types?!
&lt;/h2&gt;

&lt;p&gt;Abstract Data types are &lt;a href="https://qr.ae/pvMhKa"&gt;menus&lt;/a&gt; that tell you what you can ask for.&lt;/p&gt;

&lt;p&gt;Data Structures are &lt;a href="https://qr.ae/pvMhKa"&gt;chefs&lt;/a&gt; that build your chosen menu items for you.&lt;/p&gt;

&lt;p&gt;For example, if I want a burger with ketchup, tomatoes, and mustard, I might call this person to make it.&lt;/p&gt;

&lt;p&gt;If I want something where each new item is added to the front and the last items in are the first items out (LIFO), I might call a stack to implement it.&lt;/p&gt;

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

&lt;p&gt;Data structures are really important for programmers to understand because they're the cars, buses, and trains that move our data through our programs.  &lt;/p&gt;

&lt;p&gt;And just like cars, buses, and trains, they all have tradeoffs.  Choosing to use a linked list in place of a hash table could save you as much time as choosing to take the subway instead of driving through rush hour traffic.  But you wouldn't know that unless you took the time to learn them!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Algorithm Design Manual&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.quora.com/Whats-the-difference-between-a-data-structure-and-an-abstract-data-type"&gt;ADT vs Data Structure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Solana &amp; Cell-Phones &amp; Bears (Oh my)</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Thu, 14 Jul 2022 22:33:44 +0000</pubDate>
      <link>https://dev.to/rcooper47/low-effort-what-is-the-solana-sdk-5afi</link>
      <guid>https://dev.to/rcooper47/low-effort-what-is-the-solana-sdk-5afi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"The Solana Mobile Stack shows a new path forward on Solana that is open source, secure, optimized for web3, and easy to use."&lt;br&gt;
~Anatoly Yakovenko, co-founder of Solana&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;TLDR: I'm not getting rid of my iPhone, iPad, &amp;amp; I &amp;lt;3 Steve Jobs tattoo yet, but the Solana Mobile Stack (SMS) and ethOS have me excited for the potential of &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwiCsMrV4fn4AhVzEEQIHVaMD2wQFnoECAoQAQ&amp;amp;url=https%3A%2F%2Fgabygoldberg.medium.com%2Fweb3s-mobile-moment-a33672fc4d82&amp;amp;usg=AOvVaw0F5wUzV9ZI1V7WzSwXkp1i"&gt;a true web3 mobile shift&lt;/a&gt; and the prospect of being early to the development of new tech. &lt;/p&gt;

&lt;h2&gt;This could be big.&lt;/h2&gt;
 

&lt;ul&gt;
&lt;li&gt;Ethereum has released their new mobile operating system, ethOs&lt;/li&gt;
&lt;li&gt;Solana Labs (SOL, not SZA) recently announced the release of their upcoming phone, Saga as well as the Solana Mobile Stack (SMS).
&lt;/li&gt;
&lt;li&gt;Polygon recently announced a collab with startup Nothing on their upcoming Nothing (1) phone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a world where &lt;a href="https://www.perficient.com/insights/research-hub/mobile-vs-desktop-usage#:~:text=Mobile%20devices%20drove%2061%25%20of,increase%20from%2063.3%25%20in%202019."&gt;68% of website visits come from mobile devices&lt;/a&gt;, mobile has the potential to be monumental in terms of crypto adoption.  That's the thesis of these crypto giants as they invest in building web3 for mobile devices.&lt;/p&gt;

&lt;h2&gt;Solana (Saga &amp;amp; SMS)&lt;/h2&gt;

&lt;p&gt;Solana Labs announced the Solana Mobile Stack recently, which is an open source mobile stack designed for devs to build mobile dApps and other functionality for the phones.  Github linked &lt;a href="https://github.com/solana-mobile/solana-mobile-stack-sdk"&gt;here&lt;/a&gt;.&lt;br&gt;
They are also releasing the Saga phone in early 2023 (with pre-orders available now).  The specs are as follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"6.67 OLED display, 12 GB RAM, 512 GB storage, and the latest flagship Snapdragon® 8+ Gen 1 Mobile Platform, the security features of which will enable the Solana Mobile Stack’s Seed Vault. With the addition of a Secure Element built into the device, the Seed Vault keeps private keys, seed phrases and secrets separated from the application layer yet still capable of interacting with apps running on the device or in a mobile browser." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Per the Bankless podcast, Solana's co-founders primarily intend for Saga and SMS to serve as a starting point to push for developers and phone giants to focus more on mobile first web3 applications, but they'll grant themselves bonus points if the actual Saga phone gains traction on its own.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NNU8qWcC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jkrzlg0maxudsp56l0gu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NNU8qWcC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jkrzlg0maxudsp56l0gu.png" alt="Saga Phone" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Ethereum (ethOS)&lt;/h2&gt;

&lt;p&gt;The next play comes from Ethereum, with their ethOS.  ethOS (in addition to being impossible to Google because of collisions with the word 'ethos') is a community led mobile operating system for Ethereum.  It is currently available for the Pixel 3 and Pixel 5a. Github linked &lt;a href="https://github.com/EthereumPhone"&gt;here&lt;/a&gt; and whitepaper linked &lt;a href="https://uploads-ssl.webflow.com/629fb11c1f7b33984fa82350/62c3645d62a39f7693e2c93f_whitepaper.pdf"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--35oYtDdO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/htujhy45wh4fhnydihh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--35oYtDdO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/htujhy45wh4fhnydihh4.png" alt="ethOS demo" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Polygon (Nothing (1))&lt;/h2&gt;

&lt;p&gt;Few details are available so far for this project, other than Polygon's plans to build in easy access to dapps games, and their planned Polygon ID feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QSu3FiHM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ct36vxlhyvtdl3ckekdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QSu3FiHM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ct36vxlhyvtdl3ckekdu.png" alt="Nothing (1) Phone" width="800" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Why this matters to me as a dev&lt;/h2&gt;

&lt;p&gt;As a developer, all this innovation has me hype.  New tech means devs with their ears to the ground can be early adopters and become experts of potentially game-changing technology.&lt;br&gt;&lt;br&gt;
Let me know your thoughts &amp;amp; how I can improve my writing in the comments!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Developers have been blocked for too long from creating truly decentralized mobile apps because the existing gatekeeper model just doesn't work anymore," said Anatoly Yakovenko, co-founder of Solana. &lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.prnewswire.com/news-releases/solana-mobile-stack-begins-new-era-of-web3-with-mobile-first-android-platform-301574354.html"&gt;PR Newswire Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://solanamobile.com/sms"&gt;Solana Mobile Stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://messari.io/article/analyst-note-the-solana-mobile-stack"&gt;Messari Article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ethereumphone.org/"&gt;ETH Phone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thedefiant.io/blockchain-phones/"&gt;Dope Article About Polygon's Partnership&lt;/a&gt;
-&lt;a href="https://us.nothing.tech/blogs/news/this-is-where-you-can-buy-phone-1"&gt;Nothing Phone&lt;/a&gt;
-&lt;a href="https://podcasts.google.com/feed/aHR0cDovL2ZlZWRzLmxpYnN5bi5jb20vMjQ3NDI0L3Jzcw/episode/OGVjZTI3MWQtZjYwZi00YTM5LTk2Y2UtNzdhOGY2NzgwOWU5"&gt;Bankless Podcast&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web3</category>
      <category>mobile</category>
      <category>solana</category>
      <category>news</category>
    </item>
    <item>
      <title>How to Explain Blockchain to your Grandma</title>
      <dc:creator>ryan cooper</dc:creator>
      <pubDate>Sun, 29 May 2022 03:56:28 +0000</pubDate>
      <link>https://dev.to/rcooper47/how-to-explain-blockchain-to-your-grandma-nh9</link>
      <guid>https://dev.to/rcooper47/how-to-explain-blockchain-to-your-grandma-nh9</guid>
      <description>&lt;h1&gt;
  
  
  Intro:
&lt;/h1&gt;

&lt;p&gt;I plan to write a few posts that will serve as personal summaries of topics related to web3 that I find complicated.  I framed this one as a letter to my very non-tech savvy grandma explaining the concept of blockchain by analogy.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please&lt;/em&gt; let me know how I can improve.  &lt;/p&gt;

&lt;p&gt;Dear Grandma,&lt;/p&gt;

&lt;p&gt;I’ve never sent a letter before, so you’ll have to call me to scold me on my poor manners later. In the meantime, I wanted to tell you what I know about this cool idea called a Blockchain. First, I’ll explain what that word means, then I’ll talk about why it can be useful sometimes, and I’ll finish by talking about some different blockchain designs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a blockchain?
&lt;/h2&gt;

&lt;p&gt;A blockchain is a computer program that serves as a list of previous events.  You can follow each event (or block) on the chain all the way to the beginning, kind of like a family tree.&lt;/p&gt;

&lt;p&gt;Kind of like a family tree. It can be edited as you go, but everyone needs to have the same version of events.&lt;/p&gt;

&lt;p&gt;Each event is “written down” on a “block”, and each block connects to the one before it to form a “chain” of blocks. (That’s why it’s called a Block Chain). The first thing a blockchain was used for was money, so it’s natural to think of most events as “transactions''.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use a blockchain?:
&lt;/h2&gt;

&lt;p&gt;No third party middle-man needed: Do you remember having to pay the bank $25 just to send Uncle Kevin some birthday money?&lt;/p&gt;

&lt;p&gt;Trustless peer to peer: Or wanting to buy a necklace from an ad you saw on TV but refusing to call the company because you would have to give them your credit card information&lt;/p&gt;

&lt;p&gt;A blockchain is a tool that people can use to solve these problems.&lt;/p&gt;

&lt;p&gt;It does that the same way people solve the problem of reneging during spades— everyone keeps track of every transaction that happens. But instead of mentally keeping track of everything, people log every transaction using their computers. If anyone spots a transaction that didn’t happen (like my mom playing a spade two turns after she claimed she had run out), that list of events is deleted and replaced with the one that everyone else agrees on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different types?
&lt;/h2&gt;

&lt;p&gt;Blockchains were invented for people to copy the idea and put their own spins on it. Less like the Mona Lisa, more like your fried chicken recipe. So there are several different designs of blockchains that are built for different purposes.  Bitcoin's blockchain is used to store people's wallet information (almost like a bank), while Ethereum's blockchain can do a few more things than that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, but what’s a Bitcoin?
&lt;/h2&gt;

&lt;p&gt;Today there are many different groups using different blockchains for their own projects. Some people are using them to store artwork transactions, some healthcare companies are using them, and of course, some people are designing money that stores its transactions on them. This money is called a “cryptocurrency”.&lt;/p&gt;

&lt;p&gt;One you might have already heard of is Bitcoin, but there are plenty of others like Ethereum, Solana, etc.  These each deserve their own articles, so I will write more about them in the future.&lt;/p&gt;

&lt;p&gt;Thanks for sticking with me through all of that, grandma! Let me know if any of that made sense and how I can explain better next time. Write back when you get the chance!&lt;/p&gt;

&lt;p&gt;With much love from your favorite grandson,&lt;/p&gt;

&lt;p&gt;Ryan&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please let me know if anything I said here is inaccurate or if you have any feedback that could help me improve my writing in general.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(Better) Sources (of Information):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=bBC-nXj3Ng4"&gt;3Blue1Brown Video Explanation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitcoin.org/bitcoin.pdf"&gt;Original Bitcoin Whitepaper&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
