Arquivo

Arquivo de agosto, 2009

Envolvimento X Comprometimento – Dilbert

28, agosto, 2009 1 comentário

A tirinha sobre porcos e galinhas, é classica:

Porco vs Galinha

Baseados nesta historinha, costumamos dizer que existem dois tipos de pessoas em projetos Scrum:

Galinhas: Apenas envolvidas com o projeto
Porcos: Totalmente comprometidos com o projeto

Na visão Dilbert seria assim:

Dilbert

Categories: Scrum Tags: , , ,

Sabe aquele monte de “if” e “else” no código? Limpando tudo em Java.

26, agosto, 2009 3 comentários

Uma das coisas que considero mais ruins de se ler em um código são os malditos ifs encadeados. Veja, não é fácil de se ler, não é confiável e bem mais propício a bug. Portando se tem muitos ifs, algo não está correto.

Vou utilizar polimorfismo para implementar o padrão de projeto Strategy.

Um fiz um caso simples apenas para exemplificar o estudo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringUtils {
 
	public static final String	REMOVE_ALL_SPACES	= "remove-all-spaces";
	public static final String	FILTER_ONLY_NUMBERS	= "filter-only-numbers";
 
	public static String format(String action, String value) {
 
		if (REMOVE_ALL_SPACES.equals(action)) {
			return value.replaceAll("\\s", "");
		} else if (FILTER_ONLY_NUMBERS.equals(action)) {
			return value.replaceAll("\\D", "");
		}
		return null;
	}
}

Bom não é tão feio, pq tb quem nunca viu algo pior que isso que atire a primeira pedra. :) Vamos fazer com que esse método format seja mais simples. No caso ele está com apenas duas comparações, mas lembre-se que poderiam ser 18. :(

Mas dá pra melhorar e muito utilizando Enum. Veja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum StringFormat {
 
	TRIM_SPACES() {
 
		@Override
		public String format(String value) {
			return value.replaceAll("\\s", "");
		}
	},
	ONLY_NUMBERS() {
 
		@Override
		public String format(String value) {
			return value.replaceAll("\\D", "");
		}
	};
	public abstract String format(String value);
}

E agora o nosso objetivo final, remover os ifs e else do método format:

1
2
3
4
5
6
public class StringUtils {
 
	public static String format(StringFormat action, String value) {
		return action.format(value);
	}
}

Legal né?

Persistência em Python com módulo Shelve

24, agosto, 2009 1 comentário

Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post :) ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do python.

O shelve foi criado para trabalhar com persistência de dicionários (dict) python em arquivo. Para operações simples, configuração, dados não muito grandes, é perfeito. Sua chave sempre deve ser uma string.

Como a maioria dos módulos em python, é tudo muito simples:

Exemplo 1: Vamos salvar uma lista de e-mail em um arquivo

1
2
3
4
5
6
7
import shelve
emails = shelve.open('emails.db')
 
emails["maria"] = "exemplo@maria.com.br"
emails["joao"] = "exemplo@joao.com.br"
 
emails.close()

Recuperando os e-mails

1
2
3
4
5
6
import shelve
emails = shelve.open('emails.db')
 
print emails["maria"]
 
emails.close()


Exemplo 2: Persistência de um objeto mais completo

Criação de um objeto simples

1
2
3
4
5
6
7
class Profile():
   def __init__(self, name, type, username, password=None, auto_login='off'):
   self.name = name
   self.type = type
   self.username = username
   self.password = password
   self.auto_login = auto_login

Classe util para acesso a shelve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import shelve
class Db():
 
  def open(self):
    self.__db = shelve.open("profiles.db")
 
  def close(self):
    self.__db.close()
 
  def add(self, profile):
    self.__db[profile.name] = profile;
 
  def size(self):
    return len(self.__db)
 
  def find_all(self):
    return self.__db.values();
 
  def get(self, key):
    return self.__db[key]
 
  def get_first(self):
    return self.get(self.__db.keys()[0])

Inserindo um perfil

1
2
3
4
5
db = Db()
db.open()
profile = Profile("maria", "user", "mariazinha", "123")
db.add(profile)
db.close()
Categories: Python Tags: ,

Bem Vindo!!! www.eliezer.com.br

23, agosto, 2009 4 comentários

Bom, Finalmente vou manter meu blog sobre tecnologia e desenvolvimento de software atualizado. Ou melhor vou tentar manter ele vivo. Pretendo ir postando assuntos mais variados sobre desenvolvimento de software que geralmente acho legal mas que não era possível disponibilizar para amigos e interessados.

Espero que gostem do conteúdo. :)

Categories: Sem categoria Tags: