<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Gmifly Blog</title>
  <icon>https://blog.gmifly.tw/icon.png</icon>
  
  <link href="/feed.xml" rel="self"/>
  
  <link href="https://blog.gmifly.tw/"/>
  <updated>2021-04-26T17:41:31.713Z</updated>
  <id>https://blog.gmifly.tw/</id>
  
  <author>
    <name>Gmifly</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>優化迴圈 Query DB，如何提前確保 generated token unique</title>
    <link href="https://blog.gmifly.tw/2021/04/27/%E5%84%AA%E5%8C%96%E8%BF%B4%E5%9C%88-Query-DB%EF%BC%8C%E5%A6%82%E4%BD%95%E6%8F%90%E5%89%8D%E7%A2%BA%E4%BF%9D-generated-token-unique/"/>
    <id>https://blog.gmifly.tw/2021/04/27/%E5%84%AA%E5%8C%96%E8%BF%B4%E5%9C%88-Query-DB%EF%BC%8C%E5%A6%82%E4%BD%95%E6%8F%90%E5%89%8D%E7%A2%BA%E4%BF%9D-generated-token-unique/</id>
    <published>2021-04-26T17:30:44.000Z</published>
    <updated>2021-04-26T17:41:31.713Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;建立一筆訂單時，我們會給予一串 serial number，作為訂單唯一識別。我們會寫出如下的代碼：&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# app/models/model_name.rb&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-class&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ModelName&lt;/span&gt; &amp;lt; ActiveRecord::Base&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;include&lt;/span&gt; Tokenable&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# app/models/concerns/tokenable.rb&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-class&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Tokenable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  extend ActiveSupport::Concern&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  included &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    before_create &lt;span class=&quot;hljs-symbol&quot;&gt;:generate_token&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  protected&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;generate_token&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;self&lt;/span&gt;.token = loop &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      random_token = SecureRandom.urlsafe_base64(&lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt;, &lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;hljs-keyword&quot;&gt;break&lt;/span&gt; random_token &lt;span class=&quot;hljs-keyword&quot;&gt;unless&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt;.exists?(&lt;span class=&quot;hljs-symbol&quot;&gt;token:&lt;/span&gt; random_token)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;Query 是使用搜尋效益較高的 exists &lt;/p&gt;
    
    </summary>
    
    
      <category term="Databases" scheme="https://blog.gmifly.tw/categories/Databases/"/>
    
      <category term="Redis" scheme="https://blog.gmifly.tw/categories/Databases/Redis/"/>
    
    
      <category term="databases" scheme="https://blog.gmifly.tw/tags/databases/"/>
    
      <category term="redis" scheme="https://blog.gmifly.tw/tags/redis/"/>
    
      <category term="bloomfilter" scheme="https://blog.gmifly.tw/tags/bloomfilter/"/>
    
  </entry>
  
  <entry>
    <title>[Mysql] Mysql Incorrect string value problem</title>
    <link href="https://blog.gmifly.tw/2020/07/01/Mysql-Mysql-Incorrect-string-value-problem/"/>
    <id>https://blog.gmifly.tw/2020/07/01/Mysql-Mysql-Incorrect-string-value-problem/</id>
    <published>2020-07-01T14:08:12.000Z</published>
    <updated>2020-10-06T17:35:04.000Z</updated>
    
    <summary type="html">
    
      &lt;figure class=&quot;highlight plain hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;Mysql Incorrect string value &amp;apos;\xE7\xA8\x8B\xE5\xBA\x8F...&amp;apos; for column &amp;apos;course&amp;apos; at row 1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;同：&lt;a href=&quot;https://blog.csdn.net/ch717828/article/details/41357431&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Mysql 插入中文错误：Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F…’ for column ‘course’ at row 1&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;解決方式&quot;&gt;&lt;a href=&quot;#解決方式&quot; class=&quot;headerlink&quot; title=&quot;解決方式&quot;&gt;&lt;/a&gt;解決方式&lt;/h2&gt;&lt;p&gt;如果資料庫已經創建，則先刪除。&lt;/p&gt;
&lt;figure class=&quot;highlight plain hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mysql&amp;gt; show databases;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;mysql&amp;gt; drop database wrong_database;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;再重新創建，並以 &lt;code&gt;utf8mb4&lt;/code&gt; 為預設&lt;/p&gt;
&lt;figure class=&quot;highlight plain hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;mysql&amp;gt; CREATE DATABASE test_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="Databases" scheme="https://blog.gmifly.tw/categories/Databases/"/>
    
      <category term="Mysql" scheme="https://blog.gmifly.tw/categories/Databases/Mysql/"/>
    
    
      <category term="databases" scheme="https://blog.gmifly.tw/tags/databases/"/>
    
      <category term="mysql" scheme="https://blog.gmifly.tw/tags/mysql/"/>
    
      <category term="utf8mb4" scheme="https://blog.gmifly.tw/tags/utf8mb4/"/>
    
  </entry>
  
  <entry>
    <title>[Mysql] 降版或使用 Mariadb</title>
    <link href="https://blog.gmifly.tw/2020/06/30/Mysql-%E9%99%8D%E7%89%88%E6%88%96%E4%BD%BF%E7%94%A8-Mariadb/"/>
    <id>https://blog.gmifly.tw/2020/06/30/Mysql-%E9%99%8D%E7%89%88%E6%88%96%E4%BD%BF%E7%94%A8-Mariadb/</id>
    <published>2020-06-30T04:54:55.000Z</published>
    <updated>2020-06-30T19:58:51.385Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/media/15934195614596/15934519913701.jpg&quot; alt&gt;&lt;/p&gt;
&lt;p&gt;當一開始使用 &lt;code&gt;brew install mysql&lt;/code&gt; 你就悲劇了&lt;br&gt;會下載最新版並開始安裝&lt;br&gt;以下指令得知當前下載哪一最新版本：&lt;/p&gt;
&lt;figure class=&quot;highlight plain hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ brew info mysql&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;gt;&amp;gt; mysql: stable 8.0.19 (bottled)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;gt;&amp;gt; ....&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;降版的不歸路上有一種「壞路不能走的體悟」&lt;/p&gt;
    
    </summary>
    
    
      <category term="Databases" scheme="https://blog.gmifly.tw/categories/Databases/"/>
    
      <category term="Mysql" scheme="https://blog.gmifly.tw/categories/Databases/Mysql/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="version" scheme="https://blog.gmifly.tw/tags/version/"/>
    
      <category term="databases" scheme="https://blog.gmifly.tw/tags/databases/"/>
    
      <category term="mysql" scheme="https://blog.gmifly.tw/tags/mysql/"/>
    
      <category term="install" scheme="https://blog.gmifly.tw/tags/install/"/>
    
      <category term="mysql@5.7" scheme="https://blog.gmifly.tw/tags/mysql-5-7/"/>
    
      <category term="mariadb" scheme="https://blog.gmifly.tw/tags/mariadb/"/>
    
  </entry>
  
  <entry>
    <title>從數十億垃圾郵件列表中，判斷某邮箱是否為垃圾邮箱</title>
    <link href="https://blog.gmifly.tw/2020/05/08/%E5%BE%9E%E6%95%B8%E5%8D%81%E5%84%84%E5%9E%83%E5%9C%BE%E9%83%B5%E4%BB%B6%E5%88%97%E8%A1%A8%E4%B8%AD%EF%BC%8C%E5%88%A4%E6%96%B7%E6%9F%90%E9%82%AE%E7%AE%B1%E6%98%AF%E5%90%A6%E7%82%BA%E5%9E%83%E5%9C%BE%E9%82%AE%E7%AE%B1/"/>
    <id>https://blog.gmifly.tw/2020/05/08/%E5%BE%9E%E6%95%B8%E5%8D%81%E5%84%84%E5%9E%83%E5%9C%BE%E9%83%B5%E4%BB%B6%E5%88%97%E8%A1%A8%E4%B8%AD%EF%BC%8C%E5%88%A4%E6%96%B7%E6%9F%90%E9%82%AE%E7%AE%B1%E6%98%AF%E5%90%A6%E7%82%BA%E5%9E%83%E5%9C%BE%E9%82%AE%E7%AE%B1/</id>
    <published>2020-05-07T23:07:59.000Z</published>
    <updated>2021-04-26T17:31:25.363Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;在很多場景上，常需要判斷 A 是否在此集合裡面。&lt;/p&gt;
&lt;p&gt;「某 A 郵箱，判斷是否在數十億垃圾郵箱列表中，來達到防止垃圾郵箱的訪問、註冊等等。」&lt;/p&gt;
&lt;p&gt;如果我們在查找數據庫之前有做數據緩存，像是 redis 緩存之類的，假設黑客惡意大量訪問、發起大量請求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不僅會造成緩存掛掉，還有數據庫掛掉&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那就是知名的穿庫、緩存穿透問題。&lt;/p&gt;
    
    </summary>
    
    
      <category term="Databases" scheme="https://blog.gmifly.tw/categories/Databases/"/>
    
      <category term="Bloomfilter" scheme="https://blog.gmifly.tw/categories/Databases/Bloomfilter/"/>
    
    
      <category term="databases" scheme="https://blog.gmifly.tw/tags/databases/"/>
    
      <category term="bloomfilter" scheme="https://blog.gmifly.tw/tags/bloomfilter/"/>
    
  </entry>
  
  <entry>
    <title>什麼是建立索引?</title>
    <link href="https://blog.gmifly.tw/2020/02/23/%E4%BB%80%E9%BA%BC%E6%98%AF%E5%BB%BA%E7%AB%8B%E7%B4%A2%E5%BC%95/"/>
    <id>https://blog.gmifly.tw/2020/02/23/%E4%BB%80%E9%BA%BC%E6%98%AF%E5%BB%BA%E7%AB%8B%E7%B4%A2%E5%BC%95/</id>
    <published>2020-02-22T19:04:28.000Z</published>
    <updated>2020-02-22T19:46:10.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;某次和朋友描述建立索引，覺得自己講得很模糊，決定做一份筆記。&lt;/p&gt;
&lt;p&gt;在資料庫當中&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;為了改進查詢效率，在資料量大的時候，可以透過建立索引讓資料庫加速查詢效率。&lt;/li&gt;
&lt;li&gt;如果沒有對資料表建立索引，將會使用 Full table scan (&lt;a href=&quot;https://en.wikipedia.org/wiki/Full_table_scan&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sequential scans&lt;/a&gt;) 來查詢資料。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;建立索引&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;簡單來說：『 一個數據庫中的索引就是一本書的目錄。』&lt;/li&gt;
&lt;li&gt;原理來說：『 額外在硬碟建立一張索引表，當作目錄，當進行資料庫查詢時，針對查詢條件在索引表尋找相對應的索引。再透過此索引指向實體資料。假如查詢條件不在索引表裡，就會對整個表做循序查詢。』&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="performance" scheme="https://blog.gmifly.tw/tags/performance/"/>
    
      <category term="PostgreSQL" scheme="https://blog.gmifly.tw/tags/PostgreSQL/"/>
    
      <category term="index" scheme="https://blog.gmifly.tw/tags/index/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 搞懂 ActiveRecord::Enum</title>
    <link href="https://blog.gmifly.tw/2019/12/03/Rails-%E6%90%9E%E6%87%82-ActiveRecord-Enum/"/>
    <id>https://blog.gmifly.tw/2019/12/03/Rails-%E6%90%9E%E6%87%82-ActiveRecord-Enum/</id>
    <published>2019-12-03T04:24:08.000Z</published>
    <updated>2019-12-03T07:10:09.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;來自-Ruby-china-精華帖&quot;&gt;&lt;a href=&quot;#來自-Ruby-china-精華帖&quot; class=&quot;headerlink&quot; title=&quot;來自 Ruby china 精華帖&quot;&gt;&lt;/a&gt;來自 Ruby china 精華帖&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://ruby-china.org/topics/28654&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;关于在 Rails Model 中使用 Enum (枚举) 的若干总结&lt;/a&gt;&lt;br&gt;在我使用 enum 時東找西找，挖掘一些坑&lt;br&gt;裡面提到枚舉這個詞，就是指 enum&lt;br&gt;看到該篇內容很精闢，提到很多想整理的重點&lt;br&gt;所以也筆記一份，至於詳情大家可以去看該篇文章&lt;/p&gt;
&lt;h2 id=&quot;Enum-就是-Rails-用來消滅魔鬼數字的工具。&quot;&gt;&lt;a href=&quot;#Enum-就是-Rails-用來消滅魔鬼數字的工具。&quot; class=&quot;headerlink&quot; title=&quot;Enum 就是 Rails 用來消滅魔鬼數字的工具。&quot;&gt;&lt;/a&gt;Enum 就是 Rails 用來消滅魔鬼數字的工具。&lt;/h2&gt;&lt;p&gt;代碼中，以數字方式去表示數據狀態，導致代碼可讀性被破壞，這樣的數字被稱為『 魔鬼數字 』。&lt;br&gt;官方說明 enum：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Declare an enum attribute where the values map to integers in the database, but can be queried by name.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;給數據庫中的整型字段聲明一個一一對應的 enum(枚舉) 屬性值，可以使用該字面作為查詢。字面&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="enum" scheme="https://blog.gmifly.tw/tags/enum/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 分辨 size vs length vs count</title>
    <link href="https://blog.gmifly.tw/2019/11/19/Rails-%E5%88%86%E8%BE%A8-size-vs-length-vs-count/"/>
    <id>https://blog.gmifly.tw/2019/11/19/Rails-%E5%88%86%E8%BE%A8-size-vs-length-vs-count/</id>
    <published>2019-11-19T12:01:30.000Z</published>
    <updated>2019-12-03T03:48:30.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;搞懂-size-length-count-之間的差別&quot;&gt;&lt;a href=&quot;#搞懂-size-length-count-之間的差別&quot; class=&quot;headerlink&quot; title=&quot;搞懂 size / length / count 之間的差別&quot;&gt;&lt;/a&gt;搞懂 size / length / count 之間的差別&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;/media/15741521008672/15741521890955.jpg&quot; alt=&quot;stackoverflow&quot;&gt;&lt;/p&gt;
&lt;p&gt;stackoverflow 上有這麼一段最佳留言&lt;br&gt;在每次遇到都很疑惑下，就實際測試並做個筆記&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="size" scheme="https://blog.gmifly.tw/tags/size/"/>
    
      <category term="length" scheme="https://blog.gmifly.tw/tags/length/"/>
    
      <category term="count" scheme="https://blog.gmifly.tw/tags/count/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] Benchmark to test ruby code performance</title>
    <link href="https://blog.gmifly.tw/2019/10/10/Rails-Benchmark-to-test-ruby-code-performance/"/>
    <id>https://blog.gmifly.tw/2019/10/10/Rails-Benchmark-to-test-ruby-code-performance/</id>
    <published>2019-10-10T05:01:39.000Z</published>
    <updated>2019-10-11T05:46:50.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;當兩個相近的方法，該選擇哪一種效能比較好？&lt;br&gt;一般開發者在網路上查到結果就照著使用，沒有特別理解佐證的過程&lt;br&gt;所以來分享佐證的好工具：&lt;br&gt;&lt;code&gt;benchmark&lt;/code&gt; - 為 Ruby Standard Library&lt;/p&gt;
&lt;h2 id=&quot;Benchmark-measure&quot;&gt;&lt;a href=&quot;#Benchmark-measure&quot; class=&quot;headerlink&quot; title=&quot;Benchmark.measure&quot;&gt;&lt;/a&gt;Benchmark.measure&lt;/h2&gt;&lt;p&gt;計算單獨的 ruby single block&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;create_object&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(n)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  n.times &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    Object.new&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&#39;benchmark&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;puts Benchmark.measure &amp;#123; create_object(&lt;span class=&quot;hljs-number&quot;&gt;10_000_000&lt;/span&gt;) &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;output:&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;    user     system      total        real&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1.270000&lt;/span&gt;   &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot;&gt;010000&lt;/span&gt;   &lt;span class=&quot;hljs-number&quot;&gt;1.280000&lt;/span&gt; (  &lt;span class=&quot;hljs-number&quot;&gt;1.272028&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="benchmark" scheme="https://blog.gmifly.tw/tags/benchmark/"/>
    
      <category term="performance" scheme="https://blog.gmifly.tw/tags/performance/"/>
    
  </entry>
  
  <entry>
    <title>[Javascript] Check if value exists in Array</title>
    <link href="https://blog.gmifly.tw/2019/10/10/Javascript-Check-if-value-exists-in-Array/"/>
    <id>https://blog.gmifly.tw/2019/10/10/Javascript-Check-if-value-exists-in-Array/</id>
    <published>2019-10-09T16:29:41.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;一般常見的需求像是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;當 array 找到此 value 时，即停止輸入新的 value 到數組裡&lt;/li&gt;
&lt;li&gt;當 array 包含特定 value 时，即執行某個 script&lt;/li&gt;
&lt;li&gt;等等不勝凡舉&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;rails 在處理 value 是否存在 array 裡很容易，運用 &lt;code&gt;include&lt;/code&gt; or &lt;code&gt;exists&lt;/code&gt;&lt;br&gt;而在 javascript 是怎麼檢查 value 是否存在 array 裡？&lt;/p&gt;
    
    </summary>
    
    
      <category term="Javascript" scheme="https://blog.gmifly.tw/categories/Javascript/"/>
    
      <category term="Es5" scheme="https://blog.gmifly.tw/categories/Javascript/Es5/"/>
    
    
      <category term="javascript" scheme="https://blog.gmifly.tw/tags/javascript/"/>
    
      <category term="es6" scheme="https://blog.gmifly.tw/tags/es6/"/>
    
      <category term="array" scheme="https://blog.gmifly.tw/tags/array/"/>
    
      <category term="exists" scheme="https://blog.gmifly.tw/tags/exists/"/>
    
      <category term="es5" scheme="https://blog.gmifly.tw/tags/es5/"/>
    
  </entry>
  
  <entry>
    <title>[Shell Scripts] Write my first shell script</title>
    <link href="https://blog.gmifly.tw/2019/10/06/Shell-Script-Write-my-first-shell-script/"/>
    <id>https://blog.gmifly.tw/2019/10/06/Shell-Script-Write-my-first-shell-script/</id>
    <published>2019-10-06T08:06:40.000Z</published>
    <updated>2019-12-09T08:55:34.000Z</updated>
    
    <summary type="html">
    
      &lt;ol&gt;
&lt;li&gt;建立第一個 shell script&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight bash hljs&quot;&gt;&lt;figcaption&gt;&lt;span&gt;terminal&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;touch echo.sh&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;修改 &lt;code&gt;echo.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight bash hljs&quot;&gt;&lt;figcaption&gt;&lt;span&gt;echo.sh&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Gmifly Blog is great&quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="Shell" scheme="https://blog.gmifly.tw/categories/Shell/"/>
    
    
      <category term="aws" scheme="https://blog.gmifly.tw/tags/aws/"/>
    
      <category term="shell-script" scheme="https://blog.gmifly.tw/tags/shell-script/"/>
    
      <category term="hexo" scheme="https://blog.gmifly.tw/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 真得瞭解 Active Record Lazy loading 嗎？</title>
    <link href="https://blog.gmifly.tw/2019/08/19/Rails-Active-Record-Lazy-loading/"/>
    <id>https://blog.gmifly.tw/2019/08/19/Rails-Active-Record-Lazy-loading/</id>
    <published>2019-08-19T05:01:32.000Z</published>
    <updated>2019-11-19T11:49:26.000Z</updated>
    
    <summary type="html">
    
      &lt;blockquote&gt;
&lt;p&gt;If inherit active record , use instance to catch value will has lazy loading&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以在 Controller or Model 都會有效果&lt;br&gt;所以宣告 instance value 不會有 sql 查詢才是&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;@account  = current_user.account&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;在 &lt;code&gt;@account&lt;/code&gt; 被頁面調用时，才會執行 &lt;code&gt;sql&lt;/code&gt; 去查 &lt;code&gt;Account table&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;@account.balance&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;以上我們的認知是没有錯的，可以&lt;a href=&quot;https://rubyinrails.com/2014/01/08/what-is-lazy-loading-in-rails/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;参考這篇&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="ruby" scheme="https://blog.gmifly.tw/tags/ruby/"/>
    
      <category term="lazy-loading" scheme="https://blog.gmifly.tw/tags/lazy-loading/"/>
    
      <category term="instance" scheme="https://blog.gmifly.tw/tags/instance/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] rollback migration version</title>
    <link href="https://blog.gmifly.tw/2019/05/10/Rails-rollback-migration-version/"/>
    <id>https://blog.gmifly.tw/2019/05/10/Rails-rollback-migration-version/</id>
    <published>2019-05-10T03:34:32.000Z</published>
    <updated>2019-11-19T11:49:26.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;遇到-migration-進退兩難&quot;&gt;&lt;a href=&quot;#遇到-migration-進退兩難&quot; class=&quot;headerlink&quot; title=&quot;遇到 migration 進退兩難&quot;&gt;&lt;/a&gt;遇到 migration 進退兩難&lt;/h2&gt;&lt;p&gt;在 localhost 或者 staging 已经部属完 migration&lt;br&gt;而當前处在错误的版本，爾後又继续建立 migrate file，中間存在很多的 migration versions&lt;br&gt;导致最後沒辦法前進 &lt;code&gt;rake db:migrate&lt;/code&gt; ，也沒辦法後退 &lt;code&gt;rollback:migrate&lt;/code&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="migration" scheme="https://blog.gmifly.tw/tags/migration/"/>
    
      <category term="rollback" scheme="https://blog.gmifly.tw/tags/rollback/"/>
    
      <category term="version" scheme="https://blog.gmifly.tw/tags/version/"/>
    
      <category term="psql" scheme="https://blog.gmifly.tw/tags/psql/"/>
    
      <category term="pq" scheme="https://blog.gmifly.tw/tags/pq/"/>
    
  </entry>
  
  <entry>
    <title>[Rspec] FactoryGirl create vs build vs build_stubbed</title>
    <link href="https://blog.gmifly.tw/2019/04/14/Rspec-FactoryGirl-vs-create-vs-build-vs-build-stubbed/"/>
    <id>https://blog.gmifly.tw/2019/04/14/Rspec-FactoryGirl-vs-create-vs-build-vs-build-stubbed/</id>
    <published>2019-04-13T16:02:24.000Z</published>
    <updated>2019-11-19T11:49:26.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;根據上一篇「&lt;a href=&quot;/2019/03/28/Rspec-Efficiently-Speed-Rspec-test/&quot;&gt;測試效能最佳化&lt;/a&gt;」裡提到的一個概念&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;減少不必要的 DB 操作來提高測試效率&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而其中做了以下幾件事&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;每支測試檔案，只做一次 clear DB 確保測試檔案之間不互相影響&lt;/li&gt;
&lt;li&gt;可以使用一個數據進行測試，就不要每個 example 重複創建，減少 let and let! 大量使用實例變量&lt;/li&gt;
&lt;li&gt;情境判斷，盡可能使用 mock 數據方式，達到你要的測試結果&lt;/li&gt;
&lt;li&gt;使用 FactoryGirl.build orFactoryGirl.build_stubbed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;前 3 點，已經熟能生巧&lt;br&gt;第 4 點，是我一直抱著 try try 看去實做&lt;br&gt;而今天偶然發現這兩個差別，做筆記分享一下&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Rspec" scheme="https://blog.gmifly.tw/categories/Rails/Rspec/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="test" scheme="https://blog.gmifly.tw/tags/test/"/>
    
      <category term="speed" scheme="https://blog.gmifly.tw/tags/speed/"/>
    
      <category term="spec" scheme="https://blog.gmifly.tw/tags/spec/"/>
    
      <category term="factorygirl" scheme="https://blog.gmifly.tw/tags/factorygirl/"/>
    
      <category term="factorybot" scheme="https://blog.gmifly.tw/tags/factorybot/"/>
    
      <category term="build" scheme="https://blog.gmifly.tw/tags/build/"/>
    
      <category term="build_stubbed" scheme="https://blog.gmifly.tw/tags/build-stubbed/"/>
    
  </entry>
  
  <entry>
    <title>[Rspec] Efficiently Speed Rspec test</title>
    <link href="https://blog.gmifly.tw/2019/03/28/Rspec-Efficiently-Speed-Rspec-test/"/>
    <id>https://blog.gmifly.tw/2019/03/28/Rspec-Efficiently-Speed-Rspec-test/</id>
    <published>2019-03-27T16:17:12.000Z</published>
    <updated>2019-11-19T11:49:26.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;參考第一篇文章&quot;&gt;&lt;a href=&quot;#參考第一篇文章&quot; class=&quot;headerlink&quot; title=&quot;參考第一篇文章&quot;&gt;&lt;/a&gt;參考第一篇文章&lt;/h2&gt;&lt;p&gt;author has deleted&lt;br&gt;&lt;del&gt;&lt;a href=&quot;https://medium.com/the-code-review/5-rspec-tips-to-speed-up-testing-ruby-on-rails-projects-db8759a20869&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/the-code-review/5-rspec-tips-to-speed-up-testing-ruby-on-rails-projects-db8759a20869&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;前面 1 ~ 4 點，學習一些技巧和寫法，但是效能提升没特別提到&lt;br&gt;但文章的第 5 點 Efficiently load data records 得到几个方向&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use let, rather than let!&lt;/li&gt;
&lt;li&gt;One is to use before_all instead of before_each in a test file&lt;/li&gt;
&lt;li&gt;Another is to have a global variables file, which loads an instance of each record before all tests start&lt;/li&gt;
&lt;li&gt;Another approach is to user FactoryBot’s build_stubbed method&lt;/li&gt;&lt;/ol&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Rspec" scheme="https://blog.gmifly.tw/categories/Rails/Rspec/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="rspec" scheme="https://blog.gmifly.tw/tags/rspec/"/>
    
      <category term="test" scheme="https://blog.gmifly.tw/tags/test/"/>
    
      <category term="speed" scheme="https://blog.gmifly.tw/tags/speed/"/>
    
  </entry>
  
  <entry>
    <title>北漂三個月的審核</title>
    <link href="https://blog.gmifly.tw/2018/08/29/%E5%8C%97%E6%BC%82%E4%B8%89%E5%80%8B%E6%9C%88%E7%9A%84%E5%AF%A9%E6%A0%B8/"/>
    <id>https://blog.gmifly.tw/2018/08/29/%E5%8C%97%E6%BC%82%E4%B8%89%E5%80%8B%E6%9C%88%E7%9A%84%E5%AF%A9%E6%A0%B8/</id>
    <published>2018-08-28T17:00:56.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;人生轉捩點&quot;&gt;&lt;a href=&quot;#人生轉捩點&quot; class=&quot;headerlink&quot; title=&quot;人生轉捩點&quot;&gt;&lt;/a&gt;人生轉捩點&lt;/h2&gt;&lt;p&gt;永遠記得那一天．．．&lt;br&gt;line接收著一堆訊息，而我手機震動起了個大早&lt;br&gt;那時也正是美國時間的晚上&lt;br&gt;朋友告訴我意外的機會向老闆引薦，獲得一個面試，要我先準備好履歷&lt;br&gt;這次是真的機會來臨，當天聊完後，心臟蹦蹦跳，無比興奮&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;很久沒有這麼期待上班，和接下來的人生&lt;/li&gt;
&lt;li&gt;很久沒有刺激與活力，身體都不自主的打顫。&lt;/li&gt;
&lt;li&gt;我可以獲得一個全新的機會踏進，高效成長團隊！&lt;/li&gt;&lt;/ul&gt;
    
    </summary>
    
    
      <category term="人生感想" scheme="https://blog.gmifly.tw/categories/%E4%BA%BA%E7%94%9F%E6%84%9F%E6%83%B3/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="hangzhou" scheme="https://blog.gmifly.tw/tags/hangzhou/"/>
    
      <category term="feeling" scheme="https://blog.gmifly.tw/tags/feeling/"/>
    
      <category term="share" scheme="https://blog.gmifly.tw/tags/share/"/>
    
      <category term="learn" scheme="https://blog.gmifly.tw/tags/learn/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 掛載 AWS S3 圖床</title>
    <link href="https://blog.gmifly.tw/2018/06/20/Rails-%E6%8E%9B%E8%BC%89-AWS-S3-%E5%9C%96%E5%BA%8A/"/>
    <id>https://blog.gmifly.tw/2018/06/20/Rails-%E6%8E%9B%E8%BC%89-AWS-S3-%E5%9C%96%E5%BA%8A/</id>
    <published>2018-06-20T10:37:23.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;會建議先做好，密鑰安全的功能：&lt;br&gt;&lt;code&gt;figaro&lt;/code&gt; 安裝指南 參考這篇：&lt;a href=&quot;/2018/06/20/Rails-如何安裝-figaro&quot;&gt;[Rails] 如何安裝 figaro？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;以下會以純文字記錄步驟過程&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;步驟一，註冊帳號，需要綁定信用卡（完成請跳過）&quot;&gt;&lt;a href=&quot;#步驟一，註冊帳號，需要綁定信用卡（完成請跳過）&quot; class=&quot;headerlink&quot; title=&quot;步驟一，註冊帳號，需要綁定信用卡（完成請跳過）&quot;&gt;&lt;/a&gt;步驟一，註冊帳號，需要綁定信用卡（完成請跳過）&lt;/h2&gt;&lt;p&gt;註冊 AWS 的帳號（需要Visa或MasterCard）&lt;/p&gt;
&lt;h2 id=&quot;步驟二，根據AWS安全審查指南，創見IAM用戶&quot;&gt;&lt;a href=&quot;#步驟二，根據AWS安全審查指南，創見IAM用戶&quot; class=&quot;headerlink&quot; title=&quot;步驟二，根據AWS安全審查指南，創見IAM用戶&quot;&gt;&lt;/a&gt;步驟二，根據AWS安全審查指南，創見IAM用戶&lt;/h2&gt;&lt;p&gt;登入後左下角有 lanuage 可以轉換簡體 or 繁體&lt;/p&gt;
    
    </summary>
    
    
      <category term="AWS" scheme="https://blog.gmifly.tw/categories/AWS/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="figaro" scheme="https://blog.gmifly.tw/tags/figaro/"/>
    
      <category term="heroku" scheme="https://blog.gmifly.tw/tags/heroku/"/>
    
      <category term="aws" scheme="https://blog.gmifly.tw/tags/aws/"/>
    
      <category term="s3" scheme="https://blog.gmifly.tw/tags/s3/"/>
    
      <category term="bucket" scheme="https://blog.gmifly.tw/tags/bucket/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 如何安裝 figaro ?</title>
    <link href="https://blog.gmifly.tw/2018/06/20/Rails-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D-figaro/"/>
    <id>https://blog.gmifly.tw/2018/06/20/Rails-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D-figaro/</id>
    <published>2018-06-20T09:35:07.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;在 Rails 實做一個密鑰管理，簡單的不真實&lt;br&gt;使用 figaro 能一個指令就將機密信息同步到 heroku 上&lt;br&gt;如此一來密鑰也不會外洩。&lt;/p&gt;
&lt;h1 id=&quot;步驟一，安裝Gem&quot;&gt;&lt;a href=&quot;#步驟一，安裝Gem&quot; class=&quot;headerlink&quot; title=&quot;步驟一，安裝Gem&quot;&gt;&lt;/a&gt;步驟一，安裝Gem&lt;/h1&gt;&lt;p&gt;建議開一個 branch 實做完，再 rebase 到 master&lt;br&gt;新開 branch 並切換到該branch ：&lt;code&gt;git checkout -b aws&lt;/code&gt;&lt;br&gt;編輯 Gemfile&lt;/p&gt;
&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;figcaption&gt;&lt;span&gt;Gemfile&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;gem &lt;span class=&quot;hljs-string&quot;&gt;&#39;figaro&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;執行掛載 ：&lt;code&gt;bundle install&lt;/code&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="figaro" scheme="https://blog.gmifly.tw/tags/figaro/"/>
    
      <category term="heroku" scheme="https://blog.gmifly.tw/tags/heroku/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 分辨 symbol 和 string</title>
    <link href="https://blog.gmifly.tw/2018/06/18/Rails-%E5%88%86%E8%BE%A8-symbol-%E5%92%8C-string/"/>
    <id>https://blog.gmifly.tw/2018/06/18/Rails-%E5%88%86%E8%BE%A8-symbol-%E5%92%8C-string/</id>
    <published>2018-06-18T03:45:46.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;h2 id=&quot;遇到-Ruby-語法上，冒號-變數-？&quot;&gt;&lt;a href=&quot;#遇到-Ruby-語法上，冒號-變數-？&quot; class=&quot;headerlink&quot; title=&quot;遇到 Ruby 語法上，冒號 + 變數 ？&quot;&gt;&lt;/a&gt;遇到 &lt;code&gt;Ruby&lt;/code&gt; 語法上，&lt;code&gt;冒號&lt;/code&gt; + &lt;code&gt;變數&lt;/code&gt; ？&lt;/h2&gt;&lt;figure class=&quot;highlight ruby hljs&quot;&gt;&lt;figcaption&gt;&lt;span&gt;routes.rb&lt;/span&gt;&lt;/figcaption&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;resources &lt;span class=&quot;hljs-symbol&quot;&gt;:products&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  member &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    post &lt;span class=&quot;hljs-symbol&quot;&gt;:add_to_cart&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;p&gt;而&lt;code&gt;products&lt;/code&gt; 就叫做 &lt;code&gt;symbol&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;什麼是-Symbol&quot;&gt;&lt;a href=&quot;#什麼是-Symbol&quot; class=&quot;headerlink&quot; title=&quot;什麼是 Symbol?&quot;&gt;&lt;/a&gt;什麼是 Symbol?&lt;/h2&gt;&lt;p&gt;翻譯上，&lt;code&gt;符號象徵&lt;/code&gt;&lt;br&gt;可以直接說是，&lt;code&gt;不可改變的字串&lt;/code&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="symbol" scheme="https://blog.gmifly.tw/tags/symbol/"/>
    
      <category term="string" scheme="https://blog.gmifly.tw/tags/string/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 分辨 collection do 和 member do</title>
    <link href="https://blog.gmifly.tw/2018/06/17/Rails-%E5%88%86%E8%BE%A8-collection-do-%E5%92%8C-member-do/"/>
    <id>https://blog.gmifly.tw/2018/06/17/Rails-%E5%88%86%E8%BE%A8-collection-do-%E5%92%8C-member-do/</id>
    <published>2018-06-17T10:54:54.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;在 rails 的路由世界裡，有著非常厲害的的管理方式&lt;br&gt;當用戶端 &lt;code&gt;client&lt;/code&gt; 做了什麼任何 http 請求 request，請求動作像是post&lt;br&gt;這樣的一個行為&lt;br&gt;會透過 rails 的 &lt;code&gt;routes.rb&lt;/code&gt; 做一個解析&lt;br&gt;然後丟給 controller 去做判讀，再幫助使用，得到特定的畫面&lt;/p&gt;
&lt;h2 id=&quot;當你在-routes-裡面設定：&quot;&gt;&lt;a href=&quot;#當你在-routes-裡面設定：&quot; class=&quot;headerlink&quot; title=&quot;當你在 routes 裡面設定：&quot;&gt;&lt;/a&gt;當你在 routes 裡面設定：&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;resources ，就會自動添加 7 個action ，也同時擁有 8 個 path&lt;/li&gt;
&lt;li&gt;resource ，就會不會有 &lt;code&gt;#index&lt;/code&gt; 和 &lt;code&gt;#show&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;當我想要特殊路徑，或者一個特別操作處理？就得使用 &lt;code&gt;collection do&lt;/code&gt; , &lt;code&gt;member do&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果我想要創建一個，判別的後台路徑，那我可以用 &lt;code&gt;namespace&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="routes" scheme="https://blog.gmifly.tw/tags/routes/"/>
    
      <category term="resource" scheme="https://blog.gmifly.tw/tags/resource/"/>
    
      <category term="collection" scheme="https://blog.gmifly.tw/tags/collection/"/>
    
      <category term="member" scheme="https://blog.gmifly.tw/tags/member/"/>
    
  </entry>
  
  <entry>
    <title>[Rails] 分辨 cookie and session</title>
    <link href="https://blog.gmifly.tw/2018/06/17/Rails-%E5%88%86%E8%BE%A8-cookie-and-session/"/>
    <id>https://blog.gmifly.tw/2018/06/17/Rails-%E5%88%86%E8%BE%A8-cookie-and-session/</id>
    <published>2018-06-17T09:36:44.000Z</published>
    <updated>2019-10-11T03:26:49.000Z</updated>
    
    <summary type="html">
    
      &lt;p&gt;在技術面試上&lt;br&gt;常常被問到的問題之一，要你區分 Cookie 和 Session ?&lt;br&gt;一般只知道&lt;br&gt;Cookie 就是存在客戶端(Client)&lt;br&gt;Session 存在服務器端&lt;/p&gt;
&lt;h2 id=&quot;什麼是-cookie&quot;&gt;&lt;a href=&quot;#什麼是-cookie&quot; class=&quot;headerlink&quot; title=&quot;什麼是 cookie ?&quot;&gt;&lt;/a&gt;什麼是 cookie ?&lt;/h2&gt;&lt;p&gt;每次發起 Http 請求時，客户端都會發送相應的 cookie 信息到服務端。&lt;br&gt;它的过期时间可以任意设置，如果你不主动清除它，大部分會一直保留著&lt;br&gt;即便你關閉了電腦&lt;/p&gt;
    
    </summary>
    
    
      <category term="Rails" scheme="https://blog.gmifly.tw/categories/Rails/"/>
    
      <category term="Learn" scheme="https://blog.gmifly.tw/categories/Rails/Learn/"/>
    
    
      <category term="rails" scheme="https://blog.gmifly.tw/tags/rails/"/>
    
      <category term="cookie" scheme="https://blog.gmifly.tw/tags/cookie/"/>
    
      <category term="session" scheme="https://blog.gmifly.tw/tags/session/"/>
    
  </entry>
  
</feed>
