09.03.09

Dojo 66 – Biblioteca de testes em Smalltalk

Posted in Dojo, SmallTalk at 9:06 am by marivb

  • Data: 02/03/2009
  • Participantes: Mari, Hugo, Yoshi, Fabricio, Thiago, Lucas, Jorge, Rafael, Breno, Ettore, Adolfo, Gianluca
  • Problema: Biblioteca de testes estilo “BDD” em Smalltalk (Squeak)
  • Código: no github

Insatisfeitos com o SUnit, escolhemos brincar de escrever uma biblioteca de testes mais ao estilo RSpec do Ruby, em Smalltalk. Começamos discutindo as possíveis sintaxes, decidindo por algo como:

(1 = 1) should: #beTrue
1 should: #= to: 1

A implementação foi rolando na classe Object mesmo, em uma categoria especial que adicionamos.

Retrospectiva

Do ruim:

  • Problema muito difícil para o conhecimento coletivo do dojo
  • SUnit não tem muitos recursos
  • A linguagem não tem guru de verdade, ficamos um pouco travados
  • Confundimos: testes, linguagem, ambiente – uma bagunça
  • Post-its amarelos pequenininhos
  • Muita conversa no vermelho: tava difícil?
  • Sintaxe Smalltalk: mais de um argumento exige que tenha palavra entre os argumentos
  • True é classe, true é singleton, otherwise não é true
  • Não tem substring (ou não achamos)
  • Faz tempo que não tem post no blog :-( ==> resolvido!

Do bom:

  • Squeak é igual à mãe do Fabs
  • Muita novidade
  • Terminamos com testes passando – malandramente, mas passando
  • Method finder é da hora
  • Save method WITH STYLE :-)
  • nil
  • Reflexão: “perform: #bla with: arg”
  • Smalltalk é legal, apesar de estranho
  • Symbol é String
  • Solução de bem poucas linhas
  • Pessoas novas, bastante gente
  • Dojo continua muito legal (OBAA! XD)

Das discussões que rolaram durante e depois:

  • Por algum motivo o ambiente do Squeak lembrou o Fabricio do projeto Alice – aprendendo a programar em Java, no qual você escreve programas que controlam bonequinhos 3D para aprender a linguagem.
  • Discutimos “Monkey patch“, ou seja, como colocar métodos no Object sem mudar o projeto Kernel do Squeak. Discutimos o conceito, mas não sabemos como fazer isso em Smalltalk, por isso adotamos a solução mais feia, que foi modificar o Kernel mesmo.
  • Colocamos o método “should” no Object… ele deveria existir APENAS quando executando testes. Em produção, uma chamada a “should” deveria idealmente não ser reconhecida.
  • Existe vida além do SUnit! Com um pouco de pesquisa, o Hugo acho o projeto SSpec que parece ser uma biblioteca de testes mais no estilo do que a gente queria. Legal! Como será a solução deles?

Dojo 64 – Interpretador de Smalltalk em Smalltalk

Posted in Dojo, SmallTalk at 8:39 am by marivb

  • Data: 09/02/2009
  • Participantes: Breno, Mari, Jac, Hugo, André, Fernando, Paulo, Ettore, Marcos, Thiago
  • Problema: Interpretador de Smalltalk em Smalltalk (Squeak)
  • Código: ainda não está online

A idéia do problema era interpretar uma sequencia de comandos em Smalltalk fazendo parse do texto e tudo o mais. Começamos com a coisa mais simples – uma atribuição: “minhaVariavel := umValor“. Apesar de a maioria não saber a linguagem direito e de os que sabiam não lembrarem direito, o código foi evoluindo.

Retrospectiva

Do ruim:

  • Avançamos muito pouco, apesar de fazer parte do aprendizado, queríamos ter avançado mais
  • Não usamos controle de versões
  • Falta conhecimento base em Smalltalk para aproveitar mais da sessão
  • A falta de conhecimento também causa lentidão
  • Precisamos muito do mouse pra programar no Squeak
  • “Gurus” Smalltalk estavam enferrujados
  • Confusão com as janelas do Squeak, resolução 800×600 não ajuda, ambiente estranho para a maioria
  • Conversa paralela e dupla falando baixo
  • Nem sempre a lista de “ToDo’s” dá tão certo
  • Estamos na seca se problemas

Do bom:

  • Método String >> findTokens do Squeak é o String.split() do Java
  • String >> withBlanksTrimmed
  • Linguagem nova: Squeak Smalltalk!
  • Aprendemos ou relembramos SUnit
  • Pessoas novas
  • O problema, independente da linguagem, é muito interessante
  • Foi uma sessão mais exploratória do que de costume

Do que discutimos com a pizza:

  • Squeak em produção? Aplicações do Smalltalk?
  • Como funciona o Method Finder? É mágica?
  • Que tal um “breafing” da reunião na semana que antecede o encontro?

25.04.08

Dojo Tarde – 04

Posted in DojoTarde, SmallTalk at 3:06 pm by flores

Participantes: Hugo, Mari, Flores, Breno
Problema: The Next Palindrome
Linguagem: Smalltalk
Ambiente: Squeak
Fonte: dojotarde04-palin

Por termos resolvido um problema muito fácil no Dojo anterior, resolvemos pegar um problema um pouco mais difícil.

Ao invés de criar uma classe com a implementação do Next Palindrome, o Hugo sugeriu criarmos um método NextPalindrome na classe de inteiros de Small Talk. O que no fim das contas se mostrou ser algo legal: nunca haviamos feito nada deste tipo em algum outro Dojo Tarde.

Uma estratégia sugerida pelo Hugo para resolvermos o problema foi irmos comparando os dígitos a partir da metade com seu correspondente e ir montando o próximo palíndromo.

Inicialmente começamos tratando os casos para um dígito: para números de 1 a 8 é trivial pois o próximo palíndromo é o próximo número. Prosseguindo: tentamos fazer o caso do 9, com resposta esperada 11, mas infelizmente sentimos que qualquer solução, mesmo não tão elegante, talvez precisasse de mais código. Colocamos então esse teste no Expected Failures e continuamos nossa programação para tratar os casos de dois dígitos. Decidimos converter o número para string, para assim acessar mais facilmente cada dígito. Para a solução de dois dígitos, utilizamos a idéia de que o próximo palíndromo seria o próximo múltiplo de 11 a partir do número. Para três dígitos, tentamos implementar o algoritmo pensado anteriormente tratando primeiro os casos que só necessitávamos mexer no número do meio (como 808), mas acabou nosso tempo de programação.

Achamos um “bug” no test Runner do Squeak: quando temos uma Expected Failure, um código sem “Failures” fica com cor amarela no Test Runner, enquanto um código com “Failures” fica com cor verde.

Coisas Boas: Implementação de Mensagem em classe “raíz”+, SmallTalk++, digitAt, Method Finder, raisedTo, Blog, “121 at: 2″.

Coisas Ruins: Pouca Gente++, Test Runner Bugado+++, Falta de Precedência Confunde, Sono++, Controlar o tempo com o celular é ruim, Fugimos do Algoritmo (?), Fugimos do Baby Step(?), Problema não tão complicado mas não terminamos, código feio, “String at: 2 asString asInteger”++.

A se pensar: Como trazer mais gente? Utilizar algoritmos já conhecidos de primeira ou ir construindo o algoritmo aos poucos?

10.04.08

Dojo Tarde – 03

Posted in DojoTarde, SmallTalk at 2:55 pm by flores

Participantes: Hugo, Mari, Flores, Mário
Problema: Tex Quotes
Linguagem: Smalltalk
Ambiente: Squeak
Fonte: dojotarde03-texquotes1

Como estávamos preocupados pelo fato de não estarmos conseguindo resolver problemas simples no Dojo Tarde, escolhemos um problema bem simples.

O principal desafio foi como resolver um problema inicialmente de programação procedural utilizando SmallTalk e conseqüentemente orientação a objeto.

Primeiramente, fizemos métodos que trocavam ” por “ ou ´´ dependendo de uma variável booleana denominada aspasAbertas. O Hugo, para deixar o problema mais orientado a objeto, sugeriu fazermos um substituidor esquerdo e um substituidor direito para substituir as aspas dependendo do caso. Em uma refatoração, foi sugerido que as duas classes de substituidor (direito e esquerdo) herdarem de uma classe substituidor. Também tivemos que aprender como funciona o escape de caracteres em Smalltalk.

Como estávamos tratando caracteres simples como strings, ao tentarmos fazer o teste da validação que quebrava uma string em caracteres, tivemos que passar os caracteres como string.

Coisas boas/aprendizados: Smalltalk, Orientação a Objeto, Polimorfismo, Herança, Terminamos um Problema, Tempo compatível, caracter a pode ser escrito como $a.

Coisas ruins: Pouca gente (3x), tela do Mac escurecendo, Responsabilidade Concentrada (escriba, encarregado do projetor, “abridor” de sala, moderador).

Coisas a se pensar: Como atrair mais gente ?, Kata no próximo Dojo!

Semana que vem tem Dojo no FISL!