segunda-feira, junho 30, 2008

Elegância Vs Desempenho

Na maior parte das vezes fazer código elegante (que seja extensível, de fácil manutenção, etc) e com bom desempenho é a mesma coisa que por duas pessoas em extremos opostos de uma corda a puxarem para seu lado.

A minha filosofia em relação a este assunto é que os problemas de desempenho podem ser numa primeira fase postos um pouco de lado, a não ser que se saiba à partida que estamos a fazer um pedaço de software que necessita de ter um desempenho optimizado ao máximo. Geralmente os maiores problemas surgem quando o que está feito não é exactamente o pretendido pelo cliente, logo o melhor é ter um código que facilmente se modifique e se adapte a novas necessidades.

Logo a fórmula que uso será 80% para elegância e 20% para desempenho, isto traduzindo na prática é o mesmo que dizer que dou privilégio a um código de fácil extensibilidade e manutenção, mas quando vejo que isso me vai claramente custar no desempenho procuro uma solução alternativa/intermédia.

quinta-feira, junho 19, 2008

SQL - Update com IN

Há vezes que tenho o mau hábito de complicar o que é fácil e este foi um desses casos. O contexto do problema é o seguinte, tenho as tabelas Principal e Secundary que se relacionam através do campo principalId existente nas duas, e quero alterar um outro campo da tabela Secundary condicionando esse update com base na tabela Principal.

O SQL seguinte dá-me as linhas da tabela Secundary que quero afectar:

select * from Secundary as sec1
where sec1.principalId in
(select p.principalId from Principal as pr1
inner join Secundary as sec2 on sec2.principalId = pr1.principalId
where pr1.owner >= 10 and sec2.conditionId = 5)

O select interior estabelesse a relação e condiciona o resultado com base na tabela Principal (pr1.owner >= 10) e na tabela Secundary (sec2.conditionId = 5). Agora (pensava eu) basta passar o select de fora para update e tenho o resultado que quero:

update Secundary as sec1
set sec1.conditionId = 1
where sec1.principalId in
(select p.principalid from Principal as pr1
inner join Secundary as sec2 on sec2.principalId = pr1.principalId
where pr1.owner >= 10 and sec2.conditionId = 5)

Acontece um erro porque não posso usar a tabela Secundary no select, o que se formos a ver faz todo o sentido porque estaria a usar um conjunto mutável para condicionar o seu próprio update o que não faz de todo sentido. Simplificando a coisa obtive o seguinte select cujo resultado é igual ao do primeiro:

select * from Secundary as sec1
where sec1.principalId in
(select p.principalid from Principal as pr1
where pr1.owner >= 10 ) and sec1.conditionId = 5

Passar isto para um update é agora directo:

update Secundary as sec1
set sec1.conditionId = 1
where sec1.principalId in
(select p.principalid from Principal as pr1
where pr1.owner >= 10 ) and sec1.conditionId = 5

quarta-feira, junho 11, 2008

Trabalhar em casa

Há 6 meses atrás comecei a trabalhar em casa e posso dizer que até agora tem sido algo que me agrada bastante, enganem-se aquelas pessoas que dizem que se trabalha menos porque é totalmente mentira, trabalha-se mais mas também temos outras vantagens.

Existem algumas regras que cumpro religiosamente, como a hora que começo a trabalhar, nunca depois das 9h, acho que a principal caracteristica para o sucesso de trabalhos desenvolvidos em casa é mesmo a disciplina que a pessoa tem em cumprir regras que normalmente tem no local de trabalho, onde está a ser "vigiado".

Quanto a vantagens as principais são tempo e dinheiro. Dinheiro, porque não gasto combustível ou passes de transportes, apesar de ir regularmente ao escritório compro bilhetes só para essas alturas o que não é assim um grande gasto. Tempo, porque não perco diariamente 2h30m desnessárias a andar de um lado para o outro e posso aproveitar esse tempo para coisas mais produtivas ou lúdicas.

sexta-feira, junho 06, 2008

tops.zi-yu.com

O Tops é o último site criado pela equipa zi-yu. Este site é um agregador onde se podem registar outros sites fazendo assim parte de uma tabela (top). Existem diferentes categorias já disponíveis mas se for necessário criar alguma nova é só contactarem-nos.