<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>juanito (Juanito Fatas)</title>
    <link>https://ruby-china.org/juanito</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Ruby China Emoji 改用 Twitter Emoji 了</title>
      <description>&lt;p&gt;大家有發現 Emoji 換成 &lt;a href="https://github.com/twitter/twemoji" rel="nofollow" target="_blank" title=""&gt;Twitter 的 Emoji 了嗎？&lt;/a&gt; &lt;img title=":tada:" alt="🎉" src="https://twemoji.ruby-china.com/2/svg/1f389.svg" class="twemoji"&gt; &lt;img title=":dancers:" alt="👯" src="https://twemoji.ruby-china.com/2/svg/1f46f.svg" class="twemoji"&gt; &lt;/p&gt;

&lt;p&gt;有啥新玩意呢？&lt;/p&gt;
&lt;h2 id="六種顏色"&gt;&lt;a href="http://unicode.org/reports/tr51/#Diversity" rel="nofollow" target="_blank" title=""&gt;六種顏色&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一種看起來黃黃的為基準（&lt;code&gt;:base_emoji:&lt;/code&gt;），有五種膚色可選（&lt;code&gt;:skin-tone-{2,3,4,5,6}:&lt;/code&gt;）。&lt;/p&gt;

&lt;p&gt;用法：&lt;code&gt;:base_emoji::skin-tone-N:&lt;/code&gt;，&lt;code&gt;N&lt;/code&gt; 可以是 2, 3, 4, 5, 6。&lt;/p&gt;

&lt;p&gt;&lt;img title=":santa:" alt="🎅" src="https://twemoji.ruby-china.com/2/svg/1f385.svg" class="twemoji"&gt; &lt;img title=":santa::skin-tone-2:" alt="🎅🏻" src="https://twemoji.ruby-china.com/2/svg/1f385-1f3fb.svg" class="twemoji"&gt; &lt;img title=":santa::skin-tone-3:" alt="🎅🏼" src="https://twemoji.ruby-china.com/2/svg/1f385-1f3fc.svg" class="twemoji"&gt; &lt;img title=":santa::skin-tone-4:" alt="🎅🏽" src="https://twemoji.ruby-china.com/2/svg/1f385-1f3fd.svg" class="twemoji"&gt; &lt;img title=":santa::skin-tone-5:" alt="🎅🏾" src="https://twemoji.ruby-china.com/2/svg/1f385-1f3fe.svg" class="twemoji"&gt; &lt;img title=":santa::skin-tone-6:" alt="🎅🏿" src="https://twemoji.ruby-china.com/2/svg/1f385-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":snowboarder:" alt="🏂" src="https://twemoji.ruby-china.com/2/svg/1f3c2.svg" class="twemoji"&gt; &lt;img title=":snowboarder::skin-tone-2:" alt="🏂🏻" src="https://twemoji.ruby-china.com/2/svg/1f3c2-1f3fb.svg" class="twemoji"&gt; &lt;img title=":snowboarder::skin-tone-3:" alt="🏂🏼" src="https://twemoji.ruby-china.com/2/svg/1f3c2-1f3fc.svg" class="twemoji"&gt; &lt;img title=":snowboarder::skin-tone-4:" alt="🏂🏽" src="https://twemoji.ruby-china.com/2/svg/1f3c2-1f3fd.svg" class="twemoji"&gt; &lt;img title=":snowboarder::skin-tone-5:" alt="🏂🏾" src="https://twemoji.ruby-china.com/2/svg/1f3c2-1f3fe.svg" class="twemoji"&gt; &lt;img title=":snowboarder::skin-tone-6:" alt="🏂🏿" src="https://twemoji.ruby-china.com/2/svg/1f3c2-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":runner:" alt="🏃" src="https://twemoji.ruby-china.com/2/svg/1f3c3.svg" class="twemoji"&gt; &lt;img title=":runner::skin-tone-2:" alt="🏃🏻" src="https://twemoji.ruby-china.com/2/svg/1f3c3-1f3fb.svg" class="twemoji"&gt; &lt;img title=":runner::skin-tone-3:" alt="🏃🏼" src="https://twemoji.ruby-china.com/2/svg/1f3c3-1f3fc.svg" class="twemoji"&gt; &lt;img title=":runner::skin-tone-4:" alt="🏃🏽" src="https://twemoji.ruby-china.com/2/svg/1f3c3-1f3fd.svg" class="twemoji"&gt; &lt;img title=":runner::skin-tone-5:" alt="🏃🏾" src="https://twemoji.ruby-china.com/2/svg/1f3c3-1f3fe.svg" class="twemoji"&gt; &lt;img title=":runner::skin-tone-6:" alt="🏃🏿" src="https://twemoji.ruby-china.com/2/svg/1f3c3-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":surfer:" alt="🏄" src="https://twemoji.ruby-china.com/2/svg/1f3c4.svg" class="twemoji"&gt; &lt;img title=":surfer::skin-tone-2:" alt="🏄🏻" src="https://twemoji.ruby-china.com/2/svg/1f3c4-1f3fb.svg" class="twemoji"&gt; &lt;img title=":surfer::skin-tone-3:" alt="🏄🏼" src="https://twemoji.ruby-china.com/2/svg/1f3c4-1f3fc.svg" class="twemoji"&gt; &lt;img title=":surfer::skin-tone-4:" alt="🏄🏽" src="https://twemoji.ruby-china.com/2/svg/1f3c4-1f3fd.svg" class="twemoji"&gt; &lt;img title=":surfer::skin-tone-5:" alt="🏄🏾" src="https://twemoji.ruby-china.com/2/svg/1f3c4-1f3fe.svg" class="twemoji"&gt; &lt;img title=":surfer::skin-tone-6:" alt="🏄🏿" src="https://twemoji.ruby-china.com/2/svg/1f3c4-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":horse_racing:" alt="🏇" src="https://twemoji.ruby-china.com/2/svg/1f3c7.svg" class="twemoji"&gt; &lt;img title=":horse_racing::skin-tone-2:" alt="🏇🏻" src="https://twemoji.ruby-china.com/2/svg/1f3c7-1f3fb.svg" class="twemoji"&gt; &lt;img title=":horse_racing::skin-tone-3:" alt="🏇🏼" src="https://twemoji.ruby-china.com/2/svg/1f3c7-1f3fc.svg" class="twemoji"&gt; &lt;img title=":horse_racing::skin-tone-4:" alt="🏇🏽" src="https://twemoji.ruby-china.com/2/svg/1f3c7-1f3fd.svg" class="twemoji"&gt; &lt;img title=":horse_racing::skin-tone-5:" alt="🏇🏾" src="https://twemoji.ruby-china.com/2/svg/1f3c7-1f3fe.svg" class="twemoji"&gt; &lt;img title=":horse_racing::skin-tone-6:" alt="🏇🏿" src="https://twemoji.ruby-china.com/2/svg/1f3c7-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":swimmer:" alt="🏊" src="https://twemoji.ruby-china.com/2/svg/1f3ca.svg" class="twemoji"&gt; &lt;img title=":swimmer::skin-tone-2:" alt="🏊🏻" src="https://twemoji.ruby-china.com/2/svg/1f3ca-1f3fb.svg" class="twemoji"&gt; &lt;img title=":swimmer::skin-tone-3:" alt="🏊🏼" src="https://twemoji.ruby-china.com/2/svg/1f3ca-1f3fc.svg" class="twemoji"&gt; &lt;img title=":swimmer::skin-tone-4:" alt="🏊🏽" src="https://twemoji.ruby-china.com/2/svg/1f3ca-1f3fd.svg" class="twemoji"&gt; &lt;img title=":swimmer::skin-tone-5:" alt="🏊🏾" src="https://twemoji.ruby-china.com/2/svg/1f3ca-1f3fe.svg" class="twemoji"&gt; &lt;img title=":swimmer::skin-tone-6:" alt="🏊🏿" src="https://twemoji.ruby-china.com/2/svg/1f3ca-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":weight_lifter:" alt="🏋" src="https://twemoji.ruby-china.com/2/svg/1f3cb.svg" class="twemoji"&gt; &lt;img title=":weight_lifter::skin-tone-2:" alt="🏋🏻" src="https://twemoji.ruby-china.com/2/svg/1f3cb-1f3fb.svg" class="twemoji"&gt; &lt;img title=":weight_lifter::skin-tone-3:" alt="🏋🏼" src="https://twemoji.ruby-china.com/2/svg/1f3cb-1f3fc.svg" class="twemoji"&gt; &lt;img title=":weight_lifter::skin-tone-4:" alt="🏋🏽" src="https://twemoji.ruby-china.com/2/svg/1f3cb-1f3fd.svg" class="twemoji"&gt; &lt;img title=":weight_lifter::skin-tone-5:" alt="🏋🏾" src="https://twemoji.ruby-china.com/2/svg/1f3cb-1f3fe.svg" class="twemoji"&gt; &lt;img title=":weight_lifter::skin-tone-6:" alt="🏋🏿" src="https://twemoji.ruby-china.com/2/svg/1f3cb-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":ear:" alt="👂" src="https://twemoji.ruby-china.com/2/svg/1f442.svg" class="twemoji"&gt; &lt;img title=":ear::skin-tone-2:" alt="👂🏻" src="https://twemoji.ruby-china.com/2/svg/1f442-1f3fb.svg" class="twemoji"&gt; &lt;img title=":ear::skin-tone-3:" alt="👂🏼" src="https://twemoji.ruby-china.com/2/svg/1f442-1f3fc.svg" class="twemoji"&gt; &lt;img title=":ear::skin-tone-4:" alt="👂🏽" src="https://twemoji.ruby-china.com/2/svg/1f442-1f3fd.svg" class="twemoji"&gt; &lt;img title=":ear::skin-tone-5:" alt="👂🏾" src="https://twemoji.ruby-china.com/2/svg/1f442-1f3fe.svg" class="twemoji"&gt; &lt;img title=":ear::skin-tone-6:" alt="👂🏿" src="https://twemoji.ruby-china.com/2/svg/1f442-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":nose:" alt="👃" src="https://twemoji.ruby-china.com/2/svg/1f443.svg" class="twemoji"&gt; &lt;img title=":nose::skin-tone-2:" alt="👃🏻" src="https://twemoji.ruby-china.com/2/svg/1f443-1f3fb.svg" class="twemoji"&gt; &lt;img title=":nose::skin-tone-3:" alt="👃🏼" src="https://twemoji.ruby-china.com/2/svg/1f443-1f3fc.svg" class="twemoji"&gt; &lt;img title=":nose::skin-tone-4:" alt="👃🏽" src="https://twemoji.ruby-china.com/2/svg/1f443-1f3fd.svg" class="twemoji"&gt; &lt;img title=":nose::skin-tone-5:" alt="👃🏾" src="https://twemoji.ruby-china.com/2/svg/1f443-1f3fe.svg" class="twemoji"&gt; &lt;img title=":nose::skin-tone-6:" alt="👃🏿" src="https://twemoji.ruby-china.com/2/svg/1f443-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":point_up_2:" alt="👆" src="https://twemoji.ruby-china.com/2/svg/1f446.svg" class="twemoji"&gt; &lt;img title=":point_up_2::skin-tone-2:" alt="👆🏻" src="https://twemoji.ruby-china.com/2/svg/1f446-1f3fb.svg" class="twemoji"&gt; &lt;img title=":point_up_2::skin-tone-3:" alt="👆🏼" src="https://twemoji.ruby-china.com/2/svg/1f446-1f3fc.svg" class="twemoji"&gt; &lt;img title=":point_up_2::skin-tone-4:" alt="👆🏽" src="https://twemoji.ruby-china.com/2/svg/1f446-1f3fd.svg" class="twemoji"&gt; &lt;img title=":point_up_2::skin-tone-5:" alt="👆🏾" src="https://twemoji.ruby-china.com/2/svg/1f446-1f3fe.svg" class="twemoji"&gt; &lt;img title=":point_up_2::skin-tone-6:" alt="👆🏿" src="https://twemoji.ruby-china.com/2/svg/1f446-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":point_down:" alt="👇" src="https://twemoji.ruby-china.com/2/svg/1f447.svg" class="twemoji"&gt; &lt;img title=":point_down::skin-tone-2:" alt="👇🏻" src="https://twemoji.ruby-china.com/2/svg/1f447-1f3fb.svg" class="twemoji"&gt; &lt;img title=":point_down::skin-tone-3:" alt="👇🏼" src="https://twemoji.ruby-china.com/2/svg/1f447-1f3fc.svg" class="twemoji"&gt; &lt;img title=":point_down::skin-tone-4:" alt="👇🏽" src="https://twemoji.ruby-china.com/2/svg/1f447-1f3fd.svg" class="twemoji"&gt; &lt;img title=":point_down::skin-tone-5:" alt="👇🏾" src="https://twemoji.ruby-china.com/2/svg/1f447-1f3fe.svg" class="twemoji"&gt; &lt;img title=":point_down::skin-tone-6:" alt="👇🏿" src="https://twemoji.ruby-china.com/2/svg/1f447-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":point_left:" alt="👈" src="https://twemoji.ruby-china.com/2/svg/1f448.svg" class="twemoji"&gt; &lt;img title=":point_left::skin-tone-2:" alt="👈🏻" src="https://twemoji.ruby-china.com/2/svg/1f448-1f3fb.svg" class="twemoji"&gt; &lt;img title=":point_left::skin-tone-3:" alt="👈🏼" src="https://twemoji.ruby-china.com/2/svg/1f448-1f3fc.svg" class="twemoji"&gt; &lt;img title=":point_left::skin-tone-4:" alt="👈🏽" src="https://twemoji.ruby-china.com/2/svg/1f448-1f3fd.svg" class="twemoji"&gt; &lt;img title=":point_left::skin-tone-5:" alt="👈🏾" src="https://twemoji.ruby-china.com/2/svg/1f448-1f3fe.svg" class="twemoji"&gt; &lt;img title=":point_left::skin-tone-6:" alt="👈🏿" src="https://twemoji.ruby-china.com/2/svg/1f448-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":point_right:" alt="👉" src="https://twemoji.ruby-china.com/2/svg/1f449.svg" class="twemoji"&gt; &lt;img title=":point_right::skin-tone-2:" alt="👉🏻" src="https://twemoji.ruby-china.com/2/svg/1f449-1f3fb.svg" class="twemoji"&gt; &lt;img title=":point_right::skin-tone-3:" alt="👉🏼" src="https://twemoji.ruby-china.com/2/svg/1f449-1f3fc.svg" class="twemoji"&gt; &lt;img title=":point_right::skin-tone-4:" alt="👉🏽" src="https://twemoji.ruby-china.com/2/svg/1f449-1f3fd.svg" class="twemoji"&gt; &lt;img title=":point_right::skin-tone-5:" alt="👉🏾" src="https://twemoji.ruby-china.com/2/svg/1f449-1f3fe.svg" class="twemoji"&gt; &lt;img title=":point_right::skin-tone-6:" alt="👉🏿" src="https://twemoji.ruby-china.com/2/svg/1f449-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":facepunch:" alt="👊" src="https://twemoji.ruby-china.com/2/svg/1f44a.svg" class="twemoji"&gt; &lt;img title=":facepunch::skin-tone-2:" alt="👊🏻" src="https://twemoji.ruby-china.com/2/svg/1f44a-1f3fb.svg" class="twemoji"&gt; &lt;img title=":facepunch::skin-tone-3:" alt="👊🏼" src="https://twemoji.ruby-china.com/2/svg/1f44a-1f3fc.svg" class="twemoji"&gt; &lt;img title=":facepunch::skin-tone-4:" alt="👊🏽" src="https://twemoji.ruby-china.com/2/svg/1f44a-1f3fd.svg" class="twemoji"&gt; &lt;img title=":facepunch::skin-tone-5:" alt="👊🏾" src="https://twemoji.ruby-china.com/2/svg/1f44a-1f3fe.svg" class="twemoji"&gt; &lt;img title=":facepunch::skin-tone-6:" alt="👊🏿" src="https://twemoji.ruby-china.com/2/svg/1f44a-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":wave:" alt="👋" src="https://twemoji.ruby-china.com/2/svg/1f44b.svg" class="twemoji"&gt; &lt;img title=":wave::skin-tone-2:" alt="👋🏻" src="https://twemoji.ruby-china.com/2/svg/1f44b-1f3fb.svg" class="twemoji"&gt; &lt;img title=":wave::skin-tone-3:" alt="👋🏼" src="https://twemoji.ruby-china.com/2/svg/1f44b-1f3fc.svg" class="twemoji"&gt; &lt;img title=":wave::skin-tone-4:" alt="👋🏽" src="https://twemoji.ruby-china.com/2/svg/1f44b-1f3fd.svg" class="twemoji"&gt; &lt;img title=":wave::skin-tone-5:" alt="👋🏾" src="https://twemoji.ruby-china.com/2/svg/1f44b-1f3fe.svg" class="twemoji"&gt; &lt;img title=":wave::skin-tone-6:" alt="👋🏿" src="https://twemoji.ruby-china.com/2/svg/1f44b-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":ok_hand:" alt="👌" src="https://twemoji.ruby-china.com/2/svg/1f44c.svg" class="twemoji"&gt; &lt;img title=":ok_hand::skin-tone-2:" alt="👌🏻" src="https://twemoji.ruby-china.com/2/svg/1f44c-1f3fb.svg" class="twemoji"&gt; &lt;img title=":ok_hand::skin-tone-3:" alt="👌🏼" src="https://twemoji.ruby-china.com/2/svg/1f44c-1f3fc.svg" class="twemoji"&gt; &lt;img title=":ok_hand::skin-tone-4:" alt="👌🏽" src="https://twemoji.ruby-china.com/2/svg/1f44c-1f3fd.svg" class="twemoji"&gt; &lt;img title=":ok_hand::skin-tone-5:" alt="👌🏾" src="https://twemoji.ruby-china.com/2/svg/1f44c-1f3fe.svg" class="twemoji"&gt; &lt;img title=":ok_hand::skin-tone-6:" alt="👌🏿" src="https://twemoji.ruby-china.com/2/svg/1f44c-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":+1:" alt="👍" src="https://twemoji.ruby-china.com/2/svg/1f44d.svg" class="twemoji"&gt; &lt;img title=":+1::skin-tone-2:" alt="👍🏻" src="https://twemoji.ruby-china.com/2/svg/1f44d-1f3fb.svg" class="twemoji"&gt; &lt;img title=":+1::skin-tone-3:" alt="👍🏼" src="https://twemoji.ruby-china.com/2/svg/1f44d-1f3fc.svg" class="twemoji"&gt; &lt;img title=":+1::skin-tone-4:" alt="👍🏽" src="https://twemoji.ruby-china.com/2/svg/1f44d-1f3fd.svg" class="twemoji"&gt; &lt;img title=":+1::skin-tone-5:" alt="👍🏾" src="https://twemoji.ruby-china.com/2/svg/1f44d-1f3fe.svg" class="twemoji"&gt; &lt;img title=":+1::skin-tone-6:" alt="👍🏿" src="https://twemoji.ruby-china.com/2/svg/1f44d-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":-1:" alt="👎" src="https://twemoji.ruby-china.com/2/svg/1f44e.svg" class="twemoji"&gt; &lt;img title=":-1::skin-tone-2:" alt="👎🏻" src="https://twemoji.ruby-china.com/2/svg/1f44e-1f3fb.svg" class="twemoji"&gt; &lt;img title=":-1::skin-tone-3:" alt="👎🏼" src="https://twemoji.ruby-china.com/2/svg/1f44e-1f3fc.svg" class="twemoji"&gt; &lt;img title=":-1::skin-tone-4:" alt="👎🏽" src="https://twemoji.ruby-china.com/2/svg/1f44e-1f3fd.svg" class="twemoji"&gt; &lt;img title=":-1::skin-tone-5:" alt="👎🏾" src="https://twemoji.ruby-china.com/2/svg/1f44e-1f3fe.svg" class="twemoji"&gt; &lt;img title=":-1::skin-tone-6:" alt="👎🏿" src="https://twemoji.ruby-china.com/2/svg/1f44e-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":clap:" alt="👏" src="https://twemoji.ruby-china.com/2/svg/1f44f.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-2:" alt="👏🏻" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fb.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-3:" alt="👏🏼" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fc.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-4:" alt="👏🏽" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fd.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-5:" alt="👏🏾" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fe.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-6:" alt="👏🏿" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":open_hands:" alt="👐" src="https://twemoji.ruby-china.com/2/svg/1f450.svg" class="twemoji"&gt; &lt;img title=":open_hands::skin-tone-2:" alt="👐🏻" src="https://twemoji.ruby-china.com/2/svg/1f450-1f3fb.svg" class="twemoji"&gt; &lt;img title=":open_hands::skin-tone-3:" alt="👐🏼" src="https://twemoji.ruby-china.com/2/svg/1f450-1f3fc.svg" class="twemoji"&gt; &lt;img title=":open_hands::skin-tone-4:" alt="👐🏽" src="https://twemoji.ruby-china.com/2/svg/1f450-1f3fd.svg" class="twemoji"&gt; &lt;img title=":open_hands::skin-tone-5:" alt="👐🏾" src="https://twemoji.ruby-china.com/2/svg/1f450-1f3fe.svg" class="twemoji"&gt; &lt;img title=":open_hands::skin-tone-6:" alt="👐🏿" src="https://twemoji.ruby-china.com/2/svg/1f450-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":boy:" alt="👦" src="https://twemoji.ruby-china.com/2/svg/1f466.svg" class="twemoji"&gt; &lt;img title=":boy::skin-tone-2:" alt="👦🏻" src="https://twemoji.ruby-china.com/2/svg/1f466-1f3fb.svg" class="twemoji"&gt; &lt;img title=":boy::skin-tone-3:" alt="👦🏼" src="https://twemoji.ruby-china.com/2/svg/1f466-1f3fc.svg" class="twemoji"&gt; &lt;img title=":boy::skin-tone-4:" alt="👦🏽" src="https://twemoji.ruby-china.com/2/svg/1f466-1f3fd.svg" class="twemoji"&gt; &lt;img title=":boy::skin-tone-5:" alt="👦🏾" src="https://twemoji.ruby-china.com/2/svg/1f466-1f3fe.svg" class="twemoji"&gt; &lt;img title=":boy::skin-tone-6:" alt="👦🏿" src="https://twemoji.ruby-china.com/2/svg/1f466-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":girl:" alt="👧" src="https://twemoji.ruby-china.com/2/svg/1f467.svg" class="twemoji"&gt; &lt;img title=":girl::skin-tone-2:" alt="👧🏻" src="https://twemoji.ruby-china.com/2/svg/1f467-1f3fb.svg" class="twemoji"&gt; &lt;img title=":girl::skin-tone-3:" alt="👧🏼" src="https://twemoji.ruby-china.com/2/svg/1f467-1f3fc.svg" class="twemoji"&gt; &lt;img title=":girl::skin-tone-4:" alt="👧🏽" src="https://twemoji.ruby-china.com/2/svg/1f467-1f3fd.svg" class="twemoji"&gt; &lt;img title=":girl::skin-tone-5:" alt="👧🏾" src="https://twemoji.ruby-china.com/2/svg/1f467-1f3fe.svg" class="twemoji"&gt; &lt;img title=":girl::skin-tone-6:" alt="👧🏿" src="https://twemoji.ruby-china.com/2/svg/1f467-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":man:" alt="👨" src="https://twemoji.ruby-china.com/2/svg/1f468.svg" class="twemoji"&gt; &lt;img title=":man::skin-tone-2:" alt="👨🏻" src="https://twemoji.ruby-china.com/2/svg/1f468-1f3fb.svg" class="twemoji"&gt; &lt;img title=":man::skin-tone-3:" alt="👨🏼" src="https://twemoji.ruby-china.com/2/svg/1f468-1f3fc.svg" class="twemoji"&gt; &lt;img title=":man::skin-tone-4:" alt="👨🏽" src="https://twemoji.ruby-china.com/2/svg/1f468-1f3fd.svg" class="twemoji"&gt; &lt;img title=":man::skin-tone-5:" alt="👨🏾" src="https://twemoji.ruby-china.com/2/svg/1f468-1f3fe.svg" class="twemoji"&gt; &lt;img title=":man::skin-tone-6:" alt="👨🏿" src="https://twemoji.ruby-china.com/2/svg/1f468-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":woman:" alt="👩" src="https://twemoji.ruby-china.com/2/svg/1f469.svg" class="twemoji"&gt; &lt;img title=":woman::skin-tone-2:" alt="👩🏻" src="https://twemoji.ruby-china.com/2/svg/1f469-1f3fb.svg" class="twemoji"&gt; &lt;img title=":woman::skin-tone-3:" alt="👩🏼" src="https://twemoji.ruby-china.com/2/svg/1f469-1f3fc.svg" class="twemoji"&gt; &lt;img title=":woman::skin-tone-4:" alt="👩🏽" src="https://twemoji.ruby-china.com/2/svg/1f469-1f3fd.svg" class="twemoji"&gt; &lt;img title=":woman::skin-tone-5:" alt="👩🏾" src="https://twemoji.ruby-china.com/2/svg/1f469-1f3fe.svg" class="twemoji"&gt; &lt;img title=":woman::skin-tone-6:" alt="👩🏿" src="https://twemoji.ruby-china.com/2/svg/1f469-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":cop:" alt="👮" src="https://twemoji.ruby-china.com/2/svg/1f46e.svg" class="twemoji"&gt; &lt;img title=":cop::skin-tone-2:" alt="👮🏻" src="https://twemoji.ruby-china.com/2/svg/1f46e-1f3fb.svg" class="twemoji"&gt; &lt;img title=":cop::skin-tone-3:" alt="👮🏼" src="https://twemoji.ruby-china.com/2/svg/1f46e-1f3fc.svg" class="twemoji"&gt; &lt;img title=":cop::skin-tone-4:" alt="👮🏽" src="https://twemoji.ruby-china.com/2/svg/1f46e-1f3fd.svg" class="twemoji"&gt; &lt;img title=":cop::skin-tone-5:" alt="👮🏾" src="https://twemoji.ruby-china.com/2/svg/1f46e-1f3fe.svg" class="twemoji"&gt; &lt;img title=":cop::skin-tone-6:" alt="👮🏿" src="https://twemoji.ruby-china.com/2/svg/1f46e-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":bride_with_veil:" alt="👰" src="https://twemoji.ruby-china.com/2/svg/1f470.svg" class="twemoji"&gt; &lt;img title=":bride_with_veil::skin-tone-2:" alt="👰🏻" src="https://twemoji.ruby-china.com/2/svg/1f470-1f3fb.svg" class="twemoji"&gt; &lt;img title=":bride_with_veil::skin-tone-3:" alt="👰🏼" src="https://twemoji.ruby-china.com/2/svg/1f470-1f3fc.svg" class="twemoji"&gt; &lt;img title=":bride_with_veil::skin-tone-4:" alt="👰🏽" src="https://twemoji.ruby-china.com/2/svg/1f470-1f3fd.svg" class="twemoji"&gt; &lt;img title=":bride_with_veil::skin-tone-5:" alt="👰🏾" src="https://twemoji.ruby-china.com/2/svg/1f470-1f3fe.svg" class="twemoji"&gt; &lt;img title=":bride_with_veil::skin-tone-6:" alt="👰🏿" src="https://twemoji.ruby-china.com/2/svg/1f470-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":person_with_blond_hair:" alt="👱" src="https://twemoji.ruby-china.com/2/svg/1f471.svg" class="twemoji"&gt; &lt;img title=":person_with_blond_hair::skin-tone-2:" alt="👱🏻" src="https://twemoji.ruby-china.com/2/svg/1f471-1f3fb.svg" class="twemoji"&gt; &lt;img title=":person_with_blond_hair::skin-tone-3:" alt="👱🏼" src="https://twemoji.ruby-china.com/2/svg/1f471-1f3fc.svg" class="twemoji"&gt; &lt;img title=":person_with_blond_hair::skin-tone-4:" alt="👱🏽" src="https://twemoji.ruby-china.com/2/svg/1f471-1f3fd.svg" class="twemoji"&gt; &lt;img title=":person_with_blond_hair::skin-tone-5:" alt="👱🏾" src="https://twemoji.ruby-china.com/2/svg/1f471-1f3fe.svg" class="twemoji"&gt; &lt;img title=":person_with_blond_hair::skin-tone-6:" alt="👱🏿" src="https://twemoji.ruby-china.com/2/svg/1f471-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":man_with_gua_pi_mao:" alt="👲" src="https://twemoji.ruby-china.com/2/svg/1f472.svg" class="twemoji"&gt; &lt;img title=":man_with_gua_pi_mao::skin-tone-2:" alt="👲🏻" src="https://twemoji.ruby-china.com/2/svg/1f472-1f3fb.svg" class="twemoji"&gt; &lt;img title=":man_with_gua_pi_mao::skin-tone-3:" alt="👲🏼" src="https://twemoji.ruby-china.com/2/svg/1f472-1f3fc.svg" class="twemoji"&gt; &lt;img title=":man_with_gua_pi_mao::skin-tone-4:" alt="👲🏽" src="https://twemoji.ruby-china.com/2/svg/1f472-1f3fd.svg" class="twemoji"&gt; &lt;img title=":man_with_gua_pi_mao::skin-tone-5:" alt="👲🏾" src="https://twemoji.ruby-china.com/2/svg/1f472-1f3fe.svg" class="twemoji"&gt; &lt;img title=":man_with_gua_pi_mao::skin-tone-6:" alt="👲🏿" src="https://twemoji.ruby-china.com/2/svg/1f472-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":man_with_turban:" alt="👳" src="https://twemoji.ruby-china.com/2/svg/1f473.svg" class="twemoji"&gt; &lt;img title=":man_with_turban::skin-tone-2:" alt="👳🏻" src="https://twemoji.ruby-china.com/2/svg/1f473-1f3fb.svg" class="twemoji"&gt; &lt;img title=":man_with_turban::skin-tone-3:" alt="👳🏼" src="https://twemoji.ruby-china.com/2/svg/1f473-1f3fc.svg" class="twemoji"&gt; &lt;img title=":man_with_turban::skin-tone-4:" alt="👳🏽" src="https://twemoji.ruby-china.com/2/svg/1f473-1f3fd.svg" class="twemoji"&gt; &lt;img title=":man_with_turban::skin-tone-5:" alt="👳🏾" src="https://twemoji.ruby-china.com/2/svg/1f473-1f3fe.svg" class="twemoji"&gt; &lt;img title=":man_with_turban::skin-tone-6:" alt="👳🏿" src="https://twemoji.ruby-china.com/2/svg/1f473-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":older_man:" alt="👴" src="https://twemoji.ruby-china.com/2/svg/1f474.svg" class="twemoji"&gt; &lt;img title=":older_man::skin-tone-2:" alt="👴🏻" src="https://twemoji.ruby-china.com/2/svg/1f474-1f3fb.svg" class="twemoji"&gt; &lt;img title=":older_man::skin-tone-3:" alt="👴🏼" src="https://twemoji.ruby-china.com/2/svg/1f474-1f3fc.svg" class="twemoji"&gt; &lt;img title=":older_man::skin-tone-4:" alt="👴🏽" src="https://twemoji.ruby-china.com/2/svg/1f474-1f3fd.svg" class="twemoji"&gt; &lt;img title=":older_man::skin-tone-5:" alt="👴🏾" src="https://twemoji.ruby-china.com/2/svg/1f474-1f3fe.svg" class="twemoji"&gt; &lt;img title=":older_man::skin-tone-6:" alt="👴🏿" src="https://twemoji.ruby-china.com/2/svg/1f474-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":older_woman:" alt="👵" src="https://twemoji.ruby-china.com/2/svg/1f475.svg" class="twemoji"&gt; &lt;img title=":older_woman::skin-tone-2:" alt="👵🏻" src="https://twemoji.ruby-china.com/2/svg/1f475-1f3fb.svg" class="twemoji"&gt; &lt;img title=":older_woman::skin-tone-3:" alt="👵🏼" src="https://twemoji.ruby-china.com/2/svg/1f475-1f3fc.svg" class="twemoji"&gt; &lt;img title=":older_woman::skin-tone-4:" alt="👵🏽" src="https://twemoji.ruby-china.com/2/svg/1f475-1f3fd.svg" class="twemoji"&gt; &lt;img title=":older_woman::skin-tone-5:" alt="👵🏾" src="https://twemoji.ruby-china.com/2/svg/1f475-1f3fe.svg" class="twemoji"&gt; &lt;img title=":older_woman::skin-tone-6:" alt="👵🏿" src="https://twemoji.ruby-china.com/2/svg/1f475-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":baby:" alt="👶" src="https://twemoji.ruby-china.com/2/svg/1f476.svg" class="twemoji"&gt; &lt;img title=":baby::skin-tone-2:" alt="👶🏻" src="https://twemoji.ruby-china.com/2/svg/1f476-1f3fb.svg" class="twemoji"&gt; &lt;img title=":baby::skin-tone-3:" alt="👶🏼" src="https://twemoji.ruby-china.com/2/svg/1f476-1f3fc.svg" class="twemoji"&gt; &lt;img title=":baby::skin-tone-4:" alt="👶🏽" src="https://twemoji.ruby-china.com/2/svg/1f476-1f3fd.svg" class="twemoji"&gt; &lt;img title=":baby::skin-tone-5:" alt="👶🏾" src="https://twemoji.ruby-china.com/2/svg/1f476-1f3fe.svg" class="twemoji"&gt; &lt;img title=":baby::skin-tone-6:" alt="👶🏿" src="https://twemoji.ruby-china.com/2/svg/1f476-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":construction_worker:" alt="👷" src="https://twemoji.ruby-china.com/2/svg/1f477.svg" class="twemoji"&gt; &lt;img title=":construction_worker::skin-tone-2:" alt="👷🏻" src="https://twemoji.ruby-china.com/2/svg/1f477-1f3fb.svg" class="twemoji"&gt; &lt;img title=":construction_worker::skin-tone-3:" alt="👷🏼" src="https://twemoji.ruby-china.com/2/svg/1f477-1f3fc.svg" class="twemoji"&gt; &lt;img title=":construction_worker::skin-tone-4:" alt="👷🏽" src="https://twemoji.ruby-china.com/2/svg/1f477-1f3fd.svg" class="twemoji"&gt; &lt;img title=":construction_worker::skin-tone-5:" alt="👷🏾" src="https://twemoji.ruby-china.com/2/svg/1f477-1f3fe.svg" class="twemoji"&gt; &lt;img title=":construction_worker::skin-tone-6:" alt="👷🏿" src="https://twemoji.ruby-china.com/2/svg/1f477-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":princess:" alt="👸" src="https://twemoji.ruby-china.com/2/svg/1f478.svg" class="twemoji"&gt; &lt;img title=":princess::skin-tone-2:" alt="👸🏻" src="https://twemoji.ruby-china.com/2/svg/1f478-1f3fb.svg" class="twemoji"&gt; &lt;img title=":princess::skin-tone-3:" alt="👸🏼" src="https://twemoji.ruby-china.com/2/svg/1f478-1f3fc.svg" class="twemoji"&gt; &lt;img title=":princess::skin-tone-4:" alt="👸🏽" src="https://twemoji.ruby-china.com/2/svg/1f478-1f3fd.svg" class="twemoji"&gt; &lt;img title=":princess::skin-tone-5:" alt="👸🏾" src="https://twemoji.ruby-china.com/2/svg/1f478-1f3fe.svg" class="twemoji"&gt; &lt;img title=":princess::skin-tone-6:" alt="👸🏿" src="https://twemoji.ruby-china.com/2/svg/1f478-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":angel:" alt="👼" src="https://twemoji.ruby-china.com/2/svg/1f47c.svg" class="twemoji"&gt; &lt;img title=":angel::skin-tone-2:" alt="👼🏻" src="https://twemoji.ruby-china.com/2/svg/1f47c-1f3fb.svg" class="twemoji"&gt; &lt;img title=":angel::skin-tone-3:" alt="👼🏼" src="https://twemoji.ruby-china.com/2/svg/1f47c-1f3fc.svg" class="twemoji"&gt; &lt;img title=":angel::skin-tone-4:" alt="👼🏽" src="https://twemoji.ruby-china.com/2/svg/1f47c-1f3fd.svg" class="twemoji"&gt; &lt;img title=":angel::skin-tone-5:" alt="👼🏾" src="https://twemoji.ruby-china.com/2/svg/1f47c-1f3fe.svg" class="twemoji"&gt; &lt;img title=":angel::skin-tone-6:" alt="👼🏿" src="https://twemoji.ruby-china.com/2/svg/1f47c-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":information_desk_person:" alt="💁" src="https://twemoji.ruby-china.com/2/svg/1f481.svg" class="twemoji"&gt; &lt;img title=":information_desk_person::skin-tone-2:" alt="💁🏻" src="https://twemoji.ruby-china.com/2/svg/1f481-1f3fb.svg" class="twemoji"&gt; &lt;img title=":information_desk_person::skin-tone-3:" alt="💁🏼" src="https://twemoji.ruby-china.com/2/svg/1f481-1f3fc.svg" class="twemoji"&gt; &lt;img title=":information_desk_person::skin-tone-4:" alt="💁🏽" src="https://twemoji.ruby-china.com/2/svg/1f481-1f3fd.svg" class="twemoji"&gt; &lt;img title=":information_desk_person::skin-tone-5:" alt="💁🏾" src="https://twemoji.ruby-china.com/2/svg/1f481-1f3fe.svg" class="twemoji"&gt; &lt;img title=":information_desk_person::skin-tone-6:" alt="💁🏿" src="https://twemoji.ruby-china.com/2/svg/1f481-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":guardsman:" alt="💂" src="https://twemoji.ruby-china.com/2/svg/1f482.svg" class="twemoji"&gt; &lt;img title=":guardsman::skin-tone-2:" alt="💂🏻" src="https://twemoji.ruby-china.com/2/svg/1f482-1f3fb.svg" class="twemoji"&gt; &lt;img title=":guardsman::skin-tone-3:" alt="💂🏼" src="https://twemoji.ruby-china.com/2/svg/1f482-1f3fc.svg" class="twemoji"&gt; &lt;img title=":guardsman::skin-tone-4:" alt="💂🏽" src="https://twemoji.ruby-china.com/2/svg/1f482-1f3fd.svg" class="twemoji"&gt; &lt;img title=":guardsman::skin-tone-5:" alt="💂🏾" src="https://twemoji.ruby-china.com/2/svg/1f482-1f3fe.svg" class="twemoji"&gt; &lt;img title=":guardsman::skin-tone-6:" alt="💂🏿" src="https://twemoji.ruby-china.com/2/svg/1f482-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":dancer:" alt="💃" src="https://twemoji.ruby-china.com/2/svg/1f483.svg" class="twemoji"&gt; &lt;img title=":dancer::skin-tone-2:" alt="💃🏻" src="https://twemoji.ruby-china.com/2/svg/1f483-1f3fb.svg" class="twemoji"&gt; &lt;img title=":dancer::skin-tone-3:" alt="💃🏼" src="https://twemoji.ruby-china.com/2/svg/1f483-1f3fc.svg" class="twemoji"&gt; &lt;img title=":dancer::skin-tone-4:" alt="💃🏽" src="https://twemoji.ruby-china.com/2/svg/1f483-1f3fd.svg" class="twemoji"&gt; &lt;img title=":dancer::skin-tone-5:" alt="💃🏾" src="https://twemoji.ruby-china.com/2/svg/1f483-1f3fe.svg" class="twemoji"&gt; &lt;img title=":dancer::skin-tone-6:" alt="💃🏿" src="https://twemoji.ruby-china.com/2/svg/1f483-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":nail_care:" alt="💅" src="https://twemoji.ruby-china.com/2/svg/1f485.svg" class="twemoji"&gt; &lt;img title=":nail_care::skin-tone-2:" alt="💅🏻" src="https://twemoji.ruby-china.com/2/svg/1f485-1f3fb.svg" class="twemoji"&gt; &lt;img title=":nail_care::skin-tone-3:" alt="💅🏼" src="https://twemoji.ruby-china.com/2/svg/1f485-1f3fc.svg" class="twemoji"&gt; &lt;img title=":nail_care::skin-tone-4:" alt="💅🏽" src="https://twemoji.ruby-china.com/2/svg/1f485-1f3fd.svg" class="twemoji"&gt; &lt;img title=":nail_care::skin-tone-5:" alt="💅🏾" src="https://twemoji.ruby-china.com/2/svg/1f485-1f3fe.svg" class="twemoji"&gt; &lt;img title=":nail_care::skin-tone-6:" alt="💅🏿" src="https://twemoji.ruby-china.com/2/svg/1f485-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":massage:" alt="💆" src="https://twemoji.ruby-china.com/2/svg/1f486.svg" class="twemoji"&gt; &lt;img title=":massage::skin-tone-2:" alt="💆🏻" src="https://twemoji.ruby-china.com/2/svg/1f486-1f3fb.svg" class="twemoji"&gt; &lt;img title=":massage::skin-tone-3:" alt="💆🏼" src="https://twemoji.ruby-china.com/2/svg/1f486-1f3fc.svg" class="twemoji"&gt; &lt;img title=":massage::skin-tone-4:" alt="💆🏽" src="https://twemoji.ruby-china.com/2/svg/1f486-1f3fd.svg" class="twemoji"&gt; &lt;img title=":massage::skin-tone-5:" alt="💆🏾" src="https://twemoji.ruby-china.com/2/svg/1f486-1f3fe.svg" class="twemoji"&gt; &lt;img title=":massage::skin-tone-6:" alt="💆🏿" src="https://twemoji.ruby-china.com/2/svg/1f486-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":haircut:" alt="💇" src="https://twemoji.ruby-china.com/2/svg/1f487.svg" class="twemoji"&gt; &lt;img title=":haircut::skin-tone-2:" alt="💇🏻" src="https://twemoji.ruby-china.com/2/svg/1f487-1f3fb.svg" class="twemoji"&gt; &lt;img title=":haircut::skin-tone-3:" alt="💇🏼" src="https://twemoji.ruby-china.com/2/svg/1f487-1f3fc.svg" class="twemoji"&gt; &lt;img title=":haircut::skin-tone-4:" alt="💇🏽" src="https://twemoji.ruby-china.com/2/svg/1f487-1f3fd.svg" class="twemoji"&gt; &lt;img title=":haircut::skin-tone-5:" alt="💇🏾" src="https://twemoji.ruby-china.com/2/svg/1f487-1f3fe.svg" class="twemoji"&gt; &lt;img title=":haircut::skin-tone-6:" alt="💇🏿" src="https://twemoji.ruby-china.com/2/svg/1f487-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":muscle:" alt="💪" src="https://twemoji.ruby-china.com/2/svg/1f4aa.svg" class="twemoji"&gt; &lt;img title=":muscle::skin-tone-2:" alt="💪🏻" src="https://twemoji.ruby-china.com/2/svg/1f4aa-1f3fb.svg" class="twemoji"&gt; &lt;img title=":muscle::skin-tone-3:" alt="💪🏼" src="https://twemoji.ruby-china.com/2/svg/1f4aa-1f3fc.svg" class="twemoji"&gt; &lt;img title=":muscle::skin-tone-4:" alt="💪🏽" src="https://twemoji.ruby-china.com/2/svg/1f4aa-1f3fd.svg" class="twemoji"&gt; &lt;img title=":muscle::skin-tone-5:" alt="💪🏾" src="https://twemoji.ruby-china.com/2/svg/1f4aa-1f3fe.svg" class="twemoji"&gt; &lt;img title=":muscle::skin-tone-6:" alt="💪🏿" src="https://twemoji.ruby-china.com/2/svg/1f4aa-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":sleuth_or_spy:" alt="🕵" src="https://twemoji.ruby-china.com/2/svg/1f575.svg" class="twemoji"&gt; &lt;img title=":sleuth_or_spy::skin-tone-2:" alt="🕵🏻" src="https://twemoji.ruby-china.com/2/svg/1f575-1f3fb.svg" class="twemoji"&gt; &lt;img title=":sleuth_or_spy::skin-tone-3:" alt="🕵🏼" src="https://twemoji.ruby-china.com/2/svg/1f575-1f3fc.svg" class="twemoji"&gt; &lt;img title=":sleuth_or_spy::skin-tone-4:" alt="🕵🏽" src="https://twemoji.ruby-china.com/2/svg/1f575-1f3fd.svg" class="twemoji"&gt; &lt;img title=":sleuth_or_spy::skin-tone-5:" alt="🕵🏾" src="https://twemoji.ruby-china.com/2/svg/1f575-1f3fe.svg" class="twemoji"&gt; &lt;img title=":sleuth_or_spy::skin-tone-6:" alt="🕵🏿" src="https://twemoji.ruby-china.com/2/svg/1f575-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":raised_hand_with_fingers_splayed:" alt="🖐" src="https://twemoji.ruby-china.com/2/svg/1f590.svg" class="twemoji"&gt; &lt;img title=":raised_hand_with_fingers_splayed::skin-tone-2:" alt="🖐🏻" src="https://twemoji.ruby-china.com/2/svg/1f590-1f3fb.svg" class="twemoji"&gt; &lt;img title=":raised_hand_with_fingers_splayed::skin-tone-3:" alt="🖐🏼" src="https://twemoji.ruby-china.com/2/svg/1f590-1f3fc.svg" class="twemoji"&gt; &lt;img title=":raised_hand_with_fingers_splayed::skin-tone-4:" alt="🖐🏽" src="https://twemoji.ruby-china.com/2/svg/1f590-1f3fd.svg" class="twemoji"&gt; &lt;img title=":raised_hand_with_fingers_splayed::skin-tone-5:" alt="🖐🏾" src="https://twemoji.ruby-china.com/2/svg/1f590-1f3fe.svg" class="twemoji"&gt; &lt;img title=":raised_hand_with_fingers_splayed::skin-tone-6:" alt="🖐🏿" src="https://twemoji.ruby-china.com/2/svg/1f590-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":middle_finger:" alt="🖕" src="https://twemoji.ruby-china.com/2/svg/1f595.svg" class="twemoji"&gt; &lt;img title=":middle_finger::skin-tone-2:" alt="🖕🏻" src="https://twemoji.ruby-china.com/2/svg/1f595-1f3fb.svg" class="twemoji"&gt; &lt;img title=":middle_finger::skin-tone-3:" alt="🖕🏼" src="https://twemoji.ruby-china.com/2/svg/1f595-1f3fc.svg" class="twemoji"&gt; &lt;img title=":middle_finger::skin-tone-4:" alt="🖕🏽" src="https://twemoji.ruby-china.com/2/svg/1f595-1f3fd.svg" class="twemoji"&gt; &lt;img title=":middle_finger::skin-tone-5:" alt="🖕🏾" src="https://twemoji.ruby-china.com/2/svg/1f595-1f3fe.svg" class="twemoji"&gt; &lt;img title=":middle_finger::skin-tone-6:" alt="🖕🏿" src="https://twemoji.ruby-china.com/2/svg/1f595-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":spock-hand:" alt="🖖" src="https://twemoji.ruby-china.com/2/svg/1f596.svg" class="twemoji"&gt; &lt;img title=":spock-hand::skin-tone-2:" alt="🖖🏻" src="https://twemoji.ruby-china.com/2/svg/1f596-1f3fb.svg" class="twemoji"&gt; &lt;img title=":spock-hand::skin-tone-3:" alt="🖖🏼" src="https://twemoji.ruby-china.com/2/svg/1f596-1f3fc.svg" class="twemoji"&gt; &lt;img title=":spock-hand::skin-tone-4:" alt="🖖🏽" src="https://twemoji.ruby-china.com/2/svg/1f596-1f3fd.svg" class="twemoji"&gt; &lt;img title=":spock-hand::skin-tone-5:" alt="🖖🏾" src="https://twemoji.ruby-china.com/2/svg/1f596-1f3fe.svg" class="twemoji"&gt; &lt;img title=":spock-hand::skin-tone-6:" alt="🖖🏿" src="https://twemoji.ruby-china.com/2/svg/1f596-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":no_good:" alt="🙅" src="https://twemoji.ruby-china.com/2/svg/1f645.svg" class="twemoji"&gt; &lt;img title=":no_good::skin-tone-2:" alt="🙅🏻" src="https://twemoji.ruby-china.com/2/svg/1f645-1f3fb.svg" class="twemoji"&gt; &lt;img title=":no_good::skin-tone-3:" alt="🙅🏼" src="https://twemoji.ruby-china.com/2/svg/1f645-1f3fc.svg" class="twemoji"&gt; &lt;img title=":no_good::skin-tone-4:" alt="🙅🏽" src="https://twemoji.ruby-china.com/2/svg/1f645-1f3fd.svg" class="twemoji"&gt; &lt;img title=":no_good::skin-tone-5:" alt="🙅🏾" src="https://twemoji.ruby-china.com/2/svg/1f645-1f3fe.svg" class="twemoji"&gt; &lt;img title=":no_good::skin-tone-6:" alt="🙅🏿" src="https://twemoji.ruby-china.com/2/svg/1f645-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":ok_woman:" alt="🙆" src="https://twemoji.ruby-china.com/2/svg/1f646.svg" class="twemoji"&gt; &lt;img title=":ok_woman::skin-tone-2:" alt="🙆🏻" src="https://twemoji.ruby-china.com/2/svg/1f646-1f3fb.svg" class="twemoji"&gt; &lt;img title=":ok_woman::skin-tone-3:" alt="🙆🏼" src="https://twemoji.ruby-china.com/2/svg/1f646-1f3fc.svg" class="twemoji"&gt; &lt;img title=":ok_woman::skin-tone-4:" alt="🙆🏽" src="https://twemoji.ruby-china.com/2/svg/1f646-1f3fd.svg" class="twemoji"&gt; &lt;img title=":ok_woman::skin-tone-5:" alt="🙆🏾" src="https://twemoji.ruby-china.com/2/svg/1f646-1f3fe.svg" class="twemoji"&gt; &lt;img title=":ok_woman::skin-tone-6:" alt="🙆🏿" src="https://twemoji.ruby-china.com/2/svg/1f646-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":bow:" alt="🙇" src="https://twemoji.ruby-china.com/2/svg/1f647.svg" class="twemoji"&gt; &lt;img title=":bow::skin-tone-2:" alt="🙇🏻" src="https://twemoji.ruby-china.com/2/svg/1f647-1f3fb.svg" class="twemoji"&gt; &lt;img title=":bow::skin-tone-3:" alt="🙇🏼" src="https://twemoji.ruby-china.com/2/svg/1f647-1f3fc.svg" class="twemoji"&gt; &lt;img title=":bow::skin-tone-4:" alt="🙇🏽" src="https://twemoji.ruby-china.com/2/svg/1f647-1f3fd.svg" class="twemoji"&gt; &lt;img title=":bow::skin-tone-5:" alt="🙇🏾" src="https://twemoji.ruby-china.com/2/svg/1f647-1f3fe.svg" class="twemoji"&gt; &lt;img title=":bow::skin-tone-6:" alt="🙇🏿" src="https://twemoji.ruby-china.com/2/svg/1f647-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":raising_hand:" alt="🙋" src="https://twemoji.ruby-china.com/2/svg/1f64b.svg" class="twemoji"&gt; &lt;img title=":raising_hand::skin-tone-2:" alt="🙋🏻" src="https://twemoji.ruby-china.com/2/svg/1f64b-1f3fb.svg" class="twemoji"&gt; &lt;img title=":raising_hand::skin-tone-3:" alt="🙋🏼" src="https://twemoji.ruby-china.com/2/svg/1f64b-1f3fc.svg" class="twemoji"&gt; &lt;img title=":raising_hand::skin-tone-4:" alt="🙋🏽" src="https://twemoji.ruby-china.com/2/svg/1f64b-1f3fd.svg" class="twemoji"&gt; &lt;img title=":raising_hand::skin-tone-5:" alt="🙋🏾" src="https://twemoji.ruby-china.com/2/svg/1f64b-1f3fe.svg" class="twemoji"&gt; &lt;img title=":raising_hand::skin-tone-6:" alt="🙋🏿" src="https://twemoji.ruby-china.com/2/svg/1f64b-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":raised_hands:" alt="🙌" src="https://twemoji.ruby-china.com/2/svg/1f64c.svg" class="twemoji"&gt; &lt;img title=":raised_hands::skin-tone-2:" alt="🙌🏻" src="https://twemoji.ruby-china.com/2/svg/1f64c-1f3fb.svg" class="twemoji"&gt; &lt;img title=":raised_hands::skin-tone-3:" alt="🙌🏼" src="https://twemoji.ruby-china.com/2/svg/1f64c-1f3fc.svg" class="twemoji"&gt; &lt;img title=":raised_hands::skin-tone-4:" alt="🙌🏽" src="https://twemoji.ruby-china.com/2/svg/1f64c-1f3fd.svg" class="twemoji"&gt; &lt;img title=":raised_hands::skin-tone-5:" alt="🙌🏾" src="https://twemoji.ruby-china.com/2/svg/1f64c-1f3fe.svg" class="twemoji"&gt; &lt;img title=":raised_hands::skin-tone-6:" alt="🙌🏿" src="https://twemoji.ruby-china.com/2/svg/1f64c-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":person_frowning:" alt="🙍" src="https://twemoji.ruby-china.com/2/svg/1f64d.svg" class="twemoji"&gt; &lt;img title=":person_frowning::skin-tone-2:" alt="🙍🏻" src="https://twemoji.ruby-china.com/2/svg/1f64d-1f3fb.svg" class="twemoji"&gt; &lt;img title=":person_frowning::skin-tone-3:" alt="🙍🏼" src="https://twemoji.ruby-china.com/2/svg/1f64d-1f3fc.svg" class="twemoji"&gt; &lt;img title=":person_frowning::skin-tone-4:" alt="🙍🏽" src="https://twemoji.ruby-china.com/2/svg/1f64d-1f3fd.svg" class="twemoji"&gt; &lt;img title=":person_frowning::skin-tone-5:" alt="🙍🏾" src="https://twemoji.ruby-china.com/2/svg/1f64d-1f3fe.svg" class="twemoji"&gt; &lt;img title=":person_frowning::skin-tone-6:" alt="🙍🏿" src="https://twemoji.ruby-china.com/2/svg/1f64d-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":person_with_pouting_face:" alt="🙎" src="https://twemoji.ruby-china.com/2/svg/1f64e.svg" class="twemoji"&gt; &lt;img title=":person_with_pouting_face::skin-tone-2:" alt="🙎🏻" src="https://twemoji.ruby-china.com/2/svg/1f64e-1f3fb.svg" class="twemoji"&gt; &lt;img title=":person_with_pouting_face::skin-tone-3:" alt="🙎🏼" src="https://twemoji.ruby-china.com/2/svg/1f64e-1f3fc.svg" class="twemoji"&gt; &lt;img title=":person_with_pouting_face::skin-tone-4:" alt="🙎🏽" src="https://twemoji.ruby-china.com/2/svg/1f64e-1f3fd.svg" class="twemoji"&gt; &lt;img title=":person_with_pouting_face::skin-tone-5:" alt="🙎🏾" src="https://twemoji.ruby-china.com/2/svg/1f64e-1f3fe.svg" class="twemoji"&gt; &lt;img title=":person_with_pouting_face::skin-tone-6:" alt="🙎🏿" src="https://twemoji.ruby-china.com/2/svg/1f64e-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":pray:" alt="🙏" src="https://twemoji.ruby-china.com/2/svg/1f64f.svg" class="twemoji"&gt; &lt;img title=":pray::skin-tone-2:" alt="🙏🏻" src="https://twemoji.ruby-china.com/2/svg/1f64f-1f3fb.svg" class="twemoji"&gt; &lt;img title=":pray::skin-tone-3:" alt="🙏🏼" src="https://twemoji.ruby-china.com/2/svg/1f64f-1f3fc.svg" class="twemoji"&gt; &lt;img title=":pray::skin-tone-4:" alt="🙏🏽" src="https://twemoji.ruby-china.com/2/svg/1f64f-1f3fd.svg" class="twemoji"&gt; &lt;img title=":pray::skin-tone-5:" alt="🙏🏾" src="https://twemoji.ruby-china.com/2/svg/1f64f-1f3fe.svg" class="twemoji"&gt; &lt;img title=":pray::skin-tone-6:" alt="🙏🏿" src="https://twemoji.ruby-china.com/2/svg/1f64f-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":rowboat:" alt="🚣" src="https://twemoji.ruby-china.com/2/svg/1f6a3.svg" class="twemoji"&gt; &lt;img title=":rowboat::skin-tone-2:" alt="🚣🏻" src="https://twemoji.ruby-china.com/2/svg/1f6a3-1f3fb.svg" class="twemoji"&gt; &lt;img title=":rowboat::skin-tone-3:" alt="🚣🏼" src="https://twemoji.ruby-china.com/2/svg/1f6a3-1f3fc.svg" class="twemoji"&gt; &lt;img title=":rowboat::skin-tone-4:" alt="🚣🏽" src="https://twemoji.ruby-china.com/2/svg/1f6a3-1f3fd.svg" class="twemoji"&gt; &lt;img title=":rowboat::skin-tone-5:" alt="🚣🏾" src="https://twemoji.ruby-china.com/2/svg/1f6a3-1f3fe.svg" class="twemoji"&gt; &lt;img title=":rowboat::skin-tone-6:" alt="🚣🏿" src="https://twemoji.ruby-china.com/2/svg/1f6a3-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":bicyclist:" alt="🚴" src="https://twemoji.ruby-china.com/2/svg/1f6b4.svg" class="twemoji"&gt; &lt;img title=":bicyclist::skin-tone-2:" alt="🚴🏻" src="https://twemoji.ruby-china.com/2/svg/1f6b4-1f3fb.svg" class="twemoji"&gt; &lt;img title=":bicyclist::skin-tone-3:" alt="🚴🏼" src="https://twemoji.ruby-china.com/2/svg/1f6b4-1f3fc.svg" class="twemoji"&gt; &lt;img title=":bicyclist::skin-tone-4:" alt="🚴🏽" src="https://twemoji.ruby-china.com/2/svg/1f6b4-1f3fd.svg" class="twemoji"&gt; &lt;img title=":bicyclist::skin-tone-5:" alt="🚴🏾" src="https://twemoji.ruby-china.com/2/svg/1f6b4-1f3fe.svg" class="twemoji"&gt; &lt;img title=":bicyclist::skin-tone-6:" alt="🚴🏿" src="https://twemoji.ruby-china.com/2/svg/1f6b4-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":mountain_bicyclist:" alt="🚵" src="https://twemoji.ruby-china.com/2/svg/1f6b5.svg" class="twemoji"&gt; &lt;img title=":mountain_bicyclist::skin-tone-2:" alt="🚵🏻" src="https://twemoji.ruby-china.com/2/svg/1f6b5-1f3fb.svg" class="twemoji"&gt; &lt;img title=":mountain_bicyclist::skin-tone-3:" alt="🚵🏼" src="https://twemoji.ruby-china.com/2/svg/1f6b5-1f3fc.svg" class="twemoji"&gt; &lt;img title=":mountain_bicyclist::skin-tone-4:" alt="🚵🏽" src="https://twemoji.ruby-china.com/2/svg/1f6b5-1f3fd.svg" class="twemoji"&gt; &lt;img title=":mountain_bicyclist::skin-tone-5:" alt="🚵🏾" src="https://twemoji.ruby-china.com/2/svg/1f6b5-1f3fe.svg" class="twemoji"&gt; &lt;img title=":mountain_bicyclist::skin-tone-6:" alt="🚵🏿" src="https://twemoji.ruby-china.com/2/svg/1f6b5-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":walking:" alt="🚶" src="https://twemoji.ruby-china.com/2/svg/1f6b6.svg" class="twemoji"&gt; &lt;img title=":walking::skin-tone-2:" alt="🚶🏻" src="https://twemoji.ruby-china.com/2/svg/1f6b6-1f3fb.svg" class="twemoji"&gt; &lt;img title=":walking::skin-tone-3:" alt="🚶🏼" src="https://twemoji.ruby-china.com/2/svg/1f6b6-1f3fc.svg" class="twemoji"&gt; &lt;img title=":walking::skin-tone-4:" alt="🚶🏽" src="https://twemoji.ruby-china.com/2/svg/1f6b6-1f3fd.svg" class="twemoji"&gt; &lt;img title=":walking::skin-tone-5:" alt="🚶🏾" src="https://twemoji.ruby-china.com/2/svg/1f6b6-1f3fe.svg" class="twemoji"&gt; &lt;img title=":walking::skin-tone-6:" alt="🚶🏿" src="https://twemoji.ruby-china.com/2/svg/1f6b6-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":bath:" alt="🛀" src="https://twemoji.ruby-china.com/2/svg/1f6c0.svg" class="twemoji"&gt; &lt;img title=":bath::skin-tone-2:" alt="🛀🏻" src="https://twemoji.ruby-china.com/2/svg/1f6c0-1f3fb.svg" class="twemoji"&gt; &lt;img title=":bath::skin-tone-3:" alt="🛀🏼" src="https://twemoji.ruby-china.com/2/svg/1f6c0-1f3fc.svg" class="twemoji"&gt; &lt;img title=":bath::skin-tone-4:" alt="🛀🏽" src="https://twemoji.ruby-china.com/2/svg/1f6c0-1f3fd.svg" class="twemoji"&gt; &lt;img title=":bath::skin-tone-5:" alt="🛀🏾" src="https://twemoji.ruby-china.com/2/svg/1f6c0-1f3fe.svg" class="twemoji"&gt; &lt;img title=":bath::skin-tone-6:" alt="🛀🏿" src="https://twemoji.ruby-china.com/2/svg/1f6c0-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":the_horns:" alt="🤘" src="https://twemoji.ruby-china.com/2/svg/1f918.svg" class="twemoji"&gt; &lt;img title=":the_horns::skin-tone-2:" alt="🤘🏻" src="https://twemoji.ruby-china.com/2/svg/1f918-1f3fb.svg" class="twemoji"&gt; &lt;img title=":the_horns::skin-tone-3:" alt="🤘🏼" src="https://twemoji.ruby-china.com/2/svg/1f918-1f3fc.svg" class="twemoji"&gt; &lt;img title=":the_horns::skin-tone-4:" alt="🤘🏽" src="https://twemoji.ruby-china.com/2/svg/1f918-1f3fd.svg" class="twemoji"&gt; &lt;img title=":the_horns::skin-tone-5:" alt="🤘🏾" src="https://twemoji.ruby-china.com/2/svg/1f918-1f3fe.svg" class="twemoji"&gt; &lt;img title=":the_horns::skin-tone-6:" alt="🤘🏿" src="https://twemoji.ruby-china.com/2/svg/1f918-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":point_up:" alt="☝" src="https://twemoji.ruby-china.com/2/svg/261d.svg" class="twemoji"&gt; &lt;img title=":point_up::skin-tone-2:" alt="☝🏻" src="https://twemoji.ruby-china.com/2/svg/261d-1f3fb.svg" class="twemoji"&gt; &lt;img title=":point_up::skin-tone-3:" alt="☝🏼" src="https://twemoji.ruby-china.com/2/svg/261d-1f3fc.svg" class="twemoji"&gt; &lt;img title=":point_up::skin-tone-4:" alt="☝🏽" src="https://twemoji.ruby-china.com/2/svg/261d-1f3fd.svg" class="twemoji"&gt; &lt;img title=":point_up::skin-tone-5:" alt="☝🏾" src="https://twemoji.ruby-china.com/2/svg/261d-1f3fe.svg" class="twemoji"&gt; &lt;img title=":point_up::skin-tone-6:" alt="☝🏿" src="https://twemoji.ruby-china.com/2/svg/261d-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":person_with_ball:" alt="⛹" src="https://twemoji.ruby-china.com/2/svg/26f9.svg" class="twemoji"&gt; &lt;img title=":person_with_ball::skin-tone-2:" alt="⛹🏻" src="https://twemoji.ruby-china.com/2/svg/26f9-1f3fb.svg" class="twemoji"&gt; &lt;img title=":person_with_ball::skin-tone-3:" alt="⛹🏼" src="https://twemoji.ruby-china.com/2/svg/26f9-1f3fc.svg" class="twemoji"&gt; &lt;img title=":person_with_ball::skin-tone-4:" alt="⛹🏽" src="https://twemoji.ruby-china.com/2/svg/26f9-1f3fd.svg" class="twemoji"&gt; &lt;img title=":person_with_ball::skin-tone-5:" alt="⛹🏾" src="https://twemoji.ruby-china.com/2/svg/26f9-1f3fe.svg" class="twemoji"&gt; &lt;img title=":person_with_ball::skin-tone-6:" alt="⛹🏿" src="https://twemoji.ruby-china.com/2/svg/26f9-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":fist:" alt="✊" src="https://twemoji.ruby-china.com/2/svg/270a.svg" class="twemoji"&gt; &lt;img title=":fist::skin-tone-2:" alt="✊🏻" src="https://twemoji.ruby-china.com/2/svg/270a-1f3fb.svg" class="twemoji"&gt; &lt;img title=":fist::skin-tone-3:" alt="✊🏼" src="https://twemoji.ruby-china.com/2/svg/270a-1f3fc.svg" class="twemoji"&gt; &lt;img title=":fist::skin-tone-4:" alt="✊🏽" src="https://twemoji.ruby-china.com/2/svg/270a-1f3fd.svg" class="twemoji"&gt; &lt;img title=":fist::skin-tone-5:" alt="✊🏾" src="https://twemoji.ruby-china.com/2/svg/270a-1f3fe.svg" class="twemoji"&gt; &lt;img title=":fist::skin-tone-6:" alt="✊🏿" src="https://twemoji.ruby-china.com/2/svg/270a-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":hand:" alt="✋" src="https://twemoji.ruby-china.com/2/svg/270b.svg" class="twemoji"&gt; &lt;img title=":hand::skin-tone-2:" alt="✋🏻" src="https://twemoji.ruby-china.com/2/svg/270b-1f3fb.svg" class="twemoji"&gt; &lt;img title=":hand::skin-tone-3:" alt="✋🏼" src="https://twemoji.ruby-china.com/2/svg/270b-1f3fc.svg" class="twemoji"&gt; &lt;img title=":hand::skin-tone-4:" alt="✋🏽" src="https://twemoji.ruby-china.com/2/svg/270b-1f3fd.svg" class="twemoji"&gt; &lt;img title=":hand::skin-tone-5:" alt="✋🏾" src="https://twemoji.ruby-china.com/2/svg/270b-1f3fe.svg" class="twemoji"&gt; &lt;img title=":hand::skin-tone-6:" alt="✋🏿" src="https://twemoji.ruby-china.com/2/svg/270b-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":victory_hand:" alt="✌" src="https://twemoji.ruby-china.com/2/svg/270c.svg" class="twemoji"&gt; &lt;img title=":victory_hand::skin-tone-2:" alt="✌🏻" src="https://twemoji.ruby-china.com/2/svg/270c-1f3fb.svg" class="twemoji"&gt; &lt;img title=":victory_hand::skin-tone-3:" alt="✌🏼" src="https://twemoji.ruby-china.com/2/svg/270c-1f3fc.svg" class="twemoji"&gt; &lt;img title=":victory_hand::skin-tone-4:" alt="✌🏽" src="https://twemoji.ruby-china.com/2/svg/270c-1f3fd.svg" class="twemoji"&gt; &lt;img title=":victory_hand::skin-tone-5:" alt="✌🏾" src="https://twemoji.ruby-china.com/2/svg/270c-1f3fe.svg" class="twemoji"&gt; &lt;img title=":victory_hand::skin-tone-6:" alt="✌🏿" src="https://twemoji.ruby-china.com/2/svg/270c-1f3ff.svg" class="twemoji"&gt;
&lt;img title=":writing_hand:" alt="✍" src="https://twemoji.ruby-china.com/2/svg/270d.svg" class="twemoji"&gt; &lt;img title=":writing_hand::skin-tone-2:" alt="✍🏻" src="https://twemoji.ruby-china.com/2/svg/270d-1f3fb.svg" class="twemoji"&gt; &lt;img title=":writing_hand::skin-tone-3:" alt="✍🏼" src="https://twemoji.ruby-china.com/2/svg/270d-1f3fc.svg" class="twemoji"&gt; &lt;img title=":writing_hand::skin-tone-4:" alt="✍🏽" src="https://twemoji.ruby-china.com/2/svg/270d-1f3fd.svg" class="twemoji"&gt; &lt;img title=":writing_hand::skin-tone-5:" alt="✍🏾" src="https://twemoji.ruby-china.com/2/svg/270d-1f3fe.svg" class="twemoji"&gt; &lt;img title=":writing_hand::skin-tone-6:" alt="✍🏿" src="https://twemoji.ruby-china.com/2/svg/270d-1f3ff.svg" class="twemoji"&gt;&lt;/p&gt;
&lt;h2 id="男男女女"&gt;&lt;a href="http://unicode.org/reports/tr51/#Emoji_ZWJ_Sequences" rel="nofollow" target="_blank" title=""&gt;男男女女&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;man&lt;/code&gt;, &lt;code&gt;woman&lt;/code&gt;, &lt;code&gt;boy&lt;/code&gt;, &lt;code&gt;girl&lt;/code&gt; 之間可以用 &lt;code&gt;-&lt;/code&gt; 組合。
大人之間可以談戀愛、心心相映：&lt;code&gt;:man-kiss-man:&lt;/code&gt;, &lt;code&gt;:woman-kiss-woman:&lt;/code&gt;, &lt;code&gt;:man-heart-man:&lt;/code&gt;, `&lt;code&gt;:woman-heart-woman:&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img title=":man-man-boy:" alt="👨‍👨‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f468-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-man-boy-boy:" alt="👨‍👨‍👦‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f468-200d-1f466-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-man-girl:" alt="👨‍👨‍👧" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f468-200d-1f467.svg" class="twemoji"&gt; &lt;img title=":man-man-girl-boy:" alt="👨‍👨‍👧‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f468-200d-1f467-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-man-girl-girl:" alt="👨‍👨‍👧‍👧" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f468-200d-1f467-200d-1f467.svg" class="twemoji"&gt;
&lt;img title=":man-woman-boy:" alt="👨‍👩‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f469-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-woman-boy-boy:" alt="👨‍👩‍👦‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f469-200d-1f466-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-woman-girl:" alt="👨‍👩‍👧" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f469-200d-1f467.svg" class="twemoji"&gt; &lt;img title=":man-woman-girl-boy:" alt="👨‍👩‍👧‍👦" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f469-200d-1f467-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":man-woman-girl-girl:" alt="👨‍👩‍👧‍👧" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-1f469-200d-1f467-200d-1f467.svg" class="twemoji"&gt;
&lt;img title=":man-heart-man:" alt="👨‍❤️‍👨" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-2764-fe0f-200d-1f468.svg" class="twemoji"&gt; &lt;img title=":man-kiss-man:" alt="👨‍❤️‍💋‍👨" src="https://twemoji.ruby-china.com/2/svg/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg" class="twemoji"&gt; &lt;img title=":woman-woman-boy:" alt="👩‍👩‍👦" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-1f469-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":woman-woman-boy-boy:" alt="👩‍👩‍👦‍👦" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-1f469-200d-1f466-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":woman-woman-girl:" alt="👩‍👩‍👧" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-1f469-200d-1f467.svg" class="twemoji"&gt;
&lt;img title=":woman-woman-girl-boy:" alt="👩‍👩‍👧‍👦" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-1f469-200d-1f467-200d-1f466.svg" class="twemoji"&gt; &lt;img title=":woman-woman-girl-girl:" alt="👩‍👩‍👧‍👧" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-1f469-200d-1f467-200d-1f467.svg" class="twemoji"&gt; &lt;img title=":woman-heart-man:" alt="👩‍❤️‍👨" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-2764-fe0f-200d-1f468.svg" class="twemoji"&gt; &lt;img title=":woman-heart-woman:" alt="👩‍❤️‍👩" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-2764-fe0f-200d-1f469.svg" class="twemoji"&gt; &lt;img title=":woman-kiss-woman:" alt="👩‍❤️‍💋‍👩" src="https://twemoji.ruby-china.com/2/svg/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg" class="twemoji"&gt;&lt;/p&gt;
&lt;h2 id="各種旗幟"&gt;各種旗幟&lt;/h2&gt;
&lt;p&gt;用法 &lt;code&gt;:flag-C:&lt;/code&gt;，&lt;code&gt;C&lt;/code&gt; 是兩位的區域代碼。&lt;/p&gt;

&lt;p&gt;&lt;img title=":flag-ac:" alt="🇦🇨" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-ad:" alt="🇦🇩" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-ae:" alt="🇦🇪" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-af:" alt="🇦🇫" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-ag:" alt="🇦🇬" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1ec.svg" class="twemoji"&gt;
&lt;img title=":flag-ai:" alt="🇦🇮" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-al:" alt="🇦🇱" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-am:" alt="🇦🇲" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-ao:" alt="🇦🇴" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-aq:" alt="🇦🇶" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f6.svg" class="twemoji"&gt;
&lt;img title=":flag-ar:" alt="🇦🇷" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-as:" alt="🇦🇸" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-at:" alt="🇦🇹" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-au:" alt="🇦🇺" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-aw:" alt="🇦🇼" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1fc.svg" class="twemoji"&gt;
&lt;img title=":flag-ax:" alt="🇦🇽" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1fd.svg" class="twemoji"&gt; &lt;img title=":flag-az:" alt="🇦🇿" src="https://twemoji.ruby-china.com/2/svg/1f1e6-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-ba:" alt="🇧🇦" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-bb:" alt="🇧🇧" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1e7.svg" class="twemoji"&gt; &lt;img title=":flag-bd:" alt="🇧🇩" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1e9.svg" class="twemoji"&gt;
&lt;img title=":flag-be:" alt="🇧🇪" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-bf:" alt="🇧🇫" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-bg:" alt="🇧🇬" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-bh:" alt="🇧🇭" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-bi:" alt="🇧🇮" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ee.svg" class="twemoji"&gt;
&lt;img title=":flag-bj:" alt="🇧🇯" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ef.svg" class="twemoji"&gt; &lt;img title=":flag-bl:" alt="🇧🇱" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-bm:" alt="🇧🇲" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-bn:" alt="🇧🇳" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-bo:" alt="🇧🇴" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f4.svg" class="twemoji"&gt;
&lt;img title=":flag-bq:" alt="🇧🇶" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f6.svg" class="twemoji"&gt; &lt;img title=":flag-br:" alt="🇧🇷" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-bs:" alt="🇧🇸" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-bt:" alt="🇧🇹" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-bv:" alt="🇧🇻" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1fb.svg" class="twemoji"&gt;
&lt;img title=":flag-bw:" alt="🇧🇼" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-by:" alt="🇧🇾" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-bz:" alt="🇧🇿" src="https://twemoji.ruby-china.com/2/svg/1f1e7-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-ca:" alt="🇨🇦" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-cc:" alt="🇨🇨" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1e8.svg" class="twemoji"&gt;
&lt;img title=":flag-cd:" alt="🇨🇩" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-cf:" alt="🇨🇫" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-cg:" alt="🇨🇬" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-ch:" alt="🇨🇭" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-ci:" alt="🇨🇮" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1ee.svg" class="twemoji"&gt;
&lt;img title=":flag-ck:" alt="🇨🇰" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-cl:" alt="🇨🇱" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-cm:" alt="🇨🇲" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-cn:" alt="🇨🇳" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-co:" alt="🇨🇴" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f4.svg" class="twemoji"&gt;
&lt;img title=":flag-cp:" alt="🇨🇵" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f5.svg" class="twemoji"&gt; &lt;img title=":flag-cr:" alt="🇨🇷" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-cu:" alt="🇨🇺" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-cv:" alt="🇨🇻" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1fb.svg" class="twemoji"&gt; &lt;img title=":flag-cw:" alt="🇨🇼" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1fc.svg" class="twemoji"&gt;
&lt;img title=":flag-cx:" alt="🇨🇽" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1fd.svg" class="twemoji"&gt; &lt;img title=":flag-cy:" alt="🇨🇾" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-cz:" alt="🇨🇿" src="https://twemoji.ruby-china.com/2/svg/1f1e8-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-de:" alt="🇩🇪" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-dg:" alt="🇩🇬" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1ec.svg" class="twemoji"&gt;
&lt;img title=":flag-dj:" alt="🇩🇯" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1ef.svg" class="twemoji"&gt; &lt;img title=":flag-dk:" alt="🇩🇰" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-dm:" alt="🇩🇲" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-do:" alt="🇩🇴" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-dz:" alt="🇩🇿" src="https://twemoji.ruby-china.com/2/svg/1f1e9-1f1ff.svg" class="twemoji"&gt;
&lt;img title=":flag-ea:" alt="🇪🇦" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-ec:" alt="🇪🇨" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-ee:" alt="🇪🇪" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-eg:" alt="🇪🇬" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-eh:" alt="🇪🇭" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1ed.svg" class="twemoji"&gt;
&lt;img title=":flag-er:" alt="🇪🇷" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-es:" alt="🇪🇸" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-et:" alt="🇪🇹" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-eu:" alt="🇪🇺" src="https://twemoji.ruby-china.com/2/svg/1f1ea-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-fi:" alt="🇫🇮" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1ee.svg" class="twemoji"&gt;
&lt;img title=":flag-fj:" alt="🇫🇯" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1ef.svg" class="twemoji"&gt; &lt;img title=":flag-fk:" alt="🇫🇰" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-fm:" alt="🇫🇲" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-fo:" alt="🇫🇴" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-fr:" alt="🇫🇷" src="https://twemoji.ruby-china.com/2/svg/1f1eb-1f1f7.svg" class="twemoji"&gt;
&lt;img title=":flag-ga:" alt="🇬🇦" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-gb:" alt="🇬🇧" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1e7.svg" class="twemoji"&gt; &lt;img title=":flag-gd:" alt="🇬🇩" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-ge:" alt="🇬🇪" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-gf:" alt="🇬🇫" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1eb.svg" class="twemoji"&gt;
&lt;img title=":flag-gg:" alt="🇬🇬" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-gh:" alt="🇬🇭" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-gi:" alt="🇬🇮" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-gl:" alt="🇬🇱" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-gm:" alt="🇬🇲" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f2.svg" class="twemoji"&gt;
&lt;img title=":flag-gn:" alt="🇬🇳" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-gp:" alt="🇬🇵" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f5.svg" class="twemoji"&gt; &lt;img title=":flag-gq:" alt="🇬🇶" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f6.svg" class="twemoji"&gt; &lt;img title=":flag-gr:" alt="🇬🇷" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-gs:" alt="🇬🇸" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f8.svg" class="twemoji"&gt;
&lt;img title=":flag-gt:" alt="🇬🇹" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-gu:" alt="🇬🇺" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-gw:" alt="🇬🇼" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-gy:" alt="🇬🇾" src="https://twemoji.ruby-china.com/2/svg/1f1ec-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-hk:" alt="🇭🇰" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1f0.svg" class="twemoji"&gt;
&lt;img title=":flag-hm:" alt="🇭🇲" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-hn:" alt="🇭🇳" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-hr:" alt="🇭🇷" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-ht:" alt="🇭🇹" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-hu:" alt="🇭🇺" src="https://twemoji.ruby-china.com/2/svg/1f1ed-1f1fa.svg" class="twemoji"&gt;
&lt;img title=":flag-ic:" alt="🇮🇨" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-id:" alt="🇮🇩" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-ie:" alt="🇮🇪" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-il:" alt="🇮🇱" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-im:" alt="🇮🇲" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f2.svg" class="twemoji"&gt;
&lt;img title=":flag-in:" alt="🇮🇳" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-io:" alt="🇮🇴" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-iq:" alt="🇮🇶" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f6.svg" class="twemoji"&gt; &lt;img title=":flag-ir:" alt="🇮🇷" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-is:" alt="🇮🇸" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f8.svg" class="twemoji"&gt;
&lt;img title=":flag-it:" alt="🇮🇹" src="https://twemoji.ruby-china.com/2/svg/1f1ee-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-je:" alt="🇯🇪" src="https://twemoji.ruby-china.com/2/svg/1f1ef-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-jm:" alt="🇯🇲" src="https://twemoji.ruby-china.com/2/svg/1f1ef-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-jo:" alt="🇯🇴" src="https://twemoji.ruby-china.com/2/svg/1f1ef-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-jp:" alt="🇯🇵" src="https://twemoji.ruby-china.com/2/svg/1f1ef-1f1f5.svg" class="twemoji"&gt;
&lt;img title=":flag-ke:" alt="🇰🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-kg:" alt="🇰🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-kh:" alt="🇰🇭" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-ki:" alt="🇰🇮" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-km:" alt="🇰🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1f2.svg" class="twemoji"&gt;
&lt;img title=":flag-kn:" alt="🇰🇳" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-kp:" alt="🇰🇵" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1f5.svg" class="twemoji"&gt; &lt;img title=":flag-kr:" alt="🇰🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-kw:" alt="🇰🇼" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-ky:" alt="🇰🇾" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1fe.svg" class="twemoji"&gt;
&lt;img title=":flag-kz:" alt="🇰🇿" src="https://twemoji.ruby-china.com/2/svg/1f1f0-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-la:" alt="🇱🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-lb:" alt="🇱🇧" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1e7.svg" class="twemoji"&gt; &lt;img title=":flag-lc:" alt="🇱🇨" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-li:" alt="🇱🇮" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1ee.svg" class="twemoji"&gt;
&lt;img title=":flag-lk:" alt="🇱🇰" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-lr:" alt="🇱🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-ls:" alt="🇱🇸" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-lt:" alt="🇱🇹" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-lu:" alt="🇱🇺" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1fa.svg" class="twemoji"&gt;
&lt;img title=":flag-lv:" alt="🇱🇻" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1fb.svg" class="twemoji"&gt; &lt;img title=":flag-ly:" alt="🇱🇾" src="https://twemoji.ruby-china.com/2/svg/1f1f1-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-ma:" alt="🇲🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-mc:" alt="🇲🇨" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-md:" alt="🇲🇩" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1e9.svg" class="twemoji"&gt;
&lt;img title=":flag-me:" alt="🇲🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-mf:" alt="🇲🇫" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-mg:" alt="🇲🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-mh:" alt="🇲🇭" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-mk:" alt="🇲🇰" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f0.svg" class="twemoji"&gt;
&lt;img title=":flag-ml:" alt="🇲🇱" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-mm:" alt="🇲🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-mn:" alt="🇲🇳" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-mo:" alt="🇲🇴" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-mp:" alt="🇲🇵" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f5.svg" class="twemoji"&gt;
&lt;img title=":flag-mq:" alt="🇲🇶" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f6.svg" class="twemoji"&gt; &lt;img title=":flag-mr:" alt="🇲🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-ms:" alt="🇲🇸" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-mt:" alt="🇲🇹" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-mu:" alt="🇲🇺" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1fa.svg" class="twemoji"&gt;
&lt;img title=":flag-mv:" alt="🇲🇻" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1fb.svg" class="twemoji"&gt; &lt;img title=":flag-mw:" alt="🇲🇼" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-mx:" alt="🇲🇽" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1fd.svg" class="twemoji"&gt; &lt;img title=":flag-my:" alt="🇲🇾" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-mz:" alt="🇲🇿" src="https://twemoji.ruby-china.com/2/svg/1f1f2-1f1ff.svg" class="twemoji"&gt;
&lt;img title=":flag-na:" alt="🇳🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-nc:" alt="🇳🇨" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-ne:" alt="🇳🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-nf:" alt="🇳🇫" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-ng:" alt="🇳🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1ec.svg" class="twemoji"&gt;
&lt;img title=":flag-ni:" alt="🇳🇮" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-nl:" alt="🇳🇱" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-no:" alt="🇳🇴" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-np:" alt="🇳🇵" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1f5.svg" class="twemoji"&gt; &lt;img title=":flag-nr:" alt="🇳🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1f7.svg" class="twemoji"&gt;
&lt;img title=":flag-nu:" alt="🇳🇺" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-nz:" alt="🇳🇿" src="https://twemoji.ruby-china.com/2/svg/1f1f3-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-om:" alt="🇴🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f4-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-pa:" alt="🇵🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-pe:" alt="🇵🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1ea.svg" class="twemoji"&gt;
&lt;img title=":flag-pf:" alt="🇵🇫" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-pg:" alt="🇵🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-ph:" alt="🇵🇭" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1ed.svg" class="twemoji"&gt; &lt;img title=":flag-pk:" alt="🇵🇰" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-pl:" alt="🇵🇱" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f1.svg" class="twemoji"&gt;
&lt;img title=":flag-pm:" alt="🇵🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-pn:" alt="🇵🇳" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-pr:" alt="🇵🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-ps:" alt="🇵🇸" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-pt:" alt="🇵🇹" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1f9.svg" class="twemoji"&gt;
&lt;img title=":flag-pw:" alt="🇵🇼" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-py:" alt="🇵🇾" src="https://twemoji.ruby-china.com/2/svg/1f1f5-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-qa:" alt="🇶🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f6-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-re:" alt="🇷🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f7-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-ro:" alt="🇷🇴" src="https://twemoji.ruby-china.com/2/svg/1f1f7-1f1f4.svg" class="twemoji"&gt;
&lt;img title=":flag-rs:" alt="🇷🇸" src="https://twemoji.ruby-china.com/2/svg/1f1f7-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-ru:" alt="🇷🇺" src="https://twemoji.ruby-china.com/2/svg/1f1f7-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-rw:" alt="🇷🇼" src="https://twemoji.ruby-china.com/2/svg/1f1f7-1f1fc.svg" class="twemoji"&gt; &lt;img title=":flag-sa:" alt="🇸🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-sb:" alt="🇸🇧" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1e7.svg" class="twemoji"&gt;
&lt;img title=":flag-sc:" alt="🇸🇨" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-sd:" alt="🇸🇩" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-se:" alt="🇸🇪" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-sg:" alt="🇸🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-sh:" alt="🇸🇭" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ed.svg" class="twemoji"&gt;
&lt;img title=":flag-si:" alt="🇸🇮" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-sj:" alt="🇸🇯" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ef.svg" class="twemoji"&gt; &lt;img title=":flag-sk:" alt="🇸🇰" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-sl:" alt="🇸🇱" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-sm:" alt="🇸🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f2.svg" class="twemoji"&gt;
&lt;img title=":flag-sn:" alt="🇸🇳" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-so:" alt="🇸🇴" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-sr:" alt="🇸🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-ss:" alt="🇸🇸" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-st:" alt="🇸🇹" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1f9.svg" class="twemoji"&gt;
&lt;img title=":flag-sv:" alt="🇸🇻" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1fb.svg" class="twemoji"&gt; &lt;img title=":flag-sx:" alt="🇸🇽" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1fd.svg" class="twemoji"&gt; &lt;img title=":flag-sy:" alt="🇸🇾" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-sz:" alt="🇸🇿" src="https://twemoji.ruby-china.com/2/svg/1f1f8-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-ta:" alt="🇹🇦" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1e6.svg" class="twemoji"&gt;
&lt;img title=":flag-tc:" alt="🇹🇨" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-td:" alt="🇹🇩" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1e9.svg" class="twemoji"&gt; &lt;img title=":flag-tf:" alt="🇹🇫" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1eb.svg" class="twemoji"&gt; &lt;img title=":flag-tg:" alt="🇹🇬" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-th:" alt="🇹🇭" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1ed.svg" class="twemoji"&gt;
&lt;img title=":flag-tj:" alt="🇹🇯" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1ef.svg" class="twemoji"&gt; &lt;img title=":flag-tk:" alt="🇹🇰" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-tl:" alt="🇹🇱" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f1.svg" class="twemoji"&gt; &lt;img title=":flag-tm:" alt="🇹🇲" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-tn:" alt="🇹🇳" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f3.svg" class="twemoji"&gt;
&lt;img title=":flag-to:" alt="🇹🇴" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f4.svg" class="twemoji"&gt; &lt;img title=":flag-tr:" alt="🇹🇷" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f7.svg" class="twemoji"&gt; &lt;img title=":flag-tt:" alt="🇹🇹" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-tv:" alt="🇹🇻" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1fb.svg" class="twemoji"&gt; &lt;img title=":flag-tw:" alt="🇹🇼" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1fc.svg" class="twemoji"&gt;
&lt;img title=":flag-tz:" alt="🇹🇿" src="https://twemoji.ruby-china.com/2/svg/1f1f9-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-ua:" alt="🇺🇦" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-ug:" alt="🇺🇬" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-um:" alt="🇺🇲" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-us:" alt="🇺🇸" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1f8.svg" class="twemoji"&gt;
&lt;img title=":flag-uy:" alt="🇺🇾" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1fe.svg" class="twemoji"&gt; &lt;img title=":flag-uz:" alt="🇺🇿" src="https://twemoji.ruby-china.com/2/svg/1f1fa-1f1ff.svg" class="twemoji"&gt; &lt;img title=":flag-va:" alt="🇻🇦" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1e6.svg" class="twemoji"&gt; &lt;img title=":flag-vc:" alt="🇻🇨" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1e8.svg" class="twemoji"&gt; &lt;img title=":flag-ve:" alt="🇻🇪" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1ea.svg" class="twemoji"&gt;
&lt;img title=":flag-vg:" alt="🇻🇬" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1ec.svg" class="twemoji"&gt; &lt;img title=":flag-vi:" alt="🇻🇮" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1ee.svg" class="twemoji"&gt; &lt;img title=":flag-vn:" alt="🇻🇳" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1f3.svg" class="twemoji"&gt; &lt;img title=":flag-vu:" alt="🇻🇺" src="https://twemoji.ruby-china.com/2/svg/1f1fb-1f1fa.svg" class="twemoji"&gt; &lt;img title=":flag-wf:" alt="🇼🇫" src="https://twemoji.ruby-china.com/2/svg/1f1fc-1f1eb.svg" class="twemoji"&gt;
&lt;img title=":flag-ws:" alt="🇼🇸" src="https://twemoji.ruby-china.com/2/svg/1f1fc-1f1f8.svg" class="twemoji"&gt; &lt;img title=":flag-xk:" alt="🇽🇰" src="https://twemoji.ruby-china.com/2/svg/1f1fd-1f1f0.svg" class="twemoji"&gt; &lt;img title=":flag-ye:" alt="🇾🇪" src="https://twemoji.ruby-china.com/2/svg/1f1fe-1f1ea.svg" class="twemoji"&gt; &lt;img title=":flag-yt:" alt="🇾🇹" src="https://twemoji.ruby-china.com/2/svg/1f1fe-1f1f9.svg" class="twemoji"&gt; &lt;img title=":flag-za:" alt="🇿🇦" src="https://twemoji.ruby-china.com/2/svg/1f1ff-1f1e6.svg" class="twemoji"&gt;
&lt;img title=":flag-zm:" alt="🇿🇲" src="https://twemoji.ruby-china.com/2/svg/1f1ff-1f1f2.svg" class="twemoji"&gt; &lt;img title=":flag-zw:" alt="🇿🇼" src="https://twemoji.ruby-china.com/2/svg/1f1ff-1f1fc.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;p&gt;全部可以到這裡看：&lt;a href="https://jollygoodcode.github.io/twemoji" rel="nofollow" target="_blank"&gt;https://jollygoodcode.github.io/twemoji&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="具體實現"&gt;具體實現&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/ruby-china/ruby-china/pull/677" rel="nofollow" target="_blank"&gt;https://github.com/ruby-china/ruby-china/pull/677&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;使用了 &lt;a href="https://github.com/jollygoodcode/twemoji" rel="nofollow" target="_blank"&gt;https://github.com/jollygoodcode/twemoji&lt;/a&gt; 這個 Twemoji RubyGem。&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;大家給 &lt;a href="/huacnlee" class="user-mention" title="@huacnlee"&gt;&lt;i&gt;@&lt;/i&gt;huacnlee&lt;/a&gt; &lt;img title=":clap:" alt="👏" src="https://twemoji.ruby-china.com/2/svg/1f44f.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-2:" alt="👏🏻" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fb.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-3:" alt="👏🏼" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fc.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-4:" alt="👏🏽" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fd.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-5:" alt="👏🏾" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3fe.svg" class="twemoji"&gt; &lt;img title=":clap::skin-tone-6:" alt="👏🏿" src="https://twemoji.ruby-china.com/2/svg/1f44f-1f3ff.svg" class="twemoji"&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Wed, 15 Jun 2016 19:32:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/30287</link>
      <guid>https://ruby-china.org/topics/30287</guid>
    </item>
    <item>
      <title>Rails 5 系列文章</title>
      <description>&lt;p&gt;請大家移步這裡：&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.bigbinary.com/categories/Rails-5" rel="nofollow" target="_blank"&gt;http://blog.bigbinary.com/categories/Rails-5&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Wed, 18 May 2016 16:09:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/30060</link>
      <guid>https://ruby-china.org/topics/30060</guid>
    </item>
    <item>
      <title>新加坡 RedDotRubyConf 2016</title>
      <description>&lt;p&gt;&lt;img title=":sunny:" alt="☀" src="https://twemoji.ruby-china.com/2/svg/2600.svg" class="twemoji"&gt; &lt;a href="http://reddotrubyconf.com" rel="nofollow" target="_blank" title=""&gt;新加坡 RedDotRubyConf&lt;/a&gt;，6 月 23 至 24 日，兩天單軌。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://reddotrubyconf.com" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://l.ruby-china.com/photo/2016/120be471257bb802b2cffa5d7848f594.png" title="" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;已經確定的演講者有：Matz、Aaron Patterson、Terence Lee、Godfrey Chan、Kerri Miller。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ticketbase.com/events/reddotrubyconf-2016" rel="nofollow" target="_blank" title=""&gt;開放報名中&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rdrc-cfp.herokuapp.com/events/reddotrubyconf" rel="nofollow" target="_blank" title=""&gt;CFP 徵稿中（3/28 截止）&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Mon, 15 Feb 2016 13:28:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/28989</link>
      <guid>https://ruby-china.org/topics/28989</guid>
    </item>
    <item>
      <title>Rails &amp; rails-html-sanitizer 安全性更新</title>
      <description>&lt;h2 id="Rails 有 6 個安全性風險"&gt;Rails 有 6 個安全性風險&lt;/h2&gt;
&lt;p&gt;受影響的 Rails 版本：&lt;strong&gt;全部！&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id="修復版本"&gt;修復版本&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;5.0.0.beta1.1&lt;/li&gt;
&lt;li&gt;4.2.5.1&lt;/li&gt;
&lt;li&gt;4.1.14.1&lt;/li&gt;
&lt;li&gt;3.2.22.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CVE 分別為：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/ANv0HDHEC3k/mt7wNGxbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7576 HTTP 基本認證的時間攻擊（Action Controller）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/9oLY_FCzvoc/w9oI9XxbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2016-0751 洩漏內存導致的 DoS 攻擊（Action Pack）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/cawsWcQ6c8g/tegZtYdbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7577 嵌套屬性可能繞過 proc 檢查（Active Record）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/335P1DcLG00/OfB9_LhbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2016-0752 可能洩漏資訊（Action View）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/6jQVC1geukQ/8oYETcxbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2016-0753 可能可以規避輸入驗證（Active Model）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/dthJ5wL69JE/YzPnFelbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7581 Wildcard 路由可能洩漏內存（Action Pack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rails-html-sanitizer 有 3 個安全性風險"&gt;rails-html-sanitizer 有 3 個安全性風險&lt;/h2&gt;&lt;h5 id="修復版本"&gt;修復版本&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;1.0.3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CVE 分別為：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/uh--W4TDwmI/JbvSRpdbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7578 可能的 XSS 風險（rails-html-sanitizer）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/OU9ugTZcbjc/PjEP46pbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7579 可能的 XSS 風險（rails-html-sanitizer）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!msg/rubyonrails-security/uh--W4TDwmI/m_CVZtdbFQAJ" rel="nofollow" target="_blank" title=""&gt;CVE-2015-7578 可能的 XSS 風險（rails-html-sanitizer）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="詳見"&gt;詳見&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://weblog.rubyonrails.org/2016/1/25/Rails-5-0-0-beta1-1-4-2-5-1-4-1-14-1-3-2-22-1-and-rails-html-sanitizer-1-0-3-have-been-released/" rel="nofollow" target="_blank"&gt;http://weblog.rubyonrails.org/2016/1/25/Rails-5-0-0-beta1-1-4-2-5-1-4-1-14-1-3-2-22-1-and-rails-html-sanitizer-1-0-3-have-been-released/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="參考"&gt;參考&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rubygems/rubygems.org/pull/1181" rel="nofollow" target="_blank"&gt;https://github.com/rubygems/rubygems.org/pull/1181&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 RSpec 執行測試遇到未定義 cache 方法，升級 rspec-rails 到 ~&amp;gt; 3.4.1 即可，詳見：&lt;a href="https://github.com/rspec/rspec-rails/issues/1532#issuecomment-175116827" rel="nofollow" target="_blank"&gt;https://github.com/rspec/rspec-rails/issues/1532#issuecomment-175116827&lt;/a&gt; 。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;P.S.&lt;/p&gt;

&lt;p&gt;可以用 &lt;a href="https://www.deppbot.com" rel="nofollow" target="_blank"&gt;https://www.deppbot.com&lt;/a&gt; 自動幫你升級，請看&lt;a href="https://github.com/rubysg/rubysg-reboot/pull/80" rel="nofollow" target="_blank" title=""&gt;範例 1&lt;/a&gt;、&lt;a href="https://github.com/asonas/rails5base/pull/1" rel="nofollow" target="_blank" title=""&gt;範例 2&lt;/a&gt; 😊。&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;deppbot 要有 Gemfile + Gemfile.lock 才可用，缺一不可 &lt;img title=":sweat:" alt="😓" src="https://twemoji.ruby-china.com/2/svg/1f613.svg" class="twemoji"&gt; *&lt;/em&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Tue, 26 Jan 2016 11:02:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/28853</link>
      <guid>https://ruby-china.org/topics/28853</guid>
    </item>
    <item>
      <title>Rails 10 週年：網站改版、新 Logo、書以及視頻</title>
      <description>&lt;p&gt;&lt;a href="http://rubyonrails.org" rel="nofollow" target="_blank"&gt;http://rubyonrails.org&lt;/a&gt; 網站新設計（設計師是 &lt;a href="https://twitter.com/asianmack" rel="nofollow" target="_blank" title=""&gt;Jamie Dihiansan&lt;/a&gt;）：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/9fb60baa4b18945afce297446ac55bdd.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;新 logo：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/b9d43591c8bd784b48b42c8c9443b7c6.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;dhh 正在寫一本新書 &lt;a href="http://rubyonrails.org/doctrine" rel="nofollow" target="_blank" title=""&gt;Ruby on Rails doctrine&lt;/a&gt;：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/91014e6480a19ef1fe182825f62b7b81.png" title="" alt=""&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I was going to record a new video for the homepage, but since we're just on the cusp on some changes to Rails 5 that'll change things a bit, I'm holding off until beta2 (which should be out shortly). In the mean time, you can enjoy the introduction to Action Cable. But rest assured that it'll soon be replaced by a new, proper introduction.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;dhh 準備重錄一個新視頻來介紹 Ruby on Rails。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/jasonfried/status/689488342832979969" rel="nofollow" target="_blank" title=""&gt;Rails 5 新的歡迎頁面，搶先看&lt;/a&gt; &lt;img title=":point_down:" alt="👇" src="https://twemoji.ruby-china.com/2/svg/1f447.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2016/f3a95309ad414397564deefc78101a38.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="http://weblog.rubyonrails.org/2016/1/19/new-rails-identity/" rel="nofollow" target="_blank"&gt;http://weblog.rubyonrails.org/2016/1/19/new-rails-identity/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. 新主頁源碼在：&lt;a href="https://github.com/rails/homepage" rel="nofollow" target="_blank"&gt;https://github.com/rails/homepage&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Wed, 20 Jan 2016 00:37:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/28788</link>
      <guid>https://ruby-china.org/topics/28788</guid>
    </item>
    <item>
      <title>為什麼要 Bundle Update？</title>
      <description>&lt;h2 id="為什麼要 Bundle Update？"&gt;為什麼要 Bundle Update？&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://bundler.io/man/bundle-update.1.html" rel="nofollow" target="_blank" title=""&gt;bundle-update(1)&lt;/a&gt; 可以更新所有的 Gem 至兼容的最新版本。&lt;/p&gt;

&lt;p&gt;首先先說說...&lt;/p&gt;
&lt;h2 id="為什麼要升級？"&gt;為什麼要升級？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;新版本修復了更多 Bugs&lt;/li&gt;
&lt;li&gt;新版本效能更好&lt;/li&gt;
&lt;li&gt;維護者通常只對新版本的 Bug 感興趣&lt;/li&gt;
&lt;li&gt;預防勝於治療&lt;/li&gt;
&lt;li&gt;減少技術負債&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="為什麼 Rails 4 升級至 Rails 5 這麼難？"&gt;為什麼 Rails 4 升級至 Rails 5 這麼難？&lt;/h2&gt;
&lt;p&gt;因為哥你兩年才升級一次，很多 Gem 都太老了，一次全升級，每個 Gem 不兼容一點點，加起來全敗了。&lt;/p&gt;
&lt;h2 id="語義化版本"&gt;&lt;a href="http://semver.org/" rel="nofollow" target="_blank" title=""&gt;語義化版本&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;語義化版本定義了一個版本命名的規範，幾乎所有的 RubyGem 都遵循這個規範。&lt;/p&gt;

&lt;p&gt;4.2.4 - MAJOR.MINOR.PATCH&lt;/p&gt;

&lt;p&gt;MAJOR 版本更新會壞，，向下&lt;strong&gt;不相容&lt;/strong&gt;。
MINOR 版本通常是發佈新功能，向下相容。
PATCH 版本通常是修復 Bugs，向下相容。&lt;/p&gt;

&lt;p&gt;=&amp;gt;&lt;/p&gt;

&lt;p&gt;rails 4.2.4 升級至 4.2.5，OK！
rails 4.2.4 升級至 4.3.0，Should be OK！
rails 4.2.4 升級至 5.0，break！&lt;/p&gt;

&lt;p&gt;了解了語義化版本之後...&lt;/p&gt;
&lt;h3 id="Gem 作者不採用語義化版本怎麼辦？"&gt;Gem 作者不採用語義化版本怎麼辦？&lt;/h3&gt;
&lt;p&gt;堅決拒用或是說服他！&lt;/p&gt;
&lt;h3 id="怎麼鎖定版本號？"&gt;怎麼鎖定版本號？&lt;/h3&gt;
&lt;p&gt;有三種鎖定方式：&lt;/p&gt;
&lt;h4 id="進擊型 &gt;="&gt;進擊型 &lt;code&gt;&amp;gt;=&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;gt;= 2.0&lt;/code&gt; 表示 &lt;code&gt;&amp;gt;= 2.0&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="中庸型 ~&gt;"&gt;中庸型 &lt;code&gt;~&amp;gt;&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;~&amp;gt; 2.0&lt;/code&gt; 表示 &lt;code&gt;&amp;gt;= 2.0, &amp;lt; 3&lt;/code&gt;
&lt;code&gt;~&amp;gt; 2.0.0&lt;/code&gt; 表示 &lt;code&gt;&amp;gt;= 2.0.0, &amp;lt; 2.1&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="防禦型 4.2.4"&gt;防禦型 &lt;code&gt;4.2.4&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;"4.2.4"&lt;/code&gt; gem 版本會固定在 "4.2.4"&lt;/p&gt;
&lt;h3 id="鎖定版本號的缺點"&gt;鎖定版本號的缺點&lt;/h3&gt;
&lt;p&gt;當有安全性發佈時，鎖定版本號讓你無法升級至已經修復的版本。&lt;/p&gt;
&lt;h2 id="你先前說兼容的最新版本？"&gt;你先前說兼容的最新版本？&lt;/h2&gt;
&lt;p&gt;Gem 彼此之間有依賴關係，&lt;code&gt;bundle update&lt;/code&gt; 會找到你的專案彼此兼容的版本，進行“升級”。&lt;/p&gt;
&lt;h2 id="“升級”？"&gt;“升級”？&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;bundle update&lt;/code&gt; 不一定會更新到新版...&lt;/p&gt;

&lt;p&gt;有可能某個 Gem 會降版，因為 &lt;code&gt;bundle update&lt;/code&gt; 要確保所有更新的版本都兼容。&lt;/p&gt;

&lt;p&gt;有人說...&lt;/p&gt;
&lt;h2 id="Monkey Patch 一下就好了阿"&gt;Monkey Patch 一下就好了阿&lt;/h2&gt;
&lt;p&gt;這樣就得自己維護 Gem，時常跟進上游的更新，成本高。&lt;/p&gt;
&lt;h2 id="有些東西升級不能壞"&gt;有些東西升級不能壞&lt;/h2&gt;
&lt;p&gt;鎖定版本號或是升級後，自行檢查並對代碼進行相應的修正。&lt;/p&gt;
&lt;h3 id="看你講了這麼多，怎麼 bundle update，能示範下不？"&gt;看你講了這麼多，怎麼 &lt;code&gt;bundle update&lt;/code&gt;，能示範下不？&lt;/h3&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd project
$ git cehckout -b bundle-update-20151006
git: 'cehckout' is not a git command. See 'git --help'.

Did you mean this?
  checkout
$ git checkout -b bundle-update-20151006
$ bundle updaet
Could not find command "updaet".
$ bundle update
$ git add Gemfile.lock
$ git comit -m "Bundle update on 2015.10.06"
git: 'comit' is not a git command. See 'git --help'.

Did you mean this?
  commit
$ git commmit -m "Bundle update on 2015.10.06"
git: 'commmit' is not a git command. See 'git --help'.

Did you mean this?
  commit
$ git commit -m "Bundle update on 2015.10.06"
$ git push origin master
Go to GitHub, click "Create Pull Request"
fill in title
fill in description
click "Create Pull Request"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一次大約十分鐘，以我一個時薪 60 美元的程序員來說，成本大約是 10 美元！&lt;/p&gt;
&lt;h2 id="等我有空再 bundle update 好了"&gt;等我有空再 &lt;code&gt;bundle update&lt;/code&gt; 好了&lt;/h2&gt;
&lt;p&gt;那就是永遠不會升級啦！所以我們要自動讓計算機幫我們做這件事，省時省心省錢。&lt;/p&gt;
&lt;h2 id="為什麼要自動化"&gt;為什麼要自動化&lt;/h2&gt;
&lt;p&gt;自動由服務提供 &lt;code&gt;bundle update&lt;/code&gt;，&lt;a href="https://github.com/CWISoftware/enlighten/pull/79" rel="nofollow" target="_blank" title=""&gt;提早發現問題&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="自動化 bundle 服務"&gt;自動化 bundle 服務&lt;/h2&gt;
&lt;p&gt;試試看 Gemnasium 現在推出的自動 bundle update 的功能，Pull Request 看起來像是這樣：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/10301803/9858be06-6c38-11e5-9f00-524f13db20de.png" title="" alt="Gemnasium-PR-looks-bad"&gt;&lt;/p&gt;

&lt;p&gt;哇！不錯哦，乔布斯你怎麼看？&lt;/p&gt;

&lt;p&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/10403235/b2bcb088-6efc-11e5-9177-52274ebd33d1.png" title="" alt="Steve Jobs hates stylus"&gt;&lt;/p&gt;

&lt;p&gt;...Yikes！&lt;/p&gt;

&lt;p&gt;P.S. Gemnasium 這個單字我老是拼不對！&lt;/p&gt;
&lt;h2 id="有沒有好一點的服務？"&gt;有沒有好一點的服務？&lt;/h2&gt;
&lt;p&gt;可以試試看這個服務：&lt;a href="https://www.deppbot.com" rel="nofollow" target="_blank"&gt;https://www.deppbot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.deppbot.com" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;&lt;a href="https://www.deppbot.com" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/11876416/9d4f8ef6-a524-11e5-8f38-65d38f2706fb.png" title="" alt="https://www.deppbot.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自動 &lt;code&gt;bundle update&lt;/code&gt; 🎩&lt;/li&gt;
&lt;li&gt;更新頻率可選：1、3、5、7、14 天 ⌛&lt;/li&gt;
&lt;li&gt;適應 Git-Flow（Pull Request 可對 &lt;code&gt;&amp;lt;customized-branch&amp;gt;&lt;/code&gt; branch 發送）🔨&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ruby-bench/ruby-bench-web/pull/122" rel="nofollow" target="_blank" title=""&gt;美觀實用的 Pull Request&lt;/a&gt; 😍&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/blog/612-introducing-github-compare-view" rel="nofollow" target="_blank" title=""&gt;GitHub Compare View&lt;/a&gt; 😳&lt;/li&gt;
&lt;li&gt;提供 Changelog，&lt;a href="http://keepachangelog.com/" rel="nofollow" target="_blank" title=""&gt;什麼是 Changelog？&lt;/a&gt; 🙋&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/11876329/1dfa7fda-a524-11e5-95a8-b8c0093b2fc3.png" title="" alt="deppbot Pull Request example"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;開源項目永遠免費 🍻私有項目僅收 5 美元！&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.deppbot.com/pricing" rel="nofollow" target="_blank" title=""&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/11876359/543380ba-a524-11e5-812b-7da255becac5.png" title="" alt="deppbot pricing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/deppbot" rel="nofollow" target="_blank" title=""&gt;大家都在用（請參考 Contribution Graph）&lt;/a&gt; 👬👭&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;苟日新，日日新，又日新，你今天更新了嗎？&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.deppbot.com" rel="nofollow" target="_blank" title=""&gt;即刻 &lt;code&gt;bundle update&lt;/code&gt;&lt;/a&gt; ⚡⚡⚡&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;註 1. 有測試再 &lt;code&gt;bundle update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;註 2. 任何建議與反饋歡迎留言 &lt;img title=":heart:" alt="❤" src="https://twemoji.ruby-china.com/2/svg/2764.svg" class="twemoji"&gt; &lt;img title=":yellow_heart:" alt="💛" src="https://twemoji.ruby-china.com/2/svg/1f49b.svg" class="twemoji"&gt; &lt;img title=":blue_heart:" alt="💙" src="https://twemoji.ruby-china.com/2/svg/1f499.svg" class="twemoji"&gt; &lt;img title=":green_heart:" alt="💚" src="https://twemoji.ruby-china.com/2/svg/1f49a.svg" class="twemoji"&gt; &lt;img title=":purple_heart:" alt="💜" src="https://twemoji.ruby-china.com/2/svg/1f49c.svg" class="twemoji"&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Sat, 10 Oct 2015 03:46:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/27615</link>
      <guid>https://ruby-china.org/topics/27615</guid>
    </item>
    <item>
      <title>Rails 里四个单字符长的辅助方法 (h, j, l, t)</title>
      <description>&lt;p&gt;Rails 有四个只有一个字符长的辅助方法，发个帖子用来提高新手搜索的成功率。&lt;/p&gt;
&lt;h2 id="h"&gt;&lt;code&gt;h&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ERB::Util#html_escape&lt;/code&gt; 的别名，Escape HTML 标签用。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/ERB/Util.html#method-c-html_escape" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ERB/Util.html#method-c-html_escape&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"is a &amp;gt; 0 &amp;amp; a &amp;lt; 10?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;amp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="j"&gt;&lt;code&gt;j&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;escape_javascript&lt;/code&gt; 的别名，过滤危险 JavaScript 响应用。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;$('#comment-&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="vi"&gt;@comment.id&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;').html('&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s1"&gt;'form'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;comment: &lt;/span&gt;&lt;span class="vi"&gt;@comment&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;');
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="l"&gt;&lt;code&gt;l&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;I18n#localize&lt;/code&gt; 的别名，本土化时间用。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/AbstractController/Translation.html#method-i-localize" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/AbstractController/Translation.html#method-i-localize&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
# =&amp;gt; "Wed, 22 Jul 2015 16:35:27 +0800"
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="t"&gt;&lt;code&gt;t&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;I18n#translate&lt;/code&gt; 的别名，查翻译文本用。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://api.rubyonrails.org/classes/AbstractController/Translation.html#method-i-translate" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/AbstractController/Translation.html#method-i-translate&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"site.title"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
# =&amp;gt; "My Awesome Store"
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>juanito</author>
      <pubDate>Wed, 22 Jul 2015 16:56:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/26609</link>
      <guid>https://ruby-china.org/topics/26609</guid>
    </item>
    <item>
      <title>Ruby 本色 — 31 篇深入理解 Ruby 的博文</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;About &lt;a href="http://idiosyncratic-ruby.com/" rel="nofollow" target="_blank" title=""&gt;Idiosyncratic Ruby&lt;/a&gt;
Ruby is not only optimized for developer happiness, but also for writing one-liners and it is still one of the top choices for code golfers. Ruby's grammar definition is more than 10000 lines long and there is no editor or syntax highlighter that actually highlights Ruby correctly. A lot of them already fail at highlighting strings not created with the usual quotes syntax, but with one of the more than 100 other ways. But:
IDIOSYNCRATIC != BAD&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/1-test-highlights.html" rel="nofollow" target="_blank" title=""&gt;Test Highlights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/2-ruby-string-magic.html" rel="nofollow" target="_blank" title=""&gt;Ruby String Magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/3-ruby-can-you-speak-louder.html" rel="nofollow" target="_blank" title=""&gt;Ruby, Can You Speak Louder?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/4-what-the-pack.html" rel="nofollow" target="_blank" title=""&gt;What the Pack?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/5-constant-shadows.html" rel="nofollow" target="_blank" title=""&gt;Constant Shadows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/6-run-ruby-run.html" rel="nofollow" target="_blank" title=""&gt;Run Ruby, Run!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/7-easier-switching.html" rel="nofollow" target="_blank" title=""&gt;Easier Switching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/8-self-improvement.html" rel="nofollow" target="_blank" title=""&gt;Self Improvement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/9-globalization.html" rel="nofollow" target="_blank" title=""&gt;Globalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/10-know-your-environment.html" rel="nofollow" target="_blank" title=""&gt;Know your Environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/11-regular-extremism.html" rel="nofollow" target="_blank" title=""&gt;Regular Extremism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/12-more-inspections.html" rel="nofollow" target="_blank" title=""&gt;More Inspections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/13-slicing-rubies.html" rel="nofollow" target="_blank" title=""&gt;Slicing Rubies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/14-meeting-some-locals.html" rel="nofollow" target="_blank" title=""&gt;Meeting some Locals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/15-207-ways-to-rome.html" rel="nofollow" target="_blank" title=""&gt;207 Ways to Rome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/16-changing-the-rules.html" rel="nofollow" target="_blank" title=""&gt;Changing the Rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/17-stream-editing.html" rel="nofollow" target="_blank" title=""&gt;Stream Editing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/18-con-struct-attributes.html" rel="nofollow" target="_blank" title=""&gt;Con-Struct Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/19-semantic-symbols.html" rel="nofollow" target="_blank" title=""&gt;Symbolic Reservations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/20-better-standards.html" rel="nofollow" target="_blank" title=""&gt;Better Standards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/21-uniform-resource-matching.html" rel="nofollow" target="_blank" title=""&gt;Uniform Resource Matching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/22-literate-ruby.html" rel="nofollow" target="_blank" title=""&gt;Literate Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/23-ruby-lookalikes.html" rel="nofollow" target="_blank" title=""&gt;Ruby Lookalikes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/24-goto-fail.html" rel="nofollow" target="_blank" title=""&gt;Goto Fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/25-meta-methodology.html" rel="nofollow" target="_blank" title=""&gt;Meta Methodology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/26-file-encoding-magic.html" rel="nofollow" target="_blank" title=""&gt;File Encoding Magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/27-golfing-basics.html" rel="nofollow" target="_blank" title=""&gt;Golfing Basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/28-operating-nothing.html" rel="nofollow" target="_blank" title=""&gt;Operating Nothing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/29-limitations-of-language.html" rel="nofollow" target="_blank" title=""&gt;Limitations of Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/30-regex-with-class.html" rel="nofollow" target="_blank" title=""&gt;Regex with Class&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://idiosyncratic-ruby.com/31-roots-of-rubyism.html" rel="nofollow" target="_blank" title=""&gt;Roots of Rubyism&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>juanito</author>
      <pubDate>Mon, 01 Jun 2015 23:50:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/25843</link>
      <guid>https://ruby-china.org/topics/25843</guid>
    </item>
    <item>
      <title>[远程] Ruby 中文官网徵求志工</title>
      <description>&lt;h2 id="职位描述"&gt;职位描述&lt;/h2&gt;
&lt;p&gt;Ruby 中文官网（zh_cn）的维护工作，工作内容包括持续翻译中文官网；尽速翻译 Ruby 英文网站的内容；审阅有关 Ruby 中文官网的 Pull Request；友善帮助其它的贡献者。本网站内容范围广泛，基本覆盖整个 Ruby 生态圈，在翻译细节和维护上都有很多挑战。&lt;/p&gt;
&lt;h2 id="职位要求"&gt;职位要求&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;精通中文&lt;/li&gt;
&lt;li&gt;熟悉英文&lt;/li&gt;
&lt;li&gt;具有耐心与细心与责任感&lt;/li&gt;
&lt;li&gt;具备良好的团队意识和协作精神，有较强的沟通能力&lt;/li&gt;
&lt;li&gt;欢迎应届计算机专业的毕业生，你可以&lt;strong&gt;从无到有&lt;/strong&gt;学习&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="加分项"&gt;加分项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ruby-China 有个人头像&lt;/li&gt;
&lt;li&gt;英语四级&lt;/li&gt;
&lt;li&gt;有很强的好奇心和学习能力&lt;/li&gt;
&lt;li&gt;熟悉 Git 和 GitHub&lt;/li&gt;
&lt;li&gt;有个人技术 Blog&lt;/li&gt;
&lt;li&gt;参与过开源项目&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Ruby 介绍"&gt;Ruby 介绍&lt;/h2&gt;
&lt;p&gt;Ruby 是一种跨平台、面向对象的动态类型编程语言。Ruby 体现了表达的一致性和简单性，它不仅是一门编程语言，更是表达想法的一种简练方式。&lt;/p&gt;
&lt;h2 id="待遇"&gt;待遇&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;到台北时我私人请你吃饭&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="福利"&gt;福利&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;快速获得 Ruby 的新动态&lt;/li&gt;
&lt;li&gt;与世界各地开发者交流的机会&lt;/li&gt;
&lt;li&gt;体验远程工作&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="投递简历"&gt;投递简历&lt;/h2&gt;
&lt;p&gt;请先阅读 &lt;a href="https://github.com/ruby/www.ruby-lang.org/wiki" rel="nofollow" target="_blank"&gt;https://github.com/ruby/www.ruby-lang.org/wiki&lt;/a&gt; ，阅读后请留言留下 GitHub 帐号，我再邀请你加入中文翻译团队。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;留下 GitHub ID 就可以到这里挑选任务：&lt;a href="https://github.com/ruby/www.ruby-lang.org/issues/1074" rel="nofollow" target="_blank"&gt;https://github.com/ruby/www.ruby-lang.org/issues/1074&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这波翻译结束后会询问是否有人想要当中文官网的维护者，主要的工作就是像我在 &lt;a href="https://github.com/ruby/www.ruby-lang.org/issues/1074" rel="nofollow" target="_blank"&gt;https://github.com/ruby/www.ruby-lang.org/issues/1074&lt;/a&gt; 这里这样，引导、提示、合并 Pull Request，以及没人出手时即时翻译新闻！&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Tue, 26 May 2015 15:29:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/25749</link>
      <guid>https://ruby-china.org/topics/25749</guid>
    </item>
    <item>
      <title>Active Job 指南译文</title>
      <description>&lt;p&gt;由 &lt;a href="https://github.com/tianlu1677" rel="nofollow" target="_blank" title=""&gt;Tian Lu&lt;/a&gt; 翻譯的 &lt;a href="http://guides.rubyonrails.org/active_job_basics.html" rel="nofollow" target="_blank" title=""&gt;Active Job Basics&lt;/a&gt; 可以到這裡閱讀：&lt;/p&gt;

&lt;p&gt;&lt;a href="http://guides.ruby-china.org/active_job_basics.html" rel="nofollow" target="_blank"&gt;http://guides.ruby-china.org/active_job_basics.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;謝謝！&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Sat, 18 Apr 2015 22:11:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/25194</link>
      <guid>https://ruby-china.org/topics/25194</guid>
    </item>
    <item>
      <title>Ruby 2.2 新方法一览</title>
      <description>&lt;p&gt;原文：&lt;a href="http://juanitofatas.com/2014/12/28/ruby-2-2/" rel="nofollow" target="_blank" title=""&gt;Ruby 2.2 New Methods by Example&lt;/a&gt;
相关帖子：&lt;a href="https://ruby-china.org/topics/23432" title=""&gt;Ruby 2.2 Tips: max (n), max_by (n), min (n), min_by (n) | Ruby China&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Object"&gt;Object&lt;/h2&gt;&lt;h3 id="Object#itself"&gt;&lt;code&gt;Object#itself&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/Object.html#method-i-itself" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/Object.html#method-i-itself&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;返回对象自身。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itself&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Method"&gt;Method&lt;/h2&gt;&lt;h3 id="Method#super_method"&gt;&lt;code&gt;Method#super_method&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/Method.html#method-i-super_method" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/Method.html#method-i-super_method&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;People&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greeting&lt;/span&gt;
    &lt;span class="s1"&gt;'Salve'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;American&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;People&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greeting&lt;/span&gt;
    &lt;span class="s1"&gt;'Hello'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;american&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;American&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;American:0x007febbe300ff0&amp;gt;&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;american&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;public_method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:greeting&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;super_method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Salve'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Enumerable"&gt;Enumerable&lt;/h2&gt;&lt;h3 id="Enumerable#slice_after"&gt;&lt;code&gt;Enumerable#slice_after&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-slice_after" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-slice_after&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Math&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\d/&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:to_i&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="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice_after&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:even?&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_a&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Enumerable#slice_when"&gt;&lt;code&gt;Enumerable#slice_when&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-slice_when" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-slice_when&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Math&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\d/&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:to_i&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="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice_when&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;even?&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;odd?&lt;/span&gt; &lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;to_a&lt;/span&gt;
&lt;span class="o"&gt;=&amp;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="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;max&lt;/code&gt;、&lt;code&gt;max_by&lt;/code&gt;、&lt;code&gt;min&lt;/code&gt;、&lt;code&gt;min_by&lt;/code&gt; these methods accept a argument &lt;code&gt;n&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt; is how many max (min) numbers you wanna return.&lt;/p&gt;
&lt;h3 id="Enumerable#max"&gt;&lt;code&gt;Enumerable#max&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-max" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-max&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Enumerable#min"&gt;&lt;code&gt;Enumerable#min&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-min" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-min&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Enumerable#max_by"&gt;&lt;code&gt;Enumerable#max_by&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-max_by" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-max_by&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="sx"&gt;%w[a aa aaa]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max_by&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:length&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"aaa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"aa"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Enumerable#min_by"&gt;&lt;code&gt;Enumerable#min_by&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-min_by" rel="nofollow" target="_blank"&gt;http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-min_by&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="sx"&gt;%w[a aa aaa]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min_by&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:length&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"aa"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Float"&gt;&lt;code&gt;Float&lt;/code&gt;&lt;/h2&gt;&lt;h3 id="Float#next_float"&gt;&lt;code&gt;Float#next_float&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/Float.html#method-i-next_float" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/Float.html#method-i-next_float&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Return next float.&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;3.1415926&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next_float&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;3.1415926000000005&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="Float#prev_float"&gt;&lt;code&gt;Float#prev_float&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/Float.html#method-i-prev_float" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/Float.html#method-i-prev_float&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Return previous float.&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;3.1415926&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prev_float&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;3.1415925999999996&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="File"&gt;&lt;code&gt;File&lt;/code&gt;&lt;/h2&gt;&lt;h3 id="File.birthtime"&gt;&lt;code&gt;File.birthtime&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/File.html#method-c-birthtime" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/File.html#method-c-birthtime&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;birthtime&lt;/span&gt; &lt;span class="s1"&gt;'README.md'&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;04&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="File#birthtime"&gt;&lt;code&gt;File#birthtime&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ruby-doc.org/core-2.2.0/File.html#method-c-birthtime" rel="nofollow" target="_blank"&gt;http://www.ruby-doc.org/core-2.2.0/File.html#method-c-birthtime&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'README.md'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;birthtime&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;04&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0800&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="String"&gt;&lt;code&gt;String&lt;/code&gt;&lt;/h2&gt;&lt;h3 id="String.unicode_normalize、String.unicode_normalize!、String.unicode_normalize?"&gt;
&lt;code&gt;String.unicode_normalize&lt;/code&gt;、&lt;code&gt;String.unicode_normalize!&lt;/code&gt;、&lt;code&gt;String.unicode_normalize?&lt;/code&gt;
&lt;/h3&gt;
&lt;p&gt;对字串进行 Unicode 正规化。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"¿como&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;0301 esta&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;0301s?"&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"¿comó estás?"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unicode_normalize&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"¿comó estás?"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"¿comó estás?"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unicode_normalized?&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unicode_normalize!&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"¿comó estás?"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"¿comó estás?"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unicode_normalized?&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>juanito</author>
      <pubDate>Sun, 28 Dec 2014 19:02:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/23443</link>
      <guid>https://ruby-china.org/topics/23443</guid>
    </item>
    <item>
      <title>Rails 4.2 发布记</title>
      <description>&lt;p&gt;大家好，&lt;/p&gt;

&lt;p&gt;Rails 4.2 release post 翻译好了，请大家去这里阅读 &lt;img title=":point_right:" alt="👉" src="https://twemoji.ruby-china.com/2/svg/1f449.svg" class="twemoji"&gt; &lt;a href="http://guides.ruby-china.org/4_2_release_notes.html" rel="nofollow" target="_blank" title=""&gt;Ruby on Rails 4.2 发布记&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;有错误或是修正用语：&lt;a href="https://github.com/ruby-china/guides" rel="nofollow" target="_blank"&gt;https://github.com/ruby-china/guides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;圣诞节快到了，圣诞快乐！ &lt;img title=":wink:" alt="😉" src="https://twemoji.ruby-china.com/2/svg/1f609.svg" class="twemoji"&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Mon, 22 Dec 2014 00:01:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/23323</link>
      <guid>https://ruby-china.org/topics/23323</guid>
    </item>
    <item>
      <title>Rails 中文指南新位置</title>
      <description>&lt;p&gt;贡献到这里：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ruby-china/guides/" rel="nofollow" target="_blank"&gt;https://github.com/ruby-china/guides/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;阅读看这里：&lt;/p&gt;

&lt;p&gt;&lt;a href="http://guides.ruby-china.org/" rel="nofollow" target="_blank"&gt;http://guides.ruby-china.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;内容来自 &lt;a href="/andor_chen" class="user-mention" title="@andor_chen"&gt;&lt;i&gt;@&lt;/i&gt;andor_chen&lt;/a&gt; 的翻译。请大家支持他的 &lt;a href="https://selfstore.io/products/13" rel="nofollow" target="_blank" title=""&gt;Rails 指南电子书&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;同时感谢 &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt; 的协助。&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Tue, 15 Jul 2014 00:09:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/20496</link>
      <guid>https://ruby-china.org/topics/20496</guid>
    </item>
    <item>
      <title>推荐 Ruby ＆ Rails 内部实现文集</title>
      <description>&lt;p&gt;作者是 &lt;a href="https://twitter.com/adamsanderson" rel="nofollow" target="_blank" title=""&gt;Adam Sanderson&lt;/a&gt;，写了一系列有关 Ruby 与 Rails 的博文。&lt;/p&gt;
&lt;h2 id="Ruby 标准库"&gt;Ruby 标准库&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_delegator/" rel="nofollow" target="_blank" title=""&gt;Delegator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_weakref/" rel="nofollow" target="_blank" title=""&gt;WeakRef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_timeout/" rel="nofollow" target="_blank" title=""&gt;Timeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_pathname/" rel="nofollow" target="_blank" title=""&gt;Pathname&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_abbrev/" rel="nofollow" target="_blank" title=""&gt;Abbrev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_tsort/" rel="nofollow" target="_blank" title=""&gt;TSort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_minitest_mock/" rel="nofollow" target="_blank" title=""&gt;MiniTest::Mock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_shellwords/" rel="nofollow" target="_blank" title=""&gt;Shellwords&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/ruby_standard_library_mini_test/" rel="nofollow" target="_blank" title=""&gt;MiniTest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="元 Ruby"&gt;元 Ruby&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/metaruby_calling_and_receiving_methods/" rel="nofollow" target="_blank" title=""&gt;Calling and Receiving Methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/metaruby_monkeying_with_methods/" rel="nofollow" target="_blank" title=""&gt;Monkeying With Methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/building_classes_dynamically/" rel="nofollow" target="_blank" title=""&gt;Building Classes Dynamically&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/metaruby_an_ounce_of_metaprogramming/" rel="nofollow" target="_blank" title=""&gt;An Ounce of Meta&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Reading Rails"&gt;Reading Rails&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_how_does_message_encryptor_work/" rel="nofollow" target="_blank" title=""&gt;How Does MessageEncryptor Work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_how_does_message_verifier_work/" rel="nofollow" target="_blank" title=""&gt;How Does MessageVerifier Work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_how_do_batched_queries_work/" rel="nofollow" target="_blank" title=""&gt;How Do Batched Queries Work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_the_adapter_pattern/" rel="nofollow" target="_blank" title=""&gt;The Adapter Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_errors_and_validators/" rel="nofollow" target="_blank" title=""&gt;Errors and Validators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_validations/" rel="nofollow" target="_blank" title=""&gt;How Validations Are Configured&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_concern/" rel="nofollow" target="_blank" title=""&gt;Concern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_more_migrations/" rel="nofollow" target="_blank" title=""&gt;More Migrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_migrations/" rel="nofollow" target="_blank" title=""&gt;Migrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_attribute_methods/" rel="nofollow" target="_blank" title=""&gt;Attribute Methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_change_tracking/" rel="nofollow" target="_blank" title=""&gt;Change Tracking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/reading_rails_handling_exceptions/" rel="nofollow" target="_blank" title=""&gt;Handling Exceptions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>juanito</author>
      <pubDate>Wed, 02 Jul 2014 13:44:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/20275</link>
      <guid>https://ruby-china.org/topics/20275</guid>
    </item>
    <item>
      <title>RubyConf Taiwan 2014 汇总</title>
      <description>&lt;p&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1000669/3422773/e0a7d676-ff63-11e3-82b6-45127f0fb91a.jpg" title="" alt="tell a good story"&gt;&lt;/p&gt;
&lt;h3 id="Keynote"&gt;Keynote&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1c85lSaZ-Vg" rel="nofollow" target="_blank" title=""&gt;Matz: Objective Ruby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=45s3KuMGeIQ" rel="nofollow" target="_blank" title=""&gt;Charles Nutter: Growing Up - Bringing Concurrency to Ruby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=9voOUTuAlQI" rel="nofollow" target="_blank" title=""&gt;Linda Liukas &amp;amp; Terence Lee: How the Principles of Ruby Inspired the Rails Girls Community&lt;/a&gt; &lt;a href="https://speakerdeck.com/hone/how-the-principles-of-ruby-inspired-the-rails-girls-community" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=xYIXSgOLnvM" rel="nofollow" target="_blank" title=""&gt;Justin Lin: Understanding Typing, Understanding Ruby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Talks"&gt;Talks&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=z0cjdXpte2U" rel="nofollow" target="_blank" title=""&gt;Andre Arko: Extreme Makeover - Rubygems Edition&lt;/a&gt; &lt;a href="https://speakerdeck.com/indirect/extreme-makeover-rubygems-edition-rubyconf-taiwan-2014" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=dxDZeJblDOY" rel="nofollow" target="_blank" title=""&gt;Amy Wibowo: Sweaters as a service - adventures in electronic knitting&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Zzp9senE1DA" rel="nofollow" target="_blank" title=""&gt;YUKI TORII: The guide to know Ruby implementation for non-C language programmer&lt;/a&gt; &lt;a href="https://speakerdeck.com/yotii23/walking-around-the-ruby-forest" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=YbKKhBzSIQQ" rel="nofollow" target="_blank" title=""&gt;Arne Brasseur: Functional Programming in Ruby&lt;/a&gt; &lt;a href="http://arnebrasseur.net/talks/rubyconftw2014/fp_in_ruby.html" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oElCTxpNW7o" rel="nofollow" target="_blank" title=""&gt;Francis Chong: Implement beautiful DSL for iOS using Ruby&lt;/a&gt; &lt;a href="https://speakerdeck.com/siuying/implement-beautiful-dsl-for-ios-using-ruby" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tr0eaNK6JuQ" rel="nofollow" target="_blank" title=""&gt;Team Yamanekko: How to debug mruby&lt;/a&gt; &lt;a href="http://www.slideshare.net/yamanekko/rubyconftw2014" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=q1Af56Obk7o" rel="nofollow" target="_blank" title=""&gt;Yuichiro MASUI: mruby on iOS == MobiRuby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=4IT7YWJvI5c" rel="nofollow" target="_blank" title=""&gt;Koichi Sasada: Object lifetime analysis with Ruby 2.1&lt;/a&gt; &lt;a href="http://www.atdot.net/~ko1/activities/2014_rubyconf_tw_pub.pdf" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=8dEgOx5wnP4" rel="nofollow" target="_blank" title=""&gt;Richard Lee: Ruby &amp;amp; Friends: Taking Go as an example&lt;/a&gt; &lt;a href="https://speakerdeck.com/dlackty/ruby-and-friends-taking-go-as-an-example" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=qWjwczTF6gs" rel="nofollow" target="_blank" title=""&gt;Zachary Scott: Contributing To Ruby: Part Two&lt;/a&gt; &lt;a href="https://speakerdeck.com/zzak/rubyconf-taiwan-contributing-to-ruby-part-two" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=CjK7zbHGcPk" rel="nofollow" target="_blank" title=""&gt;Szu Kai Hsu: Cores unleashed Exploiting Parallelism in Ruby with STM&lt;/a&gt; &lt;a href="https://speakerdeck.com/brucehsu/rubyconf-dot-tw-2014-cores-unleashed-exploiting-parallelism-in-ruby-with-stm" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=h9743cR7sBo" rel="nofollow" target="_blank" title=""&gt;Hiroshi SHIBATA: From "legacy" to the "edge" 2014 edition&lt;/a&gt; &lt;a href="https://speakerdeck.com/hsbt/from-legacy-to-edge-2014-edition-1" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1HbJ3E3EdNY" rel="nofollow" target="_blank" title=""&gt;Satoshi GUNJI: Introducing Rubyist Magazine&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Mnz6BLByslY" rel="nofollow" target="_blank" title=""&gt;Lance Gleason: Analytics For The Busy Ruby Developer&lt;/a&gt; &lt;a href="https://speakerdeck.com/lgleason/analytics-for-the-busy-ruby-developer" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=mCF67x2rP38" rel="nofollow" target="_blank" title=""&gt;Winston Teo: Happy Teams&lt;/a&gt; &lt;a href="https://speakerdeck.com/winston/happy-teams-rubyconf-tw" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2J6V-rkM724" rel="nofollow" target="_blank" title=""&gt;Joseph Ku: RubyMotion Gets A Cool New Friend: mruby on iOS&lt;/a&gt; &lt;a href="https://speakerdeck.com/joseph/rubymotion-gets-a-cool-new-friend-mruby-on-ios" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ypx_B6Lknws" rel="nofollow" target="_blank" title=""&gt;Manic Chuang: Practice: Refactoring with tests&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=IokFUvO9sh8" rel="nofollow" target="_blank" title=""&gt;godfat: RubyQC -- A conceptual QuickCheck library for Ruby&lt;/a&gt; &lt;a href="http://www.godfat.org/slide/2014-04-25-rubyqc/" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=gRnkP4Ecqds" rel="nofollow" target="_blank" title=""&gt;Taian Su: Tell a good story with Ruby&lt;/a&gt; &lt;a href="http://www.slideshare.net/taiansu/tell-a-good-story-with" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=UsHVlfcU5sg" rel="nofollow" target="_blank" title=""&gt;TonyTonyJan: Make Your Rails Backstage Better&lt;/a&gt; &lt;a href="http://tonytonyjan.net/slides/2014-04-25-better-rails-backstage/" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=-WnC1ZQ49Xc" rel="nofollow" target="_blank" title=""&gt;Richard Huang: Improve and refactor ruby code easier&lt;/a&gt; &lt;a href="http://xinminlabs.github.io/synvert-rubyconf-tw-2014/#/" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Zf9QD0ajM6A" rel="nofollow" target="_blank" title=""&gt;David Yun: 10 Things to Make API Users Like You&lt;/a&gt; &lt;a href="https://speakerdeck.com/abookyun/10-things-to-make-api-users-like-you" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=YL_c1g1a4j4" rel="nofollow" target="_blank" title=""&gt;TseChing Ho: Ruby on Bioinformatics&lt;/a&gt; &lt;a href="https://speakerdeck.com/tsechingho/ruby-on-bioinformatics" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="Lightening Talks"&gt;Lightening Talks&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=S_90KqKv05U" rel="nofollow" target="_blank" title=""&gt;Eddie Kao: Rails Girls in Taiwan&lt;/a&gt; &lt;a href="http://www.slideshare.net/aquarianboy/rails-girls-in-taipei" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Q2JqHd1ojOU" rel="nofollow" target="_blank" title=""&gt;Arne Brasseur: Learning Chinese with Ruby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=09PRpgynTjs" rel="nofollow" target="_blank" title=""&gt;Vincent: Package and distribute your Ruby application&lt;/a&gt; &lt;a href="https://speakerdeck.com/v1nc3ntlaw/build-full-stack-installer-for-ruby-application-with-omnibus" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=nWVUCFO-1fY" rel="nofollow" target="_blank" title=""&gt;TonyTonyJan: A Markdown Based Blogging System&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=cWZQ6-zMlG4" rel="nofollow" target="_blank" title=""&gt;Yu Hsiang Lin: Integrating Angularjs and Rails&lt;/a&gt; &lt;a href="http://slides.com/johnlinvc/integrating-angularjs-and-rails" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=F4vV5iXCuOA" rel="nofollow" target="_blank" title=""&gt;Tim Jones: Lingo - hosted content management system&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=0RrTqHQgqIM" rel="nofollow" target="_blank" title=""&gt;shesee: How to deploy your Rails application on Windows&lt;/a&gt; &lt;a href="http://www.slideshare.net/hsuc12/how-to-deploy-your-rails-application-on-windows" rel="nofollow" target="_blank" title=""&gt;&lt;img title=":gift:" alt="🎁" src="https://twemoji.ruby-china.com/2/svg/1f381.svg" class="twemoji"&gt; 幻灯片&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt; &lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt;&amp;nbsp;&lt;a href="https://www.flickr.com/photos/123590011@N08/sets/72157644587013882/" rel="nofollow" target="_blank" title=""&gt;RubyConf Taiwan 2014 照片集锦&lt;/a&gt; &lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt; &lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt;&amp;nbsp;&lt;a href="https://www.flickr.com/photos/igaiga/sets/72157644474230772/" rel="nofollow" target="_blank" title=""&gt;会众摄影&lt;/a&gt; &lt;img title=":camera:" alt="📷" src="https://twemoji.ruby-china.com/2/svg/1f4f7.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;a href="http://blog.yiming.tw/" rel="nofollow" target="_blank" title=""&gt;插图 by Ashley&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Sat, 28 Jun 2014 23:14:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/20217</link>
      <guid>https://ruby-china.org/topics/20217</guid>
    </item>
    <item>
      <title>用 Benchmark-ips 量测代码效能</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/ruby-china/ruby-china/wiki/%E9%87%8F%E6%B5%8B%E4%BB%A3%E7%A0%81%E6%95%88%E8%83%BD" rel="nofollow" target="_blank" title=""&gt;原帖&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[benchmark-ips][bips] 是由 Puma 作者 Evan Phoenix（&lt;a href="/evanphx" class="user-mention" title="@evanphx"&gt;&lt;i&gt;@&lt;/i&gt;evanphx&lt;/a&gt;）所写的 RubyGem。&lt;/p&gt;
&lt;h3 id="安装"&gt;安装&lt;/h3&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;benchmark-ips
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="使用方法"&gt;使用方法&lt;/h3&gt;
&lt;p&gt;首先把库引入，接著用一个 &lt;code&gt;Benchmark.ips do |x| ... end&lt;/code&gt; 区块包住要量测的代码，&lt;code&gt;x&lt;/code&gt; 实现了一个 &lt;code&gt;report&lt;/code&gt; 方法，负责量测代码。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'benchmark/ips'&lt;/span&gt;

&lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ips&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"addition"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"addition2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt;
      &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
      &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"addition3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"1 + 2"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;report&lt;/code&gt; 第一个参数是字串，用来说明量测的是什么。后面放要量测的代码，可以区块、字串形式传入。&lt;/p&gt;

&lt;p&gt;原先使用 Ruby 自带的 &lt;a href="http://www.ruby-doc.org/stdlib-2.1.2/libdoc/benchmark/rdoc/Benchmark.html" rel="nofollow" target="_blank" title=""&gt;Benchmark 库&lt;/a&gt;，需要预测到底要执行几次，才可以得到信服的结果。&lt;/p&gt;

&lt;p&gt;而次数又因各个开发者使用的机器而异。Benchmark-ips 很好的解决了这个问题。&lt;/p&gt;

&lt;p&gt;Benchmark-ips 会在 5 秒内尽可能执行代码，告诉你 5 秒内代码可以执行几次（i/s，iteration per second）。&lt;/p&gt;

&lt;p&gt;若想更改默认的 5 秒，譬如改成 20 秒：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ips&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上例执行结果：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Calculating -------------------------------------
            addition     72783 i/100ms
           addition2     68922 i/100ms
           addition3     84483 i/100ms
-------------------------------------------------
            addition  5085784.0 (±7.3%) i/s -   25255701 in   4.999724s
           addition2 23843924.9 (±10.0%) i/s -  116960634 in   4.993053s
           addition3 24357200.0 (±7.5%) i/s -  120726207 in   4.997873s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除了排版精美之外，最棒的是会显示标准偏差值，可以更好的了解量测结果。&lt;/p&gt;

&lt;p&gt;：）&lt;/p&gt;

&lt;p&gt;[bips]: &lt;a href="https://github.com/evanphx/benchmark-ips" rel="nofollow" target="_blank"&gt;https://github.com/evanphx/benchmark-ips&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Fri, 13 Jun 2014 17:11:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/19925</link>
      <guid>https://ruby-china.org/topics/19925</guid>
    </item>
    <item>
      <title>microrb.com</title>
      <description>&lt;p&gt;&lt;a href="http://microrb.com" rel="nofollow" target="_blank"&gt;http://microrb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;列出簡潔、相依少、專一的 RubyGem。&lt;/p&gt;

&lt;p&gt;都是「做一件事，把它做好」的 RubyGem，學習 Ruby 的好地方。&lt;/p&gt;

&lt;p&gt;研讀源代碼的好去處。&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Mon, 19 May 2014 03:38:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/19364</link>
      <guid>https://ruby-china.org/topics/19364</guid>
    </item>
    <item>
      <title>Working with JavaScript in Rails 译文</title>
      <description>&lt;p&gt;原文：&lt;a href="http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html" rel="nofollow" target="_blank"&gt;http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html&lt;/a&gt;
译文：&lt;a href="http://git.io/SCwOuA" rel="nofollow" target="_blank"&gt;http://git.io/SCwOuA&lt;/a&gt;
&lt;a href="https://github.com/JuanitoFatas/Guides/edit/master/guides/edge-translation/working-with-javascript-in-rails-zh_CN.md" rel="nofollow" target="_blank" title=""&gt;欢迎帮我修正用语&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="Rails x JavaScript"&gt;Rails x JavaScript&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;特别要强调的翻译名词&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web application 应用程序
Request 请求
Vanilla JavaScript 纯 JavaScript&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;本篇介绍 Rails 自带的 Ajax/JavaScript 功能。让你轻松打造丰富生动的 Ajax 应用程序。&lt;/p&gt;

&lt;p&gt;读完你可能会学到...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajax 的基础。&lt;/li&gt;
&lt;li&gt;Unobtrusive JavaScript (via jQuery-ujs).&lt;/li&gt;
&lt;li&gt;如何使用 Rails 内建的 Helpers。&lt;/li&gt;
&lt;li&gt;在服务器端处理 Ajax。&lt;/li&gt;
&lt;li&gt;Turbolinks。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="Ajax 介绍"&gt;Ajax 介绍&lt;/h2&gt;
&lt;p&gt;为了要理解 Ajax，首先要了解浏览器平常的工作原理。&lt;/p&gt;

&lt;p&gt;当你在浏览器网址栏输入 &lt;code&gt;http://localhost:3000&lt;/code&gt;，并按下回车。浏览器此时（Client）便向服务器发送请求。服务器接受 Request，去拿所有需要的资源（assets）给你，像是 js、css、图片等，接著将这些资源按照程序逻辑组合成网页，再响应给你（Response）。&lt;/p&gt;

&lt;p&gt;如果你在网页里按下某个连结，将会重复刚刚的步骤：发送请求、抓取资源、组合页面、返回结果。这几个步骤通常称之为“Request Response Cycle”。&lt;/p&gt;

&lt;p&gt;JavaScript 也可向服务器发送请求或是解析 Response。JavaScript 也具有更新网页的能力。熟悉 JavaScript 的开发者可以做到只更新部分的页面，而无需向服务器请求整个页面。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这个强大的技术叫做 Ajax。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rails 出厂内建 CoffeeScript，故以下的例子皆以 CoffeeScript 撰写。当然，这些例子也可用纯 JavaScript 写出来。&lt;/p&gt;

&lt;p&gt;用 jQuery 发送 Ajax 请求的例子：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ajax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"/test"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;done&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&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;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"#results"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这段程序从 &lt;code&gt;/test&lt;/code&gt; 获取数据，并将数据附加在 &lt;code&gt;id&lt;/code&gt; 为 &lt;code&gt;#results&lt;/code&gt; 的元素之后。&lt;/p&gt;

&lt;p&gt;Rails 对于使用这种技巧来撰写网页，提供了相当多的官方支援。几乎鲜少会需要自己编这样的程序。以下章节将示范，如何用点简单的技术，Rails 便能帮你写出应用了 Ajax 的网站。&lt;/p&gt;
&lt;h2 id="Unobtrusive JavaScript"&gt;Unobtrusive JavaScript&lt;/h2&gt;
&lt;p&gt;Rails 使用一种叫做“[Unobtrusive JavaScript][ujs]” （缩写为 UJS）的技术来处理 DOM 操作。这是来自前端社群的最佳实践，但有些教学文件可能会用别种技术，来达成同样的事情。&lt;/p&gt;

&lt;p&gt;以下是撰写 JavaScript 最简单的方式（行内 JavaScript）：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"this.style.backgroundColor='#990000'"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it red&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按下连结，背景就变红。但要是我们有许多 JavaScript 代码，要在按下时执行怎么办？&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"this.style.backgroundColor='#009900';this.style.color='#FFFFFF';"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it green&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;尴尬吧？我们可以将 JavaScript 抽离出来，并用 CoffeeScript 改写：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;paintIt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;textColor&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;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;textColor&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;
    &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;textColor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接著在页面上：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"paintIt(this, '#990000')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it red&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看起来好一点了，但多个连结都要有同样的效果呢？&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"paintIt(this, '#990000')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it red&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"paintIt(this, '#009900', '#FFFFFF')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it green&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"paintIt(this, '#000099', '#FFFFFF')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it blue&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不是很漂亮，很冗赘。可以使用事件来简化。给每个连结加上 &lt;code&gt;data-*&lt;/code&gt; 属性，接著给每个连结的 click 事件，加上一个 Handler：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;paintIt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;textColor&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;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;textColor&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;
    &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;textColor&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a[data-background-color]"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"background-color"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;textColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"text-color"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;paintIt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;textColor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;data-background-color=&lt;/span&gt;&lt;span class="s"&gt;"#990000"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it red&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;data-background-color=&lt;/span&gt;&lt;span class="s"&gt;"#009900"&lt;/span&gt; &lt;span class="na"&gt;data-text-color=&lt;/span&gt;&lt;span class="s"&gt;"#FFFFFF"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it green&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;data-background-color=&lt;/span&gt;&lt;span class="s"&gt;"#000099"&lt;/span&gt; &lt;span class="na"&gt;data-text-color=&lt;/span&gt;&lt;span class="s"&gt;"#FFFFFF"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Paint it blue&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们将这个技术称为“Unobtrusive”JavaScript。因为我们不再需要把 JavaScript 与 HTML 混在一起。之后便更容易修改，也更容易加新功能上去，只要加个 &lt;code&gt;data-&lt;/code&gt; attribute。将 JavaScript 从 HTML 抽离后，JavaScript 便可透过合并压缩工具，让所有页面可以共用整份 JavaScript。也就是说，只需在第一次戴入页面时下载一次，之后的页面使用快取的文件即可。&lt;/p&gt;

&lt;p&gt;Rails 团队强烈建议你用这种风格来撰写 CoffeeScript (JavaScript)。&lt;/p&gt;
&lt;h2 id="自带的 Ajax Helpers"&gt;自带的 Ajax Helpers&lt;/h2&gt;
&lt;p&gt;Rails 在 View 提供了许多用 Ruby 写的 Helper 方法来帮你生成 HTML。有时候会想在这些元素加上 Ajax，没问题，Rails 会帮助你。&lt;/p&gt;

&lt;p&gt;Rails 的“Ajax Helpers”实际上分成 JavaScript 所写的 Helpers，与 Ruby 所写成的 Helpers。&lt;/p&gt;

&lt;p&gt;用 JavaScript 写的可以在这找到 [rails.js][rails-js]。&lt;/p&gt;
&lt;h3 id="form_for"&gt;form_for&lt;/h3&gt;
&lt;p&gt;[&lt;code&gt;form_for&lt;/code&gt;][form_for]&lt;/p&gt;

&lt;p&gt;帮助你撰写表单的 Helper。接受一个 &lt;code&gt;:remote&lt;/code&gt; 选项：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;form_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  ...
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会生成出：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;accept-charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/posts"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"new_post"&lt;/span&gt; &lt;span class="na"&gt;data-remote=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"new_post"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意 &lt;code&gt;data-remote="true"&lt;/code&gt;。有了这个 attribute 之后，表单会透过 Ajax 提交，而不是浏览器平常的提交机制。&lt;/p&gt;

&lt;p&gt;提交成功与失败可以透过 &lt;code&gt;ajax:success&lt;/code&gt; 与 &lt;code&gt;ajax:error&lt;/code&gt; 事件，来附加内容至 DOM：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;ready&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"#new_post"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ajax:success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;xhr&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;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"#new_post"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;responseText&lt;/span&gt;
  &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;bind&lt;/span&gt; &lt;span class="s"&gt;"ajax:error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&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;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"#new_post"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;p&amp;gt;ERROR&amp;lt;/p&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然这只是个开始，更多可用的事件可在 [jQuery-ujs 的维基页面][jquery-ujs-wiki] 上可找到。&lt;/p&gt;
&lt;h3 id="form_tag"&gt;form_tag&lt;/h3&gt;
&lt;p&gt;[&lt;code&gt;form_tag&lt;/code&gt;][form_tag]&lt;/p&gt;

&lt;p&gt;跟 &lt;code&gt;form_for&lt;/code&gt; 非常类似，接受 &lt;code&gt;:remote&lt;/code&gt; 选项：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;form_tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/posts'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会生成&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;accept-charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/posts"&lt;/span&gt; &lt;span class="na"&gt;data-remote=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="link_to"&gt;link_to&lt;/h3&gt;
&lt;p&gt;[&lt;code&gt;link_to&lt;/code&gt;][link_to]&lt;/p&gt;

&lt;p&gt;帮助你生成连结的 Helper。接受一个 &lt;code&gt;:remote&lt;/code&gt; 选项：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"a post"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会生成&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/posts/1"&lt;/span&gt; &lt;span class="na"&gt;data-remote=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;a post&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可以上面 &lt;code&gt;form_for&lt;/code&gt; 例子那样，绑定相同的 Ajax 事件上去。来看个例子，假设按个按键，删除一篇文章，提示一些讯息。只需写一些 HTML：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Delete post"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;method: :delete&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并写一点 CoffeeScript：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a[data-remote]"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="s"&gt;"ajax:success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;xhr&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;alert&lt;/span&gt; &lt;span class="s"&gt;"The post was deleted."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就这么简单。&lt;/p&gt;
&lt;h3 id="button_to"&gt;button_to&lt;/h3&gt;
&lt;p&gt;[&lt;code&gt;button_to&lt;/code&gt;][button_to]&lt;/p&gt;

&lt;p&gt;建立按钮的 Helper。接受一个 &lt;code&gt;:remote&lt;/code&gt; 选项：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;button_to&lt;/span&gt; &lt;span class="s2"&gt;"A post"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会生成：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/posts/1"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button_to"&lt;/span&gt; &lt;span class="na"&gt;data-remote=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"A post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"authenticity_token"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"hidden"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"PVXViXMJCLd717CYN5Ty7/gTLF3iaqPhL33FTeBmoVk="&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于这只是个 &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;，所有 &lt;code&gt;form_for&lt;/code&gt; 可用的东西，也可以应用在 &lt;code&gt;button_to&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="服务器端的考量"&gt;服务器端的考量&lt;/h2&gt;
&lt;p&gt;Ajax 不只是 Client-side 的事，服务器也要出力。人们倾向 Ajax requests 返回 JSON，而不是 HTML，让我们看看如何返回 JSON。&lt;/p&gt;
&lt;h3 id="简单的例子"&gt;简单的例子&lt;/h3&gt;
&lt;p&gt;想像你有许多用户，你想给他们显示建立新用户的表单。而 Controller 的 &lt;code&gt;index&lt;/code&gt; action：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UsersController&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;
    &lt;span class="vi"&gt;@users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;
    &lt;span class="vi"&gt;@user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以及 &lt;code&gt;index&lt;/code&gt; View (&lt;code&gt;app/views/users/index.html.erb&lt;/code&gt;)：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;Users&lt;span class="nt"&gt;&amp;lt;/b&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"users"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="vi"&gt;@users&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;form_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;remote: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;label&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text_field&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;app/views/users/_user.html.erb&lt;/code&gt; Partial：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;index 页面上半部列出用户，下半部提供新建用户的表单。&lt;/p&gt;

&lt;p&gt;下面的表单会呼叫 Users Controller 的 &lt;code&gt;create&lt;/code&gt; action。因为表单有 &lt;code&gt;remote: true&lt;/code&gt; 这个选项，Request 会使用 Ajax Post 到 Users Controller，等待 Controller 回应 JavaScript。处理这个 Request 的 &lt;code&gt;create&lt;/code&gt; action 会像是：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# app/controllers/users_controller.rb&lt;/span&gt;
&lt;span class="c1"&gt;# ......&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;
  &lt;span class="vi"&gt;@user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

  &lt;span class="n"&gt;respond_to&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@user.save&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;redirect_to&lt;/span&gt; &lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;notice: &lt;/span&gt;&lt;span class="s1"&gt;'User was successfully created.'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;   &lt;span class="p"&gt;{}&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: :created&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;location: &lt;/span&gt;&lt;span class="vi"&gt;@user&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;action: &lt;/span&gt;&lt;span class="s2"&gt;"new"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;json: &lt;/span&gt;&lt;span class="vi"&gt;@user.errors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;status: :unprocessable_entity&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意 &lt;code&gt;respond_to&lt;/code&gt; 区块内的 &lt;code&gt;format.js&lt;/code&gt;，这是 Cotroller 回应 Ajax Request 的地方。&lt;code&gt;create&lt;/code&gt; action 对应 &lt;code&gt;app/views/users/create.js.erb&lt;/code&gt;：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;$("&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;escape_javascript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;").appendTo("#users");
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Turbolinks"&gt;Turbolinks&lt;/h2&gt;
&lt;p&gt;Rails 4 出厂内建 &lt;a href="https://github.com/rails/turbolinks" rel="nofollow" target="_blank" title=""&gt;Turbolinks Gem&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;这个 Gem 使用了 Ajax 技术，可以加速页面的渲染。&lt;/p&gt;
&lt;h3 id="Turbolinks 工作原理"&gt;Turbolinks 工作原理&lt;/h3&gt;
&lt;p&gt;Turbolinks 给页面上所有的 &lt;code&gt;a&lt;/code&gt; 标籤添加了一个 click handler。如果浏览器支援 [PushState][ps]，Turbolinks 会利用 PushState 来改变 URL，发送 Ajax 请求，替换 &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; 的内容。&lt;/p&gt;

&lt;p&gt;启用 Turbolinks 只需在 &lt;code&gt;Gemfile&lt;/code&gt; 加入：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'turbolinks'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并在 CoffeeScript Manifest 文件（&lt;code&gt;app/assets/javascripts/application.js&lt;/code&gt;）里加入：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="o"&gt;/=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt; &lt;span class="nx"&gt;turbolinks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要给某些 link 禁用 Turbolinks，给该标籤加上 &lt;code&gt;data-no-turbolink&lt;/code&gt; attribute 即可：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;data-no-turbolink&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;No turbolinks here&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="页面变化的事件"&gt;页面变化的事件&lt;/h3&gt;
&lt;p&gt;撰写 CoffeeScript 时，通常会想在页面加载时做某些处理，搭配 jQuery，通常会写出像是下面的代码：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;ready&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;alert&lt;/span&gt; &lt;span class="s"&gt;"page has loaded!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;而 Turbolinks 覆写了页面加载逻辑，依赖 &lt;code&gt;$(document).ready&lt;/code&gt; 的代码不会被执行。必须改写成：&lt;/p&gt;
&lt;pre class="highlight coffeescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="s"&gt;"page:change"&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;alert&lt;/span&gt; &lt;span class="s"&gt;"page has loaded!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关于更多细节，其他可以绑定的事件等，参考 &lt;a href="https://github.com/rails/turbolinks/blob/master/README.md" rel="nofollow" target="_blank" title=""&gt;Turbolinks 的 README&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="其他资源"&gt;其他资源&lt;/h2&gt;
&lt;p&gt;中文推荐阅读 &lt;a href="https://twitter.com/chloerei" rel="nofollow" target="_blank" title=""&gt;&lt;/a&gt;&lt;a href="/Rei" class="user-mention" title="@Rei"&gt;&lt;i&gt;@&lt;/i&gt;Rei&lt;/a&gt; 所写的 [Rails 3.2 的 Ajax 向导][rails-3-2-ajax-by-rei]。&lt;/p&gt;

&lt;p&gt;了解更多相关内容，请参考以下连结：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rails/jquery-ujs/wiki" rel="nofollow" target="_blank" title=""&gt;jquery-ujs wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rails/jquery-ujs/wiki/External-articles" rel="nofollow" target="_blank" title=""&gt;jquery-ujs list of external articles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.alfajango.com/blog/rails-3-remote-links-and-forms/" rel="nofollow" target="_blank" title=""&gt;Rails 3 Remote Links and Forms: A Definitive Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://railscasts.com/episodes/205-unobtrusive-javascript" rel="nofollow" target="_blank" title=""&gt;Railscasts: Unobtrusive JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://railscasts.com/episodes/390-turbolinks" rel="nofollow" target="_blank" title=""&gt;Railscasts: Turbolinks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[jquery-ujs-wiki]: &lt;a href="https://github.com/rails/jquery-ujs/wiki/ajax" rel="nofollow" target="_blank"&gt;https://github.com/rails/jquery-ujs/wiki/ajax&lt;/a&gt;
[ps]: &lt;a href="https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history#The_pushState.C2.A0method" rel="nofollow" target="_blank"&gt;https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history#The_pushState.C2.A0method&lt;/a&gt;(\)
[rails-js]: &lt;a href="https://github.com/rails/jquery-ujs/blob/master/src/rails.js" rel="nofollow" target="_blank"&gt;https://github.com/rails/jquery-ujs/blob/master/src/rails.js&lt;/a&gt;
[form_for]: &lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for&lt;/a&gt;
[form_tag]: &lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag&lt;/a&gt;
[link_to]: &lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to&lt;/a&gt;
[button_to]: &lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to" rel="nofollow" target="_blank"&gt;http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to&lt;/a&gt;
[ujs]: &lt;a href="http://zh.wikipedia.org/zh-cn/Unobtrusive_JavaScript" rel="nofollow" target="_blank"&gt;http://zh.wikipedia.org/zh-cn/Unobtrusive_JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[rails-3-2-ajax-by-rei]: &lt;a href="http://chloerei.com/2012/04/21/rails-3-2-ajax-guide/" rel="nofollow" target="_blank"&gt;http://chloerei.com/2012/04/21/rails-3-2-ajax-guide/&lt;/a&gt;&lt;/p&gt;</description>
      <author>juanito</author>
      <pubDate>Sun, 12 Jan 2014 22:42:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/16749</link>
      <guid>https://ruby-china.org/topics/16749</guid>
    </item>
    <item>
      <title>Active Model Basics 译文</title>
      <description>&lt;p&gt;原文：&lt;a href="http://edgeguides.rubyonrails.org/active_model_basics.html" rel="nofollow" target="_blank"&gt;http://edgeguides.rubyonrails.org/active_model_basics.html&lt;/a&gt;
译文：&lt;a href="http://git.io/5G6-uQ" rel="nofollow" target="_blank"&gt;http://git.io/5G6-uQ&lt;/a&gt;
有错误可提高的地方，欢迎给我提 Pull Request。&lt;/p&gt;
&lt;h2 id="Active Model 基础"&gt;Active Model 基础&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;特别要强调的翻译名词&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Module 模块&lt;/p&gt;

&lt;p&gt;Attribute 属性&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;本篇教你如何开始使用 Model。Active Model 允许 Action Pack Helpers 与不是 Active Record 的 Model 类别来做交互。Active Model 也允许你在 Rails 框架之外自己造 ORM。&lt;/p&gt;
&lt;h2 id="1. 简介"&gt;1. 简介&lt;/h2&gt;
&lt;p&gt;Active Model 是一个函式库，由许多用来与 Action Pack 互动的模块组成。以下简单介绍几个 Active Model 的模块。&lt;/p&gt;
&lt;h2 id="1.1 AttributeMethods 模块"&gt;1.1 AttributeMethods 模块&lt;/h2&gt;
&lt;p&gt;用来给方法加上前缀或后缀。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ActiveModel&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;AttributeMethods&lt;/span&gt;

  &lt;span class="n"&gt;attribute_method_prefix&lt;/span&gt; &lt;span class="s1"&gt;'reset_'&lt;/span&gt;
  &lt;span class="n"&gt;attribute_method_suffix&lt;/span&gt; &lt;span class="s1"&gt;'_highest?'&lt;/span&gt;
  &lt;span class="n"&gt;define_attribute_methods&lt;/span&gt; &lt;span class="s1"&gt;'age'&lt;/span&gt;

  &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:age&lt;/span&gt;

  &lt;span class="kp"&gt;private&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reset_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;send&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="n"&gt;attribute&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&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="k"&gt;end&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;attribute_highest?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;110&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;age_highest?&lt;/span&gt;  &lt;span class="c1"&gt;# true&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reset_age&lt;/span&gt;     &lt;span class="c1"&gt;# 0&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;age_highest?&lt;/span&gt;  &lt;span class="c1"&gt;# false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="1.2 Callbacks 模块"&gt;1.2 Callbacks 模块&lt;/h2&gt;
&lt;p&gt;Active Record 风格的 Callbacks。让我们可以在运行期定义 Callbacks。定义 Callback 后便有 &lt;code&gt;before_*&lt;/code&gt;、&lt;code&gt;after_*&lt;/code&gt; 与 &lt;code&gt;around_*&lt;/code&gt; 方法可用。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
  &lt;span class="kp"&gt;extend&lt;/span&gt; &lt;span class="no"&gt;ActiveModel&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Callbacks&lt;/span&gt;

  &lt;span class="n"&gt;define_model_callbacks&lt;/span&gt; &lt;span class="ss"&gt;:update&lt;/span&gt;

  &lt;span class="n"&gt;before_update&lt;/span&gt; &lt;span class="ss"&gt;:reset_me&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;
    &lt;span class="n"&gt;run_callbacks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
      &lt;span class="c1"&gt;# This method is called when update is called on an object.&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reset_me&lt;/span&gt;
    &lt;span class="c1"&gt;# This method is called when update is called on an object as a before_update callback is defined.&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="1.3 Conversion 模块"&gt;1.3 Conversion 模块&lt;/h2&gt;
&lt;p&gt;如果一个类别有定义 &lt;code&gt;persisted?&lt;/code&gt; 与 &lt;code&gt;id&lt;/code&gt; 方法，则你可引入 &lt;code&gt;Conversion&lt;/code&gt; 模块，并对此类别的对象呼叫 Rails 的 conversion 方法（&lt;code&gt;to_model&lt;/code&gt;、&lt;code&gt;to_key&lt;/code&gt;、&lt;code&gt;to_param&lt;/code&gt;）。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ActiveModel&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Conversion&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;persisted?&lt;/span&gt;
    &lt;span class="kp"&gt;false&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;id&lt;/span&gt;
    &lt;span class="kp"&gt;nil&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_model&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt;  &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_key&lt;/span&gt;              &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_param&lt;/span&gt;            &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="1.4 Dirty 模块"&gt;1.4 Dirty 模块&lt;/h2&gt;
&lt;p&gt;对象有一个或多个改动，却未储存，则称对象变 dirty 了。这让我们可以检查对象是否有改动。以下是 &lt;code&gt;Person&lt;/code&gt; 类别，有 &lt;code&gt;first_name&lt;/code&gt; 与 &lt;code&gt;last_name&lt;/code&gt; 这两个属性：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'active_model'&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ActiveModel&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Dirty&lt;/span&gt;
  &lt;span class="n"&gt;define_attribute_methods&lt;/span&gt; &lt;span class="ss"&gt;:first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:last_name&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;first_name&lt;/span&gt;
    &lt;span class="vi"&gt;@first_name&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;first_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;first_name_will_change!&lt;/span&gt;
    &lt;span class="vi"&gt;@first_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;last_name&lt;/span&gt;
    &lt;span class="vi"&gt;@last_name&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;last_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;last_name_will_change!&lt;/span&gt;
    &lt;span class="vi"&gt;@last_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save&lt;/span&gt;
    &lt;span class="c1"&gt;# do save work...&lt;/span&gt;
    &lt;span class="n"&gt;changes_applied&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="1.4.1 查询对象的变化"&gt;1.4.1 查询对象的变化&lt;/h3&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;changed?&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;

&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"First Name"&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "First Name"&lt;/span&gt;

&lt;span class="c1"&gt;# returns if any attribute has changed.&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;changed?&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;

&lt;span class="c1"&gt;# returns a list of attributes that have changed before saving.&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;changed&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ["first_name"]&lt;/span&gt;

&lt;span class="c1"&gt;# returns a hash of the attributes that have changed with their original values.&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;changed_attributes&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; {"first_name"=&amp;gt;nil}&lt;/span&gt;

&lt;span class="c1"&gt;# returns a hash of changes, with the attribute names as the keys, and the values will be an array of the old and new value for that field.&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;changes&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; {"first_name"=&amp;gt;[nil, "First Name"]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="1.4.2 基于属性的 accessor 方法"&gt;1.4.2 基于属性的 accessor 方法&lt;/h3&gt;
&lt;p&gt;检查 &lt;code&gt;first_name&lt;/code&gt; 这个属性是否有改动，&lt;code&gt;first_name_changed?&lt;/code&gt;：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# attr_name_changed?&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "First Name"&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name_changed?&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查属性上一次的数值：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# attr_name_was accessor&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name_was&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "First Name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查属性上次与当前的值，有变化返回 Array，没变化返回 &lt;code&gt;nil&lt;/code&gt;：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# attr_name_change&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;first_name_change&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; [nil, "First Name"]&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;last_name_change&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="1.5 Validations 模块"&gt;1.5 Validations 模块&lt;/h2&gt;
&lt;p&gt;给类别加入 Active Record 风格的验证功能：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ActiveModel&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Validations&lt;/span&gt;

  &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:token&lt;/span&gt;

  &lt;span class="n"&gt;validates&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;validates_format_of&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;with: &lt;/span&gt;&lt;span class="sr"&gt;/\A([^\s]+)((?:[-a-z0-9]\.)[a-z]{2,})\z/i&lt;/span&gt;
  &lt;span class="n"&gt;validates!&lt;/span&gt; &lt;span class="ss"&gt;:token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;presence: &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;token: &lt;/span&gt;&lt;span class="s2"&gt;"2b1f325"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid?&lt;/span&gt;                        &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'vishnu'&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'me'&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid?&lt;/span&gt;                        &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'me@vishnuatrai.com'&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid?&lt;/span&gt;                        &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid?&lt;/span&gt;                        &lt;span class="c1"&gt;# =&amp;gt; raises ActiveModel::StrictValidationFailed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>juanito</author>
      <pubDate>Tue, 24 Dec 2013 20:45:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/16397</link>
      <guid>https://ruby-china.org/topics/16397</guid>
    </item>
    <item>
      <title>Ruby on Rails 4.1 发布记</title>
      <description>&lt;h2 id="移至 Ruby on Rails 4.1 发布记 — Ruby on Rails 指南"&gt;移至 &lt;a href="http://guides.ruby-china.org/4_1_release_notes.html" rel="nofollow" target="_blank" title=""&gt;Ruby on Rails 4.1 发布记 — Ruby on Rails 指南&lt;/a&gt;
&lt;/h2&gt;</description>
      <author>juanito</author>
      <pubDate>Fri, 20 Dec 2013 01:11:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/16324</link>
      <guid>https://ruby-china.org/topics/16324</guid>
    </item>
  </channel>
</rss>
