SlideShare uma empresa Scribd logo
1 de 150
A Linguagem Mais Legal
      do Mundo
A Linguagem Mais Legal
      do Mundo
                          o)
                       n ã
                  ou
                (
Guilherme Silveira
    @guilhermecaelum
Ricardo Valeriano
     @sr_valeriano
Java é D+
Java é D+
Java
Java
List<Categoria> categorias = new
ArrayList<Categoria>();
for(Produto p : produtos)
    categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) {
    Categoria c = categorias.get(i);
    if(categorias.lastIndexOf(c)!=i) {
        categorias.remove(c); i--;
    }
}
Java
List<Categoria> categorias = new
ArrayList<Categoria>();
for(Produto p : produtos)
    categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) {
    Categoria c = categorias.get(i);
    if(categorias.lastIndexOf(c)!=i) {
        categorias.remove(c); i--;
    }
}
double total = 0;
for(Produto p : produtos) {
    total += p.getValor();
}
Java
List<Categoria> categorias = new
ArrayList<Categoria>();
for(Produto p : produtos)
    categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) {
    Categoria c = categorias.get(i);
    if(categorias.lastIndexOf(c)!=i) {
                                               ,
        categorias.remove(c); i--;
                                            te
                                           n s!
    }
                                          e i
}
                                        lm ma
                                       a e
double total = 0;
for(Produto p : produtos) {          re d
    total += p.getValor();              é
}
Ruby é D+
Ruby é D+
Ruby
unicas = []
for produto in produtos
  unless(unicas.include? produto.categoria)
    unicas << produto.categoria
  end
end
Ruby
unicas = []
for produto in produtos
  unless(unicas.include? produto.categoria)
    unicas << produto.categoria
  end
end
Ruby

unicas = produtos.map{|p| p.categoria}.uniq
Ruby

  unicas = produtos.map{|p| p.categoria}.uniq
total = produtos.inject(0){|tot, p| tot + p.valor}
Ruby

  unicas = produtos.map{|p| p.categoria}.uniq
total = produtos.inject(0){|tot, p| tot + p.valor}
sugestões para um bom programador




   1. domine sua api
 (versus não seja dominado)
sugestões para um bom programador




   1. domine sua api
 (versus não seja dominado)
Ruby

unicas = produtos.map(&:categoria).uniq
total = produtos.inject(0){|tot, p| tot +
p.valor}
Java
List<Categoria> categorias = new
ArrayList<Categoria>();
for(Produto p : produtos)
    categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) {
    Categoria c = categorias.get(i);
    if(categorias.lastIndexOf(c)!=i) {
        categorias.remove(c); i--;
    }
}
double total = 0;
for(Produto p : produtos) {
    total += p.getValor();
}
Java
List<Categoria> categorias = new
ArrayList<Categoria>();
for(Produto p : produtos)
    categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) {
    Categoria c = categorias.get(i);
    if(categorias.lastIndexOf(c)!=i) {
        categorias.remove(c); i--;
    }
}
double total = 0;
for(Produto p : produtos) {
    total += p.getValor();
}
sugestões para um bom programador




   2. domine sua api
 (versus não seja dominado)
sugestões para um bom programador




   2. domine sua api
 (versus não seja dominado)
1 e 2. domine sua api Java

Set categorias = new HashSet();
for(Produto p : produtos) cat.add(p.categoria());

double total = 0;
for(Produto p : produtos) total += p.valor();
1 e 2. domine sua api Java

Set categorias = new HashSet();
for(Produto p : produtos) cat.add(p.categoria());

double total = 0;                            á ar”
                                            d r
                                           a o
for(Produto p : produtos) total += p.valor();
                                          d lh
                                       in e
                                     a m
                                        a “
                                     ar
                                   p
Ruby

unicas = produtos.map(&:categoria).uniq
total = produtos.inject(0){|tot, p| tot +
p.valor}
Ruby

unicas = produtos.map(&:categoria).uniq
total = produtos.inject(0){|tot, p| tot +
p.valor}
                                           o?
                                        stã
                                      ge
                                   su
                                ma
                            lgu
                           a
Ruby

unicos = produtos.map(&:categoria).uniq
total = produtos.map(&:valor).inject(:+)
Ruby

unicos = produtos.map(&:categoria).uniq
total = produtos.map(&:valor).inject(:+)


                                         e ,
                                       t
                                      n s!
                                     e i
                                   lm ma
                                  a e
                                re d
                                   é
Scala

produtos.map(_.categoria).unique
produtos.map(_.valor).sum
Scala

produtos.map(_.categoria).unique
produtos.map(_.valor).sum



                               á!
                             h
Scala

produtos.map(_.categoria).unique
produtos.map(_.valor).sum



                               á!
                             h        +
                                    e
Scala
class Compra() {
  lazy val produtos = Produtos.all
}
Scala
class Compra() {
  lazy val produtos = Produtos.all
}                    BONUS ROUND: public lazy!
Scala
class Compra() {
  lazy val produtos = Produtos.all
}                    BONUS ROUND: public lazy!
class Compra(produtos:List[Produto]) {
}
Scala
class Compra() {
  lazy val produtos = Produtos.all
}                    BONUS ROUND: public lazy!
class Compra(produtos:List[Produto]) {
}

class Compra(val produtos:List[Produto]) {
}
                     BONUS ROUND: IMUTAVEL!
Scala
class Compra() {
  lazy val produtos = Produtos.all
}                    BONUS ROUND: public lazy!
class Compra(produtos:List[Produto]) {
}

class Compra(val produtos:List[Produto]) {
}
                     BONUS ROUND: IMUTAVEL!
class Compra(var produtos:List[Produto]) {
}
                     BONUS ROUND: public vars!
#scala rocks
#scala rocks
    #fato
#scala rocks
    #fato
    Obrigado
#scala rocks
    #fato
    Obrigado


  THE END
#scala rocks
    #fato
    Obrigado


  THE END
Guilherme Silveira
    @guilhermecaelum
Ricardo Valeriano
     @sr_valeriano
O que buscamos numa
     linguagem?
 • poderosa! (o que POSSO fazer?)
 • expressiva! (COMO posso fazer?)
O que buscamos numa
     linguagem?
 • poderosa! (o que POSSO fazer?)
 • expressiva! (COMO posso fazer?)
O que buscamos numa
     linguagem?
 • poderosa! (o que POSSO fazer?)
 • expressiva! (COMO posso fazer?)
Exercício:
 O que expressa mais
informação de maneira
      mais breve?
A medida que
 diminuem as palavras,
aumenta a ambiguidade.
    Valim - GuruSP
1 - português (pt-br)
Usei o cartão de
crédito da minha mãe
   pois estava sem
      dinheiro.
Usei o cartão de
crédito da minha mãe
   pois estava sem s
                    b a
      dinheiro. síla
                 2 0
                +
2 - inglês (en-us)
I’ve used my mom’s
credit card ‘cause I had
       no money.
I’ve used my mom’s
credit card ‘cause I had  s
                       b a
       no money. sí  la
                    1 7
                   +
3 - manês
Aí Jão, tava no veneno
 tá ligado? Saquei do
  cartão da véia prá
adquirir uns bens, na
  humildade mêmo.
4 - coreano
já a primeira vista
 qual vc prefere?
돈 없어서 엄아 카드
    썼다.
돈 없어서 엄아 카드
              * *
    썼다.   A L
                M bas
               R a
            F O síl
           * 2
          * 1
Expressividade


 엄카 썼다.
Expressividade


 엄카 썼다.                        ído.
                            ru
                      e m
                  s. s
               b a
          sí la
        4
Coreano

• - Palavras
• + Expressividade
• + Poder
안녕~ 집에 갈래?
안녕~ 집에 갈래?
Então o que queremos?

• + Expressividade
• + Poder
• + Concisão
‘you can accomplish
more in smaller yet
readable code’

 matz (on ruby)
produtos.map(&:category).uniq
class Complaint
  def has_category?
    @product.andand.category
  end
end
class Complain
  def has_category?
    !! @product.andand.category
  end
end
andand ?
andand ?
def has_category?
  @product && @product.category
end
@product.andand.category
         zoado né?
@product.andand.category
         zoado né?




   evan phoenix
@product.andand.category
              zoado né?

‘i don’t need more random
boolean conditional constructs
because thats not what is
improving our code quality’

       evan phoenix
@product.andand.category
               zoado né?

 ‘i don’t need more random
 boolean conditional constructs
 because thats not what is
 improving our code quality’

      evan phoenix
verdadeiro
@product.andand.category
               zoado né?

 ‘i don’t need more random
 boolean conditional constructs
 because thats not what is
 improving our code quality’

      evan phoenix
verdadeiro e falso
não é
um random boolean conditional
não é
um random boolean conditional
      é o básico de uma
  mônada de funcional
não é
  um random boolean conditional
        é o básico de uma
    mônada de funcional
products.map(_.category) (0 ou +)
não é
  um random boolean conditional
        é o básico de uma
    mônada de funcional
products.map(_.category) (0 ou +)
product.map(_.category) (0 ou 1)
não é
  um random boolean conditional
        é o básico de uma
    mônada de funcional
products.map(_.category) (0 ou +)
product.map(_.category) (0 ou 1)

      Quem ganha? Ninguém.
     os dois estão certos!
um no imperativo, outro no funcional.
O que procuramos?
Não é só escrever
     menos.
Poder
Expressividade
   Concisão
são contextuais
quem acha que sua
linguagem é perfeita?
se sim:
você DOMINA outra
linguagem tanto quanto
      domina esta?
se sim:
de TODAS as INFINITAS
possibilidades, em 100 anos
     de computação...
    ENCONTRAMOS:
a MELHOR
   linguagem de
TODOS OS TEMPOS!
a MELHOR
   linguagem de
TODOS OS TEMPOS!
é a mesma coisa que dizer
que seu marido/sua esposa
 é a melhor de todos os
         tempos
é a mesma coisa que dizer
que seu marido/sua esposa
 é a melhor de todos os
         tempos
a chance disso ser
   verdade é 0
   FONTE: estatisca básica
‘it’s just plain impossible
to design a perfect
language’

       matz
‘Python and Ruby provide almost
the same power to the programmer.
Instead of emphasizing the what, I
want to emphasize the how part:
how we feel while programming’



        matz
‘humans require
more sophisticated
tools to program’

    matz
De tempos em tempos
as ferramentas mudam
       e evoluem
certeza: nossas
 linguagens e escolhas
possuem desvantagens
(re)conheça bem as
    desvantagens!
p
  MySQL as queue?
Neo4J as crud storage?
senão:
 você vai abusar das
DESVANTAGENS.
‘o teu overuse é muito
bom prá você mas a
desgraça dos outros’

    jay fields
Mas tudo bem,
amanhã você vai sair
 do projeto mesmo...
Mas tudo bem,
amanhã você vai sair
 do projeto mesmo...
quem está a mais de
2 anos no mesmo
     projeto?
seja o principal
CRÍTICO de suas
     escolhas
então que diabos você
     recomenda?
quem melhor que o
Valim pra dizer quando
 usar e quando NÃO
      usar rails?
quem melhor que a
Abril pra dizer quando
 usar e quando NÃO
      usar REST?
‘Quando voce quebra o projeto
em vários, fica muito mais fácil
de ver que para uma parte do
projeto uma linguagem é mais
interessante’

alberto(oderski)souza
projetos pequenos
multiplos projetos
“since most developers aren't that good
(it's rumored that almost 50% are below
average) we need to direct the way they
do things”
         COMPLAINT: you can't foolproof anything,
       because fools are ingenious and will figure out
                                       how to abuse




    martin fowler
“developers are responsible professionals
and so should be given the freedom to do
whatever they need to do”
      COMPLAINT: elitist attitude that can only be
     properly used by the upper quartile of software
                                         developers




    martin fowler
‘Often people are
directing in some cases
and enabling in others’

martin fowler
não escolher sua
linguagem preferida
      sempre
online.caelum.com.br
baseado nisso
baseado nisso

alunos
 (java)
baseado nisso
ex-alunos
  (java)    alunos
             (java)
baseado nisso
 ex-alunos
   (java)     alunos
               (java)
   vagas
(ruby/solr)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus
               (java)   (scala)
   vagas
(ruby/solr)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas
(ruby/solr)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas
(ruby/solr)



          pagamento
            (scala)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus      exercicios
               (java)   (scala)    (ruby/rails)
   vagas
(ruby/solr)



          pagamento
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas
(ruby/solr)


                                         analisador 2
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
baseado nisso
 ex-alunos
   (java)     alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas                                          template
(ruby/solr)                                      (ruby/rails)


                                         analisador 2
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
baseado nisso
 ex-alunos                                       +3 projetos
   (java)                                        (ruby/rails)
              alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas                                          template
(ruby/solr)                                      (ruby/rails)


                                         analisador 2
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
baseado nisso
 ex-alunos                                       +3 projetos
   (java)                                        (ruby/rails)
              alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas                                           template
(ruby/solr)                                       (ruby/rails)

                                                     +1 “página”
                                         analisador 2     js
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
baseado nisso
 ex-alunos                                       +3 projetos
   (java)                                        (ruby/rails)
              alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas                                           template
(ruby/solr)                                       (ruby/rails)

                                                     +1 “página”
                                         analisador 2     js
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
casa do codigo
    (scala)
baseado nisso
                                  aws tickets
                                    (ruby)
 ex-alunos                                       +3 projetos
   (java)                                        (ruby/rails)
              alunos    gnarus     exercicios
               (java)   (scala)   (ruby/rails)
   vagas                                           template
(ruby/solr)                                       (ruby/rails)

                                                     +1 “página”
                                         analisador 2     js
          pagamento
                                           (java/ai)
            (scala)
                               analisador 1
                            (ruby/sinatra/redis)
casa do codigo
    (scala)
1. (revisitada) domine
    sua linguagem a ponto
      de criticar pontos
         negativos dela

seja ela java, ruby, scala, portugues, coreano etc
2. (opcional) domine
 outras linguagens
 TANTO quanto.
++++++++++[>++++++
+>++++++++++>+++>
+<<<<-]>++.>+.++++
+++..+++.>++.<<+++
++++++++++++.>.++
+.------.--------.
>+.>.
nenhuma linguagem ou
 ferramenta é ruim*
nenhuma linguagem ou
 ferramenta é ruim*
      * salvo ‘brainf*ck’
todas são boas*
todas são boas*
 boa é contextual,
todas são boas*
 boa é contextual,
 boa é pessoal,
todas são boas*
 boa é contextual,
 boa é pessoal,
 boa é temporal.
todas são boas*
 boa é contextual,
 boa é pessoal,
 boa é temporal.
    * salvo ‘brainfuck’
domine suas escolhas.
não seja dominado por elas.
        @guilhermecaelum
         @sr_valeriano

           Obrigado

Mais conteúdo relacionado

Semelhante a Java e Ruby: linguagens mais legais

Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2irenescotolo
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidSuelen Carvalho
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Slide 07 editando produto selecionando e excluindo produto
Slide 07    editando produto selecionando e excluindo produtoSlide 07    editando produto selecionando e excluindo produto
Slide 07 editando produto selecionando e excluindo produtoRaniere de Lima
 

Semelhante a Java e Ruby: linguagens mais legais (13)

Collections e Generics
Collections e GenericsCollections e Generics
Collections e Generics
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app Android
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
Solid
SolidSolid
Solid
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Slide 07 editando produto selecionando e excluindo produto
Slide 07    editando produto selecionando e excluindo produtoSlide 07    editando produto selecionando e excluindo produto
Slide 07 editando produto selecionando e excluindo produto
 

Mais de Ricardo Valeriano

Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)Ricardo Valeriano
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOSRicardo Valeriano
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoRicardo Valeriano
 
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Ricardo Valeriano
 

Mais de Ricardo Valeriano (6)

Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
 
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
 

Java e Ruby: linguagens mais legais

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. Conhe&amp;#xE7;a sua api!\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. \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. \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. \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
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n