quarta-feira, novembro 29, 2006
Fui injustiçado
Ontem saio do edifício onde estou a trabalhar, olho para o outro lado da rua e tenho o meu carrinho bloqueado. Que se passou pensei eu, paguei o parquímetro como faço todos os dias. Quando chego ao pé do carro onde está o ticket do parquímetro? Não tava em cima do tabliet do carro, pronto lá tive eu de pagar por uma coisa pela qual nem tive culpa, 30€ de multa mais 30€ para desbloquear, ai que doi tanto...
segunda-feira, novembro 13, 2006
Método Contains
Após fazer um código idêntico ao seguinte fiquei muito chateado com o resultado que obtive.
O resultado que obtive foi a inserção de 3 elementos ao invés de 1 que era o que esperava. Para mim existe um erro claro na implementação do método Contains de uma lista que é tipificada. O método Contains de uma lista não tipificada chamar sempre o método CompareTo de object é algo que não me choca, mas o facto do método Contains de uma lista tipificada não chamar o CompareTo do tipo de objectos que esta contem é algo que não consigo perceber.
EDIT: Parece que vou ter que fazer mea culpa e reconhecer a minha falta de conhecimento. Neste caso o método CompareTo é utilizado para fazer sort nas listas. O método Contains chama sim o método Equals de cada objecto.
| class Program { static void Main(string[] args) { List for(int i = 0; i < 3; ++i) { MemberToCompare toInsert = new MemberToCompare(1); if(!group.Contains(toInsert)) group.Add(toInsert); } Console.WriteLine(group.Count + " elementos inseridos!"); Console.ReadLine(); } } class MemberToCompare: IComparable { public int test; public MemberToCompare(int i) { test = i; } public int CompareTo(object obj) { MemberToCompare other = obj as MemberToCompare; if (other == null) { return -1; } if (other.test == test) return 0; else return 1; } } |
O resultado que obtive foi a inserção de 3 elementos ao invés de 1 que era o que esperava. Para mim existe um erro claro na implementação do método Contains de uma lista que é tipificada. O método Contains de uma lista não tipificada chamar sempre o método CompareTo de object é algo que não me choca, mas o facto do método Contains de uma lista tipificada não chamar o CompareTo do tipo de objectos que esta contem é algo que não consigo perceber.
EDIT: Parece que vou ter que fazer mea culpa e reconhecer a minha falta de conhecimento. Neste caso o método CompareTo é utilizado para fazer sort nas listas. O método Contains chama sim o método Equals de cada objecto.
segunda-feira, novembro 06, 2006
Indexar delegates
Não sei se existe algum design pattern que descreva esta técnica, mas eu defendo que o importante é saber utilizar as técnicas adequadas para cada problema, invés de saber os nomes dos padrões.
O problema é o seguinte:
Com esta técnica é criado um dicionário que como chave tem os possíveis valores retornados pela primeira função, e como valor tem as funções que se querem chamar consoante o valor retornado pela primeira função. Depois indexa-se ao dicionário com o retorno da primeira função e chama-se a função que o dicionário retorna.
O problema é o seguinte:
- tenho uma função que me retorna um valor;
- condicionado a esse valor quero chamar funções diferentes;
private Dictionary private delegate string DelegateFunction(); public Ctor() { connectorMapper = new Dictionary connectorMapper.Add(-1, new DelegateFunction(NegativeValue)); connectorMapper.Add(1, new DelegateFunction(PositiveValue)); } private string NegativeValue() { return "Valor negativo"; } private string { return "Valor positivo"; } private void CalcFunction() { //uma função qualquer que retorne 1 ou -1 int indexer = FuncaoComplexa() DelegateFunction func = connectorMapper[indexer]; Console.WriteLine( "Entrou na função com: " + func() ); } |
sexta-feira, novembro 03, 2006
Desafio matemático
Este desafio consiste em descobrir os valores que tomam as variáveis do código seguinte, cada vez que o método é chamado.
A função Math.Floor faz arredondamento para baixo. Este código é interessante e importante porque evita a escrita de um "monte" de if's.
| int xPoint = 0, yPoint = 0; double xDraw = 1, yDraw = 10; private static void NextDrawPoint(ref int xPoint, ref int yPoint, ref double xDraw, ref double yDraw) { ++xPoint; yPoint += Convert.ToInt32(Math.Floor((double)xPoint / 3)); xPoint %= 3; xDraw += 3; yDraw -= Math.Floor(xDraw / 9) * 1.5; xDraw %= 9; } |
A função Math.Floor faz arredondamento para baixo. Este código é interessante e importante porque evita a escrita de um "monte" de if's.
segunda-feira, outubro 30, 2006
Exposição de Vialonga
Este fim-de-semana realizou-se a 3ª exposição de aves de Vialonga. Para primeira exposição em que participei este ano o resultado não foi mau, 2º lugar por equipas e 3º lugar individual em ágatas vermelhos mosaicos. A organização espetacular, apesar de ser um clube novo e com pouca experiência em organizações fez um trabalho notável. A contrastar com esta boa organização, está a pressuposta exposição que deveria decorrer em Évora este fim-de-semana. Fiz uma data de quilómetros para depois chegar a Évora e não haver exposição, pior que isso o clube organizador não sabia dar informações, ninguém sabia da exposição, contudo no site http://www.avespt.com/ continuava a exposição agendada.
sexta-feira, outubro 20, 2006
Interoperablidade entre Visio e .NET
Nos últimos dias estive "à cabeçada" com a problemática de conseguir interoperar estes dois mundos. É incrível as potencialidades que se conseguem obter quando se aprofunda um pouco o assunto, quando ao princípio do dia pensava que algo não era possível fazer, ficava sempre espantado quando ainda durante o próprio dia conseguia descobrir a solução que desejava. Deixo aqui dois links bastante interessantes para quem estiver a enfrentar os mesmos problemas que eu.
quinta-feira, outubro 19, 2006
A necessidade ao que obriga
Estava eu ontem à noite a por de lado o que ia vestir hoje de manhã quando me lembro que não tinha nenhuma gravata com o nó feito excepto a que tinha utilizado nesse dia. "Oh pai preciso da tua ajuda para me fazeres o nó da gravata...", é verdade o pai está de férias fora de casa até ao final da semana, bem lá fui eu a procura de um sítio onde me ensinasse a fazer o nó. Depois de encontrar um diagrama de como fazer nós de gravata lá comecei a ensaiar e ao final de umas três tentativas consegui fazer um nó mais ou menos aceitável. Hoje de manhã em conversa com um colega ainda acabei por descobrir que existem uns quatro tipos de nós de gravata, parece que ainda tenho muito que aprender.
terça-feira, outubro 17, 2006
Pião em slow motion
Com a vinda das primeiras chuvas existe sempre o aumento da sinistralidade nas estradas. Vinha muito bem para o trabalho em plena hora de ponta, quando numa curva em que não ía certamente a mais que 30km/h, consegui fazer um pião a 180º. Azar ou sorte em fazer o pião, mas o que é facto é que não toquei em ninguém nem em nada. O que é de estranhar é que vinha devagar e os pneus do carro até são novos. Bem pelo menos serviu de aviso esperando que não se repita.
quarta-feira, outubro 11, 2006
Visio
Nos últimos dias tenho tido uma tarefa entre mãos, na qual necessito de obter dados de um documento do Visio e afectar dados também. A minha primeira ideia foi:"O documento tem de estar num formato legível, tipicamente XML (permitindo retirar a informação através num parser)". Quando abri o ficheiro num editor de texto fiquei um pouco surpreendido porque o formato era ilegível.
Contudo hoje apercebi-me que dentro do documento está algo idêntico a objectos, neste ponto ainda não consigo dizer se são exactamente objectos. A beleza da coisa é que através da shape-sheet do documento ou dos constituintes do documento é possível obter valores e declarar novos valores, que posteriormente podem ser vistos como objectos. Resta-me agora perceber como consigo a obtenção e afectação desses valores através do .NET, mas o facto é que isso é possível de se fazer.
Contudo hoje apercebi-me que dentro do documento está algo idêntico a objectos, neste ponto ainda não consigo dizer se são exactamente objectos. A beleza da coisa é que através da shape-sheet do documento ou dos constituintes do documento é possível obter valores e declarar novos valores, que posteriormente podem ser vistos como objectos. Resta-me agora perceber como consigo a obtenção e afectação desses valores através do .NET, mas o facto é que isso é possível de se fazer.
quarta-feira, outubro 04, 2006
Primeiros dias na Safira
Por enquanto ainda não se pode dizer que esteja efectivamente a trabalhar, tenho estado só a estudar para preparar o exame que vou ter na próxima segunda feira Developing and Implementing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET, que me dará o meu primeiro certificado Microsoft.
Para a semana então devo de sair da sede para ir trabalhar para o projecto do BES, infelizmente o Pre e o Pyro vão ficar na sede, espero encontrar um pessoal porreiro para onde vou trabalhar, já que vou deixar os meus amigos para trás. Por enquanto ainda está tudo muito confuso, ainda não conheço bem as pessoas, os meios de transportes que devo utilizar, o que irei fazer, etc. Espero que dentro de uma semana as coisas já estejam mais assentes e que a minha adaptação seja fácil.
Para a semana então devo de sair da sede para ir trabalhar para o projecto do BES, infelizmente o Pre e o Pyro vão ficar na sede, espero encontrar um pessoal porreiro para onde vou trabalhar, já que vou deixar os meus amigos para trás. Por enquanto ainda está tudo muito confuso, ainda não conheço bem as pessoas, os meios de transportes que devo utilizar, o que irei fazer, etc. Espero que dentro de uma semana as coisas já estejam mais assentes e que a minha adaptação seja fácil.
Subscrever:
Mensagens (Atom)