<?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: 김재원</title>
    <description>The latest articles on DEV Community by 김재원 (@wonism).</description>
    <link>https://dev.to/wonism</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%2F31385%2F2b17a730-4490-48f2-bc14-e4ae0f6c2bde.jpeg</url>
      <title>DEV Community: 김재원</title>
      <link>https://dev.to/wonism</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wonism"/>
    <language>en</language>
    <item>
      <title>I created react hooks for reducing re-rendering caused of statement change.</title>
      <dc:creator>김재원</dc:creator>
      <pubDate>Wed, 08 May 2019 17:02:25 +0000</pubDate>
      <link>https://dev.to/wonism/i-created-react-hooks-for-reducing-re-rendering-caused-of-statement-change-10hn</link>
      <guid>https://dev.to/wonism/i-created-react-hooks-for-reducing-re-rendering-caused-of-statement-change-10hn</guid>
      <description>&lt;p&gt;In React, a component will be re-rendered when &lt;code&gt;state&lt;/code&gt; is changed.&lt;br&gt;
What will be happened if the state is changed very frequently?&lt;br&gt;
The component will be re-rendered frequently. It will affect to performance.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;use-flush&lt;/code&gt; will help component to be re-rendered just once in &lt;code&gt;n seconds&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, Let's take a look how it works and how to use it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Explanation
&lt;/h2&gt;

&lt;p&gt;Let's assume that the state will be changed very frequently like below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; means every &lt;strong&gt;n seconds&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; means state is &lt;strong&gt;changed&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+--------+--------+--------+--------
  * *   *  ** *** *  *    *
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;strong&gt;flushed state&lt;/strong&gt; will be changed in every &lt;strong&gt;n seconds&lt;/strong&gt; like below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+--------+--------+--------+--------
         *(3)     *(6)     *(2)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm i -S use-flush
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;If you click 5 times in 2 seconds, &lt;code&gt;flushedCount&lt;/code&gt; will be &lt;code&gt;[0, 1, 2, 3, 4]&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;useFlush&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use-flush&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appRoot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&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="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;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flushedCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useFlush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;FLUSHED&lt;/span&gt; &lt;span class="na"&gt;COUNT&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;flushedCount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&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="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;appRoot&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 check it on this &lt;a href="https://github.com/wonism/use-flush"&gt;repository&lt;/a&gt;.&lt;br&gt;
Any PRs are welcome. :)&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>hooks</category>
      <category>performance</category>
    </item>
    <item>
      <title>Create your own blog easily with Gatsby</title>
      <dc:creator>김재원</dc:creator>
      <pubDate>Wed, 15 Aug 2018 14:54:45 +0000</pubDate>
      <link>https://dev.to/wonism/create-your-own-blog-with-gatsby-45hh</link>
      <guid>https://dev.to/wonism/create-your-own-blog-with-gatsby-45hh</guid>
      <description>&lt;p&gt;&lt;a href="https://www.gatsbyjs.org/"&gt;Gatsby&lt;/a&gt; is a Static site generator. (There are so many kinds of generator like Jekyll(Ruby), Hexo(Node.js), Hugo(Go), etc.) Gatsby support PWA(Progressive Web App), Hot reloading, SSR(Server Side Rendering).&lt;br&gt;&lt;br&gt;
You can see more detailed in &lt;a href="https://www.gatsbyjs.org/features/"&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install Gatsby CLI and Gatsby Starter
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm i -g gatsby-cli
$ gatsby new &amp;lt;&amp;lt;BLOG_NAME&amp;gt;&amp;gt; https://github.com/wonism/gatsby-advanced-blog
$ cd &amp;lt;&amp;lt;BLOG_NAME&amp;gt;&amp;gt;
$ npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Basic structure of project
&lt;/h2&gt;

&lt;p&gt;The project has the following structure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── components
│   ├── ... # Many of shared sections
│   └── layout.jsx # general layout for page
├── constants
├── containers # to connect states to react component
├── html.jsx # page template for page
├── pages # pages of your web site
│   ├── 404.jsx
│   └── index.js
├── postComponents # react application that will be added in page
│   └── ...
├── resources # asset files
│   └── images
├── store # to use redux
│   ├── ...
│   └── index.js
├── templates # template for creating page with file system
│   └── ...
└── utils # utilities
    └── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a post
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir src/pages/&amp;lt;&amp;lt;DIRECTORY_NAME&amp;gt;&amp;gt;
$ touch src/pages/&amp;lt;&amp;lt;DIRECTORY_NAME&amp;gt;&amp;gt;/index.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These markdown files are referred by the &lt;code&gt;gatsby-source-filesystem&lt;/code&gt; and converted to HTML files by &lt;code&gt;gatsby-transformer-remark&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
These are called at build time. You can check this &lt;code&gt;createPages&lt;/code&gt; in &lt;code&gt;gatsby-node.js&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Caution
&lt;/h3&gt;

&lt;p&gt;There is a &lt;code&gt;.sample.md&lt;/code&gt; file in &lt;code&gt;&amp;lt;&amp;lt;PROJECT_ROOT&amp;gt;&amp;gt;/src/pages&lt;/code&gt;.&lt;br&gt;
If you delete this file, you can not get &lt;code&gt;category&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;, etc. in &lt;code&gt;frontmatter&lt;/code&gt; of GraphQL query.&lt;br&gt;&lt;br&gt;
The &lt;code&gt;.sample.md&lt;/code&gt; file serves as the dummy data and creates custom &lt;code&gt;frontmatter&lt;/code&gt; fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  The basic components of a markdown file
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;--------&lt;/span&gt;
path: "/hello-world/"
category: "Sample"
tags: ["tag", "should", "be", "array"]
title: "Hello, World!"
date: "2018-08-15T00:00:00.000Z"
&lt;span class="gh"&gt;summary: "You can create your own blog with Gatsby!"
--------
&lt;/span&gt;
Content of this page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; is a &lt;strong&gt;required&lt;/strong&gt; attribute to create a page. It must be unique.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;category&lt;/code&gt; allows you to create category pages and access to pages like &lt;code&gt;/categories/&amp;lt;&amp;lt;CATEGORY_NAME&amp;gt;&amp;gt;/&amp;lt;&amp;lt;PAGE_NUMBER&amp;gt;&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tags&lt;/code&gt; allows you to create tag pages and access to pages like &lt;code&gt;/tags/&amp;lt;&amp;lt;TAG_NAME&amp;gt;&amp;gt;/&amp;lt;&amp;lt;PAGE_NUMBER&amp;gt;&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;As you can see the name oof property. &lt;code&gt;title&lt;/code&gt; is the title of the page, and &lt;code&gt;summary&lt;/code&gt; is a summary of the page.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;date&lt;/code&gt; is the date the post was created, and posts are sorted based on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(You can more detailed information about the formatting in &lt;a href="https://github.com/jonschlinkert/gray-matter"&gt;gray-matter&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;Those will be called by &lt;code&gt;query&lt;/code&gt; in &lt;code&gt;src/templates/Post.jsx&lt;/code&gt;. and you can run the query directly on &lt;a href="http://localhost:8000/___graphql"&gt;http://localhost:8000/___graphql&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add image into post
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;images: ["(&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;&amp;gt;)PATH_TO/IMAGE"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use an absolute path including &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt;. or use a relative path relative to &lt;code&gt;src/resources&lt;/code&gt;.&lt;br&gt;
(On line 145 of&lt;code&gt;components/Post/index.jsx&lt;/code&gt;, the image is imported via &lt;code&gt;IF CONDITION ? &amp;lt;&amp;lt;image&amp;gt;&amp;gt; : '&amp;lt;&amp;lt;src/resources/${image}&amp;gt;&amp;gt;'&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add react application into post
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;--------&lt;/span&gt;
path: "/inject-app/"
category: "Sample"
tags: ["tag", "must", "be", "array"]
title: "Injecting React application"
date: "2018-08-15T00:00:00.000Z"
summary: "You can inject react application into post"
components: [{
  rootId: 'sample-component', # &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"sample-component"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; must be in contents
  fileName: 'sample', # this will render src/postComponents/sample/index.jsx
&lt;span class="gh"&gt;}]
--------
&lt;/span&gt;&lt;span class="p"&gt;
1.&lt;/span&gt; ...

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"sample-component"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;
2.&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put an object in the array. Object has to include the path to the file of the react application that is to be added and the ID of the tag to be rendered.&lt;br&gt;&lt;br&gt;
Then, in the middle of the article, add the tag with this ID where you want to insert the react application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add tweet into post
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;--------&lt;/span&gt;
path: "/inject-tweet/"
category: "Sample"
tags: ["tag", "must", "be", "array"]
title: "Injecting Tweet"
date: "2018-08-15T00:00:00.000Z"
summary: "You can inject tweet into post"
tweets: [{
  rootId: 'sample-tweet', # &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"sample-tweet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; must be in contents
  userId: 'twitter', # twitter user id
  tweetId: '977557540199456775', # tweet id
&lt;span class="gh"&gt;}]
--------
&lt;/span&gt;&lt;span class="p"&gt;
1.&lt;/span&gt; ...

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"sample-tweet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;
2.&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put an object in the array. Object has to include the tweet's ID and the author or the tweet and the ID of the tag to be rendered.&lt;br&gt;&lt;br&gt;
You can use it as you added the react application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add codes into post
&lt;/h3&gt;

&lt;p&gt;If you write the three back quote before and after the codes that you want to highlight, It will be highlighted by &lt;code&gt;gatsby-remark-prismjs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add portfolios
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir src/resources/&amp;lt;&amp;lt;DIRECTORY_NAME&amp;gt;&amp;gt;
$ touch src/resources/&amp;lt;&amp;lt;DIRECTORY_NAME&amp;gt;&amp;gt;/index.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;--------&lt;/span&gt;
type: "portfolio"
title: "Gatsby Advanced Blog"
date: "2018-08-15T00:00:00.000Z"
path: "/portfolios/portfolio-1/"
images: [
  "test-1/1.png",
  "test-1/2.png",
&lt;span class="gh"&gt;]
--------
&lt;/span&gt;
&lt;span class="gh"&gt;# Gatsby Advanced Blog&lt;/span&gt;

&lt;span class="gu"&gt;## What I did&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Develop Gatsby Advanced Blog

&lt;span class="gu"&gt;## Libraries / Tools&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ReactJS
&lt;span class="p"&gt;-&lt;/span&gt; Redux
&lt;span class="p"&gt;-&lt;/span&gt; Redux saga
&lt;span class="p"&gt;-&lt;/span&gt; ...

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Go to Web Site →&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/wonism/gatsby-advanced-blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; is a &lt;strong&gt;required&lt;/strong&gt; attribute to create a page. It must be unique.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; is a value that allows you to specify the format of the page, in this case it should be &lt;code&gt;portfolio&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt; is the title of the portfolio.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;images&lt;/code&gt; are the images you want to attach to the portfolio and have the same value as the post's. Images are rendered in the order they were added to the array.&lt;/li&gt;
&lt;li&gt;Portfolios are sorted based on the &lt;code&gt;data&lt;/code&gt;. Give a bigger value to the portfolio to show first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Portfolios will be shown one the portfolio page. and if there are more than 4, they will be shown on the home page.&lt;br&gt;&lt;br&gt;
(You can see it in &lt;code&gt;src/components/Home&lt;/code&gt; and modify how it is rendered.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Add resume
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;--------&lt;/span&gt;
type: "resume"
title: "Resume"
date: "2000-01-01T00:00:00.000Z"
&lt;span class="gh"&gt;path: "/resume/"
--------
&lt;/span&gt;
&lt;span class="gu"&gt;## Experience&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Engineer at OOO ∙ 2000. 01 ~ Present
&lt;span class="p"&gt;  -&lt;/span&gt; Develop something
&lt;span class="p"&gt;  -&lt;/span&gt; Maintain something

&lt;span class="gu"&gt;## Education&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; B.S. in Computer Science Engineering at OOO
&lt;span class="p"&gt;  -&lt;/span&gt; 2000. 01 ~ 2000. 01

&lt;span class="gu"&gt;## Projects&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Gatsby Advanced Blog (https://github.com/wonism/gatsby-advanced-blog) ∙ 2000. 01 ~ Present
&lt;span class="p"&gt;  -&lt;/span&gt; Integrate Redux
&lt;span class="p"&gt;    -&lt;/span&gt; Use Redux, Redux Saga, Reselect...

&lt;span class="gu"&gt;## Skills&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; JavaScript
&lt;span class="p"&gt;  -&lt;/span&gt; ES2015+
&lt;span class="p"&gt;  -&lt;/span&gt; ReactJS
&lt;span class="p"&gt;  -&lt;/span&gt; Lodash
&lt;span class="p"&gt;-&lt;/span&gt; CSS
&lt;span class="p"&gt;  -&lt;/span&gt; SASS
&lt;span class="p"&gt;  -&lt;/span&gt; Less
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; is a &lt;strong&gt;required&lt;/strong&gt; attribute to create a page. It must be unique.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;type&lt;/code&gt; is a value that allows you to specify the format of the page, in this case it should be &lt;code&gt;portfolio&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On the right side of the GNB, you can search posts by title, summary, tag, category, etc. of the post.&lt;/li&gt;
&lt;li&gt;When you add codes in markdown, a button will be created automatically. If user clicks the button, user can copy the codes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;You can build the application with &lt;code&gt;npm run build&lt;/code&gt;.&lt;br&gt;
Then you can distribute it where you want. such as &lt;a href="https://pages.github.com/"&gt;Github Page&lt;/a&gt;, &lt;a href="https://aws.amazon.com/s3"&gt;AWS S3&lt;/a&gt; or &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can see this article on this &lt;a href="https://wonism.github.io/create-blog-with-gatsby-en/"&gt;link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>redux</category>
      <category>gatsby</category>
    </item>
    <item>
      <title>New react boilerplate with saga, selector, emotion, ssr etc...</title>
      <dc:creator>김재원</dc:creator>
      <pubDate>Sat, 02 Jun 2018 15:42:38 +0000</pubDate>
      <link>https://dev.to/wonism/new-react-boilerplate-with-saga-selector-emotion-ssr-etc-16mn</link>
      <guid>https://dev.to/wonism/new-react-boilerplate-with-saga-selector-emotion-ssr-etc-16mn</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/wonism/reacteum"&gt;Reacteum&lt;/a&gt; supports these.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redux (design with ducks modula redux style)&lt;/li&gt;
&lt;li&gt;Asynchronous redux with redux-saga&lt;/li&gt;
&lt;li&gt;Selectors pattern with reselector&lt;/li&gt;
&lt;li&gt;CSS in JS with react-emotion&lt;/li&gt;
&lt;li&gt;Client side routing with react-router-dom&lt;/li&gt;
&lt;li&gt;Code splitting&lt;/li&gt;
&lt;li&gt;Handing meta tags with react-helmet&lt;/li&gt;
&lt;li&gt;Server side rendering&lt;/li&gt;
&lt;li&gt;Test with jest&lt;/li&gt;
&lt;li&gt;Formatting codes with eslint &amp;amp; prettier&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>redux</category>
    </item>
    <item>
      <title>Segment integrations with redux on react and react-native</title>
      <dc:creator>김재원</dc:creator>
      <pubDate>Sat, 19 May 2018 14:01:51 +0000</pubDate>
      <link>https://dev.to/wonism/segment-integrations-with-redux-on-react-and-react-native-47o0</link>
      <guid>https://dev.to/wonism/segment-integrations-with-redux-on-react-and-react-native-47o0</guid>
      <description>&lt;p&gt;Does anyone use segment for data analytics?&lt;br&gt;
Segment is the infrastructure for gathering customer data.&lt;br&gt;
And It supports so many analytics tools like Google Analytics, Mixpanel, Facebook Pixel and etc..&lt;/p&gt;

&lt;p&gt;And &lt;a href="https://github.com/wonism/redux-segment-node"&gt;redux-segment-node&lt;/a&gt; is a redux middleware to help developer to use segment easily.&lt;/p&gt;

&lt;p&gt;Now, Let's take a look how to use this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm i -S redux-segment-node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# replace the `key` with your `Segment API key` in `config.json`
$ npm run dev
# and visit localhost:7777
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// import { applyMiddleware, createStore } from 'redux';&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;createSegmentTracker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;redux-segment-node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;segmentMiddleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createSegmentTracker&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;flushAfter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;middleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;applyMiddleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;segmentMiddleware&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// const store = createStore(/* ... */);&lt;/span&gt;

&lt;span class="c1"&gt;// identify (recommended: pass `userId` in `eventPayload`)&lt;/span&gt;
&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SIGN_IN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;identify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;eventPayload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UUID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// track (required: pass `event` in `eventPayload`)&lt;/span&gt;
&lt;span class="c1"&gt;// If you pass the `signout` or `logout` as an `event` in `track` type,&lt;/span&gt;
&lt;span class="c1"&gt;// The `userId` will be removed.&lt;/span&gt;
&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CLICK_CTA_BUTTON&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;track&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;eventPayload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Click CTA Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// page (recommended: pass `name` in `eventPayload`)&lt;/span&gt;
&lt;span class="c1"&gt;// screen (similar with `page`)&lt;/span&gt;
&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;VIEW_PAGE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;page&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// or 'screen'&lt;/span&gt;
    &lt;span class="na"&gt;eventPayload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LANDING_PAGE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// group (required: pass `groupId` in `eventPayload`)&lt;/span&gt;
&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GROUP&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;group&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;eventPayload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UUID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// alias (required: pass `userId` in `eventPayload`)&lt;/span&gt;
&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ALIAS_USER&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alias&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;eventPayload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NEW_UUID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="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;
  
  
  Configuration
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;createSegmentTracker arguments&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;property&lt;/th&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;remark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;key&lt;/td&gt;
&lt;td&gt;string(required)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;platform&lt;/td&gt;
&lt;td&gt;string(optional)&lt;/td&gt;
&lt;td&gt;one of [&lt;code&gt;android&lt;/code&gt;, &lt;code&gt;ios&lt;/code&gt;] or &lt;code&gt;undefined&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;host&lt;/td&gt;
&lt;td&gt;string(optional)&lt;/td&gt;
&lt;td&gt;Host where reports will be sent. Useful for debug.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flushAt&lt;/td&gt;
&lt;td&gt;number(optional)&lt;/td&gt;
&lt;td&gt;The number of messages to enqueue before flushing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flushAfter&lt;/td&gt;
&lt;td&gt;number(optional)&lt;/td&gt;
&lt;td&gt;The number of milliseconds to wait before flushing the queue automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Event Types (Segment API Specification)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/identify/"&gt;&lt;code&gt;identify&lt;/code&gt;&lt;/a&gt;: Can tie an user to their action and record traits about them.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/track/"&gt;&lt;code&gt;track&lt;/code&gt;&lt;/a&gt;: Can track any actions that users perform.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/page/"&gt;&lt;code&gt;page&lt;/code&gt;&lt;/a&gt;: Can record the page that users are stay in.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/screen/"&gt;&lt;code&gt;screen&lt;/code&gt;&lt;/a&gt;: Can record the screen that users are stay in. (for the mobile application)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/group/"&gt;&lt;code&gt;group&lt;/code&gt;&lt;/a&gt;: Can associate the individual users with a group.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://segment.com/docs/spec/alias/"&gt;&lt;code&gt;alias&lt;/code&gt;&lt;/a&gt;: Can merge two user identities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documentation for Segment
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://segment.com/libraries/node"&gt;https://segment.com/libraries/node&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>redux</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>I created a gatsby starter for blog with powerful features.</title>
      <dc:creator>김재원</dc:creator>
      <pubDate>Thu, 05 Apr 2018 15:25:45 +0000</pubDate>
      <link>https://dev.to/wonism/i-created-a-gatsby-starter-for-blog-with-powerful-features-3mab</link>
      <guid>https://dev.to/wonism/i-created-a-gatsby-starter-for-blog-with-powerful-features-3mab</guid>
      <description>&lt;p&gt;Many JavaScript developers are using &lt;code&gt;hexo&lt;/code&gt; or &lt;code&gt;jekyll&lt;/code&gt; for blog.&lt;br&gt;
But, I'd like to recommend you to use gatsby if you're interested in React JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wonism/gatsby-advanced-blog"&gt;https://github.com/wonism/gatsby-advanced-blog&lt;/a&gt;&lt;br&gt;
This starter has been implemented with redux, redux-saga, styled-components and etc.&lt;/p&gt;

&lt;p&gt;Also, You can see the demo page on this link.&lt;br&gt;
&lt;a href="https://kind-cori-836fe1.netlify.com"&gt;https://kind-cori-836fe1.netlify.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any PRs are welcome.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gatsby</category>
      <category>react</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
