<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-555579656522460087</atom:id><lastBuildDate>Sat, 25 Oct 2025 07:33:41 +0000</lastBuildDate><category>LT</category><category>NewsPicks</category><category>合同勉強会</category><category>インターン</category><category>社内勉強会</category><category>たぬき</category><category>外部勉強会</category><category>CentOS7</category><category>Chrome</category><category>D3.js</category><category>Docker</category><category>LAMP</category><category>Lua</category><category>Redis</category><category>Scala</category><category>Wordpressインストール</category><category>tomochang</category><category>パーサコンビネータ</category><category>負荷分散</category><title>UZABASE開発者ブログ（旧）</title><description>&lt;p&gt;&lt;a href=&quot;http://www.uzabase.com/speeda/&quot;&gt;SPEEDA&lt;/a&gt;,&lt;a href=&quot;https://newspicks.com/top-news&quot;&gt;NewsPicks&lt;/a&gt;を開発している&lt;a href=&quot;http://www.uzabase.com/&quot;&gt;株式会社ユーザベース&lt;/a&gt;のエンジニアブログです。&lt;/p&gt;</description><link>http://uzabase.blogspot.com/</link><managingEditor>noreply@blogger.com (阿達)</managingEditor><generator>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-6176677279230326637</guid><pubDate>Wed, 21 Jan 2015 05:23:00 +0000</pubDate><atom:updated>2015-01-21T14:23:54.072+09:00</atom:updated><title>はてなブログに移行しました！</title><description>ブログ担当の阿達です。

この度はてなブログに移行しました。
新しいブログはこちら
『&lt;a href=&quot;http://tech.uzabase.com&quot;&gt;UZABASE Tech Blog&lt;/a&gt;』

引き続きUZABASE開発者ブログをよろしくお願いします。

Twitterではブログの更新情報や勉強会のお知らせをツイートしています。

@Uzabase_Tech

こちらもフォローよろしくお願いします！</description><link>http://uzabase.blogspot.com/2015/01/blog-post.html</link><author>noreply@blogger.com (阿達)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-5576339012577887508</guid><pubDate>Wed, 14 Jan 2015 10:21:00 +0000</pubDate><atom:updated>2015-01-14T19:21:59.871+09:00</atom:updated><title>SPEEDAに導入して分かった、CDNの劇的な効果</title><description>インフラチームの金屋です。&lt;br /&gt;
ユーザベースのインフラを担当しています。&lt;br /&gt;
&lt;br /&gt;
今回は身近に利用しているけど、使っていることに気付かない&lt;br /&gt;
インターネットの影の立役者であるＣＤＮについて書きます。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
CDNとは？&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i style=&quot;background-color: #f3f3f3;&quot;&gt;Contents &amp;nbsp; &amp;nbsp; &amp;nbsp;Delivery &amp;nbsp; Network&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i style=&quot;background-color: #f3f3f3;&quot;&gt;コンテンツを &amp;nbsp;配信する &amp;nbsp;ネットワーク&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
簡単に言うと、次の機能を持っています&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Webコンテンツ(サイト、画像、動画等)を&lt;/li&gt;
&lt;li&gt;全世界のインターネットへ配信する&lt;/li&gt;
&lt;li&gt;専用に整備された高速ネットワーク&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
CDNは何のためにあるのか？&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
地理的・物理的に遠隔地からのアクセスをキャッシュ、経路最適化で高速化するのが目的です。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
（イメージ）&lt;br /&gt;
[通常]　日本 &amp;lt;=======10秒=======&amp;gt; 米国&lt;br /&gt;
[CDN]　日本 &amp;lt;==CDN(2秒)==&amp;gt; 米国　500%高速化&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
なんで遠隔地だと遅くなるのか？&lt;/h2&gt;
&lt;div&gt;
インターネット上のWebサイトへのアクセスの流れは&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;&lt;/ol&gt;
&lt;ol&gt;
&lt;li&gt;www.abc.com を名前解決してグローバルIPに変換&lt;/li&gt;
&lt;li&gt;グローバルIP で接続する&lt;/li&gt;
&lt;li&gt;ルーターがパケットを中継して、宛先のグローバルIP(サーバ)まで届ける&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
一般的に遠いほど、中継点（ホップ）が多く、通信に時間（コスト）が掛かり、遅延します。&lt;/div&gt;
&lt;div&gt;
日本から近いサイト(Yahoo Japan)と遠いサイト(米Yahoo) で比べてみます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;近いサイト(Yahoo Japan)へのping応答&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;C:\&amp;gt;ping www.yahoo.co.jp&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;www.g.yahoo.co.jp [182.22.70.251]に ping を送信しています&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;32 バイトのデータ:&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;182.22.70.251 からの応答:&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;バイト数 =32 時間 =8ms TTL=53&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;182.22.70.251 からの応答: バイト数 =32 時間 =7ms TTL=53&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;182.22.70.251 の ping 統計:&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ラウンド トリップの概算時間 (ミリ秒):&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;最小 = 7ms、最大 = 8ms、平均 = 7ms&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f0-007f-ce8c-1536233d0d81&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;遠いサイト(米Yahoo)へのping応答&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;C:\&amp;gt;ping www.yahoo.com&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;fd-fp3.wg1.b.yahoo.com [106.10.139.246]に ping を送信しています 32 バイトのデータ:&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;106.10.139.246 からの応答: バイト数 =32 時間 =72ms TTL=49&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;106.10.139.246 の ping 統計:&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ラウンド トリップの概算時間 (ミリ秒):&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;最小 = 72ms、最大 = 72ms、平均 = 72ms&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;※ラウンドトリップ：通信の往復にかかる時間&lt;/span&gt;&lt;/blockquote&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;
遠いサイトの方が約10倍時間が掛かっています。&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;実際の経路を比べてみましょう。&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86a9-74f1-0f6f-a480-0b0ed4402c7d&quot;&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;近いサイト(Yahoo Japan)の経路→11回経由&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86e9-74f5-e255-f9fa-1d022dd175ea&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;C:\&amp;gt;tracert www.yahoo.co.jp&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;　　www.g.yahoo.co.jp [182.22.39.242] へのルートをトレースしています&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;経由するホップ数は最大 30 です:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;               1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;10.10.5.126&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;              &amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;10.0.0.254&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;              &amp;nbsp;3 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;106.162.241.131&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;               4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;106.162.241.161&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;sjkBBAR001-2.bb.kddi.ne.jp [106.162.241.141]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;6 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6 ms &amp;nbsp;sjkBBAC06.bb.kddi.ne.jp [182.248.174.1]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;7 &amp;nbsp;&amp;nbsp;&amp;nbsp;11 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;otejbb206.int-gw.kddi.ne.jp [210.234.225.5]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;8 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;cm-ote257.int-gw.kddi.ne.jp [118.155.197.52]&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;9 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;125.29.25.94&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;10 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;118.151.224.242&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;11 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;13 ms &amp;nbsp;182.22.34.86&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;12 &amp;nbsp;&amp;nbsp;&amp;nbsp;10 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;10 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8 ms &amp;nbsp;f4.top.vip.ssk.yahoo.co.jp [182.22.39.242]&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-f03a86e9-74f5-e255-f9fa-1d022dd175ea&quot;&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;&lt;b&gt;※全て日本国内&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;font-size: x-small;&quot;&gt; &amp;nbsp; &amp;nbsp; 　　　　　　　　　　&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-f03a86e9-74f5-e255-f9fa-1d022dd175ea&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;b&gt;遠いサイト(米Yahoo)の経路→19回経由&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;C:\&amp;gt;tracert www.yahoo.com&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;fd-fp3.wg1.b.yahoo.com [106.10.139.246] へのルートをトレースしています&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;経由するホップ数は最大 30 です:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;10.10.5.126
&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 ms &amp;nbsp;10.0.0.254&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;3 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;106.162.241.131&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;106.162.241.161&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;sjkBBAR001-2.bb.kddi.ne.jp [106.162.241.141]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;6 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8 ms &amp;nbsp;sjkBBAC06.bb.kddi.ne.jp [182.248.174.1]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;7 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 ms &amp;nbsp;otejbb206.int-gw.kddi.ne.jp [210.234.225.85]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;8 &amp;nbsp;&amp;nbsp;&amp;nbsp;10 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;17 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;17 ms &amp;nbsp;ix-ote212.int-gw.kddi.ne.jp [106.187.6.134]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;9 &amp;nbsp;&amp;nbsp;&amp;nbsp;15 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;17 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;Vlan527.ihar1.OVC-Tokyo.as6453.net [116.0.90.65]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;10 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;19 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;13 ms &amp;nbsp;Port-channel2.ihar2.OVC-Tokyo.as6453.net [116.0.91.1]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;11 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 ms &amp;nbsp;if-3-1-0-11.tcore1.TV2-Tokyo.as6453.net [180.87.180.21]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;&lt;b&gt;※１～12：日本国内でラウンドトリップが少ない&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;12 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;要求がタイムアウトしました。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;13 &amp;nbsp;&amp;nbsp;&amp;nbsp;70 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;75 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;70 ms &amp;nbsp;if-6-2.tcore1.SVW-Singapore.as6453.net [180.87.12.109]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;14 &amp;nbsp;&amp;nbsp;&amp;nbsp;70 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;70 ms &amp;nbsp;if-2-2.tcore2.SVW-Singapore.as6453.net [180.87.12.2]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;15 &amp;nbsp;&amp;nbsp;&amp;nbsp;77 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;81 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;82 ms &amp;nbsp;180.87.15.122&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;16 &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;91 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;ae-5.msr1.sg3.yahoo.com [203.84.209.87]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;17 &amp;nbsp;&amp;nbsp;&amp;nbsp;78 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;78 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;77 ms &amp;nbsp;ae-2.clr2-a-gdc.sg3.yahoo.com [106.10.128.5]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;18 &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;71 ms &amp;nbsp;et-18-25.fab3-1-gdc.sg3.yahoo.com [106.10.128.25]
&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;19 &amp;nbsp;&amp;nbsp;&amp;nbsp;88 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;88 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;88 ms &amp;nbsp;po-11.bas1-1-prd.sg3.yahoo.com [106.10.128.69]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 10px; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;20 &amp;nbsp;&amp;nbsp;&amp;nbsp;73 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;72 ms &amp;nbsp;&amp;nbsp;&amp;nbsp;72 ms &amp;nbsp;ir1.fp.vip.sg3.yahoo.com [106.10.139.246]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; line-height: 1.15; text-indent: 127pt; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;※13～20：日本国外でラウンドトリップが多い&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;　　　　　　　　　&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;line-height: 9.19999980926514px; text-indent: 169.33332824707px; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;color: #535353; font-family: Trebuchet MS;&quot;&gt;（地理的・物理的に遠く、&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #535353; font-family: Trebuchet MS;&quot;&gt;&lt;span style=&quot;line-height: 9.19999980926514px; white-space: pre-wrap;&quot;&gt;相手先のネットワーク環境に依存）&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right; text-indent: 169.33332824707px;&quot;&gt;
&lt;span style=&quot;color: #535353; font-family: Trebuchet MS; font-size: large;&quot;&gt;&lt;span style=&quot;line-height: 9.19999980926514px; white-space: pre-wrap;&quot;&gt;&lt;b&gt;→この遅延をキャッシュと経路最適化で高速化し、解消する&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #535353; font-family: &#39;Trebuchet MS&#39;; font-size: 8px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
通常経路とCDNの概念図&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-AGwCSOVm0hw/VJk7Ap4jS8I/AAAAAAAABQs/KZeB3T8CCeY/s1600/keiro1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-AGwCSOVm0hw/VJk7Ap4jS8I/AAAAAAAABQs/KZeB3T8CCeY/s1600/keiro1.PNG&quot; height=&quot;280&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;通常経路だと、遅延が大きくなる（経由が多く、各国の通信環境に依存）&lt;/li&gt;
&lt;li&gt;ＣＤＮだと、エッジサーバのキャッシュと最適経路で安定した高速ネットワークで遅延が小さい&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
CDN経由でのアクセス概念図&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-pinZzp1So-s/VJluqApmwDI/AAAAAAAABQ8/1CbWRKrPdGA/s1600/keiro2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-pinZzp1So-s/VJluqApmwDI/AAAAAAAABQ8/1CbWRKrPdGA/s1600/keiro2.PNG&quot; height=&quot;278&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;日本国内のPCから、米国に存在するホスト「abc.com」へアクセスすることを想定&lt;/li&gt;
&lt;li&gt;エッジサーバが応答することで、高速化＋ホスト負荷軽減のメリットもある&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
改めてCDNとは？&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i style=&quot;background-color: #f3f3f3;&quot;&gt;Contents &amp;nbsp; &amp;nbsp; &amp;nbsp;Delivery &amp;nbsp; Network&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i style=&quot;background-color: #f3f3f3;&quot;&gt;コンテンツを &amp;nbsp;配信する &amp;nbsp;ネットワーク&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
これまでの内容を合わせると、次のように言うことができます。&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Webコンテンツ(サイト、画像、動画等)&lt;/b&gt;を&lt;/li&gt;
&lt;li&gt;&lt;b&gt;世界中に分散配置されたエッジサーバのキャッシュ&lt;/b&gt;を利用して&lt;/li&gt;
&lt;li&gt;専用に&lt;b&gt;経路最適化された高速なネットワーク網&lt;/b&gt;を通じて&lt;/li&gt;
&lt;li&gt;全世界のインターネットへの&lt;b&gt;配信を高速化&lt;/b&gt;する仕組み&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
SPEEDAでの効果&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
当社サービスのSPEEDAで検証した結果が下記の通りです。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-QRDDLidZBQk/VJn4QZQ8YCI/AAAAAAAABRs/E-6bw4uv6I0/s1600/CDN2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-QRDDLidZBQk/VJn4QZQ8YCI/AAAAAAAABRs/E-6bw4uv6I0/s1600/CDN2.PNG&quot; height=&quot;498&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span id=&quot;docs-internal-guid-e660dd06-7977-0848-7dab-2dc50c1daf2a&quot;&gt;&lt;span style=&quot;font-family: Meiryo; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;どの地域でも200%以上高速化されている（日本国内も含めて）&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span id=&quot;docs-internal-guid-e660dd06-7974-1298-b6c4-711ed0615324&quot;&gt;&lt;span style=&quot;font-family: Meiryo; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;特に中国(右端)が顕著&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span id=&quot;docs-internal-guid-e660dd06-7974-8804-04fe-2a0064eb646a&quot;&gt;&lt;span style=&quot;font-family: Meiryo; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;中国特有の環境が影響&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Meiryo; white-space: pre-wrap;&quot;&gt;金盾(グレートファイアウォール)&lt;/span&gt;&lt;span style=&quot;font-family: Meiryo; white-space: pre-wrap;&quot;&gt;という中国国内の情報検閲システムや、&lt;/span&gt;&lt;span style=&quot;font-family: Meiryo;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Meiryo; white-space: pre-wrap;&quot;&gt;南北問題（中国国内でもアクセスが遅い）などで&lt;/span&gt;&lt;span style=&quot;font-family: Meiryo; white-space: pre-wrap;&quot;&gt;ネットワーク遅延が大きい&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Meiryo;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Meiryo;&quot;&gt;&lt;span style=&quot;font-size: 19px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Meiryo;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;font-family: MeiryoKe_PGothic;&quot;&gt;
CDN導入後の一般的な変更点・注意点&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;アクセス元IPアドレスがエッジサーバのIPになる&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;本来のリモートホストはHTTPヘッダで付与&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;「X-forwarded-for」や「Origin-IP」など&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Webサーバでのアクセス制限やプログラム側での処理に注意&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;静的ファイルがキャッシュされる&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;ファイル名に日付を付けるなど、ユニーク化しないとキャッシュ有効期限まで反映されない等の問題が発生する可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2 style=&quot;font-family: MeiryoKe_PGothic;&quot;&gt;
まとめ&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
以上、一般的なCDNの効果と仕組みを説明しました。&lt;/div&gt;
&lt;div&gt;
もちろんメリットだけでなく費用やアプリケーション改修も発生するので、&lt;/div&gt;
&lt;div&gt;
しっかりと検証して、費用対効果を見極めることが重要です。&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/cdn.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-AGwCSOVm0hw/VJk7Ap4jS8I/AAAAAAAABQs/KZeB3T8CCeY/s72-c/keiro1.PNG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-102123820891259190</guid><pubDate>Wed, 24 Dec 2014 01:04:00 +0000</pubDate><atom:updated>2014-12-24T12:57:37.034+09:00</atom:updated><title>第1回 えびスタ！ ~ 恵比寿スタートアップ勉強会 ~  レポート</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;先日12月18日、恵比寿にある UZABASE 新オフィスにてエンジニア向け勉強会「えびスタ！ 」第 1 回を開催させて頂きました。&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;移転したばかりの新オフィスで初めて開催する勉強会ということで不安な点もありましたが、50 人という定員枠に対してなんと 50 人オーバー近い参加登録を頂き、盛況のうちにイベントを終えることが出来ました。参加者の皆さん、ありがとうございました！&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;本記事では当日の様子をレポートしたいと思います。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;327px;&quot; src=&quot;https://lh4.googleusercontent.com/C6oHV8aWdlT5vZkUYkVU09Km_QHJGbvyxZeQzpM-CQd7PRLkIAnw7c_8NA_eAhwrNRCtqRaWmyOI_N2NANgOR6ZoUdmDf1iTZ_WVxInqz6yurCyrtd7ukCgzLeF7QO3m9A&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;246px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/b&gt;
&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.6000000635782916; margin-bottom: 8pt; margin-right: 8pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;今回のアジェンダは以下のとおりです。&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 1.60000006357829; white-space: pre-wrap;&quot;&gt;前半はクックパッド、Retty、VASILY、 UZABASE から 4 名のエンジニアによるプレゼンテーション。後半は皆でわいわいエビスビール（恵比寿だけに）やピザをつまみながらの QA セッション + 懇親会でした！&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-95349d52-79cd-da85-f2be-6fda161b48c5&quot;&gt;&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;121&quot;&gt;&lt;col width=&quot;235&quot;&gt;&lt;col width=&quot;291&quot;&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;background-color: #efefef; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: whitesmoke; color: #444444; font-family: Verdana; font-size: 12px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;時間&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;background-color: #efefef; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: whitesmoke; color: #444444; font-family: Verdana; font-size: 12px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;発表者&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;background-color: #efefef; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: whitesmoke; color: #444444; font-family: Verdana; font-size: 12px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;内容&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;19:00 ~ 19:20&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;小野 大器（クックパッド株式会社）&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;マイクロサービスアーキテクチャについて&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;19:20 ~ 19:40&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;梅田 昌太（Retty 株式会社）&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Dev が AWS と出会って DevOps を目指した話&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;19:40 ~ 20:00&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;今村 雅幸（株式会社 VASILY）&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;プッシュ通知大戦争&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;20:00 ~ 20:20&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;文字 拓郎（株式会社 UZABASE）&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;NewsPicks を支える技術と怖い話&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;20:30 ~ 21:15&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;QA セッション&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;21:15 ~ 22:00&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;-&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #444444; font-family: Verdana; font-size: 12px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;懇親会&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-95349d52-79cd-da85-f2be-6fda161b48c5&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;プレゼンテーション&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;1.マイクロサービスアーキテクチャについて &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;小野 大器 様（クックパッド）&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;クックパッドからは小野様に、クックパッドが何故マイクロサービスアーキテクチャを採用したかということと、実際に行っている取組みについてご紹介頂きました。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;クックパッドがマイクロサービスアーキテクチャを採用するにあたった経緯として&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt; ・ビジネスの変化（ブラウザからモバイルへの変遷といった環境の変化）&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; ・巨大化するモノリシックなアプリではテストやデプロイに時間がかかり過ぎる&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;などの理由を挙げられていました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;9cccdbb069500132d347425d7b9918bb&quot; data-ratio=&quot;1.33333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;330px;&quot; src=&quot;https://lh4.googleusercontent.com/1GnCJogjFt01qQZlJyqPVmEIMxYbTFW6OEiuJ1FmpAsiQPGK6oiZJljbF6Oe_fLvUoVKdYMAAh8S4q6HBVVcOzZDghYeUex0grYM2zTSBSRIhb-nijgbGsPr8Y7cKBgZAA&quot; style=&quot;-webkit-transform: rotate(0rad); border: none; transform: rotate(0rad);&quot; width=&quot;247px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;えびスタ以前から「最近マイクロサービス気になる…！」という声を周りで聞いていたので、そのような方にとってはとても勉強になるセッションだったのはないでしょうか。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;2.Dev が AWS と出会って DevOps を目指した話 &amp;nbsp;梅田 昌太 様（Retty）&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;Retty からは 梅田様に、サービスの成長とユーザーの増加に伴う問題にへの対応と今後、そしてアプリケーションエンジニア出身の DevOps として AWS とどう関わっているのかについてお話頂きました。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;ユニークユーザーが 10 万人以下のサービス黎明期から 200 万~ 400 万人の人気サービスにまで成長していく過程で 、インフラアーキテクチャをどのように変化させて対応していったのかついて取り上げていらっしゃいました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;420&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/42827917&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;510&quot;&gt; &lt;/iframe&gt;&lt;span style=&quot;color: #666666;&quot;&gt; &lt;/span&gt;&lt;br&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/shotaumeda1/devawsdev-ops&quot; target=&quot;_blank&quot; title=&quot;Devがawsと出会ってdev opsを目指した話&quot;&gt;Devがawsと出会ってdev opsを目指した話&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/shotaumeda1&quot; target=&quot;_blank&quot;&gt;Shota Umeda&lt;/a&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;305px;&quot; src=&quot;https://lh6.googleusercontent.com/6_aIi29gZk9rqmPk7xQrqoQnYMJ4ETIWB1UlrQf1vggoKsUAPZWVlPZij8bfjwxL0-HvVcUpQ2FFwB0YxOakColcPHwz4isMK4SYTVG8YW59o8JgkHwn9zwp17dm8z46Fg&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;229px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;またインフラで利用されている ElasticBeanstalk についての詳しい説明もされていました。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 18.3999996185303px; white-space: pre-wrap;&quot;&gt;ElasticBeanstalk は AWS から無料で提供されている アプリケーション管理サービスです。AWS内のアプリケーションに対してデプロイの詳細を自動的に設定してくれます。&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;参加者には ElasticBeanstalk を利用されている方はほとんどいなかったのですが、このセッションを聞いて気になったという方も多かったのではないでしょうか。&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;3.プッシュ通知大戦争 &amp;nbsp;今村 雅幸 様（VASILY）&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;VASILY からは今村様に、iQON で行われているアプリのプッシュ通知に対しての取り組みをご紹介頂きました。(ちなみに VASILY さんは UZABASE と同じビルの 1 フロア下のご近所さんです）&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;プッシュ通知のメリットとそれに付随する課題にはじまり、代表的な ASP サービスの比較から、自前でプッシュ通知サービスを実装するにあたりおこなった様々な工夫（配信の最適化・スケーラビリティーの確保の仕方・通知の分析など）まで、プッシュ通知まわりでのノウハウについてお話頂きました。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;テスト配信における秘話などタメになる話が満載でした。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;0555bea0692d0132d347425d7b9918bb&quot; data-ratio=&quot;1.33333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;297px;&quot; src=&quot;https://lh6.googleusercontent.com/wC0vQLUU0u08VTtsLTDdBaklxq6ThmxFsDe5TBct8DUvYumKassjnHGEgCM0vomc-DjV-yT8FVJJJ1uaPS7q8Yu1rjTToFh6Y5zmdvTxNIebUglHS_Hh5kl2YlsNLqKQUw&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;224px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;4.NewsPicks を支える技術と怖い話 &amp;nbsp;文字 拓郎（UZABASE）&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;弊社からは 3 ヶ月前に NewsPicks チームに join したばかりの文字が、急成長を続けるサービスの裏側がどのようなアーキテクチャで構成されており、どのような工夫を行っているのか、実際にあった事件なども交えてご紹介。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;今までにあった怖い話として、荒ぶる Redis、暴走する Phantom JS、互換性肥満などといった事件の原因及び、解決策としてどのような工夫を行ってきたのかについてお話しました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;266px;&quot; src=&quot;https://lh5.googleusercontent.com/y0HzIXBe2FNToV3PLcfUikWGmUD6rLcTn4hWYfPwf-cjsb1G_2kbVbgOazmR_tRmuxJ52cvruKQB0Z_pXfMt-Nkt9I1S85rZVWS2euP0M3EA7VAxEjaiD2UHodPnTw9ttA&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;199px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;プレゼンテーションのあとはエビスビールとピザを頂きながら、しばし休憩を挟んで、後半の QA セッションへ。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;268px;&quot; src=&quot;https://lh4.googleusercontent.com/cKG307ucD3oQ143dA819_q1CjqjN5gRnhwDaEJ0PuDDDEIV9ixa2wMWWP-pw9EoBF1qxxZdsZBhanQhIiKoikTLIN5g4lizRMSbOQLyWtwYSuHR4tcZWcAJjiQZgF2fcOA&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;201px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;QAセッション&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;QA セッションでは本日登壇された 4 名によるカジュアルな質疑応答が行われました。ガリガリにテック寄りの質疑応答が行われたわけではなく、ゆるい雰囲気の中で、ビール片手に冗談を交えながらの進行でした。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;質問は、会場にいる参加者全員に対して、スマートフォンを用いて 4 択のアンケートで回答をとり、その結果をスクリーンに表示して共有する、という形で行われました。弊社杉浦恒例のリアルタイム参加型です！&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;1418904633198.jpg&quot; height=&quot;297px;&quot; src=&quot;https://lh4.googleusercontent.com/3HseAqxB0FPiQNuM6kvSPCxWLxQZp-Ari2O4yk5OKSOjqpukDxRhH3q-L_yXEYCevfTqtQUHQK0qi28ZsC5nRRxffYR2A9vNm4prRcYDyEjuIxRbgTFqWI0sVSNSt2s8rw&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;396px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;登壇者の方には代表して、各自選んだ回答に対しての意見や、なぜその回答を選んだのか、などのお話をしていただきました。ユーモラスな回答も多かったのですが、時には登壇者の方の熱いお話を聞くこともできました。&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;質問内容は、好きなエディタは何かという質問から、普段聞きづらいような攻めた質問まで様々で、エンジニアジョークが飛び交うセッションでした。登壇者の意見を聞いて、他のエディタや他の言語に浮気してみようかな、なんて思った方もいたかもしれませんね。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;また、登壇者以外の参加者がアンケートページで入力したコメントもスクリーンに表示されるようになっていて、そのコメントに対しての笑いも起こり、会場全体で盛り上がっていました。&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;その後は同じ会場内で懇親会を行いました。参加者の方と主催企業エンジニアの垣根なく、皆様思い思いに交流されていました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;集合写真を撮れなかったのが心残りです…&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;1418905278274.jpg&quot; height=&quot;271px;&quot; src=&quot;https://lh6.googleusercontent.com/3Lw8teVZzIOTPc-FFs2XZyMxsYK68PgFFvl8Y7h_tcVSVDsOmwm-70WXdt-gLh4-ig4lKGS1rPUxYTG0uWWmsUT6VGRDkWny7e9aALlPej1QyFAndyBBe6lo7EWcuIuLsQ&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;361px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br&gt;&lt;/b&gt;
&lt;/span&gt;&lt;br&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;1418906038626.jpg&quot; height=&quot;263px;&quot; src=&quot;https://lh4.googleusercontent.com/Vk4stVHi9Qz93aXE9X1PYzhgqj5Ncp5odJObKEMWx6MJJE_NliaZCF2h1ZuyXhzclNaUigNCt5-aTiSo9Vs7W7qWtUAEwu2bjtpPX8mqYNxe_BjjHY7558ldnjc4oRiE2Q&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;351px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;1418906110029.jpg&quot; height=&quot;235px;&quot; src=&quot;https://lh6.googleusercontent.com/U4QATVyix_UFpEfKyFA3-nHfjDA81x1obJBite9QxKumDJ1z6csd995hzWwoDl26bgcWdy6QaH4yIRKobMTVWorEC9_cl96eKi3H1n0Md40eqQHB6HuLaFgKYog24TM3KA&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;314px;&quot;&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;line-height: 1.15;&quot;&gt;幸いなことに「次回はいつですか」というお声も多数頂けたので、是非次回も開催したいと思います！恵比寿オフィス引っ越し後まもなくの勉強会で到らないところも多々ありましたが、次回の勉強会では今回の反省を活かしてより良いものにしたいと思います！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial; line-height: 1.15; white-space: pre-wrap;&quot;&gt;みなさまご参加ありがとうございました！&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/1.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/C6oHV8aWdlT5vZkUYkVU09Km_QHJGbvyxZeQzpM-CQd7PRLkIAnw7c_8NA_eAhwrNRCtqRaWmyOI_N2NANgOR6ZoUdmDf1iTZ_WVxInqz6yurCyrtd7ukCgzLeF7QO3m9A=s72-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-1952542674397187026</guid><pubDate>Thu, 18 Dec 2014 01:30:00 +0000</pubDate><atom:updated>2014-12-18T11:59:04.175+09:00</atom:updated><title>オフショア開発 @ Framgia Vietnam</title><description>&lt;span style=&quot;background-color: white; color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;SPEEDA QAチームの藤田です。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;オフショアでのテスト自動化PJ立ち上げのため&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;に11月中旬より1か月間　&lt;a href=&quot;http://framgia.com/jp/&quot;&gt;Framgia Vietnam&lt;/a&gt;&amp;nbsp;に来ています。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;Framgia さんには、以前からUzabaseの社内システムの開発を依頼していましたが、今回は&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;社内システムだけでなくSPEEDAの自動テストコードを実装いただくべく一緒にベトナムで仕事しております。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;せっかくなのでちょっと今までの投稿とは異色ですが、Framgiaさんとのオフショア開発についてまとめようと思います。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;今後オフショアを考えてる方には参考になる？とうれしいです。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;信頼できるオフショアパートナー　&lt;/b&gt;&lt;b style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;ベトナムのFramgiaさん&lt;/b&gt;&lt;b style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;。&lt;/b&gt;&lt;br /&gt;
&lt;b style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;「なぜFramgiaさんと一緒に開発するのか？」という理由はいろいろありると思うのですが、&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;ベトナムという国としての特性とFramgiaさんの会社としての魅力が大きいと感じています。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;オフショア開発を進める&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;ポイントとなるベトナムの&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;基本情報。&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;物価、&lt;span style=&quot;line-height: 18.4799995422363px;&quot;&gt;労働コスト&lt;/span&gt;が日本の3~4分の1&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;平均年齢が若い（27~28才）&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;親日&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;IT業種はとても人気がある&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;みんなポジティブで明るく、面倒みの良い&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;国民性&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;Framgiaさんの場合、平均年齢が27才以下らしく、実際に170人くらいの社員みなさんが若くパワーあふれる感じです。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;優秀な学生のリクルートには力を入れているとのことで、国費留学で海外で学んだ超エリートもいるとのこと。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;Framgiaさんではラボ型開発を推進しています。&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;ラボ型は、契約した期間で担当メンバーを確保することができ優秀なエンジニアを常に確保することができます。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;日本と2Hの時差のあるベトナムでは、日本に合わせてみなさん1日は基本的に以下のスケジュールで仕事しています。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;稼動時間が同じなので、いつでもオンラインでチャットや会議をできます。&lt;/span&gt;&lt;br /&gt;
&lt;u style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;AM 7:45 全社の朝礼&lt;/u&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;朝は、日本のクライアントに合わせて早いです。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;毎日1人ずつモーニングスピーチを英語でし、&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;最後は日本のあいさつの練習を全社で実施。&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;やる気UP！&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;u&gt;AM 8:00 チームの朝会&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;どのチームも、&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;最後は「モー・ハイ・バー　&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;わっしょい！」の掛け声で終了。みんな同じ時間に朝会をするので掛け声が社内のそこら中から聞こえます。&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;やる気UP！2回目。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;u&gt;AM 8:10~PM17:00? 開発集中&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;チームは席が近く、いつでもコミュニケーションはその場ですぐできるのでミーティングが少なく仕事に集中できる時間が長い。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;モチベーションやチームビルディングはどこでも大きな課題ですが、ここではそんな悩みないのでは？と思えるくらいに&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;みなさん明るく仲良しで、とても仕事に集中しやすい会社の文化があります。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;もちろん技術力UPにも熱心で、チーム対応Hackathon、コードコンテストなどのイベントが企画されていたり、トレーニングルームが用意されておりプロジェクトに携わるメンバーが必要スキルを短期で習得できる体制ができています。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;ということで、長期で一緒に仕事をしこれからのオフショア開発の可能性をほぼ毎日感じ、更にベトナムとFramgiaが好きになってしまいました。（暖かいし、食べ物もめっちゃおいしいし。。。）&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;立上げはやっぱりオンサイト！&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;私は、春からオフショア開発に参加しましたが、&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;今までを振り返って思うのはやはりコミュニケーションが難しいという部分です。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;テスト自動化PJの立ち上げでは、&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;メンバーが自分たちで開発環境をつくり、コードを書いていけるように、&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;「コンセプトを共有 ＞ 必要最小限のドキュメントを作成&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;＞&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;実際に一緒にやってみる」&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;を&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;繰り返しました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;その中でよりワークしそうなフローを一緒に相談したり、躓いている部分を共有しました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;割とスムーズに自動テストの実装を依頼できる体制ができたのも、&lt;/span&gt;&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;オンサイトだったからこそ。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;また、ベトナムでFramgiaメンバーと仕事がしたい！！&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #666666; font-family: Trebuchet MS, Trebuchet, Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 18.4799995422363px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-7HUP1a0SPkU/VI_JwzwVABI/AAAAAAAAGLo/FmNjTgEmiN8/s1600/photo.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-7HUP1a0SPkU/VI_JwzwVABI/AAAAAAAAGLo/FmNjTgEmiN8/s1600/photo.JPG&quot; height=&quot;215&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;span style=&quot;color: #444444; font-size: x-small;&quot;&gt;自動化を手伝ってくれたFramgiaエンジニア Ngocさん&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;span style=&quot;color: #444444; font-size: x-small;&quot;&gt;with　社内&lt;span style=&quot;font-family: &#39;Trebuchet MS&#39;, Trebuchet, Verdana, sans-serif; line-height: 18.4799995422363px; text-align: start;&quot;&gt;Hackathonの告知ポスター！&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/framgia-vietnam.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-7HUP1a0SPkU/VI_JwzwVABI/AAAAAAAAGLo/FmNjTgEmiN8/s72-c/photo.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-1036331185739070221</guid><pubDate>Tue, 16 Dec 2014 02:52:00 +0000</pubDate><atom:updated>2015-01-03T16:03:52.569+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">NewsPicks</category><category domain="http://www.blogger.com/atom/ns#">インターン</category><title>NewsPicks(iOS)の設計思想</title><description>&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;NewsPicksチームインターン生の保田です。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;主にiOSアプリ開発のお手伝いをしております。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;iOSアプリを作っていて悩ましいな、と思うのが、同じ機能を持つがiPadとiPhoneで見た目が違うページをどう設計していくか、ということです。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;ちょうど僕が関わった、NewsPicksの特徴的な機能である「ニュース中間ページ」をどのように設計したかについてお届けいたします。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-49O7Nla20XM/VIcBJViVGJI/AAAAAAAABi4/pzzmaDDflF0/s1600/IMG_4166.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-49O7Nla20XM/VIcBJViVGJI/AAAAAAAABi4/pzzmaDDflF0/s1600/IMG_4166.PNG&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-u8ld9AWyKOM/VImq3AfJqHI/AAAAAAAABlU/VEWL3sTG-5Y/s1600/blog_screen3.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-u8ld9AWyKOM/VImq3AfJqHI/AAAAAAAABlU/VEWL3sTG-5Y/s1600/blog_screen3.PNG&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-sxXL_6Wgn9A/VImrYJlVnsI/AAAAAAAABlc/jwacUFuriAo/s1600/blog_sreen_2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-sxXL_6Wgn9A/VImrYJlVnsI/AAAAAAAABlc/jwacUFuriAo/s1600/blog_sreen_2.PNG&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;NewsPicks上でニュースをみるとき、上図の左から右の流れで画面を切り替えます。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
この中の真ん中の画面（ニュース中間ページ）の設計についてご説明していきます。&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;Season1. 単一仕様時代&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;当初は、次のような単純な仕様でした&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;- 「フォローしているユーザー」セクションで、コメントを表示&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;










&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;- 「その他のユーザー」セクションで、コメントを表示&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-wq_lrTxJ6tQ/VIcBcBx43pI/AAAAAAAABjI/QPhuo-Q1KPA/s1600/season1_acreen.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-wq_lrTxJ6tQ/VIcBcBx43pI/AAAAAAAABjI/QPhuo-Q1KPA/s1600/season1_acreen.png&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
ただし、並び順に関してはサーバー側で『時系列順』『Like順』でソートされたものを受信して、そのまま表示していました。&lt;br /&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;当時は次のようなクラス図になっていました(メソッドは省略)。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-CYSYtmuRWq0/VIcBvIlKdCI/AAAAAAAABjQ/PjMNseUarSU/s1600/season1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-CYSYtmuRWq0/VIcBvIlKdCI/AAAAAAAABjQ/PjMNseUarSU/s1600/season1.png&quot; height=&quot;160&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;s1&quot;&gt;







&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;ControllerにはiPhone, iPadで共通の処理が双方に書かれていたため、メンテナンス性が低いものになっていました。&lt;/span&gt;また、NewsTableViewにはコメントが表示されるのですが、コメントの有無の判定、データの保持などの処理も行っており、ViewとLogicが切り分けられていない典型的なアンチパターンになってしまっていました。&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;







&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;Season2. 人気コメントの誕生&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;







&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;次に、人気ニュース一覧からニュース中間ページに遷移した場合、Likeがたくさん付いているコメントを「人気コメント」というセクションで上位に表示するという仕様が産声を上げました。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-2yNwwLhLWPc/VIcDCcWtrnI/AAAAAAAABjc/pcGvQEs53gg/s1600/season2_screen.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-2yNwwLhLWPc/VIcDCcWtrnI/AAAAAAAABjc/pcGvQEs53gg/s1600/season2_screen.PNG&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;仕様を整理すると、下記のようになります。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-slXmVYEiFn4/VIcD7wANyVI/AAAAAAAABj4/2ClYD2qJ3OE/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2014-12-09%2B23.14.28.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-slXmVYEiFn4/VIcD7wANyVI/AAAAAAAABj4/2ClYD2qJ3OE/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2014-12-09%2B23.14.28.png&quot; height=&quot;105&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;







&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;そこで、以下のような設計に変更しました。&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-uHrOUPFtXmo/VIcDFRKXHdI/AAAAAAAABjs/ffZM6GxG060/s1600/season2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-uHrOUPFtXmo/VIcDFRKXHdI/AAAAAAAABjs/ffZM6GxG060/s1600/season2.png&quot; height=&quot;127&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;Commentsというクラスを作成し、NewsTableViewから表示するコメントの表示内容、コメントのソートなどを切り離しました。これで、ViewからLogicを少し切り離すことができました。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;CommentsWithTrendingCommentsは&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Comments&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;を継承した、人気コメントを表示するためのクラスです。NewsTableViewがどうCommentsを生成すれば良いか知っていて、それをControllerが知っているという設計です。実装の詳細を知らないと使えないクラスはイケてません。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;

&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;Season3. 検索機能の実装と、連載企画のスタート&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;

&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;NewsPicksオリジナル連載企画がはじまり、中間ページに以下のようなページが仲間入りしました。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-X9QAqOGI3sY/VIcDCuSuNqI/AAAAAAAABjg/EZHJb8QwDYY/s1600/season3_screen.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-X9QAqOGI3sY/VIcDCuSuNqI/AAAAAAAABjg/EZHJb8QwDYY/s1600/season3_screen.PNG&quot; height=&quot;320&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;
  
 
 
  &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 4&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;上のほうに連載名が書いていたり、「記事に登場するユーザー」というカテゴ
リが追加されたりしました。
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;また、検索機能が追加され、コメント検索の結果から遷移すると「ヒットした
コメント」というカテゴリを表示することとなりました。
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;仕様を整理すると、下記になります。&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-fEjuNer7sh8/VIcFoxE5fFI/AAAAAAAABkE/nvM-bDRJGkI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2014-12-09%2B23.22.00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-fEjuNer7sh8/VIcFoxE5fFI/AAAAAAAABkE/nvM-bDRJGkI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%2B2014-12-09%2B23.22.00.png&quot; height=&quot;265&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 5&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;それに伴い大幅な設計変更を行い、以下の様な設計になりました。&lt;/span&gt;&lt;span style=&quot;font-family: &#39;MS&#39;; font-size: 9.000000pt;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-VuGlbSMtnyc/VIcF6h_AGyI/AAAAAAAABkQ/RxzB5WAtXlM/s1600/season3_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-VuGlbSMtnyc/VIcF6h_AGyI/AAAAAAAABkQ/RxzB5WAtXlM/s1600/season3_1.png&quot; height=&quot;228&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-yEZ1JUJdjZk/VIcF6dWxgaI/AAAAAAAABkM/LYKbdxFrEyE/s1600/season3_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-yEZ1JUJdjZk/VIcF6dWxgaI/AAAAAAAABkM/LYKbdxFrEyE/s1600/season3_2.png&quot; height=&quot;219&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 6&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;大工事です。&lt;br /&gt;
5個しか無かったクラスが &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;20 &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;個近くになりました。緑色のクラスが実際に呼び出されるクラスです。&lt;br /&gt;
共通部分は &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Abstract &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;に集約し、コメントのロジックは
&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;PickerCommentsCategorizeLogic &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;が責務を持 ち 、 データは&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;CategorizedComments &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;で授受されそのまま表示すると正しいセクションが表示されます。&lt;br /&gt;
また、&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Factory Method &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;パターンを導入したことによって呼び出し側は
&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Abstract &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;など実装の詳細は一切知りません。
しかし、まだ改善の余地があります。『&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;AbstractNewsSummaryController&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;』の
親クラスが &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;iPad, iPhone &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;によって分かれてしまっていて、全く同じ処理が
&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;iPhone, iPad &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;のそれぞれに書かれてしまっています。&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;div class=&quot;page&quot; title=&quot;Page 6&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: Century;&quot;&gt;&lt;b&gt;Season4. &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;&lt;b&gt;更なるリファクタリング&lt;/b&gt;

&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Season3 &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;で残ってしまった重複コードを削除すべく、リファクタリングを
行いました。&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;iPad &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;だけが継承している &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;TransitionController &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;は、&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Controller
&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;の遷移方法に関する責務を持っていました。これをを &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Helper &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;として存在さ
せ、標準の &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;UIViewController &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;を継承できるようにしました。&lt;/span&gt;&lt;span style=&quot;font-family: &#39;MS&#39;; font-size: 9.000000pt;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-4TwIyrwmF8U/VIcGmH83s8I/AAAAAAAABkg/WFbKTeHyBbQ/s1600/season3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-4TwIyrwmF8U/VIcGmH83s8I/AAAAAAAABkg/WFbKTeHyBbQ/s1600/season3.png&quot; height=&quot;204&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;こうすることで共通部分を抽象クラスへ追いやることができ、具象クラスの重&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;複コードが撲滅できました。&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 7&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;ここで、&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;season3&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;で&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;Factory Method &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;パターンを導入していたため、呼び出し側では全くコードの変更が必要ありませんでした。&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;GoF &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;さまさまです。&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;&lt;b&gt;まとめ&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 7&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: Century;&quot;&gt;NewsPicks &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;では、同じ機能をもつが&lt;/span&gt;&lt;span style=&quot;color: #e75454; font-family: MS;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;iPad &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;と &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;iPhone &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;で見た目が違うページを、下記のような戦略でメンテナンス性の高い設計で実装しています。

&lt;/span&gt;&lt;span style=&quot;font-family: ArialUnicodeMS;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;View, Logic, Controller &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;を切り分ける&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: ArialUnicodeMS;&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;具象クラスに点在する共通処理を抽象クラスに追いやる&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Century;&quot;&gt;- Factory Method &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;パターンでインスタンスの生成方法を隠すことにより、後々&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;の変更に強くする&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;サービスローンチ時に、様々な試行錯誤を行いながら徐々にサービスを成長さ&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;せる過程で、負債コードをためてしまうのは致し方ないことです。しかし、適&lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;切な手順で設計を変更すれば必ずコードは綺麗になります!&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;page&quot; title=&quot;Page 7&quot;&gt;
&lt;div class=&quot;layoutArea&quot;&gt;
&lt;div class=&quot;column&quot;&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Century;&quot;&gt;NewsPicks &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;では更なるグロースに向けて、一緒に戦ってくれるエンジニアを募集しております!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;インターン生でも設計から携わらせていただけるのでとても勉強になります!
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: MS;&quot;&gt;興味をお持ちいただいた方は &lt;/span&gt;&lt;span style=&quot;color: #e75454; font-family: ArialUnicodeMS;&quot;&gt;&lt;a href=&quot;https://www.wantedly.com/projects/11448&quot;&gt;Wantedly&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-family: MS;&quot;&gt;などからご応募ください!!&lt;/span&gt; 
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: &#39;MS&#39;; font-size: 9.000000pt;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/newspicksios.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-49O7Nla20XM/VIcBJViVGJI/AAAAAAAABi4/pzzmaDDflF0/s72-c/IMG_4166.PNG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-3097576955452217899</guid><pubDate>Fri, 12 Dec 2014 06:58:00 +0000</pubDate><atom:updated>2014-12-15T09:08:20.179+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">LT</category><title>俺の Docker イメージ</title><description>SPEEDA 開発チームの緒方です。&lt;br /&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;
&lt;br /&gt;
最近話題に上ることも多い Docker ですが、UZABASE でもチームによっては積極的に使っています。&lt;br /&gt;
(現在は主に開発用途。)&lt;br /&gt;
&lt;br /&gt;
他のコンテナ型仮想化技術と比較した場合の Docker の良さとして、&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Docker Hub など、レジストリに登録されているイメージを利用できる&lt;/li&gt;
&lt;li&gt;Dockerfile を使用したイメージ構築の自動化&lt;/li&gt;
&lt;/ul&gt;
などが挙げられると思います。&lt;br /&gt;
&lt;br /&gt;
Docker Hub をざっと見渡しただけでも、Ubuntu や CentOS など環境だけを提供するものから redis や MySQL などそのままアプリケーションが実行できるものまで様々なイメージを見つけることができ、その良さを垣間見ることができます。&lt;br /&gt;
&lt;br /&gt;
さて、その便利な Docker のイメージですが、実体がどのようになっているかご存知でしょうか。&lt;br /&gt;
Ubuntu や CentOS が丸ごと入っているくらいだからさぞかし難解なものだろうと思われる方もいらっしゃるかもしれませんが、作成の手順はとても単純です。&lt;br /&gt;
&lt;br /&gt;
ということで、試しに作ってみることにしました。&lt;br /&gt;
&lt;br /&gt;
とりあえず簡単なものということで、&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;フルスクラッチから作る&lt;/li&gt;
&lt;li&gt;busybox を動かすだけの最小のイメージ&lt;/li&gt;
&lt;/ul&gt;
ということを目標とします。&lt;br /&gt;
イメージの作り方にも色々な方法があるのですが、今回はイメージのファイル構成を含んだアーカイブを作成して docker import するというやり方でいきます。&lt;br /&gt;
&lt;br /&gt;
アーカイブの最終的なファイル構成は次のようになります。&lt;br /&gt;
&lt;pre&gt;bin/
bin/busybox (※busybox-x86_64 へのシンボリックリンク)
bin/busybox-x86_64
&lt;/pre&gt;
話がややこしくならないように、busybox はスタティックリンク版を利用します。&lt;br /&gt;
(ダイナミックリンクしているバイナリを実行するためにはライブラリの配置や /etc/ld.so.conf の設定などが必要です。)&lt;br /&gt;
&lt;br /&gt;
以下手順です。&lt;br /&gt;
&lt;br /&gt;
環境:&lt;br /&gt;
Docker 1.3.2 / Debian sid (Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-2 (2014-11-06) x86_64 GNU/Linux)&lt;br /&gt;
&lt;pre class=&quot;brush: shell;&quot;&gt;$ mkdir -p busybox-static/bin
$ cd busybox-static/bin
$ wget -P . http://www.busybox.net/downloads/binaries/latest/busybox-x86_64
$ chmod +x busybox-x86_64
$ ln -s busybox-x86_64 busybox
$ cd ..
$ tar zcf busybox-static.tar.gz bin
&lt;/pre&gt;
これで、busybox を含んだ bin ディレクトリだけの最小の Docker イメージができました。&lt;br /&gt;
作成したアーカイブを docker import します。&lt;br /&gt;
&lt;pre class=&quot;brush: shell;&quot;&gt;$ cat busybox-static.tar.gz | docker import - busybox-static
&lt;/pre&gt;
うまくいったようです。&lt;br /&gt;
&lt;pre&gt;REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox-static      latest              85e373c46d80        27 seconds ago      973.2 kB
&lt;/pre&gt;
では、run してみます。&lt;br /&gt;
&lt;pre class=&quot;brush: shell;&quot;&gt;$ docker run busybox-static /bin/busybox ls -a
.
..
.dockerenv
.dockerinit
bin
dev
etc
proc
sys
&lt;/pre&gt;
これも成功です。目標達成！&lt;br /&gt;
&lt;br /&gt;
ところで、アーカイブには bin ディレクトリしか含まれていなかったはずですが、いくつかファイルやディレクトリが追加されています。&lt;br /&gt;
これらは、デバイスなどホストのリソースを利用できるように、Docker が勝手に作ってコンテナに追加してくれているものです。&lt;br /&gt;
&lt;br /&gt;
このような感じで、単純なイメージであれば非常に簡単に作ることができます。&lt;br /&gt;
Docker コンテナ内でプログラムを実行するには何が必要であるか、コンテナからホストのリソースはどのように見えているかなど勉強になることも多いので、一度スクラッチからのイメージ作成をやってみても面白いかと思います。&lt;br /&gt;
&lt;br /&gt;</description><link>http://uzabase.blogspot.com/2014/12/docker.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-8742666610916446816</guid><pubDate>Thu, 11 Dec 2014 00:19:00 +0000</pubDate><atom:updated>2014-12-12T18:08:05.166+09:00</atom:updated><title>PhantomJSを使ってみる</title><description>Techチームの遠藤です。&lt;br /&gt;
&lt;br /&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;





コンテンツのグローバル展開に向けて、いくつかの地点での画面表示の速度測定のためにphantomjsを使用し計測しました。&lt;br /&gt;
全部ではないですが初めの部分だけ記述します。&lt;br /&gt;
&lt;br /&gt;
PhantomJSはまぁ仮想ブラウザを立ち上げてHPを操作していくものですね。&lt;br /&gt;
自動テストなどに使えるものです。&lt;br /&gt;
&lt;br /&gt;
PhantomJS&lt;br /&gt;
&lt;a href=&quot;http://phantomjs.org/&quot;&gt;http://phantomjs.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
DownloadでそれぞれのOSにあったものをDLしてください&lt;br /&gt;
&lt;br /&gt;
私はwindowsでやってるのでwindowsのみ記述します。&lt;br /&gt;
といっても大したことしてません。&lt;br /&gt;
&lt;br /&gt;
windowsの場合はDLしてきたzipファイルを解凍し、任意の場所に配置してから環境変数にそのフォルダを指定すると使えるようになります。&lt;br /&gt;
&lt;br /&gt;
さっそく使ってみます。&lt;br /&gt;
&lt;br /&gt;
jsファイルを書いて、コマンドプロンプトで&lt;br /&gt;
phantomjs XXX.js&lt;br /&gt;
&lt;br /&gt;
phantomjsコマンドと実行するファイルを指定するだけでできます。&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
まず手始めにgoogleへアクセスしてみます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: js;&quot;&gt;var page = require(&#39;webpage&#39;).create();
page.open(&#39;http://www.google.co.jp/&#39;, function () {
        page.render(&#39;sample.png&#39;);
        phantom.exit();
});
&lt;/pre&gt;
&lt;br /&gt;
新しく作ったJSファイルに上記を記述して実行。&lt;br /&gt;
&lt;br /&gt;
アクセスできました。&lt;br /&gt;
sample.pngというピクチャが保存されています。&lt;br /&gt;
&lt;br /&gt;
↓こんな感じ&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-g6ev0GvNq-k/VH_6Va-KNjI/AAAAAAAACkY/04A5rZQavK0/s1600/sample.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-g6ev0GvNq-k/VH_6Va-KNjI/AAAAAAAACkY/04A5rZQavK0/s1600/sample.png&quot; height=&quot;248&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
実際に使うにはどんどんページ遷移していきたいので、、、&lt;/div&gt;
&lt;div&gt;
下記ページを参考に遷移する先をtask化していきます。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/ogr09/phantomjs_doc_ja/blob/master/Quick-Start.md&quot;&gt;https://github.com/ogr09/phantomjs_doc_ja/blob/master/Quick-Start.md&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://tips.hecomi.com/entry/20121229/1356785834&quot;&gt;http://tips.hecomi.com/entry/20121229/1356785834&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: js;&quot;&gt;var page = require(&#39;webpage&#39;).create();

function next(){
  if (tasklist.length == 0) {
    phantom.exit();
  }
  var task = tasklist.shift();

  page.address = task.path;
  page.resources = [];

  page.open(page.address, function(status) {
    if (status !== &#39;success&#39;) {
      console.log(&#39;FAIL to load the address&#39;);
      phantom.exit(1);
    } else {
      var imagename = &#39;sample2_&#39; + (&#39;0&#39; + task.id).slice(-2);
      page.render(imagename + &#39;.png&#39;);

      next();
    }
  });
}

var tasklist = [
{
  id:1,
  path:&#39;http://www.yahoo.co.jp/&#39;
},{
  id:2,
  path:&#39;http://www.google.co.jp/&#39;
}];

next();
&lt;/pre&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
こんな感じに...&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
実行してみるとちゃんとアクセスされているようです。&lt;/div&gt;
&lt;div&gt;
sample2_01.png、sample2_02.pngと画像が保存されているので順にアクセスされてる模様です。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
さて、意味もなくやってるわけじゃなくて仕事で使うので自社サイトのアクセスをするわけですが。。。&lt;/div&gt;
&lt;div&gt;
自社サイトでは認証があるのでそれを実装します。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: js;&quot;&gt;var page = require(&#39;webpage&#39;).create();

function next(){
  if (tasklist.length == 0) {
    phantom.exit();
  }
  var task = tasklist.shift();

  page.address = task.path;
  page.resources = [];

  page.open(page.address, function(status) {
    if (status !== &#39;success&#39;) {
      console.log(&#39;FAIL to load the address&#39;);
      phantom.exit(1);
    } else {
      var imagename = &#39;sample3_&#39; + (&#39;0&#39; + task.id).slice(-2);
      page.render(imagename + &#39;.png&#39;);
      if(task.operation == null){
        next();
      } else {
        task.operation(page);
      }
    }
  });
}

var tasklist = [
{
  id:1,
  path:&#39;http://www.ub-speeda.com/&#39;,
  operation:
    function(page){
      page.evaluate(function() {
        //ここは各サイトで実装が異なります
        document.forms[0].username.value = &#39;dummy_username&#39;;
        document.forms[0].password.value = &#39;dummy_password&#39;;
        document.forms[0].submit();
      });

      //弊社サイトではログイン数管理をしており、それを超過した場合、古いログインを追い出すなどがあるため確認メッセージを出し、再度ログインボタンを押してもらう仕様のため、その対応です
      setTimeout(function() {
        if (page.url.indexOf(&#39;top/welcome&#39;) &amp;gt; 0) {
          page.evaluate(function() {
            document.forms[0].submit();
          });
          setTimeout(function() {
            next();
          }, 3000);
        } else {
          next();
        }
     }, 3000);
    }
},{
  id:2,
  path:&#39;http://www.ub-speeda.com/company/companyinformation/cid/JPN3O1U73D3VNGWO&#39;
}];

next();
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
operationという変数を作ってそこにログイン処理を放り込んでみました。&lt;/div&gt;
&lt;div&gt;
operationが実装されていれば実行する感じですね。&lt;/div&gt;
&lt;div&gt;
これを応用すればHP内の操作を追加していけるかと思います。&lt;/div&gt;
&lt;div&gt;
こちらは実際動作するのですがID/Pass等が必要なため試していただける方は少ないかと思います。（ゴメンナサイ&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
次にファイルのアクセスに関しての情報をファイルに記述します。&lt;/div&gt;
&lt;div&gt;
ここではページのロード時間しか記述しませんが、ちょこっと検索すればより詳細な情報を取得できるサンプルコードがあるところがあるので詳細はそちらを参考にしてください。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
まず、ファイルに書きだす方法ですが公式を参考に。。。&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://phantomjs.org/api/fs/method/write.html&quot;&gt;http://phantomjs.org/api/fs/method/write.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
var fs &amp;nbsp; = require(&#39;fs&#39;);&lt;/div&gt;
&lt;div&gt;
fs.write(ファイル名, 内容, &#39;w&#39;);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
で書き出せます。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
組み込んでみましょう。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: js;&quot;&gt;var page = require(&#39;webpage&#39;).create();
var fs   = require(&#39;fs&#39;);

page.onLoadStarted = function() {
  page.startTime = new Date();
};

function next(){
  if (tasklist.length == 0) {
    phantom.exit();
  }
  var task = tasklist.shift();

  page.address = task.path;
  page.resources = [];

  page.open(page.address, function(status) {
    if (status !== &#39;success&#39;) {
      console.log(&#39;FAIL to load the address&#39;);
      phantom.exit(1);
    } else {
      page.endTime = new Date();

      var logname = &#39;sample4_&#39; + (&#39;0&#39; + task.id).slice(-2);
      store(logname, page.endTime, page.startTime);

      if(task.operation == null){
        next();
      } else {
        task.operation(page);
      }
    }
  });
}

function store(logname, endTime, startTime){
  page.render(logname + &#39;.png&#39;);
  fs.write(logname + &#39;.log&#39;, endTime - startTime , &#39;w&#39;);
}

var tasklist = [
{
  id:1,
  path:&#39;http://www.ub-speeda.com/&#39;,
  operation:
    function(page){
      page.evaluate(function() {
        document.forms[0].username.value = &#39;dummy_username&#39;;
        document.forms[0].password.value = &#39;dummy_password&#39;;
        document.forms[0].submit();
      });

      setTimeout(function() {
        if (page.url.indexOf(&#39;top/welcome&#39;) &amp;gt; 0) {
          page.evaluate(function() {
            document.forms[0].submit();
          });
          setTimeout(function() {
            next();
          }, 3000);
        } else {
          next();
        }
     }, 3000);
    }
},{
  id:2,
  path:&#39;http://www.ub-speeda.com/company/companyinformation/cid/JPN3O1U73D3VNGWO&#39;
}];

next();
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
さて、これで&lt;/div&gt;
&lt;div&gt;
sample4_01.log&lt;/div&gt;
&lt;div&gt;
sample4_02.log&lt;/div&gt;
&lt;div&gt;
というファイルが出来ました。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
中身は「endTime - startTime&amp;nbsp;」という内容が示すとおり殺伐とした数字だけです。&lt;/div&gt;
&lt;div&gt;
sample4_01.logの中身&lt;/div&gt;
&lt;div&gt;
---&lt;/div&gt;
&lt;div&gt;
219&lt;/div&gt;
&lt;div&gt;
---&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
sample4_02.logの中身&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
---&lt;/div&gt;
&lt;div&gt;
2448&lt;/div&gt;
&lt;div&gt;
---&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
これでページを開く時間がわかるようになりました。&lt;/div&gt;
&lt;div&gt;
実際にはこれをより詳細にHAR形式で出力するなどして、使えるものに仕上げていってます。&lt;/div&gt;
&lt;div&gt;
他にも、ダウンロードやajaxでの表示待ちなどを組み込みながら作ったりします。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
こんな感じで日々仕事してます。。。&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/phantomjs.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-g6ev0GvNq-k/VH_6Va-KNjI/AAAAAAAACkY/04A5rZQavK0/s72-c/sample.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-8412116668465596131</guid><pubDate>Mon, 08 Dec 2014 11:40:00 +0000</pubDate><atom:updated>2014-12-15T09:54:05.617+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Chrome</category><category domain="http://www.blogger.com/atom/ns#">NewsPicks</category><title>NewsPicks の Chrome 拡張を作った話</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmMjTqOiPc5kZC7eBT0M8ZBn7-_RVk8T3cxJEemJFHWcUfH9rztWvQZsE7qtozuEH92qo7iD_pPGpF0TK0ymItwu0jmzRz8wpk4lAMS09FY0tJNCG2dQaAxfJMe9BDB5adZf0F5Ai2F34/s1600/screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmMjTqOiPc5kZC7eBT0M8ZBn7-_RVk8T3cxJEemJFHWcUfH9rztWvQZsE7qtozuEH92qo7iD_pPGpF0TK0ymItwu0jmzRz8wpk4lAMS09FY0tJNCG2dQaAxfJMe9BDB5adZf0F5Ai2F34/s1600/screenshot.png&quot; height=&quot;400&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushpython.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
SyntaxHighlighter.all();
&lt;/script&gt;
こんにちは。NewsPicks の開発を担当している文字（もんじ）です。本日 NewsPicks の Chrome 拡張をリリースしました。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://newspicks.com/blog/chrome-extention-release/&quot;&gt;NewsPicks の Google Chrome 拡張をリリースしました&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newspicks.com/news/733280/&quot;&gt;NewsPicks での反応&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
幸いユーザーの皆様にもご好評頂いているようで嬉しいです。ということで今回は NewsPicks の Chrome 拡張を作った話をします。アジェンダは以下の通りです。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;NewsPicks の Chrome 拡張が提供する機能について&lt;/li&gt;
&lt;li&gt;なぜ Chrome 拡張を作ったのか？&lt;/li&gt;
&lt;li&gt;どうやって Chrome 拡張を作ったのか？&lt;/li&gt;
&lt;li&gt;まとめ&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;1. NewsPicks の Chrome 拡張が提供する機能について&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Chrome 拡張が提供する機能については &lt;a href=&quot;http://newspicks.com/blog/chrome-extention-release/&quot;&gt;NewsPicks のブログ&lt;/a&gt;をご覧下さい。主に 2 つの機能を提供しています。&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;現在開いているページを NewsPicks に Pick する機能&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/rspRF_tBSFo&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
&lt;u&gt;アドレスバー（Omnibox）を利用して NewsPicks 内の記事やコメントを検索する機能&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;&lt;/u&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/2e66pyEX4Pg&quot; width=&quot;420&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;2. なぜ Chrome 拡張を作ったのか？&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
NewsPicks は基本的にスマホファーストな方針で開発しており、Web 版は今年の夏にリリースされたばかりです。しかしヘビーユーザー ── 特に NewsPicks がターゲットとしているビジネスマン ── は、スマホ以外から NewsPicks を利用することも多いと考えられます。実際に 25 % のユーザーが Chrome から NewsPicks にアクセスしていますし、そもそも会社でスマホを使ってニュースを見ていたら印象が悪いでしょう。&lt;br /&gt;
&lt;br /&gt;
また、過去記事を参照しながら長文のコメントを書いて下さるユーザーは、スマホではなく PC から書きたいと考えている方が多いとも感じていました。私自身も NewsPicks でコメントを書く場合は、スマホではなく PC を利用することが多いため、業務の隙間時間（ビルド時間）や休日の隙間時間に業務外で Chrome 拡張を開発することにしました。&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;3. どうやって Chrome 拡張を作ったのか？&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
さて本題の開発方法ですが、それほど特別なことはしていません。Chrome 拡張は必要なツールキットも揃っており、JavaScript と HTML で書けるため、実開発工数は 10-20 時間程度だと思います（気楽に作ることが出来るのが HTML&amp;nbsp;+ JavaScript の良いところですね）。ただ、私自身は Chrome 拡張を作ったことが無かったため、以下の順に調査をしました。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/extensions/getstarted&quot;&gt;Google のドキュメントを読む&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;今回開発しようとしている拡張機能に似た Extension のソースコードを読む&lt;/li&gt;
&lt;/ol&gt;
1. については、Google の API ドキュメントは良く整備されており、必要最低限の情報は十分に記載されていると感じました。ただ幾つか実際の使用例を見たかったので、2. のソースコードで知識を補完しました。ここでは具体的には以下を参考にしました。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/1000ch/pinput&quot;&gt;pinput&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/buunguyen/octotree&quot;&gt;octotree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
前者は主に Pick 機能（ポップアップ）の実装について、後者はポップアップを常駐型のサイドバーにしようとしたときに読み込みました（Omnibox を操作する拡張のソースコードも幾つか読んだのですが、失念していまいました）。&lt;br /&gt;
&lt;br /&gt;
ちなみにポップアップではなく常駐型のサイドバーにするのは途中で断念しました。理由は幾つかあるのですが、サイドバーを実装しようとすると content script もしくは &lt;a href=&quot;https://developer.chrome.com/extensions/tabs#method-executeScript&quot;&gt;executeScript&lt;/a&gt;&amp;nbsp;と &lt;a href=&quot;https://developer.chrome.com/extensions/tabs#method-insertCSS&quot;&gt;insertCSS&lt;/a&gt; によって表示しているページにスクリプトと CSS をインジェクトする必要があるのですが、後者が表示しているページの CSS とコンフリクトするためです。今回は手間を省くために CSS Framework を利用したかったのと、すべてのウェブページに対応しようと考えていたため、コンフリクトを回避するのはコストが高くつきそうだなぁと判断して取りやめた次第です。また、その他の理由としては、後述する &lt;a href=&quot;https://github.com/yeoman/generator-chrome-extension&quot;&gt;Yeoman の generator&lt;/a&gt; との相性が悪かったというのもあります。JS ファイル内で依存スクリプト / CSS をインジェクトするため、&lt;a href=&quot;https://github.com/yeoman/grunt-usemin&quot;&gt;grunt-usemin&lt;/a&gt; を使った Yeoman のビルドフローに乗せるのが面倒でした。&lt;br /&gt;
&lt;br /&gt;
さて、幾つか下準備をしたあと、具体的な開発に入りました。最初は自分でちまちまビルドスクリプトを書こうと思っていたのですが、丁度 &lt;a href=&quot;https://github.com/yeoman/generator-chrome-extension&quot;&gt;Yeoman の generator&lt;/a&gt; があることに気付いたので、こちらを使うことにしました。この generator を使うと extension のパッケージングまで含めたビルドフロー全般、また livereload を使ったデバッグ環境まで一式整えてくれるため、Chrome 拡張の開発に慣れていない人にとってはなかなか便利だと思います。ディレクトリ一式も良い感じに作ってくれるので、今回の拡張ではこの generator を使ってこんな感じの構成にしています。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicqvMQYgUN1UkXX9JNXQTiwsfxWqqNYrD0zfjCj4M9s6JWY8wx64U1pFaI9sgMgt7wx-lq6oJEPy1hF98qSWvjPiw27frFKLDywuX_taN2txDy2Ces5bZCYQmhHWgMXDLsFFH5ChKX4tI/s1600/extension.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicqvMQYgUN1UkXX9JNXQTiwsfxWqqNYrD0zfjCj4M9s6JWY8wx64U1pFaI9sgMgt7wx-lq6oJEPy1hF98qSWvjPiw27frFKLDywuX_taN2txDy2Ces5bZCYQmhHWgMXDLsFFH5ChKX4tI/s1600/extension.png&quot; height=&quot;584&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
具体的なソースコードについては特に複雑なことはしておらず、NewsPicks のサーバーが提供する REST API を叩いているだけです。あえて工夫した点を挙げると以下になるでしょうか。&lt;br /&gt;
&lt;br /&gt;
まず popup については MVC で開発しました。今回はそれほど複雑な画面ではないので &lt;a href=&quot;http://backbonejs.org/&quot;&gt;Backbone&lt;/a&gt; を利用していますが、フォームのモデルとのバインディングだけ面倒だったので &lt;a href=&quot;http://nytimes.github.io/backbone.stickit/&quot;&gt;backbone.stickit&lt;/a&gt;&lt;span id=&quot;goog_2014362608&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_2014362609&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.blogger.com/&quot;&gt;&lt;/a&gt; を利用しています。&lt;br /&gt;
&lt;br /&gt;
backbone.stickit は Backbone にバインディング機能を提供してくれるライブラリです。これを Marionette と組み合わせて使う場合は、次のような Behavior を定義しておくと便利です。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;pre class=&quot;brush: py;&quot;&gt;class StickitBindingBehavior extends Backbone.Marionette.Behavior

  createBindings: ($root, attr=&quot;name&quot;, ignores={}) -&amp;gt;
    bindings = Backbone.$.extend true, {}, @options.bindings
    $root.find(&quot;[#{attr}]&quot;).each -&amp;gt;
      $el = $(@)
      attribute = $el.attr attr
      return if bindings[attribute]
      for ignore in ignores
        if _.isString ignore
          return if ignore is attribute
        else if _.isObject ignore
          return if ignore.test and ignore.test attribute
      selector = &quot;[#{attr}=&#39;#{attribute}&#39;]&quot;
      tag = $el.prop(&quot;tagName&quot;).toLowerCase()
      key = &quot;#{tag}#{selector}&quot;
      return if bindings[key]
      bindings[key] = &quot;observe&quot;: attribute
    bindings

  onRender: -&amp;gt;
    @view.bindings = @createBindings @$el, @options.attr, @options.ignores
    @view.stickit()

  onDestroy: -&amp;gt;
    @view.unstickit()

Backbone.Marionette.Behaviors.behaviorsLookup = -&amp;gt;
  stickit: StickitBindingBehavior&lt;/pre&gt;&lt;/pre&gt;
&lt;br /&gt;
これを使うと基本的には何も書かなくてもそれっぽくバインドしてくれるようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;pre class=&quot;brush: py;&quot;&gt;class FormView extends Backbone.Marionette.ItemView

  template: &quot;#form&quot;
  behaviors:
    stickit: {}
&lt;/pre&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
ちなみに &lt;a href=&quot;https://github.com/marionettejs/backbone.marionette&quot;&gt;Backbone.Marionette&lt;/a&gt; + &lt;a href=&quot;http://nytimes.github.io/backbone.stickit/&quot;&gt;backbone.stickit&lt;/a&gt; + &lt;a href=&quot;http://browserify.org/&quot;&gt;Browserify&lt;/a&gt;&amp;nbsp;を使ったテンプレートを以前自分で作って github に公開しているので、良ければこちらをご参照下さい。&lt;br /&gt;
→ &lt;a href=&quot;https://github.com/monzou/backbone.marionette.example&quot;&gt;backbone.marionette.example&lt;/a&gt;&lt;span id=&quot;goog_2014362619&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_2014362620&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.blogger.com/&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Omnibox については Chrome の extension と API を組み合わせているだけですが、操作感については「.」を打つことでページを切り替えられるような UI にしました。また、Chrome の Omnibox は一度に表示出来る候補リストのサイズが少ないため、サーバーの負荷を減らすためにサーバー側から取得した検索結果のバッファをページングし、終端まで辿り着いた段階で API を叩いてリモートから次のページを取得するようにしています。また、当然ですがキーボード入力は適当に間引いて負荷を減らしています。&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;4. まとめ&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
以上が今回開発した内容の概要になります。&lt;br /&gt;
Chrome 拡張の開発についてのまとめです。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Chrome の API ドキュメントは良く整備されており、Chrome extension のソースコードも GitHub などに沢山公開されているため、キャッチアップは比較的容易（但し GitHub に公開されている extension のコードは玉石混淆なため、安易に引用するのはオススメしません）&lt;/li&gt;
&lt;li&gt;Yeoman の generator を使うと開発環境は何も考えずにセットアップできる&lt;/li&gt;
&lt;li&gt;popup や omnibox の実装は、それほど Chrome 固有の知識を要求されるものではなく、HTML と JavaScript の知識があれば十分&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
「Chrome 拡張の開発」と言うとなんとなく敷居が高く感じてしまいますが、それほど難しい概念があるわけでもないので、皆さんも気楽に開発してみると楽しいのではないでしょうか。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NewsPicks では一緒に開発してくれるエンジニアを募集しています！様々なバックグラウンドを持つエンジニアや編集部の皆と世界一の経済メディアをつくりましょう！興味の在る方は是非 &lt;a href=&quot;https://www.wantedly.com/projects/11504&quot;&gt;Wantedly&lt;/a&gt; などでお気軽にオフィスまでお越し下さい！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;</description><link>http://uzabase.blogspot.com/2014/12/newspicks-chrome.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmMjTqOiPc5kZC7eBT0M8ZBn7-_RVk8T3cxJEemJFHWcUfH9rztWvQZsE7qtozuEH92qo7iD_pPGpF0TK0ymItwu0jmzRz8wpk4lAMS09FY0tJNCG2dQaAxfJMe9BDB5adZf0F5Ai2F34/s72-c/screenshot.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-528423380223468416</guid><pubDate>Wed, 03 Dec 2014 17:25:00 +0000</pubDate><atom:updated>2014-12-12T16:03:40.123+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Scala</category><category domain="http://www.blogger.com/atom/ns#">インターン</category><category domain="http://www.blogger.com/atom/ns#">パーサコンビネータ</category><title>Scalaのパーサコンビネータにふれる</title><description>&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
技術チームインターンの中村です。&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
内製化されたシステムを抱えた会社にいると，エンジニア以外の方のためにドメイン特化言語を構築するようなこともあるかと思います。
    uzabaseの場合，アナリストがSPEEDAに載せる業界概要の記事を効率良く書けるようになるために，Markdownに似た軽量マークアップ言語が作られました。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
作る言語が構文木が不要なほど小規模ならば，文字用ユーティリティだけで十分に言語実装が可能かと思います。
    一方で，言語が大規模であったり効率の良いコンパイルが求められたりするのであれば，LexやYaccのようなパーサージェネレータが必要になるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;今回はその間くらい，つまり単純な文字列処理では足りないものの，パーサージェネレータを使うほどでもないくらいの言語を構築するときに便利なScalaのパーサーコンビネータについて紹介します。
  &lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
受け取った入力の結果を返す関数としてパーサーを組合せることで，目的のパーサーを高階関数（コンビネータ）として構築したものがパーサーコンビネータです。
    パーサーは文法構造の連続，繰り返し，選択などを実現する関数で組み合わされます。
    このとき，言語が関数あるいはメソッドの中置記法をサポートするなら，パーサーコンビネータの定義はEBNFの生成規則と似たものになります。
    たとえば，論理式のEBNFとこれに従う論理式をパースするパーサーコンビネータの対応は以下のようになります。
  &lt;/div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;EBNF
expr ::= termA {&quot;|&quot; termA}
termA ::= termN {&quot;&amp;amp;&quot; termN}
termN ::= factor | {&quot;!&quot; factor}
factor ::= &quot;TRUE&quot; | &quot;FALSE&quot; | &quot;(&quot; expr &quot;)&quot;
|は選択，{}は0以上の繰り返し

パーサーコンビネータ
def expr: Parser[Any] = termA~rep(&quot;|&quot;~termA)
def termA: Parser[Any] = termN~rep(&quot;&amp;amp;&quot;~termN)
def termN: Parser[Any] = factor | &quot;!&quot;~factor
def factor: Parser[Any] = &quot;TRUE&quot; | &quot;FALSE&quot; | &quot;(&quot;~expr~&quot;)&quot;
|は選択，~は連続，rep()は0回以上の繰り返し
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
|, ~, repをメソッドとして別のParserを引数にとり，より複雑な文字列を受理するようなParserを返す，この繰り返しによって論理式を受理するパーサを構築しています。
    上の定義は宣言的なので，どのような計算がパース過程で行われるのか定義から読み取ることができません。
    そこで，アトミックなパーサと，パーサ同士を逐次的に繋げた場合の計算がどのような行われるか見て行きたいと思います。
  &lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
最小のパーサはsuccess, failureというメソッドです。
    これらは入力をまったく消費しません。
    2つのメソッドは以下のように定義されています。
  &lt;/div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def success[T](v: T) = Parser{ in =&amp;gt; Success(v, in) }

def failure(msg: String) = Parser { in =&amp;gt; Failure(msg, in) }

ヘルパーメソッド
def Parser[T](f: Input =&amp;gt; ParseResult[T]): Parser[T] = new Parser[T]{
  def apply(in: Input) = f(in)
}
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
Parserというのが，|や~をメソッドに持つパーサーのクラスです。
    Inputは，パーサーが生の文字列だけではなく，トークンのストリームも読めるようにするために，パース対象を抽象化するクラスです。
    Success, FailureはParseResultの子クラスとして，それぞれ成功，失敗したパース結果と残りの入力をまとめるクラスです。これらのクラスの宣言は以下のように定義されています。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;abstract class Parser[+T] extends (Input =&amp;gt; ParseResult[T]) {..}

case class Success[+T](result: T, override val next: Input) extends ParseResult[T] {
  ..
}

case class Failure(override val msg: String, override val next: Input) 
  extends NoSuccess(msg, next) {..}
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
success, failureの次に仕事をするパーサが以下のelemです。
    これは，入力を適用すると，入力の先頭がeであれば，resultにe, nextに2番目以降の入力もつSuccessを返します。
    また，先頭がeでなければFailureを返します。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def elem(e: Elem): Parser[Elem] = accept(e)
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
&lt;span style=&quot;line-height: 1.5em;&quot;&gt;ここまでで，Parserが入力(Input)を受けつけ，ヘルパーメソッドのfにinputを適用した結果(result)と入力の残り(next)を返す関数であるようなイメージを持って頂けたと思います。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
次に逐次的にパーサ同士をつなげるメソッド~を見ていきます。
    ~は以下のように定義されています。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def ~[U](q: =&amp;gt; Parser[U]): Parser[~[T, U]] = { lazy val = p = q
  (for {
    a&amp;lt;- this
    b&amp;lt;-p
  } yield new ~(a, b)).named(&quot;~&quot;)
}
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
new ~(a, b)は繋げられた2つのパーサーの結果をひとつにまとめるためケースクラス~のインスタンスです。
    また，for式に必要なflatMap, mapの定義は以下になります。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def flatMap[U](f: T =&amp;gt; Parser[U]): Parser[U] = Parser{ in =&amp;gt; 
  this(in) flatMapWithNext(f) 
}

def map[U](f: T =&amp;gt; U): Parser[U]  = Parser{ in =&amp;gt; this(in) map(f)}
  &lt;/pre&gt;
上の定義で使われるSuccessにおけるflatMapWithNextとmapは以下のようになります。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def flatMapWithNext[U](f: T =&amp;gt; Input =&amp;gt; ParserResult[U]): ParseResult[U] =
   f(result)(next)

def map[U](f: T =&amp;gt; U) = Success(f(result), next)
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
そして，これらを用いてfor式を地道に展開していくと例えば次のように書き直せます。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;new Parser[T~U] {
  def apply(in: Input) = Parser.this(in) match {
    case Success(r, n) =&amp;gt; p(n) match {
      case Success(r1, n1) =&amp;gt; Success(new ~(r, r1), n1)
      case Failure(msg, next) =&amp;gt; Failure(msg, next)
    }
    case Failure(msg, next) =&amp;gt; Failure(msg, next)
  }
}
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
最初のパーサーが返すParseResultにある残りの入力が次のパーサに渡されることで，計算が進めるようです。
    上の定義を見ると，はじめのパーサが失敗すれば計算は終了。
    成功すれば，次のパーサpに残りの入力(n)を渡す。
    そこで失敗すれば後続する計算がなされず全体の計算が終了。
    成功すれば両パーサの計算結果としてケースクラスの~が返されています。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;ここまでで，パーサーコンビネータの実体が引数をパース対象として受付け，関数適用の結果と残りのパース対象の組を返す関数のように振舞うことがなんとなく伝わったかと思います。&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;さらに詳しく知りたい方は&lt;a href=&quot;http://www.cs.nott.ac.uk/~gmh/monparsing.pdf&quot;&gt;こちら&lt;/a&gt;を参考にパーサーコンビネータそのものを自作してみるとよいかもしれません。
    リンク先の資料ではパーサコンビネータがモナド値であることを踏まえた上で実装方法を紹介しています。
    事実，ScalaのParserやParseResultはモナド値となっています。&lt;/div&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
資料ではParserが次のように定義されています。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;newtype Parser a = Parser (String -&amp;gt; [(a,String)])
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
InputがString, ParseResultが[(a, String)]とそれぞれ対応しています。
    空リストがFailureを意味します。
    最後に上のpdfの実装をScalaで試すときに，モナド則の確認やfor式の記述に最低限必要な定義を残しておくので，ご参考にしていただければと思います。
  &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;trait Parsers {
  def Parser[A](f: String =&amp;gt; List[(A, String)]): Parser[A] = new Parser[A]{
    def apply(input: String) = f(input)
  }

  def success[A](v: A): Parser[A] = Parser{ input =&amp;gt; List((v, input)) }

  def failure[A]: Parser[A] = Parser { input =&amp;gt; List() }

  trait Parser[A] extends (String =&amp;gt; List[(A, String)]) {
    def apply(input: String): List[(A, String)]

    def flatMap[B](f: A =&amp;gt; Parser[B]) = Parser{ (input: String) =&amp;gt;
      for {
        (a, input2) &amp;lt;- this(input)
        b &amp;lt;- f(a)(input2)
      } yield b
    }

    def withFilter(pred: A =&amp;gt; Boolean): Parser[A] = Parser { input: String =&amp;gt;
      for {
        elm &amp;lt;- this(input) if pred(elm._1)
      } yield elm
    }

    def map[B](f: A =&amp;gt; B) = Parser {input =&amp;gt;
      for {
        a &amp;lt;- this(input)
      } yield(f(a._1), a._2)
    }
  }
}
  &lt;/pre&gt;
&lt;div style=&quot;line-height: 1.5em;&quot;&gt;
付録, for式の展開過程&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;this.flatMap {
  a =&amp;gt; p.map(b =&amp;gt; new ~(a, b))
}

Parser {
  in =&amp;gt; Parser.this(in) match {
    case Success(r, n) =&amp;gt; ((a: T) =&amp;gt; p.map(b =&amp;gt; new ~(a, b)))(r)(n)
    case Failure(msg, next) =&amp;gt; Failure(msg, next)
  }
}

Parser { in =&amp;gt;
  Parser.this(in) match {
    case Success(r, n) =&amp;gt; Parser { in =&amp;gt; p(in).map(b =&amp;gt; new ~(r, b)) }(n)
    case Failure(msg, next) =&amp;gt; Failure(msg, next)
  }
}

Parser { in =&amp;gt;
  Parser.this(in) match {
    case Success(r, n) =&amp;gt; p(n) match {
      case Success(r1, n1) =&amp;gt; Success(new ~(r, r1), n1)
      case Failure(msg, next) =&amp;gt; Failure(msg, next)
    }
    case Failure(msg, next) =&amp;gt; Failure(msg, next)
  }
}
  &lt;/pre&gt;</description><link>http://uzabase.blogspot.com/2014/12/scala.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-6090713441913538869</guid><pubDate>Mon, 01 Dec 2014 03:19:00 +0000</pubDate><atom:updated>2014-12-01T13:11:18.673+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">合同勉強会</category><title>【えびスタ！】12/18(木)勉強会を開催します【クックパッド × Retty × VASILY × UZABASE】</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoCFVkGJzVWt8b_QoZYBb_a8yMbfnq0xYhdf8aVdizXy_VlCNUYzm3K_YI3hn8ffjfg9DppQaDjXiWNyp6MSJ9qn5bS2m_ME7JzpuW8822nHscXUYnNwg1PaHfyZ8cLQKEWMpeQt5ssSDE/s1600/%E3%81%88%E3%81%B3%E3%81%99%E3%81%9F1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoCFVkGJzVWt8b_QoZYBb_a8yMbfnq0xYhdf8aVdizXy_VlCNUYzm3K_YI3hn8ffjfg9DppQaDjXiWNyp6MSJ9qn5bS2m_ME7JzpuW8822nHscXUYnNwg1PaHfyZ8cLQKEWMpeQt5ssSDE/s1600/%E3%81%88%E3%81%B3%E3%81%99%E3%81%9F1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;line-height: 19.2000007629395px;&quot;&gt;いま勢いのある恵比寿近辺のスタートアップを中心とした、エンジニア向けの技術勉強会です。&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; list-style-image: initial; list-style-position: initial; margin: 0px 10px 10px 32px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;li style=&quot;border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;クックパッド&lt;/li&gt;
&lt;li style=&quot;border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;Retty&lt;/li&gt;
&lt;li style=&quot;border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;VASILY&lt;/li&gt;
&lt;li style=&quot;border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;UZABASE&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
のエンジニア陣が、最近の各社の取り組みについてお話させて頂きます。&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;line-height: 19.2000007629395px;&quot;&gt;後半は軽食を交えつつ、カジュアルな QA セッションの場や各社エンジニアとの懇親会も予定しておりますので、ご興味のある方は是非ご参加下さい！（エビスビールとピザもあります！）&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
残りの一般参加枠は9名(12/1現在)となっております。&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
興味のある方はお早めにお申し込みください！&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
申込みはこちらから(compass)&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #444444; font-family: &#39;Lucida Grande&#39;, Verdana, &#39;ヒラギノ角ゴ Pro W3&#39;, &#39;Hiragino Kaku Gothic Pro&#39;, &#39;MS Pゴシック&#39;, &#39;MS P Gothic&#39;, Osaka, sans-serif; line-height: 19.2000007629395px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;line-height: 1.4;&quot;&gt;えびスタ！#1【クックパッド × Retty × VASILY × UZABASE】&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;color: #444444; font-family: Lucida Grande, Verdana, ヒラギノ角ゴ Pro W3, Hiragino Kaku Gothic Pro, MS Pゴシック, MS P Gothic, Osaka, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.2000007629395px;&quot;&gt;&lt;a href=&quot;http://ebista.connpass.com/event/10258/&quot;&gt;http://ebista.connpass.com/event/10258/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/12/1218-retty-vasily-uzabase.html</link><author>noreply@blogger.com (阿達)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoCFVkGJzVWt8b_QoZYBb_a8yMbfnq0xYhdf8aVdizXy_VlCNUYzm3K_YI3hn8ffjfg9DppQaDjXiWNyp6MSJ9qn5bS2m_ME7JzpuW8822nHscXUYnNwg1PaHfyZ8cLQKEWMpeQt5ssSDE/s72-c/%E3%81%88%E3%81%B3%E3%81%99%E3%81%9F1.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-9194974276896271004</guid><pubDate>Tue, 18 Nov 2014 07:30:00 +0000</pubDate><atom:updated>2014-12-12T16:01:15.299+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">D3.js</category><category domain="http://www.blogger.com/atom/ns#">LT</category><category domain="http://www.blogger.com/atom/ns#">NewsPicks</category><title>NewsPicks × D3.js</title><description>&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;&lt;br /&gt;
&lt;a href=&quot;https://newspicks.com/top-news&quot; target=&quot;_blank&quot;&gt;NewsPicks&lt;/a&gt;の開発をしている板倉です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NewsPicksではニュースを見る画面とは別に、&lt;br /&gt;
どの記事がどれくらい読まれているかという画面の開発を進めています。&lt;br /&gt;
直感的にわかる画面がほしいということで、
D3.jsを使って画面を開発することになりました。&lt;br /&gt;
D3.jsを使うにあたって勉強するつもりで何か作ろうと思い書いたのが今回のエントリーになります。
&lt;br /&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
今回の開発環境&lt;/h3&gt;
&lt;div&gt;
Mac OS X(10.10)&lt;/div&gt;
&lt;div&gt;
D3.js(3.4.13)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
D3.jsについて&lt;/h3&gt;
&lt;div&gt;
まずは、D3について少しだけ。&lt;/div&gt;
&lt;div&gt;
Githubの人気リポジトリに入っている人気のJavaScriptライブラリです。(2014/11 時点)&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/trending?|=javascript&quot; target=&quot;_blank&quot;&gt;https://github.com/trending?|=javascript&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://d3js.org/&quot; target=&quot;_blank&quot;&gt;公式&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://ja.d3js.node.ws/&quot; target=&quot;_blank&quot;&gt;D3.js 日本語　翻訳&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/mbostock/d3/wiki/API-Reference&quot; target=&quot;_blank&quot;&gt;APIリファレンス&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://ja.d3js.info/alignedleft/tutorials/d3/&quot; target=&quot;_blank&quot;&gt;チュートリアル&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
APIリファレンスを見ると、たくさんの機能があるのがわかります。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
地図を書いてみよう&lt;/h3&gt;
&lt;div&gt;
APIリファレンスを見ていて気になったのが&lt;a href=&quot;https://github.com/mbostock/d3/wiki/API-Reference#d3geo-geography&quot; target=&quot;_blank&quot;&gt;Geography&lt;/a&gt;。&lt;/div&gt;
&lt;div&gt;
ということで日本地図を書いてみました。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyKUUH7HNeApTxChNUK8Rwn7FT9eFkeuV_WHhSrm-7WABeOOtqS5bhKaT8b6Nq5sz1uLfMCl_bR-WupryKzp3kWrFjIUSVTL9Ha6nUJTSmfk_HwdiPBdxtqOqRE01UZ-_5iIJCjTWn7hDh/s1600/%E6%97%A5%E6%9C%AC%E5%9C%B0%E5%9B%B3.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyKUUH7HNeApTxChNUK8Rwn7FT9eFkeuV_WHhSrm-7WABeOOtqS5bhKaT8b6Nq5sz1uLfMCl_bR-WupryKzp3kWrFjIUSVTL9Ha6nUJTSmfk_HwdiPBdxtqOqRE01UZ-_5iIJCjTWn7hDh/s1600/%E6%97%A5%E6%9C%AC%E5%9C%B0%E5%9B%B3.PNG&quot; height=&quot;319&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
参考にしたサイト&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://ja.d3js.node.ws/blocks/mike/map/&quot; target=&quot;_blank&quot;&gt;D3.jsとTopoJSONで地図を作る&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
地図上に何か表示してみよう&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;
地図を描いただけだと面白くないので、地震のデータを使って地図上に表示してみました。&lt;/div&gt;
&lt;div&gt;
まずは、データの取得。&lt;/div&gt;
&lt;div&gt;
以下のサイトで日本の緯度経度、地震の大きさと期間を入力してデータをダウンロードしました。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.usgs.gov/&quot; target=&quot;_blank&quot;&gt;USGS&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf06CCIJz3aV-vM7B8Q5-eWBsmFSMKpSVUwqLXamWzvL2no9BXRwzooPZcFwQHPXtG8pS-RzMaIR5kqPT-91vvOz_9Uzt1Q0HrJhYYlxh51O9eAZP_AJWw7X-meoGOVRK2oIEWZYihF_Dt/s1600/USGS.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf06CCIJz3aV-vM7B8Q5-eWBsmFSMKpSVUwqLXamWzvL2no9BXRwzooPZcFwQHPXtG8pS-RzMaIR5kqPT-91vvOz_9Uzt1Q0HrJhYYlxh51O9eAZP_AJWw7X-meoGOVRK2oIEWZYihF_Dt/s1600/USGS.PNG&quot; height=&quot;255&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
ダウンロードしたデータを0.1秒ずつずらして描画してみました。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
円をそのままにしておくと画面が円だらけになるので、描画して2秒後に消しています。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: jscript;&quot;&gt;d3.csv(&#39;geo/eq.csv&#39;, function(d) {
    // データが降順だったので反転
    d = d.reverse();
    // 大きさ
    var rScale = d3.scale.linear().domain(d3.extent(d, function(e){
         return e.mag;
    })).range([3, 81]);
    // 深さ
    var colorScale = d3.scale.linear().domain(d3.extent(d, function(e){
         return e.depth;
    })).range([&#39;yellow&#39;, &#39;red&#39;]);
    g.selectAll(&#39;circle&#39;)
         .data(d)
         .enter().append(&#39;circle&#39;)
         .attr(&#39;fill&#39;, function(d) { 
              return colorScale(d.depth);
         })
         .attr(&#39;fill-opacity&#39;, 0.5)
         .attr(&#39;stroke-width&#39;, &#39;1&#39;)
         .attr(&#39;stroke&#39;, function(d) { 
              return colorScale(d.depth);
         })
         .attr(&#39;cx&#39;, function(d){
             return projection([Number(d.longitude), Number(d.latitude)])[0];
         })
         .attr(&#39;cy&#39;, function(d){
             return projection([Number(d.longitude), Number(d.latitude)])[1];
         })
         .transition().delay(function(d, i) { 
              return i * 100;
         })
        .attr(&#39;r&#39;, function(d) {
             return rScale(d.mag)
         })
        .each(&#39;start&#39;, function(d){
             dateText.text(df(new Date(d.time)));
             mag.text(&#39;M &#39; + d.mag);
             depth.text(&#39;Depth: &#39; + d.depth + &#39; km&#39;);
         })
        .transition().delay(function(d, i) {
             return (i * 100) + 2000
         })
        .each(&#39;end&#39;, function(d){
             d3.select(this).remove();
         });
})&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
実装したものは&lt;a href=&quot;http://egg.uzabase.com/demo/20141114/&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
数字が並んでるデータを見るだけだと気付きにくいことも&lt;br /&gt;
図形で表現してみると新しい発見がありますね。&lt;br /&gt;
&lt;br /&gt;
Uzabaseではデータの視覚化を進めるエンジニアを募集しております。&lt;br /&gt;
興味をお持ちいただいた方は&lt;a href=&quot;https://www.wantedly.com/companies/uzabase&quot; target=&quot;_blank&quot;&gt;Wantedly&lt;/a&gt;などからご連絡ください！</description><link>http://uzabase.blogspot.com/2014/11/d3js_17.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyKUUH7HNeApTxChNUK8Rwn7FT9eFkeuV_WHhSrm-7WABeOOtqS5bhKaT8b6Nq5sz1uLfMCl_bR-WupryKzp3kWrFjIUSVTL9Ha6nUJTSmfk_HwdiPBdxtqOqRE01UZ-_5iIJCjTWn7hDh/s72-c/%E6%97%A5%E6%9C%AC%E5%9C%B0%E5%9B%B3.PNG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-5564252954952672859</guid><pubDate>Tue, 18 Nov 2014 07:27:00 +0000</pubDate><atom:updated>2014-12-12T16:02:01.703+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CentOS7</category><category domain="http://www.blogger.com/atom/ns#">LAMP</category><category domain="http://www.blogger.com/atom/ns#">Wordpressインストール</category><category domain="http://www.blogger.com/atom/ns#">インターン</category><title>CentOS7にLAMP環境を構築してWordpressをインストールする</title><description>&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushbash.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;
インターン生の阿達です。&lt;br /&gt;
&lt;br /&gt;
いつかはこのブログや、会社のHPも自分で作れたらいいなあと思っている&lt;br /&gt;
プログラミング歴１か月のぺーぺーです。&lt;br /&gt;
&lt;br /&gt;
その野望の第一歩として与えられた課題が&lt;br /&gt;
CentOS7にLAMP環境を構築してWordpressをインストールする&lt;br /&gt;
でした。&lt;br /&gt;
この記事では勉強した内容の復習を兼ねて手順を丁寧に紹介したいと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
目次&lt;br /&gt;
&lt;br /&gt;
【1】LAMP( Apache + MariaDB(Mysql) + PHP )をインストールする&lt;br /&gt;
&lt;br /&gt;
　0,準備&lt;br /&gt;
　1,Apacheをインストールする&lt;br /&gt;
　2,MariaDBをインストールする&lt;br /&gt;
　3.PHPをインストール&lt;br /&gt;
&lt;br /&gt;
【2】Wordpressをインストールする&lt;br /&gt;
　&lt;br /&gt;
　1,Wordpressをダウンロードする&lt;br /&gt;
　2,MariaDBにWordpress用のデータベースを作成する&lt;br /&gt;
　3,Wordpressのセットアップをする&lt;br /&gt;
　4,&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
【1】LAMP( Apache + MariaDB(Mysql) + PHP )をインストールする&lt;/h3&gt;
&lt;h3&gt;
0,準備&lt;/h3&gt;
&lt;br /&gt;
○ユーザーをルートに切り替える&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;sudo su
su
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
○SELinux無効化&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;vi /etc/sysconfig/selinux
&lt;/pre&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;下記を変更
SELINUX=enforcing
↓
SELINUX=disabled
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
・OSを再起動します&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;shutdown -r now&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
○firewalld設定・現在の設定の確認&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;firewall-cmd --list-all-zones&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;（略）
public (default, active)
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
（略）
&lt;/pre&gt;
初期設定では publicゾーンに ssh のみ許可されています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・追加で http と https を許可設定します&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・設定を読込みます&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;firewall-cmd --reload&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・設定を確認します&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;firewall-cmd --list-services --zone=public&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;(下記表示であればOK)
dhcpv6-client http https ssh
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
1,Apacheをインストールする&lt;/h3&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;yum install httpd&lt;/pre&gt;
&lt;br /&gt;
・.Apacheの設定を行う&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;vi /etc/httpd/conf/httpd.conf&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・ここでは必要最小限のサーバー名（今回はexample.com）だけ設定しておきます&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;ServerName example.com:80&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・Apacheのデーモンを起動する&lt;br /&gt;
&lt;br /&gt;
・ウェブサーバー(httpd)を起動します&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl start httpd.service&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・ウェブサーバー(httpd)のデーモン(サービス)が起動しているか確認します&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-units |grep httpd&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;(下記表示であればOK)



httpd.service        \
    loaded acitive running The Apache HTTP Server&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・次に、ウェブサーバー(httpd)デーモンがブート時に自動起動するように設定しておきます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl enable httpd.service
&lt;/pre&gt;
以下のように表示されてればOK
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;ln -s &#39;/usr/lib/systemd/system/httpd.service&#39; &#39;/etc/systemd/system/multi-user.target.wants/httpd.service&#39;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・ウェブサーバー(httpd)デーモンの登録状態を確認します。&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-unit-files |grep httpd
(下記表示であればOK)
httpd.service         enabled&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・ブラウザから先程サーバー名で設定したアドレス（この場合はexample.com）にアクセスすると、&lt;br /&gt;
Apacheの「Red Hat Enterprise Linux Test Page」が表示されます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRtIKEok-XsFvQaN-DKx_eeon7DiHPYCxFifWbCLIDNLHZdv6vNqwwnD1K2HXcESUuqKWpNeC9305o_kQ8GSoA0uTgOk6JDdhz7W8tvmurORCH4vxEQ77GiRIva_UeeQen-8uO-UEgdUE/s1600/11.11%E3%83%96%E3%83%AD%E3%82%B0%E7%94%A8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRtIKEok-XsFvQaN-DKx_eeon7DiHPYCxFifWbCLIDNLHZdv6vNqwwnD1K2HXcESUuqKWpNeC9305o_kQ8GSoA0uTgOk6JDdhz7W8tvmurORCH4vxEQ77GiRIva_UeeQen-8uO-UEgdUE/s320/11.11%E3%83%96%E3%83%AD%E3%82%B0%E7%94%A8.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
2,MariaDBをインストールする&lt;/h3&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;yum install mariadb-server mariadb&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・MariaDBのデーモンを起動する&lt;br /&gt;
&lt;br /&gt;
・mariadbデーモンが起動しているか確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-units |grep mariadb&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・何も出力されないので、起動していない状態だとわかります。&lt;br /&gt;
&lt;br /&gt;
・次に、mariadbデーモンの登録状態を確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-unit-files |grep mariadb

mariadb.service        disabled&lt;/pre&gt;
&lt;br /&gt;
disabledなので、再起動してもmariadbデーモンは起動しません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・mariadb のデーモン（サービス）を起動します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl start mariadb.service&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・mariadb のデーモン（サービス）が起動しているか確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-units |grep mariadb
(下記表示であればOK)
mariadb.service                \
   loaded active running MariaDB database server&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・次に、mariadbデーモンの登録状態を確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-unit-files |grep mariadb

mariadb.service        disabled&lt;/pre&gt;
disabledなので、再起動してもmariadbのデーモンは起動しません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・次に、mariadbデーモンがブート時に自動起動するように設定しておきます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl enable mariadb.service
(下記表示であればOK)
ln -s &#39;/usr/lib/systemd/system/mariadb.service&#39; &#39;/etc/systemd/system/multi-user.target.wants/mariadb.service&#39;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・再度、mariadbデーモンの登録状態を確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl list-unit-files |grep mariadb
(下記表示であればOK)
mariadb.service        enabled
&lt;/pre&gt;
enabledなので、再起動してもmariadbデーモンは起動されます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・MariaDBのセキュリティ設定をします。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;/usr/bin/mysql_secure_installation&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;OTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we&#39;ll need the current
password for the root user.  If you&#39;ve just installed MariaDB, and
you haven&#39;t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 【空enter】
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] 【Y】
New password: 【パスワードを設定する、今回はhoge】
Re-enter new password: 【先程のパスワードを入力する、今回はhoge】
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] 【Y】
 ... Success!
Normally, root should only be allowed to connect from &#39;localhost&#39;.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]【Y】
 ... Success!
By default, MariaDB comes with a database named &#39;test&#39; that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n]【Y】
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n]【Y】
 ... Success!
Cleaning up...
All done!  If you&#39;ve completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・ログインできるか試す。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;mysql -h localhost -u root -p&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;【】で示した部分が必要な操作です。


Enter password:【先程設定したパスワードを入力する、今回はhoge】

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.37-MariaDB MariaDB Server
 
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
 
Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.
 
MariaDB [(none)]&amp;gt;【 exit】

Bye&lt;/pre&gt;
&lt;h3&gt;
3,PHPをインストールする&lt;/h3&gt;
&lt;div&gt;
・PHPをインストールする&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;
yum install php-mysql php php-gd php-mbstring&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・phpがインストールできたか、バージョンをチェックしてみます。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;php --version&lt;/pre&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;PHP 5.4.16 (cli) (built: Jun 10 2014 02:52:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies&lt;/pre&gt;
&lt;br /&gt;
・httpdサービス(Apache)を再起動する&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;systemctl restart httpd.service&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・php動作確認用のファイルを作成する。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;cd /var/www/html
# echo &#39;&#39; &amp;gt; index.php&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
・上記で作成したindex.phpへブラウザからアクセスする。&lt;br /&gt;
（今回はexample.com/index.php）&lt;br /&gt;
&lt;br /&gt;
phpの画面が表示されます。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQsdO3TeLBTzZXxCM1rXrhsG-JaTLb6oMcsD1pTakBWpEagqszt_szzdPMH9obtF7TbKiFsdPLBNvmO2Wo7Zo4HZdTcy-2WVUs0I96mgNfMbS_p5R9DL5VMPNFrqzMyGTNJCYeGXkpMeQZ/s1600/11.11%E3%83%96%E3%83%AD%E3%82%B0%E7%94%A8.2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQsdO3TeLBTzZXxCM1rXrhsG-JaTLb6oMcsD1pTakBWpEagqszt_szzdPMH9obtF7TbKiFsdPLBNvmO2Wo7Zo4HZdTcy-2WVUs0I96mgNfMbS_p5R9DL5VMPNFrqzMyGTNJCYeGXkpMeQZ/s1600/11.11%E3%83%96%E3%83%AD%E3%82%B0%E7%94%A8.2.png&quot; height=&quot;320&quot; width=&quot;204&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
【2】Wordpressをインストールする&lt;/h3&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
1,Wordpressをダウンロードする&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・最新のWordpressをダウンロードする&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;cd /tmp&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;wget http://wordpress.org/latest.tar.gz&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・ダウンロードしたWordpressを解凍する&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;tar -xvzf latest.tar.gz -C /var/www/html&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
2,MariaDBにWordpress用のデータベースを作成する&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・MariaDBにrootでログインする&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;mysql -h localhost -u root -p&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・データベースを作成する&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;今回testとhogehogeで示した部分はご自分で設定してください
CREATE USER test@localhost IDENTIFIED BY &quot;hogehoge&quot;;
CREATE DATABASE test_blog;
GRANT ALL ON test_blog.* TO test@localhost;
FLUSH PRIVILEGES;
exit&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
3,Wordpressのセットアップをする&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・localhostとWordpressを紐づける&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
/etc/hosts に下記を書き足す&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;127.0.0.1 wordpress&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・wp-config.phpを生成する&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;cd /var/www/html/wordpress&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;cp wp-config-sample.php wp-config.php&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・wp-config.phpでWordpressの設定をする&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;vi wp-config.php&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;【2】2,で作成したデータベースの情報を入力します
define(&#39;DB_NAME&#39;, &#39;test_blog&#39;);
define(&#39;DB_USER&#39;, &#39;test&#39;);
define(&#39;DB_PASSWORD&#39;, &#39;hogehoge&#39;);
define(&#39;DB_HOST&#39;, &#39;localhost&#39;);
define(&#39;DB_CHARSET&#39;, &#39;utf8&#39;);
define(&#39;DB_COLLATE&#39;, &#39;&#39;);
(中略)
$table_prefix = &#39;wp_&#39;;
define (&#39;WPLANG&#39;, &#39;&#39;);
define(&#39;WP_DEBUG&#39;, false);&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
・example.com/wordpressにアクセスして設定をする。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
指示に従って設定していけばOKです。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
以上になります。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
私がインストールしたときには、SELinuxで詰まったりしていたので&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
基礎の基礎から書いてみました。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
備忘録兼ねてですが、どなたかの参考になれば幸いです。&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><link>http://uzabase.blogspot.com/2014/11/centos7lampwordpress.html</link><author>noreply@blogger.com (阿達)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPRtIKEok-XsFvQaN-DKx_eeon7DiHPYCxFifWbCLIDNLHZdv6vNqwwnD1K2HXcESUuqKWpNeC9305o_kQ8GSoA0uTgOk6JDdhz7W8tvmurORCH4vxEQ77GiRIva_UeeQen-8uO-UEgdUE/s72-c/11.11%E3%83%96%E3%83%AD%E3%82%B0%E7%94%A8.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-6331378538896605333</guid><pubDate>Wed, 05 Nov 2014 08:45:00 +0000</pubDate><atom:updated>2014-11-06T09:24:43.548+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">NewsPicks</category><category domain="http://www.blogger.com/atom/ns#">Redis</category><category domain="http://www.blogger.com/atom/ns#">負荷分散</category><title>荒ぶるRedisとNewsPicks</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg58shgwjRZc7i0Xy-Nbfcu83MqNtShNwzeU4a1NMqvTouj4g_I6302HfnhawCQVkPWCis9nAIMvZY_vbqR3J9F0aZ5VXmJy5bRXRAlVuqpf1tRYevzYx-Gl4NljRQ4qB0G7UnMdfp76EH9/s1600/shima.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg58shgwjRZc7i0Xy-Nbfcu83MqNtShNwzeU4a1NMqvTouj4g_I6302HfnhawCQVkPWCis9nAIMvZY_vbqR3J9F0aZ5VXmJy5bRXRAlVuqpf1tRYevzYx-Gl4NljRQ4qB0G7UnMdfp76EH9/s1600/shima.jpg&quot; height=&quot;291&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://newspicks.com/&quot; target=&quot;_blank&quot;&gt;NewsPicks&lt;/a&gt;&amp;nbsp;の開発を担当している杉浦です。&lt;br /&gt;
&lt;br /&gt;
NewsPicksはおかげさまでユーザ数が&lt;a href=&quot;http://thestartup.jp/?p=12542&quot; target=&quot;_blank&quot;&gt;20万を突破&lt;/a&gt;しました。&lt;br /&gt;
サービスが順調に成長するということは大変にうれしいことなのですが、エンジニアとしては負荷との戦いになったりします。我々も例に漏れず日々、負荷との戦いを強いられています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NewsPicksの機能面の特長として次の2つがあります。&lt;br /&gt;
・フォローしているユーザのPickが自分のタイムラインに集約される&lt;br /&gt;
・各カテゴリで話題になった記事を閲覧できる&lt;br /&gt;
&lt;br /&gt;
これらの機能を高速に処理・実現するためにRedisを採用しているのですが、&lt;br /&gt;
ユーザ数の増加による負荷増加によって問題が発生するようになりました。&lt;br /&gt;
&lt;br /&gt;
本記事では、&lt;br /&gt;
・ユーザ数が増える中でRedisにどのような問題が発生したか&lt;br /&gt;
・ソースコードを読みながら問題の原因を考える&lt;br /&gt;
・そして、どのような対応を行っているか&lt;br /&gt;
&lt;div&gt;
を共有したいと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
どのような問題が発生したか&lt;/h3&gt;
主に2つの問題が発生しました。&lt;br /&gt;
&lt;h4&gt;
ピーク時のレスポンスタイムが遅くなる&lt;/h4&gt;
NewsPicksは朝の8時にその日の注目ニュースをPush通知で送信します。その直後が最大のピークタイムになり、平常時の10倍程度のリクエストを処理する必要があります。ピークタイムに画面表示のレスポンスタイムが悪化するという問題が発生しました。&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
夜間バッチ実行時にslaveとのレプリケーションが切れる&lt;/h4&gt;
夜間にRedisに保持している古いタイムラインデータを削除するというバッチが実行されるのですが、バッチによる大量のデータ更新が発生しレプリケーションのタイムアウト値を越えてしまい、レプリケーションが切れるという障害が発生しました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
ソースコードを読みながら問題の原因を考える&lt;/h3&gt;
なぜこのような問題が発生するようになったのでしょうか。&lt;br /&gt;
原因を知るにはRedisのアーキテクチャを理解する必要があります。そして、ソフトウェアのアーキテクチャを理解する近道はいつの時代もソースコードを読むことです。ということで、&lt;a href=&quot;http://redis.io/download&quot; target=&quot;_blank&quot;&gt;redis-2.8.17をダウンロード&lt;/a&gt;&amp;nbsp;して読んでみました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Fvwm3O77CjZv8dpj-7sBnLnhKPdlaCL7GjH7K7EgskGeZHE0cO_LYdlgkN2LTSN1SZeWAYTf1DvzC0HS2f3ZnvTSDgOLU7KKwz7QTTmY8CGKsuhnydhhlRM6P0T5QsJS1le5RwvpSElW/s1600/redis_srclist.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1Fvwm3O77CjZv8dpj-7sBnLnhKPdlaCL7GjH7K7EgskGeZHE0cO_LYdlgkN2LTSN1SZeWAYTf1DvzC0HS2f3ZnvTSDgOLU7KKwz7QTTmY8CGKsuhnydhhlRM6P0T5QsJS1le5RwvpSElW/s1600/redis_srclist.png&quot; height=&quot;412&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
ファイル数が少なくシンプルなソフトウェアということがわかります。&lt;br /&gt;
理解をしやすくするために、おおまかな機能ごとに整理します。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc7loFtY_ekZBCe8kKIgCU9qM0THj1ltisYdlxI06fwUcoE8OwGqoAZ6Fg7XSJ9NA-4ZbCSYZemtEen4VgzjpDGF8gKduL9nm9g5P5hBv13HiFib8m-Z7tFMwL8-obyPlwmZtAmMQ1Amtt/s1600/redis_class_diagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc7loFtY_ekZBCe8kKIgCU9qM0THj1ltisYdlxI06fwUcoE8OwGqoAZ6Fg7XSJ9NA-4ZbCSYZemtEen4VgzjpDGF8gKduL9nm9g5P5hBv13HiFib8m-Z7tFMwL8-obyPlwmZtAmMQ1Amtt/s1600/redis_class_diagram.png&quot; height=&quot;434&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
メインプログラムの redis.c から ae.c を読み進めると、RedisはI/O戦略としてイベントループモデルを採用していることがわかります。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RD5ESZphaqmLu6K1MLKlvQOKnhRfrV_GoY08WhYGTusdWgnaoQk44thTsxtRnauENir9GBu0y4wnZbO0RtXqdeg-u3ElUhUovHW-kFQuswDujdW7YofwGuShNNB2IZ0ihkCgQRKWT7J8/s1600/eventloop.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_RD5ESZphaqmLu6K1MLKlvQOKnhRfrV_GoY08WhYGTusdWgnaoQk44thTsxtRnauENir9GBu0y4wnZbO0RtXqdeg-u3ElUhUovHW-kFQuswDujdW7YofwGuShNNB2IZ0ihkCgQRKWT7J8/s1600/eventloop.png&quot; height=&quot;260&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
イベントの発火時に各コマンドハンドラーが呼ばれて処理が進められています。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiACWhO8ODJZQxkSp1bnpsyIG5FnR3e7iH8UkfAnFnJ6PMb-UDE746ldTxXlQB24MmzJDXIN74h_EUh7X1eylbhYfdQS8SKqRcTLNOsZ-0MCmO70LR5gF0ZTQgMTexE7cbYA9Nk6q04ZN96/s1600/redis_sequence.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiACWhO8ODJZQxkSp1bnpsyIG5FnR3e7iH8UkfAnFnJ6PMb-UDE746ldTxXlQB24MmzJDXIN74h_EUh7X1eylbhYfdQS8SKqRcTLNOsZ-0MCmO70LR5gF0ZTQgMTexE7cbYA9Nk6q04ZN96/s1600/redis_sequence.png&quot; height=&quot;274&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
イベントループの詳細については &lt;a href=&quot;http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem&quot; target=&quot;_blank&quot;&gt;TheC10kProblem &lt;/a&gt;を参照してください。&lt;br /&gt;
2006年の古い記事ですがよくまとまっていて、今読んでも本質的な部分は変わっていません。&lt;br /&gt;
&lt;br /&gt;
イベントループモデルのメリットは以下が挙げられます。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;処理ごとにスレッド/プロセスを用意しないので使用メモリ量を抑えられる&lt;/li&gt;
&lt;li&gt;スレッド/プロセス切り替えのコンテキストスイッチのオーバヘッドが少ない&lt;/li&gt;
&lt;li&gt;ノンブロッキングI/Oを合わせて採用することで、I/O待ち時間に他の処理が行われる&lt;/li&gt;
&lt;/ul&gt;
逆に、デメリットは以下のようなものがあります。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;ループの中に遅い処理が入ると、後続の処理が遅れる&lt;/li&gt;
&lt;li&gt;(Redisの場合は) 1スレッドでループ処理を行うので、マルチコアのサーバの場合に全てのCPUリソースを使い切らない&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Redisはデータを全てメモリ中に持つため、高速に処理を行いますが、&lt;br /&gt;
それでもRedisの利用度が上がってくると、Redisの能力を越える多量の読み書きが実行される時がやってきます。&lt;br /&gt;
そして、Redisはイベントループモデルの特性から、閾値を越えると一気に処理遅延が発生します。&lt;br /&gt;
&lt;br /&gt;
NewsPicksが遭遇した問題はまさにこの事象で、あるタイミングを境に突然問題が発生するようになりました。&lt;br /&gt;
システムのアーキテクチャを考える際に負荷に合わせてタイミング良くスケールアウトしていくことができる仕組みを作ることが大切です。&lt;br /&gt;
なお、Nginx、Node.jsも同様にイベントループを採用しているので、同じ考え方を適用できると思います。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
NewsPicksではどのような対応を行っているか&lt;/h3&gt;
現在、データのシャーディングと、垂直・水平に処理リクエストを分散をするように対応を進めています。&lt;br /&gt;
タイムラインデータについては、一定のユーザ数毎にデータ保存するサーバを分離しています。一般的にユーザパーティショニングによる垂直分散と呼ばれる手法です。&lt;br /&gt;
ランキングデータについては読み取りリクエストをslaveに分散させるといった水平分散の対応を行っています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NewsPicksでは一緒に負荷と戦ってくれるエンジニアを募集しています！&lt;br /&gt;
サービスの成長を肌で感じられるやりがいのある仕事です（笑&lt;br /&gt;
興味をお持ちいただいた方は&lt;a href=&quot;https://www.wantedly.com/projects/11504&quot; target=&quot;_blank&quot;&gt;Wantedly&lt;/a&gt;などからご連絡ください！&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/11/redisnewspicks.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg58shgwjRZc7i0Xy-Nbfcu83MqNtShNwzeU4a1NMqvTouj4g_I6302HfnhawCQVkPWCis9nAIMvZY_vbqR3J9F0aZ5VXmJy5bRXRAlVuqpf1tRYevzYx-Gl4NljRQ4qB0G7UnMdfp76EH9/s72-c/shima.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-6863803725149696721</guid><pubDate>Fri, 31 Oct 2014 02:48:00 +0000</pubDate><atom:updated>2014-12-12T16:04:45.834+09:00</atom:updated><title>ドメイン名について</title><description>&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.defaults[&#39;toolbar&#39;] = false;
 SyntaxHighlighter.all();
&lt;/script&gt;
インフラを管理している羽山です。&lt;br /&gt;
今回は基本的なおさらいということでWEBサービスで1番重要なドメイン名について触れようと思います。&lt;br /&gt;
&lt;br /&gt;
簡単にユーザベースのホームページに繋がるまでのフローを書くと以下のようになります。&lt;br /&gt;
&lt;br /&gt;
1. ブラウザからアクセスhttp://www.uzabase.com&lt;br /&gt;
2.&amp;nbsp;www.uzabase.comをIPアドレスに変換（名前解決）する&lt;br /&gt;
3.&amp;nbsp;ブラウザがHTTPでサーバにアクセス&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
このとき、「www.uzabase.com」をドメイン名と呼びます。&lt;br /&gt;
そして、2番のフローはDNS（Domain Name System）というシステムを利用して&lt;br /&gt;
ドメイン名からIPアドレスに変換しています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
なぜこのようなことをするかというと、IPアドレスというインターネットの世界はIPアドレスを利用して通信しているからです。&lt;/div&gt;
&lt;div&gt;
しかし、IPアドレスは数字の羅列であり人が覚えるには非常に大変なので、人がインターネットを使うときは見やすいようにドメイン名というものを利用しています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ドメイン名の詳しい仕組みはJPNICの公開している資料が見やすいので見てみてください。&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://www.nic.ad.jp/ja/dom/system.html&quot;&gt;https://www.nic.ad.jp/ja/dom/system.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
さて、DNSには様々な情報が記載されており、主に以下の種類があります。&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Aレコード：IPアドレス&lt;/li&gt;
&lt;li&gt;CNAMEレコード：Aレコードのエイリアス&lt;/li&gt;
&lt;li&gt;MXレコード：メールサーバ情報&lt;/li&gt;
&lt;li&gt;NSレコード：ゾーン管理サーバ（権威サーバ）&lt;/li&gt;
&lt;li&gt;SOAレコード：ゾーン設定情報&lt;/li&gt;
&lt;li&gt;TXTレコード：追加情報&lt;/li&gt;
&lt;li&gt;SPF（TYPE99）レコード：メールアドレス認証情報&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;p1&quot;&gt;
ユーザベースのDNSレコードの情報はこのようになっています。&lt;br /&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;$ dig uzabase.com any 

; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.8.3-P1 &amp;lt;&amp;lt;&amp;gt;&amp;gt; uzabase.com any
;; global options: +cmd
;; Got answer:
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 57937
;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;uzabase.com. IN ANY

;; ANSWER SECTION:
uzabase.com. 50 IN A 211.11.100.59
uzabase.com. 2460 IN MX 20 alt1.aspmx.l.google.com.
uzabase.com. 2460 IN MX 20 alt2.aspmx.l.google.com.
uzabase.com. 2460 IN MX 30 aspmx2.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx3.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx4.googlemail.com.
uzabase.com. 2460 IN MX 30 aspmx5.googlemail.com.
uzabase.com. 2460 IN MX 10 aspmx.l.google.com.
uzabase.com. 69433 IN NS ns-413.awsdns-51.com.
uzabase.com. 69433 IN NS ns-534.awsdns-02.net.
uzabase.com. 69433 IN NS ns-1238.awsdns-26.org.
uzabase.com. 69433 IN NS ns-1832.awsdns-37.co.uk.

;; AUTHORITY SECTION:
uzabase.com. 69433 IN NS ns-1832.awsdns-37.co.uk.
uzabase.com. 69433 IN NS ns-413.awsdns-51.com.
uzabase.com. 69433 IN NS ns-534.awsdns-02.net.
uzabase.com. 69433 IN NS ns-1238.awsdns-26.org.

;; ADDITIONAL SECTION:
aspmx.l.google.com. 174 IN A 74.125.28.27
aspmx.l.google.com. 267 IN AAAA 2607:f8b0:400e:c03::1b
alt1.aspmx.l.google.com. 157 IN A 74.125.193.26
alt1.aspmx.l.google.com. 134 IN AAAA 2607:f8b0:4001:c05::1b

;; Query time: 1 msec
;; SERVER: 192.168.10.254#53(192.168.10.254)
;; WHEN: Wed Oct 29 10:24:20 2014
;; MSG SIZE  rcvd: 502
&lt;/pre&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;code class=&quot;html plain&quot;&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;line number1 index0 alt2&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
ちなみに、ドメイン名はインターネット上のタウンページになっていて、所有者が適切にドメイン名の情報を管理しています。&lt;br /&gt;
そしてwhoisサーバに問い合わせることでいつでも所有者の情報を確認できるようになっています。&lt;br /&gt;
ユーザベースの所有者情報はこのようになっています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;$ whois uzabase.com
Domain Name: uzabase.com
Registry Domain ID:
Registrar WHOIS Server: whois.discount-domain.com
Registrar URL: http://www.onamae.com
Updated Date: 2014-08-14 10:35:47.0
Creation Date: 2008-02-04 00:45:26.0
Registrar Registration Expiration Date: 2016-02-04 00:45:26.0
Registrar: GMO INTERNET, INC.
Registrar IANA ID: 49
Registrar Abuse Contact Email: abuse@gmo.jp
Registrar Abuse Contact Phone:
Domain Status: ACTIVE
Registry Registrant ID:
Registrant Name: Inagaki Yusuke ()
Registrant Organization: Uzabase, Inc.
Registrant Street1: 2-11-3 Kitaaoyama
Registrant Street2: Aoyama Plaza Bldg. 6F
Registrant City: Minato-ku
Registrant State/Province: Tokyo
Registrant Postal Code: 107-0061
Registrant Country: JP
Registrant Phone: +81.0357706552
Registrant Phone Ext:
Registrant Fax: +81.0357706553
Registrant Fax Ext:
Registrant Email: admin@uzabase.com
Registry Admin ID:
Admin Name: Yusuke Inagaki
Admin Organization: UZABASE, Inc.
Admin Street1: 2-11-3 Kitaaoyama
Admin Street2: Aoyama Plaza Bldg. 6F
Admin City: Minato-ku
Admin State/Province: Tokyo
Admin Postal Code: 107-0061
Admin Country: JP
Admin Phone: +81.0357706552
Admin Phone Ext:
Admin Fax: +81.0357706553
Admin Fax Ext:
Admin Email: infra@uzabase.com
Registry Tech ID:
Tech Name: Yusuke Inagaki
Tech Organization: UZABASE, Inc.
Tech Street1: 2-11-3 Kitaaoyama
Tech Street2: Aoyama Plaza Bldg. 6F
Tech City: Minato-ku
Tech State/Province: Tokyo
Tech Postal Code: 107-0061
Tech Country: JP
Tech Phone: +81.0357706552
Tech Phone Ext:
Tech Fax: +81.0357706553
Tech Fax Ext:
Tech Email: info@uzabase.com
Name Server: ns-1238.awsdns-26.org
Name Server: ns-1832.awsdns-37.co.uk
Name Server: ns-534.awsdns-02.net

Name Server: ns-413.awsdns-51.com
&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
これを機に自分の会社のドメイン名がどうなっているか確認してると面白いかもしれませんね。&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><link>http://uzabase.blogspot.com/2014/10/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-1527683205047212067</guid><pubDate>Wed, 15 Oct 2014 09:24:00 +0000</pubDate><atom:updated>2014-11-21T16:49:00.114+09:00</atom:updated><title>Uzabaseの技術者になりたい方へ</title><description>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiDIx5uJtJTt5D6MxVOtQiIqmFpp8OhVaqt2kU3hJM2JYUshtJhyu_HDuPoOBmk-x5Jk8vm28yfHywgj_lnb2DrVTsvEXoZiAlpUZv-TVFSRDxPbYYFCE9Pow6-NNpkCoGQJbFed7DgZL/s1600/careerteameng.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiDIx5uJtJTt5D6MxVOtQiIqmFpp8OhVaqt2kU3hJM2JYUshtJhyu_HDuPoOBmk-x5Jk8vm28yfHywgj_lnb2DrVTsvEXoZiAlpUZv-TVFSRDxPbYYFCE9Pow6-NNpkCoGQJbFed7DgZL/s1600/careerteameng.png&quot; height=&quot;122&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;テクノロジーで世界最大級の企業・業界データサービスを&lt;/b&gt;&lt;b&gt;開発するチームです。&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
日本中、世界中のお客様に対して、「今」を超える価値をもつサービスを実現するためのシステム開発をお願いします。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
アプリケーション、データベース（DB）、サーバの設計・開発・運営をチームで行います。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
個々のプロジェクトごとにオーナーを割り振り、オーナーが開発スケジューリング管理や協力会社との折衝など、チーム協力を仰ぎつつ責任を持って一つのプロジェクトを遂行するスタイルです。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
将来のキャリアパスは、志向性によりお客様との折衝やマネジメントの立場についたり、エンジニアとして自身が考えた技術を研究し実用化していくなど、様々なキャリアパスを選択することができます。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
募集要項&lt;/h2&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;SPEEDA&lt;/span&gt; (&lt;a href=&quot;http://www.uzabase.com/speeda/&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;http://www.uzabase.com/speeda/&lt;/span&gt;&lt;/a&gt;)部門&lt;/h3&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: white; color: #222222;&quot;&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
&lt;b&gt;□ Web/サーバーサイド エンジニア&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
ユーザベースでは、プロダクトの設計から開発・テスト・&lt;wbr&gt;&lt;/wbr&gt;リリースに至るまで、&lt;wbr&gt;&lt;/wbr&gt;全てをインハウスのエンジニアが行っています。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
世界一の経済メディアをつくるというミッションを元に、&lt;wbr&gt;&lt;/wbr&gt;あらゆる技術を駆使してモノを創る、&lt;wbr&gt;&lt;/wbr&gt;サービスの根幹を担うポジションの1つです。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
当社の7つのルールの1つ「自由主義でいこう」に則って、&lt;wbr&gt;&lt;/wbr&gt;勤務時間も服装も使用するPCも自由です。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
自ら主体的に立ち回り、提案し、&lt;wbr&gt;&lt;/wbr&gt;実装する優秀なエンジニアが伸び伸び働いています。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
ユーザー視点に立ち、サービスの本質的価値を追求し、&lt;wbr&gt;&lt;/wbr&gt;世界一の経済メディアを創り上げましょう！&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
≪ 必須 ≫&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・「世界一の経済メディアをつくる」&lt;wbr&gt;&lt;/wbr&gt;というミッションに共感できる方&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・3年以上のWebアプリケーション開発経験（ビジネス・&lt;wbr&gt;&lt;/wbr&gt;プライベートを問いません）&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・自らどんどん手を動かして開発を行いたい方&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・国籍・学歴不問&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
≪ 歓迎 ≫&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・アプリケーション層にとどまらず、インフラ/&lt;wbr&gt;&lt;/wbr&gt;ネットワーク層まで深く理解されている方&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・機械学習や自然言語処理に関するPh.D.をお持ちの方&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;NewsPicks&lt;/span&gt;&lt;span style=&quot;font-family: arial, sans-serif;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;https://newspicks.com/top-news&quot; style=&quot;font-family: arial, sans-serif;&quot; target=&quot;_blank&quot;&gt;https://newspicks.com/top-news&lt;/a&gt;&lt;span style=&quot;font-family: arial, sans-serif;&quot;&gt;)部門&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;font-family: arial, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
&lt;b&gt;□ サーバーサイド/Webエンジニア&lt;/b&gt;&lt;br /&gt;
ユーザベースでは、プロダクトの設計から開発・テスト・&lt;wbr&gt;&lt;/wbr&gt;リリースに至るまで、&lt;wbr&gt;&lt;/wbr&gt;全てをインハウスのエンジニアが行っています。&lt;br /&gt;
世界一の経済メディアをつくるというミッションを元に、&lt;wbr&gt;&lt;/wbr&gt;あらゆる技術を駆使してモノを創る、&lt;wbr&gt;&lt;/wbr&gt;サービスの根幹を担うポジションの1つです。&lt;br /&gt;
当社の7つのルールの1つ「自由主義でいこう」に則って、&lt;wbr&gt;&lt;/wbr&gt;勤務時間も服装も使用するPCも自由です。&lt;br /&gt;
自ら主体的に立ち回り、提案し、&lt;wbr&gt;&lt;/wbr&gt;実装する優秀なエンジニアが伸び伸び働いています。&lt;br /&gt;
ユーザー視点に立ち、サービスの本質的価値を追求し、&lt;wbr&gt;&lt;/wbr&gt;世界一の経済メディアを創り上げましょう！&lt;br /&gt;
≪ 必須 ≫&lt;br /&gt;
・「世界一の経済メディアをつくる」&lt;wbr&gt;&lt;/wbr&gt;というミッションに共感できる方&lt;br /&gt;
・3年以上のWebアプリケーション開発経験（ビジネス・&lt;wbr&gt;&lt;/wbr&gt;プライベートを問いません）&lt;br /&gt;
・自らどんどん手を動かして開発を行いたい方&lt;br /&gt;
・国籍・学歴不問&lt;br /&gt;
≪ 歓迎 ≫&lt;br /&gt;
・Webアプリケーションのグロース経験をお持ちの方&lt;br /&gt;
・アプリケーション層にとどまらず、インフラ/&lt;wbr&gt;&lt;/wbr&gt;ネットワーク層まで深く理解されている方&lt;br /&gt;
・機械学習や自然言語処理に関するPh.D.をお持ちの方&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;□ スマートフォンアプリエンジニア&lt;/b&gt;&lt;br /&gt;
ユーザベースでは、プロダクトの設計から開発・テスト・&lt;wbr&gt;&lt;/wbr&gt;リリースに至るまで、&lt;wbr&gt;&lt;/wbr&gt;全てをインハウスのエンジニアが行っています。&lt;br /&gt;
世界一の経済メディアをつくるというミッションを元に、&lt;wbr&gt;&lt;/wbr&gt;あらゆる技術を駆使してモノを創る、&lt;wbr&gt;&lt;/wbr&gt;サービスの根幹を担うポジションの1つです。&lt;br /&gt;
当社の7つのルールの1つ「自由主義でいこう」に則って、&lt;wbr&gt;&lt;/wbr&gt;勤務時間も服装も使用するPCも自由です。&lt;br /&gt;
自ら主体的に立ち回り、提案し、&lt;wbr&gt;&lt;/wbr&gt;実装する優秀なエンジニアが伸び伸び働いています。&lt;br /&gt;
ユーザー視点に立ち、サービスの本質的価値を追求し、&lt;wbr&gt;&lt;/wbr&gt;世界一の経済メディアを創り上げましょう！&lt;br /&gt;
≪ 必須 ≫&lt;br /&gt;
・「世界一の経済メディアをつくる」&lt;wbr&gt;&lt;/wbr&gt;というミッションに共感できる方&lt;br /&gt;
・2年以上のスマートフォンアプリ開発経験（ビジネス・&lt;wbr&gt;&lt;/wbr&gt;プライベートを問いません）&lt;br /&gt;
・自らどんどん手を動かして開発を行いたい方&lt;br /&gt;
≪ 歓迎 ≫&lt;br /&gt;
・スマートフォンアプリのグロース経験をお持ちの方&lt;br /&gt;
・サーバーサイドアプリケーションの知見をお持ちの方&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;font-family: arial, sans-serif;&quot;&gt;
インターンシップ(SPEEDA,NewsPicks両部門)&lt;/h3&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
&lt;b&gt;□ 技術インターンシップ&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
ユーザベースでは、就業型インターンシップを随時行っています。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
荒波に乗るベンチャー企業で、&lt;wbr&gt;&lt;/wbr&gt;自由に働くハイレベルなエンジニアに囲まれて一緒に成長しましょ&lt;wbr&gt;&lt;/wbr&gt;う！&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
≪ 資格・対象 ≫&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・現在大学・大学院・高専に在学中の方。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・情報系の基礎知識を勉強中の方。（趣味でも構いません。）&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
≪ 仕事内容 ≫&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・メンターとコミュニケーションをとり、&lt;wbr&gt;&lt;/wbr&gt;適性と希望にあった開発業務を行っていただきます。&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
≪ 報酬 ≫&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・給与：時給1000円〜 / 成果報酬（仕事内容によって異なります）&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;
・交通費支給&lt;/div&gt;
&lt;div style=&quot;font-family: arial, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;オフィスに遊びに来てみてください。&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;応募は&lt;a href=&quot;https://www.wantedly.com/companies/uzabase&quot;&gt;こちら&lt;/a&gt;から（Wantedly）&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;UZABASEホームページはこちら&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://www.uzabase.com/career/%E6%8A%80%E8%A1%93/&quot; target=&quot;_blank&quot;&gt;SPEEDA部門採用ページ&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://www.uzabase.com/career/%E6%8A%80%E8%A1%93-2/&quot; target=&quot;_blank&quot;&gt;NewsPicks部門採用ページ&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.uzabase.com/career/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%83%E3%83%97/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;インターンシップ採用ページ&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/10/uzabase.html</link><author>noreply@blogger.com (阿達)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiDIx5uJtJTt5D6MxVOtQiIqmFpp8OhVaqt2kU3hJM2JYUshtJhyu_HDuPoOBmk-x5Jk8vm28yfHywgj_lnb2DrVTsvEXoZiAlpUZv-TVFSRDxPbYYFCE9Pow6-NNpkCoGQJbFed7DgZL/s72-c/careerteameng.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-8934315449588524931</guid><pubDate>Tue, 26 Aug 2014 18:01:00 +0000</pubDate><atom:updated>2014-09-09T08:54:07.827+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LT</category><category domain="http://www.blogger.com/atom/ns#">合同勉強会</category><category domain="http://www.blogger.com/atom/ns#">外部勉強会</category><title>第5回 UZABASE TALK</title><description>久しぶりのブログ更新です。&lt;br /&gt;
はじめまして技術チームの外間（ほかま）です。&lt;br /&gt;
&lt;br /&gt;
ユーザベースでは、たびたび外部を招いての合同勉強会を行っていますが、この度『UZABASE TALK』と題しまして第5回目の勉強会を開催しました。&lt;br /&gt;
&lt;br /&gt;
※過去の勉強会の様子はこちら&lt;br /&gt;
&lt;a href=&quot;http://uzabase.blogspot.jp/2012/12/blog-post.html&quot;&gt;第一回技術勉強会&lt;/a&gt;、&lt;a href=&quot;http://uzabase.blogspot.jp/2013/03/blog-post.html&quot;&gt;第二回技術勉強会&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
今回は社内から5名、外部から&lt;a href=&quot;http://docs.yahoo.co.jp/&quot;&gt;Yahoo&lt;/a&gt;、&lt;a href=&quot;http://www.livesense.co.jp/&quot;&gt;LIVESENSE&lt;/a&gt;の4名と計9名の方にご登壇いただき、&lt;br /&gt;
オーディエンスとして&lt;a href=&quot;https://www.wantedly.com/companies/ookami&quot;&gt;ookami&lt;/a&gt;にご参加いただきました。&lt;br /&gt;
また、初めて社内ではなく、外部のパーティースペースをお借りして開催しました。&lt;br /&gt;
回を重ねるに連れて順調に規模も大きくなってきています！&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
今回の勉強会のテーマは「HTML5」&lt;/h2&gt;
&lt;br /&gt;
HTML5に対応するブラウザが普及しだし、旧来のブラウザでは表現できなかったことが&lt;br /&gt;
出来るようになってきている今、自社のサービスにどのようにHTML5の技術を取り入れることが出来るか、&lt;br /&gt;
また、それによってユーザに対してどのような新しい体験を提供することが出来るか、勉強会を通して情報の交換の場を作りたい。というのが今回の勉強会の狙いです。&lt;br /&gt;
&lt;br /&gt;
では当日の様子をご紹介していきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
会の開始を待つ間、参加者の皆さんは会場に用意された軽食やドリンクをつまみつつ、ざっくばらんに会話を楽しんでいます。&lt;br /&gt;
&lt;br /&gt;
&lt;img height=&quot;268&quot; src=&quot;https://lh6.googleusercontent.com/-CoysuLdjzJ0/U6ojfCd5meI/AAAAAAAA0pM/VyLV4TfQ3ic/w630-h420-no/IMG_7968.JPG&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.63636302948px; margin-right: 0px;&quot; width=&quot;403&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
お酒を飲みながらお互いに自己紹介などしつつ、いい雰囲気です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そしていよいよ会がスタート。今回はこのような流れで進みます。&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;https://lh4.googleusercontent.com/-y5gpKWd_PzY/VA4-J8Cc_6I/AAAAAAAAAdY/ybelN-N7d1Y/w637-h478-no/agenda.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
まずはプレゼンテーションからスタートです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;

＜プレゼンテーション＞&amp;nbsp;&lt;/h2&gt;
&lt;h3&gt;

1.「安全なID連携のハウツー」　倉林さん@Yahoo&lt;/h3&gt;
&lt;img height=&quot;300&quot; src=&quot;https://lh5.googleusercontent.com/-yKEd7V2S2u4/U6ojUiA6t5I/AAAAAAAA0j4/esiqiGLUoK8/w900-h675-no/DSC04216.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
最近、セキュリティが問題視されているID関連から、高セキュリティと低コストを両立した効率的なID連携方法について解説いただきました。&lt;br /&gt;
&lt;br /&gt;
ID管理は我々にとっても重要な要素なので、とても興味深い内容でした。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/35798170&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/kura_lab/20140605-uzabase&quot; target=&quot;_blank&quot; title=&quot;安全なID連携のハウツー&quot;&gt;安全なID連携のハウツー&lt;/a&gt; &lt;/strong&gt;から&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/kura_lab&quot; target=&quot;_blank&quot;&gt;マサルKurahayashi&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;&quot;&gt;
2.「データビジュアライゼーション - dc.jsで遊ぼう -」　清水さん@UZABASE&lt;/span&gt;&lt;/h3&gt;
&lt;img height=&quot;300&quot; src=&quot;https://lh5.googleusercontent.com/-OhKOygbtj7I/U6ojYkImaEI/AAAAAAAA0kg/TRKqr_0GRGY/w900-h675-no/DSC04220.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
dc.jsを用いて、グラフなどのデータをより動的に表現する方法について解説いただきました。&lt;br /&gt;
&lt;br /&gt;
1つのイベントに連動して複数のグラフが動的に表示されるデモはとても刺激的でした。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/37477366&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/chome03/dcjs&quot; target=&quot;_blank&quot; title=&quot;データビジュアライゼーション Dc.jsで遊ぼう - 清水&quot;&gt;データビジュアライゼーション Dc.jsで遊ぼう - 清水&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
3.「HTML5とスマートフォンと3Dと」　竹内さん＠UZABASE&lt;/h3&gt;
&lt;img height=&quot;300&quot; src=&quot;https://lh6.googleusercontent.com/-eyqP1wK4tck/U6ojc3_C43I/AAAAAAAA0lM/yFrwo2B7du8/w900-h675-no/DSC04223.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
我らがチーフテクノロジストである竹内さんには、HTML5でスマートフォン用のネイティブアプリを構築出来る&quot;Apache Cordova&quot;および、その上で更にWebGLを利用した3Dライブラリである&quot;three.js&quot;を動かすというデモをしていただきました。&lt;br /&gt;
&lt;br /&gt;
※資料は事情により公開できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
途中に休憩を挟んで、後半からはLT（Lightning Talk）です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
&amp;lt;LT（ライトニングトーク）&amp;gt;&lt;/h2&gt;
&lt;h4&gt;
1「HTML5時代のClojureScript」松下さん@LIVESENSE&lt;/h4&gt;
&lt;img height=&quot;300&quot; src=&quot;https://lh5.googleusercontent.com/-Uh9KWw0EhR4/U6ojhGMcWUI/AAAAAAAA0lw/DKa6YVVf_zw/w900-h675-no/DSC04225.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Clojure言語をHTML5で活かす実践方法について解説いただきました。&lt;br /&gt;
&lt;br /&gt;
メリット、デメリットを面白おかしく解説いただき、会場もとても盛り上がっていました。&lt;br /&gt;
&lt;br /&gt;
Clojureは括弧が多いので慣れないとつらいということがよく分かりました。笑&lt;br /&gt;
&lt;br /&gt;
※資料は事情により公開できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
2「ウェブStrage」島川さん@LIVESENSE&lt;/h3&gt;
&lt;img height=&quot;266&quot; src=&quot;https://lh3.googleusercontent.com/-kpAwCgPLmh0/U6ojiryrEEI/AAAAAAAA0pQ/KtgH7rJkpRE/w1012-h675-no/IMG_7987.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
クッキーに代わるデータ保存の仕組みとして利用できる&quot;Web Strage&quot;について、具体的な活用方法を解説いただきました。&lt;br /&gt;
&lt;br /&gt;
※資料は事情により公開できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
3.「JSでアニメーション頑張ってみた 」　植村さん@LIVESENSE&lt;/h3&gt;
&lt;img height=&quot;266&quot; src=&quot;https://lh4.googleusercontent.com/-HgAGzLHmnE8/U6ojjb6nKZI/AAAAAAAA0pU/axGpHW_YzYk/w1012-h675-no/IMG_8001.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
最近ブラウザでサポートされだしたHTML5の新機能&quot;Web Animations&quot;によるアニメーション作成について解説いただきました。&lt;br /&gt;
&lt;br /&gt;
日頃やられているというスケートボードをモチーフにしたアニメーションでデモを行ったりと、独創的でとても刺激になる内容でした。&lt;br /&gt;
&lt;br /&gt;
※資料は事情により公開できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
4.「あなたのメンタルモデルあってますか？ 」　矢野さん@シェルフ&lt;/h3&gt;
&lt;img height=&quot;266&quot; src=&quot;https://lh5.googleusercontent.com/-uw84LqOcYsQ/U6ojmPOVtTI/AAAAAAAA0pY/UMwGWO4m7iQ/w1012-h675-no/IMG_8013.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
新しい技術に取り組む上で、誤解から生じる思わぬ落とし穴をご自身の経験から解説いただきました。&lt;br /&gt;
&lt;br /&gt;
効率よく、バグのないシステムを開発するためのメンタルモデルの大事さを改めて考えさせられました。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/38378980&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/chome03/ss-38378980&quot; target=&quot;_blank&quot; title=&quot;あなたのメンタルモデルあってますか？ 矢野&quot;&gt;あなたのメンタルモデルあってますか？ 矢野&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
5.「SPDYを触ってみる」　羽山さん@UZABASE&lt;/h3&gt;
&lt;img height=&quot;266&quot; src=&quot;https://lh5.googleusercontent.com/-k0r61vfADXA/U6ojnsOThlI/AAAAAAAA0pc/UjgPc3YAU0g/w1012-h675-no/IMG_8022.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
GoogleがWebの表示を高速化するために提唱しているプロトコル「SPDY」がどのようなものなのかデモを含めつつ簡単に解説いただきました。&lt;br /&gt;
今後動的なWebコンテンツが増えていく上で、表示の高速化も必要になる、というインフラ担当ならではの着眼点です！&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/38378860&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/chome03/spdy-38378860&quot; target=&quot;_blank&quot; title=&quot;Spdyを触ってみる 羽山&quot;&gt;Spdyを触ってみる 羽山&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;&quot;&gt;
6.「HTML5のHTML5によるHTML5のためのクイズ 」　杉浦さん@UZABASE&lt;/span&gt;&lt;/h3&gt;
&lt;img height=&quot;300&quot; src=&quot;https://lh3.googleusercontent.com/-vYD1z1vtXXU/U6ojp51jphI/AAAAAAAA0nI/3u69MG-bcTE/w900-h675-no/DSC04230.JPG&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
クイズ形式でHTML5について解説いただきました。&lt;br /&gt;
&lt;br /&gt;
杉浦さんお得意のリアルタイム参加型で、会の締めくくりに相応しい大きな盛り上がりとなりました！&lt;br /&gt;
&lt;br /&gt;
※資料は事情により公開できません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;&quot;&gt;勉強会終了後は有志で懇親会へと流れ、引き続きお酒を飲みながら（この会は最初から最後までずっと飲んでますね）社内外を通した技術、思想の共有が出来ました。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
今回の勉強会はHTML5というテーマをベースに、ID管理から言語紹介、インフラ、プログラミングをする上での考え方まで幅広い内容で、とても充実した会となりました。&lt;br /&gt;
&lt;br /&gt;
今後もニーズにあった内容で、ユーザベースらしい親しみやすい雰囲気の、更に充実した勉強会を開催していければと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちょっと聞いてみたい、いやむしろみんなの前で話したい！と思った方はお気軽にご連絡下さい。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;img src=&quot;https://lh5.googleusercontent.com/-7uj3VPCIU_U/VA4-TlMAhOI/AAAAAAAAAdo/anHLzrtUsFE/w900-h453-no/IMG_8071.JPG&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
今回の勉強会はキャリアハックに取材いただいて、記事にしていただきました。こちらもご覧いただければと思います。&lt;br /&gt;
&lt;a href=&quot;http://careerhack.en-japan.com/report/detail/343&quot;&gt;&lt;span class=&quot;&quot;&gt;ユーザベース主催『HTML5』エンジニア勉強会イベントレポート&lt;/span&gt;&lt;/a&gt;</description><link>http://uzabase.blogspot.com/2014/08/5-uzabase-talk.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-CoysuLdjzJ0/U6ojfCd5meI/AAAAAAAA0pM/VyLV4TfQ3ic/s72-w630-h420-c-no/IMG_7968.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-270164538582713698</guid><pubDate>Thu, 21 Aug 2014 05:55:00 +0000</pubDate><atom:updated>2014-08-21T14:55:30.417+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">たぬき</category><category domain="http://www.blogger.com/atom/ns#">外部勉強会</category><title>NewsPicksのUIデザイン</title><description>たぬきです。&lt;br /&gt;
&lt;br /&gt;
先日、HatchUp様主催の「&lt;a href=&quot;http://www.socialtoprunners.jp/#!2/c1oxg/77E05154-092F-486E-AEDA-9F4D0B64F134&quot; target=&quot;_blank&quot;&gt;第2回ノンゲームスマホアプリ勉強会&lt;/a&gt;」に発表者として参加してきました。&lt;br /&gt;
&lt;br /&gt;
ノンゲームスマホアプリということで、ここ2年くらい企画・開発してきた、&lt;a href=&quot;https://newspicks.com/&quot; target=&quot;_blank&quot;&gt;NewsPicks&lt;/a&gt;についてお話ししました。&lt;br /&gt;
&lt;br /&gt;
僕は、「ノンゲームアプリ」はゲームアプリより（ある意味）自由なんじゃないか、と思っています。僕も個人的にゲームアプリを作ったりもしているのですが、ゲームアプリは、開発を始める段階で完成イメージがだいたい出来あがっていて、それをどう作っていくのかという作り方をしています（作っていくうちに思わぬ変化をすることもありますが）。&lt;br /&gt;
&lt;br /&gt;
一方で、ノンゲームアプリは、作り始めるときにサービスコンセプトは決まっていても、画面がどうなるかは全然決まっていなかったりします。だから、技術者・デザイナーが、サービスコンセプトを理解し、それを経験・技術を使って何よりも分かりやすい形に結実させていく、そんな自由度があるアプリケーションなんじゃないかと思っています。&lt;br /&gt;
&lt;br /&gt;
NewsPicksはそんな感じで開発してきたアプリなのですが、今回はそのうちの一機能、「階段」についてのお話。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/37938754&quot; style=&quot;border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/tanukingUb/news-picksui&quot; target=&quot;_blank&quot; title=&quot;News picksのUIデザイン&quot;&gt;News picksのUIデザイン&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/tanukingUb&quot; target=&quot;_blank&quot;&gt;tanukingUb&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
NewsPicks事業は2013年の頭に立ち上がりました。そこで出てきた疑問&lt;br /&gt;
「僕たちが本当に知りたいニュースって何だろう？」&lt;br /&gt;
&lt;br /&gt;
喧々諤々の議論の末、僕たちが辿り着いた結論は、&lt;b&gt;「自分が尊敬している人、友達、有名人が興味をもったニュース」&lt;/b&gt;なのではないか、ということでした。そこで、そういった人たちをフォローできるようにし、その人たちが興味をもったニュース（Pickしたニュース）を見られるサービスを作ろうということになりました（8ページ目参照）。更にその人たちがニュースにどんなコメントをするか知れたら面白いかも！&lt;br /&gt;
&lt;br /&gt;
さて、サービスのやりたいことは見えてきました。ではどういうデザインにすべきでしょうか。デザイナーと肩を並べて色々開発して試してみました。&lt;br /&gt;
&lt;br /&gt;
これが一番始めに作ったデザインです。各ユーザーがそれぞれの雑誌を作っていて、それを購読できる、といったことを考えて作りました。左上のカラフルなパネルが、全員のニュースをまとめ読みできるタイムラインです。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-VAJZyM7MfRM/U-sN3QeYMxI/AAAAAAAADgE/J0agbYUCOWk/s1600/sample1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-VAJZyM7MfRM/U-sN3QeYMxI/AAAAAAAADgE/J0agbYUCOWk/s1600/sample1.png&quot; height=&quot;320&quot; width=&quot;243&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
作ってみるとデザイン的にはカッコ良かったのですが、うーん、カラフル=まとめ読みという表現は理解しづらいですね。。。&lt;br /&gt;
&lt;br /&gt;
次に作ったデザインは、iOS7のSafariのような機能でした。つまり、適当なボタンを押すと、２次元に描画されていたタイムラインが3次元状に展開され、後ろ側に各ユーザのPickしたニュースが並んでいるようなイメージです。（スライドの10ページ目にSafariのイメージがあります、元イメージは消失してしまいました……）&lt;br /&gt;
&lt;br /&gt;
しかし、次元の転換はやってみると唐突感がありました。&lt;br /&gt;
&lt;br /&gt;
と、試行錯誤を繰り返したあと、「階段」というアイデアにたどり着きました。実際のアプリでは左上のボタンをタップすると見られる、階段状にユーザーが並んでいるデザインです。階段をタップすればそれぞれのユーザのPickしたニュースが見られ、階段の手前にあるタイムラインにはそれらからニュースが生成されていることを表現しました。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-TpkXHCUZtrU/U-sQExmSq3I/AAAAAAAADgQ/fF3M6sDvilc/s1600/stair.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-TpkXHCUZtrU/U-sQExmSq3I/AAAAAAAADgQ/fF3M6sDvilc/s1600/stair.png&quot; height=&quot;189&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
アプリ勉強会ということで、プログラムの設計とコードをスライドに書きましたが、見てみると非常に単純です。iOS/Androidアプリはそれっぽい動作をするものをとても簡単に作れるので、いろんなデザインを試せていいですね。&lt;br /&gt;
&lt;br /&gt;
その後も、ちょっとした問題が起こりました(18-20ページ)。ユーザをたくさんフォローすると、階段が詰まってしまうという問題です。これに関しても、デザインと技術の力で簡単で強力な解答を出せました。階段の上下に吹き溜まりのようなViewを追加することで描画したいことは変えず、問題は解決しました。&lt;br /&gt;
&lt;br /&gt;
ということで、サービスコンセプトを理解し、それをデザイン・技術の力でアプリとして結実させると楽しいよ、という話でした。勉強会ではたくさんの質問をいただけ、楽しい会でした！&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2014/08/newspicksui.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VAJZyM7MfRM/U-sN3QeYMxI/AAAAAAAADgE/J0agbYUCOWk/s72-c/sample1.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-2890025927573073375</guid><pubDate>Tue, 08 Oct 2013 05:55:00 +0000</pubDate><atom:updated>2013-10-08T15:09:28.553+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LT</category><title>ボイジャー太陽圏ででたよ</title><description>こんにちは。&lt;br /&gt;
LTといえば普通は技術紹介、気になるサービス紹介が普通でしょうが&lt;br /&gt;
私はあさっての方向の紹介担当です。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/26964584&quot; width=&quot;427&quot; height=&quot;356&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px&quot; allowfullscreen&gt; &lt;/iframe&gt; &lt;div style=&quot;margin-bottom:5px&quot;&gt; &lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/szilkworm/2013-0926-26964584&quot; title=&quot;ボイジャー太陽圏ででたよ&quot; target=&quot;_blank&quot;&gt;ボイジャー太陽圏ででたよ&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/szilkworm&quot; target=&quot;_blank&quot;&gt;szilkworm&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
たまには宇宙に思いを馳せましょう。</description><link>http://uzabase.blogspot.com/2013/10/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-9097394650850771299</guid><pubDate>Sun, 11 Aug 2013 23:05:00 +0000</pubDate><atom:updated>2014-12-17T19:22:12.771+09:00</atom:updated><title>第３回、合同勉強会を開催しました</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-SpQwCKNJKk8/UeiYMT8ShKI/AAAAAAAAAVU/EYFuEs1fDMg/s1600/DSC_9456.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://2.bp.blogspot.com/-SpQwCKNJKk8/UeiYMT8ShKI/AAAAAAAAAVU/EYFuEs1fDMg/s320/DSC_9456.JPG&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;GingerNoCheckStart&quot;&gt;&lt;/span&gt;&lt;span class=&quot;GingerNoCheckStart&quot;&gt;&lt;/span&gt;&lt;span class=&quot;GingerNoCheckStart&quot;&gt;&lt;/span&gt;はじめまして。技術チームのガブです。先日、第三回合同勉強会を弊社オフィスにて行いました。ビールやソフトドリンクを飲みながら、六名のすばらしいエンジニアの方々から、高度にテクニカルなお話を二十分間、楽しく伺うことができました。発表者の皆様を始め、今回の勉強会のために貴重なお時間と労力を割いていただいた方々に深く感謝いたします。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;各プレゼンの模様を簡単にご紹介いたします。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;h4 style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;/h4&gt;
&lt;h4 style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;1. 今村 雅幸 (&lt;a href=&quot;http://vasily.jp/&quot;&gt;株式会社Vasily&lt;/a&gt; CTO)さん&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjvHCbIZy2mr_WDoLW168kSrpCUNgBAOhYNVlF3vdbm6QEGseBdyHSF7JraaEWoXLWA0lgEZB1C4gZtVm2fgdSeeapFN22WFo1XkoUUgA4nuFRK6RQthqIHTIgNvIcQAurnjvpMohyIyI/s1600/speaker1b.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjvHCbIZy2mr_WDoLW168kSrpCUNgBAOhYNVlF3vdbm6QEGseBdyHSF7JraaEWoXLWA0lgEZB1C4gZtVm2fgdSeeapFN22WFo1XkoUUgA4nuFRK6RQthqIHTIgNvIcQAurnjvpMohyIyI/s320/speaker1b.JPG&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;今村さんには、急増するユーザーに対応するべく、アプリケーションをスケールするテクニックをテーマに講演していただきました。やはり、VasilyのようなBtoCの場合、ID数の増加が急激すぎてやばいですね。スライドを見ていてゾクゾクしました。僕たちも早く新しいサービスでこんな悲鳴を上げてみたいです。ちなみにVasilyさんの場合、tumblrのinboxモデルを参考に独自の実装をされていました。tumblrのarchitectureについては&lt;a href=&quot;http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html&quot; target=&quot;_blank&quot;&gt;この記事なんか&lt;/a&gt;が参考になります。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;h4 style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
2. 林 孝之さん&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOAnJD6qyBLIqMnetHIuXEmF1Mvjr2p88ARP4vzKHZQ_PxtCzDQLQpMLJP26n0sYXniyqgoK2FwKQCVKOBoMz7IjhmF0mDa6c_gstw8Oqcmc1uPeCVLQ-F7Uzk_Tpo6FzV1nAOPgXjhic/s1600/speaker2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOAnJD6qyBLIqMnetHIuXEmF1Mvjr2p88ARP4vzKHZQ_PxtCzDQLQpMLJP26n0sYXniyqgoK2FwKQCVKOBoMz7IjhmF0mDa6c_gstw8Oqcmc1uPeCVLQ-F7Uzk_Tpo6FzV1nAOPgXjhic/s320/speaker2.JPG&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;林さんには今回、ごく少数の人に知識や情報が集中せずに生産性を上げていく一つの解として、&lt;b&gt;ペアプログラミング&lt;/b&gt;について発表していただきました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;僕は今、実際にペアプロをやっていますが自分で書いたコードよりも明らかに美しく、読みやすく、バグの少ないコードを書く事が出来ています。林さんがプレゼン中に言っていた、「ペアプロじゃないと怖くてコードを書けない」という事を実感します。一方で、相方とのスキル差が絶望的にあり（僕が低い方です... )、とても疲れるし、理解できていないまま進んでいってしまう時があります。この辺りの課題をどうするか、林さんに改めて質問してみたいなと思います。&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOAnJD6qyBLIqMnetHIuXEmF1Mvjr2p88ARP4vzKHZQ_PxtCzDQLQpMLJP26n0sYXniyqgoK2FwKQCVKOBoMz7IjhmF0mDa6c_gstw8Oqcmc1uPeCVLQ-F7Uzk_Tpo6FzV1nAOPgXjhic/s1600/speaker2.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOAnJD6qyBLIqMnetHIuXEmF1Mvjr2p88ARP4vzKHZQ_PxtCzDQLQpMLJP26n0sYXniyqgoK2FwKQCVKOBoMz7IjhmF0mDa6c_gstw8Oqcmc1uPeCVLQ-F7Uzk_Tpo6FzV1nAOPgXjhic/s1600/speaker2.JPG&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
3. 津留 一仁 (&lt;a href=&quot;http://www.mindpl.co.jp/&quot;&gt;株式会社マインドパレット&lt;/a&gt;&amp;nbsp;リベロエンジニア)さん&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKYvGwZyOSv7QaRVTZTXQRnRY_3qL7sQPebtwI7rtxjij1rVf1oxM2V29uYXoP6GLYHAxMIogGNZlcCD00TptaFSRUrkSKOvCIL9tE3NeEtcswgn3sIpr1j-hGfKSCnUTxnDj9VLVOo-8/s1600/speaker3.JPG&quot; style=&quot;font-size: medium; font-weight: normal; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKYvGwZyOSv7QaRVTZTXQRnRY_3qL7sQPebtwI7rtxjij1rVf1oxM2V29uYXoP6GLYHAxMIogGNZlcCD00TptaFSRUrkSKOvCIL9tE3NeEtcswgn3sIpr1j-hGfKSCnUTxnDj9VLVOo-8/s320/speaker3.JPG&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;津留さんにはAngularJSの特徴、ユースケースについて、プレゼンしていただきました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Gitコマンドをバシバシ叩きながら、分かりやすいサンプルデモをいくつも交えて発表していただき、（皆さんに共通しますが）とてもイメージしやすく素敵なプレゼンでした。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;AngularJSはHTMLそのものがテンプレートである事や、パイプラインで検索フィルターを追加できる事（すごく簡単そう）など、簡単に始められて便利な機能満載。開発していて楽しい感じが伝わってきて思わず&lt;a href=&quot;http://angularjs.org/&quot; target=&quot;_blank&quot;&gt;ダウンロード&lt;/a&gt;してしまいました。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
4. 竹内 秀行(&lt;a href=&quot;http://www.uzabase.com/&quot; target=&quot;_blank&quot;&gt;ユーザベース&lt;/a&gt;)さん&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-A7e6CiwRjHs4-fcjvuq2cDXB0-kPy4x3TNWtBMoCvfOTsML4vsRBXqR-9NP3rvmByW0U0caBXJW5Zs4NaupY8MX-qZC49tSY9jxxX28lUBIuhyo4SKJ63hoa92W8MzxkiSv9gflkX94/s1600/speaker4b.JPG&quot; style=&quot;font-size: medium; font-weight: normal; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-A7e6CiwRjHs4-fcjvuq2cDXB0-kPy4x3TNWtBMoCvfOTsML4vsRBXqR-9NP3rvmByW0U0caBXJW5Zs4NaupY8MX-qZC49tSY9jxxX28lUBIuhyo4SKJ63hoa92W8MzxkiSv9gflkX94/s320/speaker4b.JPG&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;竹内さんのトピックは、みんな大好きDynamoDBの解説です。&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;前々回、&lt;a href=&quot;http://www.mindpl.co.jp/&quot;&gt;株式会社マインドパレット&lt;/a&gt;の神尾さんにSimpleDBの恐ろしさを存分に教えていただいた僕たちは、「SimpleDB、ダメ、ゼッタイ」を合い言葉にDynamoDBを採用する事にしました。そんな訳で今回、DynamoDBの素晴らしさを皆さんにお披露目する場になりました。例えば、DynamoDBのキャッチフレーズの一つに「支払いは実際に使用した分だけ。最低料金は不要です。」というものがあります。素晴らしい！さすがAmazon先生！&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;ところが&lt;a href=&quot;http://aws.amazon.com/jp/dynamodb/pricing/&quot; target=&quot;_blank&quot;&gt;実際の料金プラン&lt;/a&gt;を見ていくと、事前に利用枠を買って使うというこの矛盾！&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;世の中そんなに単純じゃないんだぜ！という先生からのメッセージを胸に、僕たちはまた一つ大人になったのでした。&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
5. 加藤じゅんいち(&lt;a href=&quot;http://j5ik2o.hatenablog.com/&quot; target=&quot;_blank&quot;&gt;id:j5ik2o&lt;/a&gt;)さん&lt;/span&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: white; color: #222222; line-height: 24px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;加藤じゅんいちさんは、Domain Driven Design(DDD)について、お話していただきました。最近、僕の入っているプロジェクトではTDDを始めていますが、DDDの基本的な考え方であるドメインモデルを中心に設計していけるとコードがすごくキレイになります。抽象化と共通化が適切にできる事に感動するとともに、今まで自分が書いたものは何だったのかと小一時間(ry&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;ただ、&lt;wbr&gt;&lt;/wbr&gt;まだまだプレゼンしてもらった世界には全然到達できていないので&lt;wbr&gt;&lt;/wbr&gt;、ご推薦の&lt;a href=&quot;http://d.hatena.ne.jp/j5ik2o/20101014/1287017103&quot; target=&quot;_blank&quot;&gt;本&lt;/a&gt;を買って読もうと思います。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
6. 矢野勉 (代表取締役　株式会社シェルフ)さん&lt;/span&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM2QaqRxSqVm-yxNz8NV5aR-KVVwONALL5PqQo6O45WGz77XB-Jk4j7141J8RWktWpR7kHUsjzEp6SBUwGHdeWjQjawNdGVRaVK7CrvKuGdNjzWxR2sN3F1P_tR-az4DN0K6M-R7fvHh0/s1600/speaker6.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM2QaqRxSqVm-yxNz8NV5aR-KVVwONALL5PqQo6O45WGz77XB-Jk4j7141J8RWktWpR7kHUsjzEp6SBUwGHdeWjQjawNdGVRaVK7CrvKuGdNjzWxR2sN3F1P_tR-az4DN0K6M-R7fvHh0/s320/speaker6.JPG&quot; width=&quot;212&quot; /&gt;&lt;/span&gt;&lt;/a&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Lispには括弧が多すぎる。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;矢野さんのプレゼンはそんな風にして始まりました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;そうしてClojureをおもしろおかしく説明した後で、唐突に矢野さんは言いました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;「これで皆さんは明日からClojureが書けますね。もう知らないなんて言えないですよ」&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;動揺する会場。微笑みの矢野さん。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;会場からの「結局、括弧多くないですかClojure」「そのサービス、Railsならすぐ作れるんじゃないですか（Clojure生産性低くないですか）」という優しいコメントに矢野さんは「括弧の種類がいっぱいあれば読みやすいから問題ない！」、「Javaの資産がそのまま使えるから生産性は超高い！」とClojureへの愛とモヒカンぶりを遺憾なく発揮し、万雷の拍手を浴びておりました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;僕はそんなロックな矢野さんが大好きです！&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-VhEWWMtBIJw/UeiZ5BwMrJI/AAAAAAAAAbo/imxo5uvsJN4/s1600/DSC_9524.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;http://1.bp.blogspot.com/-VhEWWMtBIJw/UeiZ5BwMrJI/AAAAAAAAAbo/imxo5uvsJN4/s200/DSC_9524.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://4.bp.blogspot.com/-u88TN5pTOc8/UeibFGgvh6I/AAAAAAAAAgA/7z6m_YrX1pQ/s1600/DSC_9566.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;193&quot; src=&quot;http://4.bp.blogspot.com/-u88TN5pTOc8/UeibFGgvh6I/AAAAAAAAAgA/7z6m_YrX1pQ/s320/DSC_9566.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-PMq_mfktD70/UeiahFEI6NI/AAAAAAAAAd4/71kfkxN-EVs/s1600/DSC_9544.JPG&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;http://3.bp.blogspot.com/-PMq_mfktD70/UeiahFEI6NI/AAAAAAAAAd4/71kfkxN-EVs/s200/DSC_9544.JPG&quot; width=&quot;200&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
上記のメインプレゼンの間に、懇親会とライトニングトーク大会も行いました。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;板倉さん、荒井さん(Vasily)、長澤さん(UB)、石橋さん(UB)、加藤さん(UB)にLTを行っていただきました。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;次回、第４回合同勉強会は10月頃に行う予定です。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;ご興味のある方は是非ご参加ください。スピーカーの方も大募集中です。&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;連絡先はこちらです：technology@uzabase.com&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit; font-weight: normal;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;GingerNoCheckEnd&quot;&gt;&lt;/span&gt;&lt;span class=&quot;GingerNoCheckEnd&quot;&gt;&lt;/span&gt;&lt;span class=&quot;GingerNoCheckEnd&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2013/08/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-SpQwCKNJKk8/UeiYMT8ShKI/AAAAAAAAAVU/EYFuEs1fDMg/s72-c/DSC_9456.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-5256251998282025619</guid><pubDate>Thu, 23 May 2013 10:12:00 +0000</pubDate><atom:updated>2013-10-08T14:54:42.905+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LT</category><title>世界最大の素数とその見つけられた方法</title><description>こんにちは。&lt;br /&gt;
LTにて、ほかの方は最新技術など面白いものを紹介してくださるので&lt;br /&gt;
私はあさっての方向の紹介を担当しようと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/18423274&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/szilkworm/ss-18423274&quot; target=&quot;_blank&quot; title=&quot;素数について&quot;&gt;素数について&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/szilkworm&quot; target=&quot;_blank&quot;&gt;szilkworm&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
ユークリッドの補題&lt;/h3&gt;
スライドの中で何の断りもなく登場することの補題ですが、意味は&lt;br /&gt;
&lt;blockquote&gt;
正の自然数nが素数pで割り切れ&lt;br /&gt;
n = ab (a &amp;gt; 1, b &amp;gt; 1)と分解できるとき、pはa, bの内の少なくとも一方を割り切る。
&lt;/blockquote&gt;
というものです。</description><link>http://uzabase.blogspot.com/2013/05/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-1724074730205118291</guid><pubDate>Thu, 23 May 2013 10:12:00 +0000</pubDate><atom:updated>2013-05-23T19:12:26.653+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">たぬき</category><category domain="http://www.blogger.com/atom/ns#">社内勉強会</category><title>「0がn個続いたあと1がn個続く」を正規表現にできるか?</title><description>こんにちは。前回に引き続きたぬきです。&lt;br /&gt;
週次LTの担当ということで、計算機科学の基礎を紹介してみました。&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/17970894&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/tanukingUb/0n1n-17970894&quot; target=&quot;_blank&quot; title=&quot;「0がn個続いたあと1がn個続く」を正規表現にできるか?&quot;&gt;「0がn個続いたあと1がn個続く」を正規表現にできるか?&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/tanukingUb&quot; target=&quot;_blank&quot;&gt;tanukingUb&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
切り口として、正規表現まわりをやってみることにしました。Uzabaseは情報プラットフォームサービスSPEEDAを展開しており、どのエンジニアもデータベース周りの知識を持っているため、正規表現は慣れ親しんだものの１つであるからです。&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
具体的な問題として、「0がn個続いたあとに1がn個続く」を正規表現にできるか？をテーマとしました。&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;お話の流れとしては、(1) 正規表現は有限&lt;/span&gt;オートマトンに&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;変換可能、(2) 有限オートマトンには必要条件がある、(3) 上述の問題は有限オートマトンの必要条件を満たさず、正規表現にはできない、という流れです。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;b&gt;ポンピング補題&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;オートマトンの復習および「&lt;/span&gt;(1) 正規表現は有限オートマトンに変換可能」については、文章よりスライドを見てもらえば十分かと思いますが、「(2) 有限オートマトンには必要条件がある」「(3) 上述の問題は有限オートマトンの必要条件を満たさず、正規表現にはできない」については口頭で話した部分を補足したいと思います。&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
(2) 有限オートマトンの必要条件のひとつに、ポンピング補題というものがあります。ある有限オートマトンの状態数をpとすると、そのオートマトンに認識される（受領される）文字列のうちp以上の長さの文字列は必ずポンピング補題の3条件を満たします。&lt;br /&gt;
&lt;br /&gt;
条件のうちの1番目&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;「各i≧0についてx(y^i)z∈&lt;i&gt;A&lt;/i&gt;」についてもう少し意味を補足しましょう。まず&lt;/span&gt;&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;A&lt;/i&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;はある有限オートマトンが認識する（受領する）文字列の集合です。また、&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;x(y^i)zとは、文字列xの後に文字列yが&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;0回以上繰り返し続き、最後に文字列zがあるということです。つまり、1番目の条件は、ある有限オートマトンに認識される文字列は必ず、&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;x(y^i)z∈&lt;/span&gt;&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;A&lt;/i&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;を満たす文字列x, y, zにわけられるという意味になります。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ポンピング補題の証明は、スライドに記述した迷路のような図でも直感的に理解できるかもしれませんが、より詳しい証明は後述の本を御覧ください。&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;さて(3)に入り、「0がn個続いたあとに1がn個続く」がポンピング補題を満たすか調べてみましょう。もし「0がn個……」を満たす有限オートマトンがあるとすれば、その条件を満たす文字列で長さp以上のものはすべてポンピング補題を満たすはずです。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ここで、0がp個続いたあとに1がp個続く文字列sを考えてみましょう。sは明らかに&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;「0がn個……」を満たします。またsは長さp以上なのでポンピング補題も満たすはずです。つまり&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;「各i≧0についてx(y^i)z∈&lt;/span&gt;&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;A&lt;/i&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;」も満たすはずですが、どんなyならばそんな条件を満たすでしょうか？&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;実はその条件を満たすyは存在しません。もしyが0からだけ成るとすると、i≧2では文字列に含まれる1の数よりも0の数が多くなってしまい、&lt;i&gt;A&lt;/i&gt;に含まれることができません。yが1からだけ成るとしても同様です。あとはyが0と1から成った場合だけですが、この場合、yが連続すれば0の前に1が出てきてしまうため、やはり&lt;/span&gt;&lt;i style=&quot;text-align: -webkit-auto;&quot;&gt;A&lt;/i&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;に含まれることができません。よって、いかなるyも条件を満たしません。&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;以上のことから背理法により、&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;「0がn個……」は有限オートマトンでないことが示されました。よって&lt;/span&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;「0がn個……」は正規表現にできません。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;b&gt;まとめ&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;LTの時間的な制約から正確な定義などを説明せずに話を進めてしまいましたが、正確な定義や証明を理解していくと、とてもシンプルかつ奥深い世界に触れることができます。スライド内でも簡単に紹介していますが、下記の本がオススメです。&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/dp/4320122070&quot; target=&quot;_blank&quot;&gt;計算理論の基礎 [原著第2版] 1.オートマトンと言語&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2013/05/0n1n.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-3553008799295700139</guid><pubDate>Fri, 29 Mar 2013 10:06:00 +0000</pubDate><atom:updated>2013-03-29T19:06:40.847+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">合同勉強会</category><title>第二回、合同勉強会を開催しました</title><description>はじめまして。&lt;br /&gt;
技術チームのたぬきです。&lt;br /&gt;
&lt;br /&gt;
先日、外部の方をお招きしての合同勉強会の2回目を、弊社オフィスで行いました。&lt;br /&gt;
社内外から5名のスピーカーにご登壇いただきました。&lt;br /&gt;
&lt;br /&gt;
今回はオーディエンスとしても社外の方が参加してくださいました。&lt;br /&gt;
前回ご登壇いただいた&lt;a href=&quot;http://mindpl.co.jp/&quot;&gt;株式会社マインドパレット&lt;/a&gt;の神尾さんは社内の方と4名でご参加、&lt;a href=&quot;http://ient.co.jp/&quot;&gt;アイエント株式会社&lt;/a&gt;の西王地さん、某巨大BtoCサービスインフラチームリーダーのMr. Xさん（大人の事情でご紹介できません）にも来ていただけました。&lt;br /&gt;
だんだんと勉強会らしくなってきていますね！&lt;br /&gt;
&lt;br /&gt;
以下、プレゼン資料と当日の様子を御覧ください。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&amp;nbsp;Hazelbeck Gregory（ユーザベース）&lt;/b&gt;&lt;br /&gt;
Wikipediaのダンプデータとそれを使えるサービスについて。自然言語処理で博士論文を書いたGregさんの本領発揮といったプレゼンでした。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-0mqWWT927B8/UU_yh8rAL-I/AAAAAAAAABY/e9OvA1wPNiE/s1600/R0014555.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://2.bp.blogspot.com/-0mqWWT927B8/UU_yh8rAL-I/AAAAAAAAABY/e9OvA1wPNiE/s320/R0014555.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/17666978&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/ghazel7/wikipedia-17666978&quot; target=&quot;_blank&quot; title=&quot;Wikipedia解析&quot;&gt;Wikipedia解析&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/ghazel7&quot; target=&quot;_blank&quot;&gt;ghazel7&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. 西川真五さん（&lt;a href=&quot;http://www.mti.co.jp/&quot;&gt;株式会社エムティーアイ&lt;/a&gt;）&lt;/b&gt;&lt;br /&gt;
アジャイル開発手法のひとつscrumについて、実際に運用されている経験と共に説明していただけました。&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-6MEXc9IltNk/UU_3BTNHCmI/AAAAAAAAABg/xW0DcHO0L0Q/s1600/R0014561.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://4.bp.blogspot.com/-6MEXc9IltNk/UU_3BTNHCmI/AAAAAAAAABg/xW0DcHO0L0Q/s320/R0014561.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;400&quot; src=&quot;http://prezi.com/embed/6rd-w5j_tvxr/?bgcolor=ffffff&amp;amp;lock_to_path=0&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0&amp;amp;features=undefined&amp;amp;disabled_features=undefined&quot; width=&quot;550&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. 川口浩司（ユーザベース）&lt;/b&gt;&lt;br /&gt;
前職で扱っていたXMLデータベースについて良いところ・悪いところを詳しく解説。川口さんが一線でやってきた内容だけあって、現実感がよくわかる内容でした。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-efx_tbXw_cg/UU_3s7z0TrI/AAAAAAAAABo/L2BzYPA65LQ/s1600/R0014588.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://2.bp.blogspot.com/-efx_tbXw_cg/UU_3s7z0TrI/AAAAAAAAABo/L2BzYPA65LQ/s320/R0014588.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/17677548&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/k-kawaguchi/xml-17677548&quot; target=&quot;_blank&quot; title=&quot;XMLデータベースについて&quot;&gt;XMLデータベースについて&lt;/a&gt; &lt;/strong&gt; from
&lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/k-kawaguchi&quot; target=&quot;_blank&quot;&gt;Koji Kawaguchi&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;4. ????さん（某大手ITコンサルティング企業）&lt;/b&gt;&lt;br /&gt;
大人の事情で公開できません。が、とても未来的で興奮する内容でした。公開できないのが悔しい……。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-4u8YvKAIsYY/UU_4ybsUugI/AAAAAAAAABw/wQ-agtvYpxo/s1600/R0014596.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://4.bp.blogspot.com/-4u8YvKAIsYY/UU_4ybsUugI/AAAAAAAAABw/wQ-agtvYpxo/s320/R0014596.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. 石橋隆平（ユーザベース）&lt;/b&gt;&lt;br /&gt;
コードの再利用について、あるべきと、どうしてそれができないか、どうすればできるかを解説。石橋さんのダークな部分がチラリ。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-hwF0_r-uOSk/UU_5XbSV70I/AAAAAAAAAB4/ZNxX1LkdMUs/s1600/R0014647.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;http://4.bp.blogspot.com/-hwF0_r-uOSk/UU_5XbSV70I/AAAAAAAAAB4/ZNxX1LkdMUs/s320/R0014647.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;400&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/17679406&quot; width=&quot;476&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
勉強会の後は、同じ会場でピザやお寿司をいただきながらのライトニングトーク大会！&lt;br /&gt;
技術的に面白い話も、☓☓的に面白い話もたくさんで、とても盛り上がりました。弊社チーフテクノロジストのたけうちさんは大富豪プログラミングについて発表。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-BuAYFSSaATE/UU_7BhJIO0I/AAAAAAAAACA/kZf9GUh1vlg/s1600/R0014653.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;http://3.bp.blogspot.com/-BuAYFSSaATE/UU_7BhJIO0I/AAAAAAAAACA/kZf9GUh1vlg/s200/R0014653.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-lotOTisAapM/UU_7BrHyAJI/AAAAAAAAACE/8MRuivepovQ/s1600/R0014642.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;132&quot; src=&quot;http://2.bp.blogspot.com/-lotOTisAapM/UU_7BrHyAJI/AAAAAAAAACE/8MRuivepovQ/s200/R0014642.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-f9sYlTrfkBs/UU_9EYl1eoI/AAAAAAAAACo/BzUlg951j3M/s1600/R0014629.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://3.bp.blogspot.com/-f9sYlTrfkBs/UU_9EYl1eoI/AAAAAAAAACo/BzUlg951j3M/s200/R0014629.JPG&quot; width=&quot;131&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-PgcJSYSwImI/UU_9EOuJaGI/AAAAAAAAACs/QMjKLiIpWys/s1600/R0014679.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;211&quot; src=&quot;http://4.bp.blogspot.com/-PgcJSYSwImI/UU_9EOuJaGI/AAAAAAAAACs/QMjKLiIpWys/s320/R0014679.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/17668560&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/chimerast/web-17668560&quot; target=&quot;_blank&quot; title=&quot;Web時代の大富豪的プログラミングのススメ&quot;&gt;Web時代の大富豪的プログラミングのススメ&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/chimerast&quot; target=&quot;_blank&quot;&gt;Hideyuki Takeuchi&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;b&gt;本人注）当たり前のことを大まじめに酒の席でのたまわるというLTです&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
ユーザベース技術チームでは今後も定期的に勉強会を行います。&lt;br /&gt;
ちょっと聞いてみたい、と思った方はお気軽にご連絡下さい。&lt;br /&gt;
もちろんスピーカーとして来ていただける方も大歓迎です。&lt;br /&gt;
&lt;br /&gt;
連絡先はこちら：　&lt;span style=&quot;background-color: white; color: #4f4f4f; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, sans-serif; font-size: x-small; line-height: 18px;&quot;&gt;technology@uzabase.com&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #4f4f4f; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, sans-serif; font-size: x-small; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
次回は6月くらい……かな？</description><link>http://uzabase.blogspot.com/2013/03/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-0mqWWT927B8/UU_yh8rAL-I/AAAAAAAAABY/e9OvA1wPNiE/s72-c/R0014555.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-6919454698164396067</guid><pubDate>Fri, 15 Feb 2013 05:59:00 +0000</pubDate><atom:updated>2013-02-15T15:12:52.915+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LT</category><title>Ractive Programming</title><description>chimerastです。&lt;br /&gt;
&lt;br /&gt;
週次LTの担当ということで、Reactive Programmingというパラダイムについて紹介しました。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/16540063&quot; style=&quot;border: 1px solid rgb(204, 204, 204); margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/chimerast/20130117-reactiveprogramming&quot; target=&quot;_blank&quot; title=&quot;Reactive Programming&quot;&gt;Reactive Programming&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/chimerast&quot; target=&quot;_blank&quot;&gt;Hideyuki Takeuchi&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
今流行りの関数型プログラミング言語では、Reactive ProgrammingというとFRP (Functional Reactive Programming)の事を指すことが多いのですが、そっちの説明を始めると若干複雑で前提として必要な知識も多くなるので、大元にある考え方にのみ焦点を当てました。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Reactive Programmingとは&lt;/h3&gt;
&lt;br /&gt;
JavaやRuby等の命令型プログラミング言語では&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;a = 10&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;c = a + 2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;a = 1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;print c&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
というようなプログラムがあった場合、12が出力されます。&lt;br /&gt;
&lt;br /&gt;
これが、Reactive Programmingでは、cが出力される際にa+2という式が初めて評価され、3が出力されます（他の実装として、2行目ではちゃんとcに12を入れておいて、3行目のa = 1が実行されたときにcを再評価して3を代入するというものもあり得ます）。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
現実にある実装&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;
Reactive Programmingを体現した一番身近な言語（？）として、Excelがあります。&lt;/div&gt;
&lt;div&gt;
例えば、E1のセルに「=A1+A3」が入力されていたとして、A1やA3の値を変えると自動的にE1のセルも変わりますよね。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
他にもFlexのMXMLにおけるデータバインディング式や、ちょっと違うかもしれませんがJavaFX(ScalaFX)もReactive Programmingが出来ると言っても良いと思います。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
どういうところで便利か？&lt;/h3&gt;
&lt;br /&gt;
ロボット工学や、シミュレーション等いろいろと応用は効きますが、普通のプログラマにとっては上記のようにGUIプログラムで利用するというケースが一番効果が出やすいと思います。&lt;br /&gt;
&lt;br /&gt;
例えば、コンボボックスが選択された時にその値に応じてテキストラベルを変えるようなプログラムをJavaもどきで書くと、&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;comboBox.addActionListener(new ActionListener() {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; public void actionPerformed(ActionEvent event) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; label.text = indexToText(comboBox.index);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
というように長々と、何をやっているのか本質がぼやけてしまうプログラムとなってっしまいます。&lt;br /&gt;
これをReactive Programming的な書き方をすると、&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;label.text = indexToText(comboBox.index);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
の１行で記述できてしまいます。読み方を知っていれば何をやりたいのかも非常に明確です。&lt;br /&gt;
&lt;br /&gt;
これは非常に簡単な例ですが、入力に複数のコンボボックスが関わってきたり、連鎖的に複数のコンポーネントの値が変わるようなものを作る場合には、Java等で書くときとくらべて非常に簡潔に記述することが出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
まとめ&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;
Reactive Programmingを直接利用できる言語や環境はあまりないですが、この考え方を知っていると、データには流れがあるんだという事が理解でき、機能としてReactive Programmingを利用できないような言語でもプログラムの書き方が変わってくると思います。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2013/02/ractive-programming.html</link><author>noreply@blogger.com (chimerast)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-5770887121438219559</guid><pubDate>Fri, 15 Feb 2013 05:58:00 +0000</pubDate><atom:updated>2013-02-15T15:03:13.768+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LT</category><title>コマンド実行結果のログ取得について</title><description>k-kawaguchiこと川口と申します。&lt;br /&gt;
Linux等でのコマンド実行結果のログ取得方法について、LTで発表しました。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/16374103&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/k-kawaguchi/20130206&quot; target=&quot;_blank&quot; title=&quot;コマンド実行結果のログ取得について&quot;&gt;コマンド実行結果のログ取得について&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/k-kawaguchi&quot; target=&quot;_blank&quot;&gt;Koji Kawaguchi&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2013/02/blog-post_15.html</link><author>noreply@blogger.com (k-kawaguchi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-555579656522460087.post-3285103420156635378</guid><pubDate>Wed, 06 Feb 2013 06:48:00 +0000</pubDate><atom:updated>2013-02-15T15:03:55.617+09:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">社内勉強会</category><title>ネットワークについて</title><description>k-kawaguchiこと川口と申します。&lt;br /&gt;
技術チーム定例社内研修会にて、ネットワークについて発表しました。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;356&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; mozallowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/16373097&quot; style=&quot;border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;&quot; webkitallowfullscreen=&quot;&quot; width=&quot;427&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;strong&gt; &lt;a href=&quot;http://www.slideshare.net/k-kawaguchi/ss-16373097&quot; target=&quot;_blank&quot; title=&quot;ネットワークについて&quot;&gt;ネットワークについて&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;http://www.slideshare.net/k-kawaguchi&quot; target=&quot;_blank&quot;&gt;Koji Kawaguchi&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
</description><link>http://uzabase.blogspot.com/2013/02/blog-post.html</link><author>noreply@blogger.com (k-kawaguchi)</author><thr:total>0</thr:total></item></channel></rss>