SlideShare ist ein Scribd-Unternehmen logo
1 von 101
初心者エンジニア
     の
 システム構築
   @Spring_MT
Profile
@Spring_MT
in 10xLab


Infra and
App Engineer
初心者?
・前職でエンジニアに転向

・エンジニア歴 2年半くらい

・福岡歴は10ヶ月
前の環境
言語
 フレームワーク
     perl
 独自フレームワーク

テストはあんまりない >_<
DB関連
  databaseは複数

  joinは基本しない

   masterとslave

autoincrement使わない
新しい環境
なんもない。。。。
0からスタート
フレームワーク
・テスト周りの環境が   っ
てる

・新しくjoinする人(学生
含めて)の学習コストが低
い
Rails
実際は
やってみた
Rails
 で
はじめの一歩
課題
・複数DB対応

・master slave振り分け

・採番(sequence)

・belongs_toの扱い
えっ。。。
いきなり大きいこと考えすぎ


でもこの時は必要だと思ったんで
す。。。。
大規模病
>_<
複数DBの対応
master・slave振り分け
方針
・DB + master、slave毎に
modelを作る

・Controllerで明示的にDBア
class TestMasterShard < ActiveRecord::Base
 self.abstract_class = true
 establish_connection "#{ENV['RAILS_ENV']}_test_master"
end


class FooMaster < TestMasterShard
 self.table_name = 'foo'
 attr_accessible :name
 validates :content_id, {presence: true}
end
octopus
・テストではまる

・明示的に書いたほうがトラブ
ルが少なそう
# config.include RSpec::Octopus
config.before do
 shards = ActiveRecord::Base.connection_proxy.instance_variable_get(:@shards)
 @connections = shards.values.map(&:connection)
 @connections.each do |connection|
   connection.increment_open_transactions
   connection.transaction_joinable = false
   connection.begin_db_transaction
 end
end

config.after do
 @connections.each do |connection|
  if connection.open_transactions != 0
    connection.rollback_db_transaction
    connection.decrement_open_transactions
  end
 end
end
View


       Controller           Model

       UserController   UserMaster    master

                        UserSlave
                                      slave
       FeedController

                        FeedMaster    master

                        FeedSlave
                                      slave
       GroupControlle


                        GroupMaster   master

                        GroupSlave
                                      slave
採番
方針
アプリ内で一意のIDを発行する
・IDがわかれば、それに紐付
くデータが一意に決まる


・重複が起きない

ex) user_id + コンテンツ
class Sequence < SequenceShard
 self.table_name = 'seq'

 def self.generate(model)
  result = self.connection.execute(
    "UPDATE seq SET id=LAST_INSERT_ID(id+1)"
  )
  id = self.connection.last_inserted_id(result)
      or raise RuntimeError
  return id
 end

end
belongs_to
方針
今回は複数DBを想定したの
で使わないことにしました
>_<
課題
・Controllerからはmaster
slaveを意識せずに使いたい

・ Fat Model
いきなりこの時点でスケール
を考えている。。。

そもそも考慮する必要があっ
たのか?
自分で見えない敵を作って
た。。。
大規模病
>_<
第二期
課題
・Controllerからはmaster
slaveを意識せずに使いたい

・ Fat Model
方針 slave
・Controllerがmaster
を意識せずにModelを呼び出せ
る

・DBへデータを取得する部分
とデータを加工する部分を分け
る
方針
ModelをLogic層とData層
に分ける
View


  Controller                    Model
                      Logic               Data
   UserController   UserLogic           UserMaster    master

                                        UserSlave
                                                      slave
   FeedController

                    FeedLogic           FeedMaster    master

                                        FeedSlave

   GroupControlle
                                                      slave


                    GroupLogic          GroupMaster   master
                                        GroupSlave
                                                      slave
Data層
・DBへのアクセスを管理する
層

・connectionの設定や、SQL
を管理するだけに留める
class TestMasterShard < ActiveRecord::Base
 self.abstract_class = true
 establish_connection "#{ENV['RAILS_ENV']}_test_master"
end


class FooMaster < TestMasterShard
 self.table_name = 'foo'
 attr_accessible :name
 validates :content_id, {presence: true}

 default_scope where(is_deleted: 0)
 scope :hoge, lambda { |foo| where('bar = ?', bar) }
end
Logic層
・Data層を組み合わせて
データの加工を行う
class BaseLogic
 include ActiveModel::MassAssignmentSecurity
 include ActiveRecord::AttributeAssignment
 include ActiveModel::Conversion
 include ActiveModel::Validations
 extend ActiveModel::Naming
 extend ActiveModel::Translation

 def persisted?; false; end
end
class TestLogic < BaseLogic
 attr_accessor :foo
 attr_accessible :foo

 validates :foo, {presence: true, length: {maximum: 255}}

 def get_test_one
 end
end
View


  Controller                    Model
                      Logic               Data
   UserController   UserLogic           UserMaster    master

                                        UserSlave
                                                      slave
   FeedController

                    FeedLogic           FeedMaster    master

                                        FeedSlave

   GroupControlle
                                                      slave


                    GroupLogic          GroupMaster   master
                                        GroupSlave
                                                      slave
課題
・複数のテーブルからデータ
を取得する場合、どこにその
処理を書くかで迷う(Logic
層?、Controller?)
現在
課題
・複数のテーブルからデータ
を取得する場合、どこにその
処理を書くかで迷う(Logic
層?、Controller?)
方針
ControllerとModelの間に
一層(Context)を追加
ユーザーのしたいこと          DBのデータを適切な
  View
                  を実現する処理の流れ          形で受け渡すのみ



Controller          Context               Model
                                     Logic        Data
UserController      UserContext
                                   UserLogic    UserMaster    master

                                                UserSlave
FeedController      FeedContext                               slave


                                   FeedLogic    FeedMaster    master

GroupController                                 FeedSlave
                    GroupContext
                                                              slave


                                   GroupLogic   GroupMaster   master

                                                GroupSlave
                                                              slave
Model Data層

・DBへのアクセスをコント
ロールする層。発行するSQL
はここでコントロールする
Model Logic層
・Data層をコントロールす
る層

・基本的に一つのテーブルに
一つ
Context
・ ユーザーのしたいことを
実現するための処理の流れを
実装する

->ユーザが操作する内容ご
とに実装
Controller
・Contextで作成されたデー
タをViewに受け渡す

cellsを使って、uriで表現されている処理のみを実装
するようにしている
View
・データを描画する

・ここにロジックは書かない
ユーザーのしたいこと          DBのデータを適切な
  View
                  を実現する処理の流れ          形で受け渡すのみ



Controller          Context               Model
                                     Logic        Data
UserController      UserContext
                                   UserLogic    UserMaster    master

                                                UserSlave
FeedController      FeedContext                               slave


                                   FeedLogic    FeedMaster    master

GroupController                                 FeedSlave
                    GroupContext
                                                              slave


                                   GroupLogic   GroupMaster   master

                                                GroupSlave
                                                              slave
課題

・validationをどうする?
Validation
・ユーザーが入力した値の
チェック

・DBに格納する前のデータ
のチェック
・Railsは2つのvalidation
が一緒になってる
今の構成
ユーザーのしたいこと          DBのデータを適切な
  View
                  を実現する処理の流れ          形で受け渡すのみ



Controller          Context               Model
                                     Logic        Data
UserController      UserContext
                                   UserLogic    UserMaster    master

                                                UserSlave
FeedController      FeedContext                               slave


                                   FeedLogic    FeedMaster    master

GroupController                                 FeedSlave
                    GroupContext
                                                              slave


                                   GroupLogic   GroupMaster   master

                                                GroupSlave
                                                              slave
Contextが入ったことで
validationでエラーが起きた時の
ARオブジェクトの受け渡しをど
うするか?
Contextでは複数のARオブ
ジェクトが格納されて、その中
からvalidationエラーをまとめ
る。。。。
正直面倒
Validation
・ユーザーが入力した値の
チェック

・DBに格納する前のデータ
のチェック
分ける!
つまり
Controllerでもvalidationする
えっ
(∩゚д゚)
Controllerでもvalidationする
Controller
  でも
validation
言っちゃった..
((((;゚
・ユーザーが入力した値の
チェック => Controller

・DBに格納する前のデータ
のチェック => Model
Controller
  でも
Validation
するために
DataValidatorってのを書き
ました
DataValidator

ARのvalidatorとほぼ同じバ
リデーションロジックを実装
しています
params = {foo: 'foo', bar: 'bar'}

validator = DataValidator::Validator.new(
  params,
  {foo: {length: {is: 4}}},
  {bar: {presence: true, format: {with: /A[a-zA-Z]+z/}}}
)

unless validator.valid?
 @errors = validator.errors
end

@errors
=> {
  foo: ["is the wrong length (should be 4 characters)"],
  bar: ["can't be blank", "is invalid"]
}
・ユーザーの入力値

=> Controllerのアクショ
ン毎にDataValidatorを使う

・DBに格納する値

=> Modelで
Controllerでvalidationし
た後は、ユーザーの入力値は
正しい値としてみなし、DB
に入れる値をチェックする時
にエラーになった場合はシス
ユーザーのしたいこと          DBのデータを適切な
  View
                  を実現する処理の流れ          形で受け渡すのみ



Controller          Context                Model
                                    Logic          Data
 UserController     UserContext

Validator
                                   UserLogic    UserMaster    master

                                                UserSlave
 FeedController     FeedContext                               slave
Validator

                                   FeedLogic    FeedMaster    master

GroupController                                 FeedSlave
                    GroupContext
                                                              slave
Validator


                                   GroupLogic   GroupMaster   master
                                                GroupSlave

                                                              slave
・この構成で落ち着いてます

・これ以上は手を入れない予
定
Railsやめちゃ
 いなよって
つっこみはな
gem
・data_validator

・rack_session_redis_store

・redis_json_serializer
画像・ファイル
ストレージ
・分散ファイルシステムを自
前で作る?

・色々なアプリでAPIちっく
に使いたい
画像・ファイル
                ・sinatraでappは作
AWS VPC
             App(RoR)
                                   成
                  HTTP
                                   ・閲覧権限等は本体で
              Nginx
                                   管理
   varnish              varnish
                                   ・自前で分散ファイル
   sinatra               sinatra
     app                   app     システム構築は難しい
                                   のでS3を使用
                        S3
サーバー構成
オールAWS!
public

                 subnet
                 net work

                       Gateway                      NAT
                                     SSLの変換


   subnet                                                            subnet       subnet
                  subnet                                             fluentd
   utility                                                                        storage
                  ser vice
                                                                  deliver      proxy
                 APP
Watch
                                                          redis
                  f              f              f
                                                                  worker       varnish
                  DB                                                              +
                                                                               sinatra


                       f                f            worker


                             f              f
その他
・session storeにredis

・queue処理はfluentd +
resque
=> http://spring-mt.tumblr.com/post/35097726578/fluent-plugin-resque


・fluentd + GrowthForecastを
時間があれば。。。。
なにかあれば
懇親会で!
ご清聴あり
がとうござ

Weitere ähnliche Inhalte

Was ist angesagt?

MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Norito Agetsuma
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話Yoshinori Matsunobu
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentialstnoda
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyinatus
 
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cNorito Agetsuma
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyToshiaki Maki
 

Was ist angesagt? (20)

Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
MySQL de NoSQL Fukuoka
MySQL de NoSQL FukuokaMySQL de NoSQL Fukuoka
MySQL de NoSQL Fukuoka
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
Introducing MySQL MHA (JP/LT)
Introducing MySQL MHA (JP/LT)Introducing MySQL MHA (JP/LT)
Introducing MySQL MHA (JP/LT)
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
 
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQSpring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_study
 
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 

Andere mochten auch

Fukuoka rubykaigi01 yamasaki lt
Fukuoka rubykaigi01 yamasaki ltFukuoka rubykaigi01 yamasaki lt
Fukuoka rubykaigi01 yamasaki ltKindai University
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT学 松崎
 
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウYasuyuki Niwa
 
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールCumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールRyo Suzuki
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーHideo Kimura
 
CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法Keisuke Todoroki
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成についてYu Komiya
 
設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化masaaki komori
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyoyoyamasaki
 
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)swwwitch inc.
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンスHidenori Ishii
 
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用CROOZ, inc.
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識yoku0825
 
スマートフォンサイト制作 よくあるトラブルと 解決方法・回避方法
スマートフォンサイト制作  よくあるトラブルと 解決方法・回避方法スマートフォンサイト制作  よくあるトラブルと 解決方法・回避方法
スマートフォンサイト制作 よくあるトラブルと 解決方法・回避方法Maboroshi.inc
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方Hiroshi Tokumaru
 
モダンなCSS設計パターンを考える
モダンなCSS設計パターンを考えるモダンなCSS設計パターンを考える
モダンなCSS設計パターンを考える拓樹 谷
 

Andere mochten auch (20)

Fukuoka rubykaigi01 yamasaki lt
Fukuoka rubykaigi01 yamasaki ltFukuoka rubykaigi01 yamasaki lt
Fukuoka rubykaigi01 yamasaki lt
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
 
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
 
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツールCumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
 
CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法CSS Regionsを使った新しい CSSレイアウトを作る方法
CSS Regionsを使った新しい CSSレイアウトを作る方法
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成について
 
設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化設計から実装まで、今すぐ始める高速化
設計から実装まで、今すぐ始める高速化
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
 
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
「画像をなるべく使わずにWebをレイアウトするテクニック」鷹野 雅弘(スイッチ)
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
スマートフォンサイト制作 よくあるトラブルと 解決方法・回避方法
スマートフォンサイト制作  よくあるトラブルと 解決方法・回避方法スマートフォンサイト制作  よくあるトラブルと 解決方法・回避方法
スマートフォンサイト制作 よくあるトラブルと 解決方法・回避方法
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
 
モダンなCSS設計パターンを考える
モダンなCSS設計パターンを考えるモダンなCSS設計パターンを考える
モダンなCSS設計パターンを考える
 

Ähnlich wie 初心者エンジニアの システム構築 失敗談

jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理junichi anno
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Akio Katayama
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズSORACOM, INC
 
第1回 松本勉強会 2012 05 11 - 公開版
第1回 松本勉強会 2012 05 11 - 公開版第1回 松本勉強会 2012 05 11 - 公開版
第1回 松本勉強会 2012 05 11 - 公開版Ryosuke MATSUMOTO
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
RedHat MW 2015
RedHat MW 2015RedHat MW 2015
RedHat MW 2015omatsuha
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用についてLINE Corporation
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像Amazon Web Services Japan
 
Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Cloudera Japan
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~Naoki (Neo) SATO
 
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-SORACOM, INC
 

Ähnlich wie 初心者エンジニアの システム構築 失敗談 (20)

PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
第1回 松本勉強会 2012 05 11 - 公開版
第1回 松本勉強会 2012 05 11 - 公開版第1回 松本勉強会 2012 05 11 - 公開版
第1回 松本勉強会 2012 05 11 - 公開版
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
serverless
serverlessserverless
serverless
 
RedHat MW 2015
RedHat MW 2015RedHat MW 2015
RedHat MW 2015
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 
Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Evolution of Impala #hcj2014
Evolution of Impala #hcj2014
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
 
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
AWS Elastic Beanstalk 詳細 -ほぼ週刊AWSマイスターシリーズ第9回-
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 

Mehr von Makoto Haruyama

Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話Makoto Haruyama
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1Makoto Haruyama
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_statMakoto Haruyama
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Makoto Haruyama
 
分散ファイルストレージ
分散ファイルストレージ分散ファイルストレージ
分散ファイルストレージMakoto Haruyama
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cketMakoto Haruyama
 

Mehr von Makoto Haruyama (11)

Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
 
Fluentd in Co-Work
Fluentd in Co-WorkFluentd in Co-Work
Fluentd in Co-Work
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_stat
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2
 
Yapc2012 ltthon
Yapc2012 ltthonYapc2012 ltthon
Yapc2012 ltthon
 
分散ファイルストレージ
分散ファイルストレージ分散ファイルストレージ
分散ファイルストレージ
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cket
 

Kürzlich hochgeladen

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Kürzlich hochgeladen (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

初心者エンジニアの システム構築 失敗談

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. Logic&amp;#x5C64;&amp;#x306E;&amp;#x5F79;&amp;#x5272;&amp;#x304C;&amp;#x66D6;&amp;#x6627;&amp;#x3060;&amp;#x3063;&amp;#x305F;\n&amp;#x3042;&amp;#x308B;&amp;#x7A0B;&amp;#x5EA6;&amp;#x306F;&amp;#x592A;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x307D;&amp;#x3063;&amp;#x3061;&amp;#x3083;&amp;#x308A;&amp;#x7CFB;&amp;#x3067;&amp;#x8A31;&amp;#x5BB9;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3051;&amp;#x3069;&amp;#x3001;&amp;#x30B9;&amp;#x30D1;&amp;#x30B2;&amp;#x30C3;&amp;#x30C6;&amp;#x30A3;&amp;#x306B;&amp;#x306A;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x91CD;&amp;#x8981;\nLogic&amp;#x5C64;&amp;#x306F;&amp;#x3042;&amp;#x304F;&amp;#x307E;&amp;#x3067;Model\n&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x30AB;&amp;#x30AA;&amp;#x30B9;&amp;#x3063;&amp;#x305F;\n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. &amp;#x30A8;&amp;#x30E9;&amp;#x30FC;&amp;#x304C;AR&amp;#x306E;&amp;#x4E2D;&amp;#x306B;&amp;#x5165;&amp;#x3063;&amp;#x3066;&amp;#x308B;(AR&amp;#x3092;View&amp;#x307E;&amp;#x3067;&amp;#x5F15;&amp;#x304D;&amp;#x56DE;&amp;#x3059;)\n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. controller &amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x6BCE;&amp;#x306B;&amp;#x8A2D;&amp;#x5B9A;&amp;#x3067;&amp;#x304D;&amp;#x308B;\n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n