Crab Log

Camel Case Stripper

Novembro 1, 2009 · 2 Comentários

Resolvi implementar um camel case stripper em Smalltalk (Pharo). Talvez fosse mais fácil fazê-lo usando expressões regulares mas usei técnicas de parsing. Veja o código abaixo:

Criando a class:

Object subclass: #CamelCaseStripper
	instanceVariableNames: 'read word char write'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'FAM-Utils'

O método principal:

strip
	"Ver CamelCaseStripper example"
	self readChar.
	self readWord.
	[word isEmptyOrNil] whileFalse: [
		write add: word.
		self readWord.
	].
	^write asArray

A lógica para separar as ‘corcovas’:

readWord
  | wordWrite |
  wordWrite := WriteStream on: String new.
  char ifNotNil:
    [ char isLowercase
      ifTrue: [ self writeLowercaseTo: wordWrite ]
      ifFalse: [ "Uppercase"
        wordWrite nextPut: char.
        self readChar.
        char ifNotNil: [
          char isUppercase ifTrue: [
            self writeUppercaseTo: wordWrite]
          ifFalse: [
            self writeLowercaseTo: wordWrite
          ]
        ]
      ]
    ].
  word := wordWrite contents

E, finalmente, os métodos chamados:

writeLowercaseTo: wordWrite
  [ char notNil and: [ char isLowercase ] ] whileTrue:
    [ wordWrite nextPut: char.
    self readChar ]

e

writeUppercaseTo: wordWrite
  [ char notNil and: [ char isUppercase ] and: [self nextChar isUppercase]] whileTrue:
    [ wordWrite nextPut: char.
    self readChar ]

No class side veja como usar a classe:

example
  |stripper|
  stripper := CamelCaseStripper from: 'prefixWABrushTag'.
  stripper strip "--> #('prefix' 'WA' 'Brush' 'Tag')"

Outros detalhes podem ser vistos em CamelCaseStripper.st.

Coloquei também um método de conveniência em String:

camelCaseStrip
  ^(CamelCaseStripper from: self) strip

Agora o uso fica como a seguir:

'ABCdefGHIjk' camelCaseStrip "--> #('AB' 'Cdef' 'GH' 'Ijk')"

Nota: Estou usando o site http://www.hilite.me/ para code beautifier mas não estou gostando das barras de rolagem horizontais. Acho que a identação do hilite me é exagerada. No futuro vou tentar usar http://pastie.org (acho que precisa de um plugin para o WordPress:  Show Pastie Code in Comments WordPress Plugin).

→ 2 ComentáriosCategorias: Smalltalk

Rio-Aracaju

Outubro 27, 2009 · 1 Comentário

Estou planejando ir do Rio até Aracaju de carro. Achei umas dicas legais do Ricardo Freire para fazer uma parada em Cumuruxatiba e/ou Corumbau, na Bahia.

→ 1 ComentárioCategorias: Cidade & Região · Viagem

Minitransat 2009 – Resgate de Scrizzi

Outubro 27, 2009 · Deixe um comentário

Em andamento a operação de resgate de Alexandre Scizzi, do Phoenix (serie), participante da regata Minitransat.

scrizzi

O velejador já foi encontrado e está velejando em direção à costa da Bahia.

 

→ Deixe um ComentárioCategorias: Esporte · Evento · Notícias · Vela

Snow Leopard

Outubro 25, 2009 · Deixe um comentário

Estou tentando instalar o Snow Leopard a partir do Tiger. Minha dificuldade maior é por causa do LCD com defeito que não me deixa ver as telas. Em Mac OS X 10.6 Snow Leopard: processo de instalação e primeiras descobertas bacaninhas são mostradas as telas que podem me ajudar caso faça uma tentativa às cegas. Estou aventando também ligar a saída s-vídeo na TV LCD (que atualmente está recebendo sinal HDMI).

→ Deixe um ComentárioCategorias: Mac · Software

Minitransat 2009

Outubro 25, 2009 · 1 Comentário

minis-na-bahia

Os primeiros lugares dos protos (Thomas Ruyant) e series (Charles Dalin) já chegaram em Salvador. Izabel Pimentel (a única representante do Brasil na competição) já passou de Fernando de Noronha e melhorou a sua colocação (da posição 28 para a 27). Veja a sua posição no mapa abaixo.

minitransat-2009

Veja abaixo o vídeo do primeiro colocado.

→ 1 ComentárioCategorias: Cidade & Região · Esporte · Evento · Notícias · Vela

Dynamic Web Development with Seaside

Outubro 23, 2009 · Deixe um comentário


Dynamic Web Development with Seaside é uma excelente iniciativa para documentar o Seaside e treinar desenvolvedores. Sua origem está no Seaside Shaffer Tutorial.

→ Deixe um ComentárioCategorias: Seaside · Smalltalk

Maçã podre III

Outubro 20, 2009 · 1 Comentário

dsc03403

Este post continua a saga do defeito no iMac. A tela agora está toda tomada. Vou  enviar a foto também para http://imacdefeituoso.blogspot.com. Até agora estou me virando conectando uma TV LCD via HDMI.

→ 1 ComentárioCategorias: Cotidiano · Mac

Cucumber

Outubro 18, 2009 · Deixe um comentário

Em post anterior fiz um apanhado sobre BDD. Agora começei a por a mão na massa. Testei o Cucumber no RubyStack está funcionando bem até agora. Estou seguindo um dos tutoriais que encontrei em Materiais sobre cucumber. Mais especificamente em Testes funcionais no Rails usando o Cucumber. No tutorial foram usados ainda RSpec, Webrat e Factory Girl. Foram citadas também as dependências em relação ao  hpricot, polyglot, term-ansicolor e treetop. Com o RubyStack instalado não precisei instalar mais nada até agora. Para gerar o código Rails para atender as features Cucumber usei scaffold.

Só falta a parte relativa ao login:

features

cucumber

→ Deixe um ComentárioCategorias: Rails · Ruby · Software · eXtreme Programming

BitNami RubyStack

Outubro 17, 2009 · 1 Comentário

Instalei o RubyStack da BitNami no Mac. Testei um hello world no Rails. Sem problemas até agora exceto o costumeiro

Routing Error

No route matches "/test" with {:method=>:get}

que pode ser sanado com um restart do server.

Pretendo começar a testar o Cucumber.

→ 1 ComentárioCategorias: Rails · Ruby · Software · Tecnologia

Festival do Rio 2009

Setembro 27, 2009 · Deixe um comentário

Começou a maratona do Festival do Rio 2009.

O que já assisti:


Sexta, 25/9

  • O desinformante (19:00 Leblon 1, com Iane e Natacha) <– Curioso (Regular)

Sábado, 26/9

  • Um namorado para minha esposa (15:15 Estação Ipanema 1) <– Bom
  • Viagem aos Pirineus (que substituiu o `Rei da fuga`, 18:00 Estação Ipanema 1) <– O melhor do sábado (Ótimo)
  • Eterno Feitiço (20:10 Estação Ipanema 2, com Iane) <– Bonito

Domingo, 27/9:

  • As praias de Agnes (2) (15:50 Estação Vivo Gávea 2, com Iane) <– Bom

Terça, 29/9:

  • A pequenina (2) (17:30 Ipanema 1) (Não vimos. Faltou luz.)

Quinta, 1/10:

  • Distrito 9 (21:30 Leblon 1) <— Razoável

Sexta, 2/10:

  • Fais-moi Plaisir!, 19:00 (2) (Roxy 3) <— Ótimo. Divertido. A platéia deu boas gargalhadas.

Domingo, 4/10:

  • Ricky (2),  (15:20 Estação Vivo Gávea 5) <— Esperava mais. Não gostei. Mal alinhavado.

Terça, 6/10:

  • Coco antes de Chanel (2) (19:00 Leblon 1) <— Bom.

Quarta, 7/10:

  • Aconteceu em Woodstock (2) (21:30 Leblon 1) <— Regular

→ Deixe um ComentárioCategorias: Cinema