<?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: Prince Wilson</title>
    <description>The latest articles on DEV Community by Prince Wilson (@maxcell).</description>
    <link>https://dev.to/maxcell</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%2F7856%2F7365ff23-a265-4f33-a759-b43185ad11c8.jpg</url>
      <title>DEV Community: Prince Wilson</title>
      <link>https://dev.to/maxcell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxcell"/>
    <language>en</language>
    <item>
      <title>React Router - Using Location State for Custom UI Navigation</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Tue, 21 Jan 2020 00:31:10 +0000</pubDate>
      <link>https://dev.to/maxcell/react-router-using-location-state-for-custom-ui-navigation-2ia9</link>
      <guid>https://dev.to/maxcell/react-router-using-location-state-for-custom-ui-navigation-2ia9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally posted on my blog, &lt;a href="https://prince.dev"&gt;https://prince.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Background
&lt;/h2&gt;

&lt;p&gt;When we write our code, we have to think about designing it in a way such that it can handle the current requirements and create opportunity for other developers to come in to change the code whenever the requirements change. An example of this came up when I was dealing with code that handles navigational flow within our application.&lt;/p&gt;

&lt;p&gt;We wanted to have a back button on some pages that would return users to the previous page they were looking at. Originally, we handled this through inserting a redirect path inside a query parameter.&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="c1"&gt;// You'll notice at the end we have a query parameter (?redirect_url=)&lt;/span&gt;
&lt;span class="c1"&gt;// that says where we came from and so we would use that param&lt;/span&gt;
&lt;span class="c1"&gt;// to send us to the previous page&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currentUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://somecoolwebsite.com/posts/12341?redirect_url=/posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// Parse out the redirect_url&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="c1"&gt;// Send us to the previous page&lt;/span&gt;
&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;redirectUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// i.e. "/posts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This worked! Closed ticket, shut laptop and let's call it a day -- not quite.&lt;/p&gt;

&lt;p&gt;At the last second, the requirements changed and now you gotta handle more cases. In our redirect url, we can't pass in any previous query parameters that were there, so all context would be removed from the page. In addition, conceptually "going back" shouldn't add more history (such as &lt;code&gt;history.push()&lt;/code&gt; does). This was an excellent time to figure out how to tidy everything up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links to the rescue!
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://reacttraining.com/react-router/web/guides/quick-start"&gt;React Router&lt;/a&gt;, the &lt;code&gt;Link&lt;/code&gt; component is commonly used with a &lt;code&gt;to&lt;/code&gt; prop as a string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;BlogPostLink&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;post&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`/post/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can instead use an object for &lt;code&gt;to&lt;/code&gt;! If we wanted to recreate the same&lt;br&gt;
behavior, the code would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;BlogPostLink&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;post&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;

  &lt;span class="c1"&gt;// `pathname` value is equivalent to the string form `to`&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/post/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can pass in additional context through the key &lt;code&gt;state&lt;/code&gt;.&lt;br&gt;
This optional key allows you to pass in information that can be used for things such as location-based rendering. It should take the shape of an object. It is intentionally something we have to set for it to appear in the location object.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;BlogPostLink&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;post&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;
      &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/post/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;fromBlogRoll&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Location-based rendering
&lt;/h2&gt;

&lt;p&gt;Now that we have this state being inserted into our location object, where does the actual &lt;strong&gt;magic&lt;/strong&gt; happen? It all happens on the back button. Let's say we want to have special text when we are coming directly from the blog roll vs. any other page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;BackButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// See documentation about React Router's Hook API&lt;/span&gt;
  &lt;span class="c1"&gt;// https://reacttraining.com/react-router/web/api/Hooks&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useHistory&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;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useLocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="c1"&gt;// Here we're checking to see if state exists for our location, it will&lt;/span&gt;
  &lt;span class="c1"&gt;// always have the key but we want to 1) verify it was set and 2) that&lt;/span&gt;
  &lt;span class="c1"&gt;// the state we received is something we've intentionally set&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fromBlogRoll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fromBlogRoll&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;fromBlogRoll&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;goBack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Back to Blog Roll&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Home&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have a nice back button for our needs. This will take advantage of the history object, so if we want to go back (&lt;code&gt;history.goBack()&lt;/code&gt;) and still have all our query parameters, they will be there as well as any other things we've stored in our app's state.&lt;/p&gt;

&lt;p&gt;This handles for the case of what if a user directly shares the link to someone else and instead of seeing a back button, they should see a home button. So if we have unauthenticated users, they cannot navigate through the app like other users. It will fallback and present a home button.&lt;/p&gt;

&lt;p&gt;An important note is we want to make sure to use the &lt;code&gt;location&lt;/code&gt; object and &lt;strong&gt;not&lt;/strong&gt; the &lt;code&gt;history&lt;/code&gt; object for determining the &lt;strong&gt;current location&lt;/strong&gt; state. The &lt;a href="https://reacttraining.com/react-router/web/api/history/history-is-mutable"&gt;history object can be mutated&lt;/a&gt; and makes it not a good source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Last Thoughts
&lt;/h2&gt;

&lt;p&gt;Every time a bug is raised into a codebase I work on, I think about how can I make something a bit better than when I found it. Of course this is super subjective. I like to try to reduce down complexities where I can and how to take advantage of tools that are closer within reach. With React Router, the tools were there for me and it is a bit easier to manage the complexities of the UI logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  References and Additional Readings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reacttraining.com/react-router/web/guides/quick-start"&gt;React Training - React Router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reacttraining.com/react-router/web/api/Hooks"&gt;React Training - API Hooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reacttraining.com/react-router/web/api/Link/to-object"&gt;React Training - Link API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reacttraining.com/react-router/web/example/modal-gallery"&gt;React Training - Modal Example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Note-taking -- People still Do That?</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Mon, 24 Jun 2019 15:27:34 +0000</pubDate>
      <link>https://dev.to/maxcell/note-taking-people-still-do-that-1pnm</link>
      <guid>https://dev.to/maxcell/note-taking-people-still-do-that-1pnm</guid>
      <description>&lt;p&gt;Being a software developer is an incredible thing! There are opportunities to learn new things and almost immediately begin to apply them. Yet, one thing I've noticed is that with so much to learn, it is hard to immediately recall that knowledge if we don't use it often. Many people believe that the best way of learning something is by building and creating -- and I truly believe in that. But there is a caveat to this rule, you should not ONLY be building. More experienced developers say building is how they learn best. That's because they've gotten good at locating working answers to problems they encounter in the process.&lt;/p&gt;

&lt;p&gt;If we want to master a skill or technology, we need to build better habits to recalling information and one way we do that is by taking notes. Many people in school may have felt that they never reviewed their notes or just wrote down scribbles in class. Hell, I did the same thing. A problem is that we've never had to exercise the skill on &lt;strong&gt;good&lt;/strong&gt; note-taking. It takes time and energy, but this skill can help us now and in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to begin?
&lt;/h2&gt;

&lt;p&gt;How can we build a better relationship with note-taking? We have to start with the root of the problem -- ourselves. We need to remember that the purpose of note-taking is to be able to reflect and review the things we're learning. It isn't just a cheat sheet for an exam. We want these to be high fidelity so we can reflect on all the tooling/techniques we've encountered. If we treat notes just like scratch paper to jot down what we're hearing, we won't actually be able to go back and apply anything. It would be hard to remember the context of why you wrote down a phrase.&lt;/p&gt;

&lt;p&gt;So with the mindset that it will take time, let's begin with a few helpful strategies for note-taking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Having a System
&lt;/h2&gt;

&lt;p&gt;Before electronics were glued to us, we used to have to write everything with a pen and paper. Now with so many new pieces of technology, we can write notes practically anywhere. Some apps that I've used in the past for taking notes is just text files across my computer, &lt;a href="https://evernote.com/" rel="noopener noreferrer"&gt;Evernote&lt;/a&gt;, &lt;a href="https://products.office.com/en-us/onenote/digital-note-taking-app" rel="noopener noreferrer"&gt;OneNote&lt;/a&gt;, and the one that is supposedly developer friendly, &lt;a href="https://boostnote.io/" rel="noopener noreferrer"&gt;Boostnote&lt;/a&gt;. All of these have their advantages/drawbacks; find out what works best for you. What we want to do is come up with good strategies to ingest and digest the things we're learning. We need to write notes with the context of the whos, whats, whys, and hows.&lt;/p&gt;

&lt;p&gt;As an example, I will showcase to you how I learned a new piece of technology called, &lt;a href="https://dev.toreact-hooks"&gt;React Hooks&lt;/a&gt;, and talk about my thought process as I take notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chunking Notes into Topics
&lt;/h3&gt;

&lt;p&gt;I took this class called, Intro to React by Brian Holt over on Frontend Masters. As a teacher, I always have to be growing too. For note-taking I use &lt;a href="https://notion.so" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;. With my system, I enjoy making an outline of the information. The goal is to quickly "chunk" information together and make it easier to retrieve or find.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgr9ahwsbpvpc2u1m3h8b.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgr9ahwsbpvpc2u1m3h8b.png" alt="Table of Contents for Intro to React course"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This makes it easy to identify what topic am I going over in that particular section. It is not likely I will find any insights in the &lt;code&gt;Context&lt;/code&gt; section if the code I am writing only involves something like &lt;code&gt;useEffect&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Organizing our notes into chunks may feel obvious. I know for myself I began putting everything in one HUGE text file but that makes it harder to figure out what the heck I am looking for or how to even go about finding anything beyond a &lt;code&gt;CMD+F&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking down a Topic
&lt;/h3&gt;

&lt;p&gt;If we take a gander through one of my pages, you'll see my notes are&lt;br&gt;
somewhat self-contained thoughts. They aren't only just sentences but also commented out code. Notes should contain anything you think might be helpful to your future self. You don't need to write every detail but snippets of code and context of why you wrote that can be insightful. Since our brain can't store everything we learn forever and easily recall it, this is a nice way to make something easy to reference.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5c24ve5eicbzrvb38gp8.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5c24ve5eicbzrvb38gp8.png" alt="useEffect notes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I make sure to indicate to myself what things are important by some sort of emphasis, such as the order of which I put items into the second parameter of &lt;code&gt;useEffect&lt;/code&gt; doesn't matter. I like to use bolds because it is easy for my eyes to immediately identify at a glance.&lt;/p&gt;

&lt;p&gt;To make sure I am actively learning, I tend to write down questions I have as I am hearing explanations or curious about how something works. I indicate them with &lt;strong&gt;???&lt;/strong&gt; in front. I write these questions down before having the answer just to give myself the opportunity to ingest and digest the information. Ingestion describes how I take information in versus digestion is how I break down that information.&lt;/p&gt;

&lt;p&gt;Being able to pre-test yourself or come up with questions and find the answers on your own lets your brain build deeper neural connections. These can lead to more meaningful connections to the thing you're learning about. Resulting in you recalling them even better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Takeaways for a System
&lt;/h3&gt;

&lt;p&gt;Have some way of easily identifying what the contents of those notes contain. Similar to a filing system, we want to be able to easily retrieve it. And if you notice your system needs to expand, feel free to do so. This is meant to be living and growing.&lt;/p&gt;

&lt;p&gt;When writing notes, we want to be sure to encapsulate the meaning behind what we're writing. We don't want to just quick two-word blurbs all over our page. We need to think of them as small bubbles of thoughts around the topic. They don't need to be concrete or connected but they need to be 1) relevant and 2) explainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visuals Enhance Learning
&lt;/h2&gt;

&lt;p&gt;One thing that I have learned as a teacher is that there are going to be different ways that help us process information. Not just writing it down in one form will ensure that one completely understand a topic. I have gotten in the habit of doing is also freehanding a lot of my notes and feeling okay with marking them up. You can actually see the notes on my &lt;a href="https://remarkable.com/" rel="noopener noreferrer"&gt;reMarkable&lt;/a&gt;, an e-ink tablet&lt;br&gt;
(not a pitch by any means).&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2hi5gn4arye6cz8dkn6j.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2hi5gn4arye6cz8dkn6j.png" alt="My handwritten notes from my reMarkable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Marking up the code and indicating what exactly is happening helps me retain the information more than just typing it out. The mental act of deconstructing the syntax of code helps to digest more of the information and recognize patterns in other places. On the bottom of my notes, I take some bullet notes just so I can identify anything that might be significant to remember or look up.&lt;/p&gt;

&lt;p&gt;One of the podcasts I have listened to about pedagogy, &lt;a href="https://www.cultofpedagogy.com/note-taking/" rel="noopener noreferrer"&gt;The Cult of Pedagogy&lt;/a&gt;, taught me about using mind mapping as a tool to visualize our understanding. I am not good at it yet -- but we get better by practice. The goal is to have a "central" theme or idea in the center and then connect information&lt;br&gt;
together to build an entire map that will help us explain that idea.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffrtc3y38v0ua3rl34elp.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffrtc3y38v0ua3rl34elp.png" alt="My mindmap for React Hooks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This may work well for you when you're trying to have a bigger picture understanding of a concept rather than everyday note-taking. I personally like doing it after I have sat with a topic for quite some time and use it as a test at recalling anything about the "central" theme.&lt;/p&gt;

&lt;p&gt;One last visual technique is called sketchnoting. The core concept is to draw sketches as you take your notes. Your brain can wander and explore how it wants to relate information together with fun doodles. We saw that I am not that great at visuals but some people like to exercise their creative side.&lt;/p&gt;

&lt;p&gt;Here's an example of someone's sketchnote on how to create a more accessible React app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/stephaniecodes/status/1017121412971225090" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FDh2Kh3IX4AECgXj.jpg%3Asmall"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;small&gt;&lt;em&gt;Image from &lt;a href="https://twitter.com/stephaniecodes/status/1017121412971225090" rel="noopener noreferrer"&gt;@stephaniecodes&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;



&lt;p&gt;The thing to remember is that there is no one &lt;strong&gt;right&lt;/strong&gt; way to sketchnote. There are no rules to it. Don't worry if the drawings aren't great. The goal should be to see how you can take your notes and explore meaning through visual and textual expression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to Go From Here
&lt;/h2&gt;

&lt;p&gt;My suggestion for you, friend, is to give note-taking another shot. Maybe&lt;br&gt;
you only do it when you're taking a new course or reading about a framework. This time, try to break your thoughts down. Think about how you would want to have shaped the information and how you would share it to someone else.&lt;/p&gt;

&lt;p&gt;After you've written your notes, guess what! You've gotten one step closer already to writing that blog post that you might want, the presentation topic you want to give to your colleagues, or creating a working knowledge base for your growing team.Once we change our relationship with note-taking, we end up allowing&lt;br&gt;
ourselves to thrive in it. This leads to compound wins for everyone around you.&lt;/p&gt;

&lt;p&gt;Try it out for a week or two and let me know how it goes.&lt;/p&gt;

</description>
      <category>notetaking</category>
      <category>coding</category>
      <category>learning</category>
    </item>
    <item>
      <title>What are you working on for Open Source?</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Mon, 02 Oct 2017 12:53:44 +0000</pubDate>
      <link>https://dev.to/maxcell/what-are-you-working-on-for-open-source-40l</link>
      <guid>https://dev.to/maxcell/what-are-you-working-on-for-open-source-40l</guid>
      <description>&lt;p&gt;Howdy there! Since yesterday started &lt;a href="https://hacktoberfest.digitalocean.com/"&gt;Hacktoberfest&lt;/a&gt; over at GitHub, I was wondering what everyone was going to get themselves involved with. Though this is an annual event hosted by one company, I'd love to hear how you make yourself involved in open source.&lt;/p&gt;

&lt;p&gt;Share any tips or tricks for people at any level. Even share a project that could use some love for the month of October.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>career</category>
    </item>
    <item>
      <title>Getting Started with Search by Geo Location</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Tue, 12 Sep 2017 18:47:57 +0000</pubDate>
      <link>https://dev.to/clarifai/getting-started-with-search-by-geo-location-42g</link>
      <guid>https://dev.to/clarifai/getting-started-with-search-by-geo-location-42g</guid>
      <description>&lt;p&gt;&lt;em&gt;Fact: Clarifai’s Search API allows you to search your images and video by visual similarity. Lesser known fact: it also lets you search your media by geo location data! Learn more about this feature and how to put it into action for your own developer application.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;The Search API allows you to send images to Clarifai and have them indexed using concepts and their visual representation. After they are indexed, you can search over your inputs using concepts (e.g. dog) or images (e.g. visually similar dogs). Clarifai can extend this search by adding extra data points onto our inputs such as geo location data. A search by geo location acts as a filter of inputs so you get only results within a specified range.&lt;/p&gt;

&lt;p&gt;We’ll look at attaching geo location data to your inputs and then querying that data with different measurements of distance to see the change in results. For this tutorial, we are going to use &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;. Let’s get started by installing the official &lt;a href="https://github.com/Clarifai/clarifai-javascript" rel="noopener noreferrer"&gt;Clarifai JavaScript client&lt;/a&gt; with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install clarifai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Inputs
&lt;/h3&gt;

&lt;p&gt;You need to &lt;a href="https://clarifai.com/developer/signup" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; for Clarifai and &lt;a href="https://clarifai.com/developer/guide/applications#applications" rel="noopener noreferrer"&gt;create an application&lt;/a&gt; before you can get started. Inputs are added using either a &lt;a href="https://clarifai.com/developer/guide/search#add-images-to-search-index" rel="noopener noreferrer"&gt;URL or bytes&lt;/a&gt;. Along with your input source we’ll add a geo object that will contain keys for GPS coordinates (longitude and latitude). Remember that the coordinate system is using the cardinal directions: North, South, East, and West. North and East will be positive numbers and South and West will be negative numbers.&lt;/p&gt;

&lt;p&gt;Below we will add &lt;a href="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Statue_of_Liberty_7.jpg/1200px-Statue_of_Liberty_7.jpg" rel="noopener noreferrer"&gt;an image of the Statue of Liberty using a URL&lt;/a&gt; from Wikipedia:&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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fa%2Fa1%2FStatue_of_Liberty_7.jpg%2F1200px-Statue_of_Liberty_7.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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fa%2Fa1%2FStatue_of_Liberty_7.jpg%2F1200px-Statue_of_Liberty_7.jpg"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const Clarifai = require('clarifai')
const app = new Clarifai.App({ apiKey: 'YOUR_API_KEY_HERE' })

app.inputs.create({
  url: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Statue_of_Liberty_7.jpg/1200px-Statue_of_Liberty_7.jpg",
  geo: {
    latitude: 40.689247,
    longitude: -74.044502
  }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and use a &lt;a href="http://cdn.history.com/sites/2/2015/02/golden-gate-bridge-iStock_000019197672Large-H.jpeg" rel="noopener noreferrer"&gt;local image of the Golden Gate Bridge&lt;/a&gt; from HISTORY and a function for file-to-base64 conversion:&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/http%3A%2F%2Fcdn.history.com%2Fsites%2F2%2F2015%2F02%2Fgolden-gate-bridge-iStock_000019197672Large-H.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/http%3A%2F%2Fcdn.history.com%2Fsites%2F2%2F2015%2F02%2Fgolden-gate-bridge-iStock_000019197672Large-H.jpeg"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const Clarifai = require('clarifai')
const app = new Clarifai.App({ apiKey: 'YOUR_API_KEY_HERE' })

const convert_bytes = (img) =&amp;gt; {
  const img_file = fs.readFileSync(img)
  return new Buffer(img_file).toString('base64')
}

app.inputs.create({
  base64: convert_bytes('./golden_gate.jpg')
  geo: {
    latitude: 37.807812,
    longitude: -122.475164
  }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching for Images
&lt;/h3&gt;

&lt;p&gt;Once your images are uploaded, you will be able use them with search. When searching by geo location, you can refine your results using a single point and some radius given ‘withinMiles’, ‘withinKilometers’, ‘withinDegrees’, or ‘withinRadians’.&lt;/p&gt;

&lt;p&gt;Let’s say we only want results of images within a mile of the Empire State Building in New York City (because it’s the best city in the world, naturally). Our search would look 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;app.inputs.search({
  input: {
    geo: {
      latitude: 40.748817,
      longitude: -73.985428,
      type: 'withinMiles',
      value: 1.0
    }
  }
}).then((response) =&amp;gt; { console.log(response.hits)})

// Response
[]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above example returned no results due to how small the range is. If we were to increase this value we will get our hit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.inputs.search({
  input: {
    geo: {
      latitude: 40.748817,
      longitude: -73.985428,
      type: 'withinMiles',
      value: 7.0
    }
  }
}).then((response) =&amp;gt; { console.log(response.hits)})

// Response
[{ 
  score: 1,
  input: { 
    id: 'd7b80aac52f14399b98a9472fc201e64',
    data: [ 
      { 
        score: 1,
        input: { 
          id: 'd7b80aac52f14399b98a9472fc201e64',
          data: { 
            image: { 
              url: 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Statue_of_Liberty_7.jpg/1200px-Statue_of_Liberty_7.jpg' },
              concepts: [
                { 
                id: 'statue',
                  name: 'statue',
                  value: 1,
                  app_id: 'fb70b904750c4891aecddf82082181c2' 
                },
                { 
                  id: 'bridge',
                  name: 'bridge',
                  value: 0,
                  app_id: 'fb70b904750c4891aecddf82082181c2' 
                }
              ],
              metadata: {},
              geo: { 
                geo_point: { 
                  longitude: -74.0445, 
                  latitude: 40.689247 
                }
              }
          },
          created_at: '2017-09-05T17:52:38.616686Z',
          modified_at: '2017-09-05T17:52:39.029363Z',
          status: [Object] 
        } 
      } 
    ],
    created_at: '2017-09-05T17:52:38.616686Z',
    modified_at: '2017-09-05T17:52:39.029363Z',
    status: [Object] 
  } 
}]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The search result will give us an array of matches. Each object within the array is one of our inputs that matches the search criteria. This also includes a score that will indicate how much of a match this the result is to our query. Whenever you want to access any of the data related to a specific object you would need to access its input.data key. You can see what the custom concepts, geo location data, or custom metadata it has attached to it. You can also find the input’s original url or bytes in this object.&lt;/p&gt;

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

&lt;p&gt;The Search API is a powerful tool and searching using geo location is just one of many useful features for developers. You can do much more with the Search API like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search using &lt;a href="https://clarifai.com/developer/guide/searches#by-public-concepts" rel="noopener noreferrer"&gt;Public&lt;/a&gt; or &lt;a href="https://clarifai.com/developer/guide/searches#by-custom-concepts" rel="noopener noreferrer"&gt;Custom&lt;/a&gt; concepts&lt;/li&gt;
&lt;li&gt;Search using your own &lt;a href="https://clarifai.com/developer/guide/searches#by-custom-metadata" rel="noopener noreferrer"&gt;custom metadata&lt;/a&gt; on inputs&lt;/li&gt;
&lt;li&gt;Combine search options using&lt;a href="https://clarifai.com/developer/guide/searches#search-anding" rel="noopener noreferrer"&gt;ANDing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any questions, concerns, or even friendly notes feel free to reach out to us over at &lt;a href="//mailto:hackers@clarifai.com"&gt;hackers@clarifai.com&lt;/a&gt; or comment below!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="//blog.clarifai.com"&gt;Clarifai Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorials</category>
    </item>
    <item>
      <title>The Small Things We Do That Make Big Impact When Meeting People</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Wed, 09 Aug 2017 22:36:55 +0000</pubDate>
      <link>https://dev.to/maxcell/the-small-things-we-do-that-make-big-impact-when-meeting-people</link>
      <guid>https://dev.to/maxcell/the-small-things-we-do-that-make-big-impact-when-meeting-people</guid>
      <description>&lt;p&gt;Back last year I attended a wonderful conference for collegiate hackathon organizers called &lt;a href="https://hackcon.mlh.io" rel="noopener noreferrer"&gt;Hackcon&lt;/a&gt; out in Estes Park, Colorado. I used this event to step outside of my comfort zone and meet new people. Not a few, not some, but all: I attempted to meet AND remember everyone at the conference. This was upwards of about 400 people at the event.&lt;/p&gt;

&lt;p&gt;My challenge here was to meet more people in 2.5 days than I would in a month's time. I don't expect everyone to be like me and try to meet a huge number of people. Besides, we should always remember it is the quality of the relationships we make and not the quantity that matters. However, my intentionality in making friends at HackCon actually provided a lot of great lessons about being very effective at meeting and remembering people. Here are some tips that you can use whenever you meet someone.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Smile
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Actions speak louder than words."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can do so much with as little as a smile. You and the person receiving the smile will feel great from it. This doesn't mean go out of your way to make a very EXTREME smile to every person. Let it be organic. Let it be the result of the positivity you get from them or how they can make you feel. When you smile with someone, it is contagious.&lt;/p&gt;

&lt;p&gt;A lot of people will say they can't "just" smile. It isn't easy; smiling uses muscles in your face and just like any muscle you have to exercise it. A technique that has helped me is just thinking about things that I really enjoy and just passively smile without having to direct it at someone. How do you think Kimmy Schmidt does it?!&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fg1b811xh9o9yfye4cbnk.gif" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fg1b811xh9o9yfye4cbnk.gif" alt="Kimmy Schmidt smiling as she is walking the city streets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Ask them their name and say it back
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Remember that a person’s name is to that person the sweetest and most important sound in any language."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dale Carnegie&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is power in a name. When you say someone’s name, it shows to the person that you actually remember who they are.  When we study new material we have to consistently go over it to remember it, and the same is true with names. It is easy to remember the place you met someone, but a name is pretty challenging when we don't use it often. &lt;/p&gt;

&lt;p&gt;There are a few tricks to help yourself keep track of names. Some people find it helpful to repeat the person's name in their head several times to make the association. I try to listen to what they are passionate about and make something clever out of it to associate it back with their name. Try the funny icebreaker exercise that people do where you have to say a word describing you that has to start with the first letter of your name. It works practically every time for me. Just think, "Personable Prince. What would be yours?&lt;/p&gt;

&lt;p&gt;Think of this like going to your favorite coffee shop or restaurant where the server remembers your name &amp;amp; order. You feel great that someone recognizes you out of the crowd of people they come across in a day. However, a lot of us on the other end never ask the server's name. Isn't that odd? We tend to be really happy when our world is centered around us and people notice us but we have to reciprocate. A good piece related to this is David Foster Wallace's graduation speech &lt;a href="https://www.youtube.com/watch?v=8CrOL-ydFMI" rel="noopener noreferrer"&gt;"This is Water"&lt;/a&gt;. Show you actually care and want to acknowledge this person.&lt;/p&gt;

&lt;p&gt;Next time you meet anyone, ask them their name and say it when you leave. Remember they are a human who wants to be recognized just like you. You can literally make someone's day by just simply saying their name. In the memorable words of Walter White&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F94dw4l858m04ytlm61mw.gif" 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F94dw4l858m04ytlm61mw.gif" alt="Walter White saying "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Listen
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Most people do not listen with the intent to understand; they listen with the intent to reply."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Steven R. Covey&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Out of all three tips, this one is the hardest to do for people. We have two types of listening: "passive" and "active." The difference is how engaged you are.&lt;/p&gt;

&lt;p&gt;Passive listening is when we hear what someone says. Imagine being in class and your teacher is leading an exam review. With passive listening you don't do anything but take in information. Active listening is where instead of just taking in ideas from your teacher you actually internalize what is being said. You engage the teacher with questions that reiterate points they brought up and try to get a deeper meaning. When you come to the exam, you will see that you remember the conversation you had more with active listening and can easily associate things with your experience.&lt;/p&gt;

&lt;p&gt;The importance of active listening holds true with conversations with people as well. You need to take what someone says and understand it in their frame of reference. Listen to what they are passionate about and ask more questions about it and get them to share more. You also have to show your genuine interest in it. They aren't just going to talk to someone who doesn't care to hear what they have to say. You never know when this person's insights may come in handy, and discovering those insights starts with simply listening. When you actively listen you learn more about someone and you learn what you share in common. You never have to worry about forgetting who someone is because you know so much of them.&lt;/p&gt;

&lt;p&gt;Some tips that I have may sound a bit odd but I assure you they can help. When I meet someone new I tend to ask them their name and then ask them to tell me what they are passionate about. With that, I tend to remember that someone is passionate about X and so their name is so-and-so. Some people even write these people's names down and their passion to help them remember. Another tip that helps is the nonverbal portion of your communication that helps you listen. Two things that work really well is slightly lean in and make eye contact with them. Your body will actually be in a mode of listening and engaging them. When your body feels engaged, your mind will also. This happens almost involuntarily when we have positive attitudes towards someone and &lt;a href="http://hl-128-171-57-22.library.manoa.hawaii.edu/bitstream/10125/35152/1/Barkai_27SanDiegoLRev101.pdf" rel="noopener noreferrer"&gt;research&lt;/a&gt; shows that we tend to talk more when this happens too. &lt;/p&gt;




&lt;p&gt;When these three small acts are put into place, you will achieve big wins into meeting &amp;amp; remembering people. I have found these to be acts that really make all parties remember each other. I challenge you now to go and implement these small acts in the people you deal with already and see how much different your experience is. Being conscious and intentional about these will help you grow. I hope you use these well, my padawan! If you want to learn any more amazing things about making friends, check out extremely useful books such as "How to Win Friends &amp;amp; Influence People" by Dale Carnegie.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Enjoy what you read? Be sure to spread the love by liking and sharing this piece. Want to share thoughts, ask questions, or have any other recommendations? Feel free to reach out to me on &lt;a href="https://twitter.com/maxcell" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or in the comments below! Thanks for reading!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>life</category>
      <category>learning</category>
    </item>
    <item>
      <title>How to demo your localhost app using ngrok</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Tue, 08 Aug 2017 21:17:52 +0000</pubDate>
      <link>https://dev.to/clarifai/how-to-demo-your-localhost-app-using-ngrok</link>
      <guid>https://dev.to/clarifai/how-to-demo-your-localhost-app-using-ngrok</guid>
      <description>&lt;p&gt;&lt;em&gt;Ngrok is a reverse proxy that allows you to expose your locally running web service to other developers. It’s a timesaver for developers when it comes down to showcasing a project. Follow along and learn how you can put this into your toolbelt of applications!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Howdy everyone! Have you ever wanted to showcase an amazing project that you built at a hackathon; or show a client the progress of the app you’re building without deploying it to some server? A reverse proxy tool like &lt;a href="https://ngrok.com/" rel="noopener noreferrer"&gt;ngrok&lt;/a&gt; can solve this. Let’s see how it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Sample App
&lt;/h3&gt;

&lt;p&gt;We’ll need to start with a server running locally. If you don’t have a web app to test you can use a quick &lt;a href="http://sinatrarb.com" rel="noopener noreferrer"&gt;Sinatra&lt;/a&gt; “Hello, World”:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# app.rb
require 'sinatra'

get '/' do
  'Hello World!'
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to make sure to have the Sinatra gem. Install the gem through Terminal using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gem install sinatra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run our app, go into Terminal and write:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ruby app.rb
&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fsinatra.gif" 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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fsinatra.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And BOOOM!! 3-line Hello World app.&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fthats-wicked.gif" 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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fthats-wicked.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ngrok
&lt;/h3&gt;

&lt;p&gt;Ngrok is a tool made by &lt;a href="https://twitter.com/inconshreveable" rel="noopener noreferrer"&gt;Alan Shreve&lt;/a&gt;, who built it to be as accessible as possible by breaking it down into 3 painless steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://ngrok.com/download" rel="noopener noreferrer"&gt;Download ngrok for your OS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unzip it&lt;/li&gt;
&lt;li&gt;Launch it!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ta-dah! You’re a natural!&lt;/p&gt;

&lt;p&gt;Here we will launch ngrok through both macOS/Linux and Windows. Let’s move the executable from my Downloads to our Home folder (marked as the tilde or ~) for our macOS/Linux friends. Open up a new terminal and write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mv /your/path/to/ngrok ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Windows we are moving the ngrok.exe to my particular User directory. Mine is called Administrator but yours could be your name (i.e. “Prince Wilson”).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ move \your\path\to\ngrok \Users\&amp;lt;PC_Name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are going to execute ngrok straight from our current directory. In macOS you prepend a script with a â€˜./’ to make it execute and in Windows you would use â€˜.\’. Otherwise your Terminal will look for ngrok in your PATH. ngrok requires at least two fields: 1) the protocol (i.e. HTTP) and 2) the port we want to expose. If you are running your own app pop in the port it’s using otherwise Sinatra defaults to port 4567.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ./ngrok http 4567
&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fngrok.gif" 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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fngrok.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ .\ngrok http 4567
&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fngrok_windows.gif" 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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fngrok_windows.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It fires up with a bunch of outputs but we only care about the forwarding url right now. Mine is  “&lt;a href="http://da0dcb04.ngrok.io" rel="noopener noreferrer"&gt;http://da0dcb04.ngrok.io&lt;/a&gt;” or “&lt;a href="http://f4fcf6f0.ngrok.io" rel="noopener noreferrer"&gt;http://f4fcf6f0.ngrok.io&lt;/a&gt;”. Notice that it points to where our sample server is, meaning anyone who hits our link will be forwarded to our sample app!&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fhello_world.gif" 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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2017%2F08%2Fhello_world.gif"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;And with that, you have learned the basics of ngrok. But, there is so much more to learn! Try these to improve your experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To inspect the traffic coming through and replay requests check out &lt;a href="http://localhost:4040" rel="noopener noreferrer"&gt;http://localhost:4040&lt;/a&gt;. Learn more about that in the &lt;a href="https://ngrok.com/docs#inspect" rel="noopener noreferrer"&gt;ngrok documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sign up for an ngrok account if you want to use your own Basic Authentication. What’s there to lose?&lt;/li&gt;
&lt;li&gt;There are a ton of neato burrito things you can also get out of supporting the project so  pony up if you have the funds to help the software grow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any questions or want to share your experience with ngrok feel free to send me a note over at &lt;a href="//mailto:hackers@clarifai.com"&gt;hackers@clarifai.com&lt;/a&gt;; I’d love to hear from you!&lt;/p&gt;

</description>
      <category>tutorials</category>
      <category>ngrok</category>
      <category>localhost</category>
      <category>demo</category>
    </item>
    <item>
      <title>Train a Custom Visual Recognition Model Using Clarifai's Python Client</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Mon, 13 Mar 2017 21:57:09 +0000</pubDate>
      <link>https://dev.to/clarifai/train-a-custom-visual-recognition-model-using-clarifais-python-client</link>
      <guid>https://dev.to/clarifai/train-a-custom-visual-recognition-model-using-clarifais-python-client</guid>
      <description>&lt;p&gt;In December, our v2 API &lt;a href="http://blog.clarifai.com/side-by-side-guide-how-to-transition-from-clarifai-v1-to-v2-api/#.WMb8bRIrLdQ?&amp;amp;utm_sourch=dev-to&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;graduated from developer preview to general availability&lt;/a&gt;. Don't they grow up so fast?! As such, here is a useful tutorial on how to use one of Clarifai v2 API's most popular features - Custom Training. Custom Training gives you the ability to teach new concepts for our technology to recognize using only a handful of examples and a couple lines of code!&lt;/p&gt;

&lt;p&gt;If you've seen our new &lt;a href="https://developer.clarifai.com?&amp;amp;utm_sourch=dev-to&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;v2 API documentation&lt;/a&gt;, you've probably noticed that things are a bit different than they were in v1 - new SDKs, a cool new visual tool, and new projects waiting for you to build them using Custom Training! In one of our previous blog posts, we talk about &lt;a href="http://blog.clarifai.com/get-to-know-clarifais-new-api-a-visual-tutorial-and-guide?&amp;amp;utm_sourch=dev-to&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;how to use the Preview UI for Custom Training&lt;/a&gt;. While that was awesome (like really awesome), we're gonna crank it up a gear and show you how to do some of the same things using &lt;em&gt;PROGRAMMING&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It isn't as flashy as pulling up our &lt;a href="https://preview.clarifai.com?&amp;amp;utm_sourch=dev-to&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;sleek, chic UI&lt;/a&gt;, but it is just as rad. You can go to your friends and show them your mad teaching-a-computer-how-to-see skills!&lt;/p&gt;




&lt;h1&gt;
  
  
  An API Client
&lt;/h1&gt;

&lt;p&gt;First thing's first, we are gonna need to find a way to interface with the API with our code. We have written a few different clients for you to use in several different languages. For this tutorial, we are gonna stick with the Python client. Who doesn't like programming languages that came out of &lt;a href="https://docs.python.org/2/faq/general.html#why-is-it-called-python" rel="noopener noreferrer"&gt;Monty Python&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;NOTE: Be sure to have installed a &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; that is at least 2.7 or higher. If you aren't sure what which one you might have, go into your terminal and check out what &lt;code&gt;python --version&lt;/code&gt; gets out for you. For instance this is what happens on my system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
Python 2.7.10
&lt;span class="c"&gt;# Or if you are using Python3&lt;/span&gt;
&lt;span class="c"&gt;# Python 3.5.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also to install the Clarifai API Client, we are gonna make sure we have pip, the Python Package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pip &lt;span class="nt"&gt;--version&lt;/span&gt;
pip 9.0.1 from /path/to/Python/2.7/site-packages &lt;span class="o"&gt;(&lt;/span&gt;python 2.7&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# or if you are using Python3&lt;/span&gt;
&lt;span class="c"&gt;# pip 9.0.1 from /path/to/python3.5/site-packages (python 3.5)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With those two out of the way, we can now finally get to installing the Python Client!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;clarifai
&lt;span class="c"&gt;# NOTE: If this doesn't work, consider having a sudo in front of the command &lt;/span&gt;
&lt;span class="c"&gt;# to tell your computer who is boss.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that went off without a hitch, we need to do one more thing before we can write our Custom Training. We are going to add our Client ID and Client Secret into our app. Every time you want to hit Clarifai, you want to be sure to have these two at least! No matter what language you are using, this will be the only way you can get access. So head over to the Developer website, and create yourself a new application:&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage03.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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage03.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once that is done, head back to terminal and type in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;clarifai config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you hit enter, it will prompt you to put in your Client ID and Client Secret, respectively. That way, when we make calls, this doesn't have to be saved in your project but on your file system so long as you are using that particular Application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CLARIFAI_APP_ID: &lt;span class="o"&gt;[]&lt;/span&gt;: &lt;span class="k"&gt;************************************&lt;/span&gt;YQEd
CLARIFAI_APP_SECRET: &lt;span class="o"&gt;[]&lt;/span&gt;: &lt;span class="k"&gt;************************************&lt;/span&gt;gCqT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulations! If you made it this far, you have successfully added the Clarifai Python client to your system. Go you! Now, with that out of the way, we are gonna write some code!&lt;/p&gt;

&lt;h1&gt;
  
  
  Add Images with Concepts
&lt;/h1&gt;

&lt;p&gt;With Custom Training, you can teach Clarifai to recognize whatever you want in an image! So for me, I am gonna teach Clarifai about corgis (because corgis are the best). For this part, you can find 10-20 images that you want to train your model with. This will be known as the “training set”, a set of images you use to train with that will have positive and negative examples of whatever concept you are trying to get Clarifai to recognize.&lt;/p&gt;

&lt;p&gt;So, I gathered 15 images of corgis shot from different angles (including the all-important "corgi butt" pose) with various background objects to make sure Clarifai can recognize what I want it to. Though all my images are JPGs, Clarifai supports JPG, PNG, BMP, and TIFF files! Depending on what you want to train for, it can be better to have a more realistic photo of what you want Clarifai to be looking for and sometimes it is okay to want just the object itself in front of a solid background.&lt;/p&gt;

&lt;p&gt;In my project folder, I made a folder to house all of the images I collect for a concept. So all my images in my &lt;code&gt;corgi/&lt;/code&gt; directory will house images that will have â€˜corgi' as a concept.&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage01.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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage01.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage04.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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage04.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To add an image object with the concept of corgi, we are gonna write:&lt;br&gt;
&lt;/p&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;clarifai.rest&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClarifaiApp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;clarifai.rest&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ClImage&lt;/span&gt;

&lt;span class="c1"&gt;# Our app
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClarifaiApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Adding our image onto our app
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_image_from_filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;./corgi/corgi-1.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;corgi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When we run this (&lt;code&gt;python.py&lt;/code&gt;), we can see our input is added onto our app on the Preview UI:&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage02.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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage02.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To utilize the power of programming, we are gonna automate the process. Let's make a function that will import all of our images inside a directory with the same concept. In this case, we will have all of the photos under &lt;code&gt;corgi/&lt;/code&gt; with our â€˜corgi' concept!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Packages for reading local files
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_image_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;*.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;images&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will allow us to easily take in any sort of images, no matter where, and also allow for us to set some images to have concepts! This is just some of my code and you are more than welcome to improve it to fit your needs.&lt;/p&gt;

&lt;p&gt;NOTE: For this function, we are making the assumption that our number of images per batch is relatively small. If you are sending large sets of images at one time, with numbers around 100,000+ images per function call, you might want to consider abstracting this function to asynchronously handle sending out the request.&lt;/p&gt;

&lt;p&gt;So now our code will look more like this:&lt;br&gt;
&lt;/p&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;clarifai.rest&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClarifaiApp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;clarifai.rest&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ClImage&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClarifaiApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;image_set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_image_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;corgi/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;corgi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bulk_create_images&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_set&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_image_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;*.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;images&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__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;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice we call our &lt;code&gt;create_image_set&lt;/code&gt; in the main method and set our &lt;code&gt;image_set&lt;/code&gt; equal to the returned results. Then we send this into &lt;code&gt;app.inputs.bulk_create_images&lt;/code&gt;. Now you should be seeing all of the images you have added when you run the script!&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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage00-1.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/http%3A%2F%2Fblog.clarifai.com%2Fwp-content%2Fuploads%2F2016%2F12%2Fimage00-1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have added some images with our corgi concept! Let's try to add this onto a model and train!&lt;/p&gt;

&lt;h1&gt;
  
  
  Create a Model and Train!
&lt;/h1&gt;

&lt;p&gt;Since we have already added our inputs, all we need to do now is create a model and train it! To avoid adding duplicate inputs, we are going to comment out the image stuff and change our main function to only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClarifaiApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;# image_set = create_image_set('corgi/', ['corgi'])
&lt;/span&gt;    &lt;span class="c1"&gt;# app.inputs.bulk_create_images(image_set)
&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;puppy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;corgi&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;train&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we created our model, with a model_id of “puppy” and concepts that are on the model align with concepts that we have on our model. From there, we make sure to call train. Voila! We have trained our model to recognize the concept of corgis!&lt;/p&gt;

&lt;p&gt;Now let's say we wanted to use our model and see whether or not it works, we can change our main to be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClarifaiApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;# image_set = create_image_set('corgi/', ['corgi'])
&lt;/span&gt;    &lt;span class="c1"&gt;# app.inputs.bulk_create_images(image_set)
&lt;/span&gt;    &lt;span class="c1"&gt;# model = app.models.create(model_id="puppy", concepts=['corgi'])
&lt;/span&gt;    &lt;span class="c1"&gt;# model.train()
&lt;/span&gt;    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;puppy&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;raw_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;URL of image: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# if on Python3, change the above line to
&lt;/span&gt;    &lt;span class="c1"&gt;# url = input("URL of image: ")
&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict_by_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;outputs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;concepts&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# if on Python3, change the above line to
&lt;/span&gt;    &lt;span class="c1"&gt;# print(model.predict_by_url(url)['outputs'][0]['data']['concepts'])
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will ask our user to give us a URL and then we will print against our puppy model! This will give us the output of all of our concepts on our model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python app.py
URL of image: https://s-media-cache-ak0.pinimg.com/236x/37/5d/48/375d488c51f51c72a01e0e88420becca.jpg
&lt;span class="o"&gt;[{&lt;/span&gt;u&lt;span class="s1"&gt;'app_id'&lt;/span&gt;: u&lt;span class="s1"&gt;'b066d570bcae40b3b0d5d50176d09cef'&lt;/span&gt;, u&lt;span class="s1"&gt;'id'&lt;/span&gt;: u&lt;span class="s1"&gt;'corgi'&lt;/span&gt;, u&lt;span class="s1"&gt;'value'&lt;/span&gt;: 0.9865137, u&lt;span class="s1"&gt;'name'&lt;/span&gt;: u&lt;span class="s1"&gt;'corgi'&lt;/span&gt;&lt;span class="o"&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it for this tutorial! There are a number more functions and ways of doing things in Custom Training. If you ever need any help, be sure to reach out to us at &lt;a href="//mailto:support@clarifai.com"&gt;support@clarifai.com&lt;/a&gt;. We are more than happy to help!&lt;/p&gt;

&lt;p&gt;Before I send you on your way, here are some simple tips and tricks to remember about Custom Training:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Be sure to have your inputs (images) on your application, and tell them what concepts (or not-concepts) they are associated with! &lt;/li&gt;
&lt;li&gt;Make sure you have a model (a place to put a group of concepts) and concepts! Just having images on your application isn't enough. &lt;/li&gt;
&lt;li&gt;If you are unsure how to access the API using any of the clients, be sure to check out the repo's documentation. For Python, you can see all the available functions &lt;a href="https://sdk.clarifai.com/python/docs/latest/index.html?&amp;amp;utm_sourch=dev-to&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go out my compatriots of the world. Teach computers how to see the world from your perspective!&lt;/p&gt;

</description>
      <category>computervision</category>
      <category>api</category>
      <category>python</category>
      <category>clarifai</category>
    </item>
    <item>
      <title>Hi, I'm Prince Wilson</title>
      <dc:creator>Prince Wilson</dc:creator>
      <pubDate>Fri, 24 Feb 2017 18:28:05 +0000</pubDate>
      <link>https://dev.to/maxcell/hi-im-prince-wilson</link>
      <guid>https://dev.to/maxcell/hi-im-prince-wilson</guid>
      <description>&lt;p&gt;Howdy there! I am Prince, pleasure to meet you! I have been coding for quite some time now and I professionally teach people how to program at a coding bootcamp called Flatiron School. We teach people how to learn web development using tools such Ruby on Rails and React.js&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
