quarta-feira, 14 de março de 2007

No fim do arco-íris tem apenas cereais matinais

Todo mundo está aderindo a internet. Hoje em dia muitas pessoas que outrora declararam total aversão, e desconhecimento, sobre informática, ou a um computador, têm seus endereços virtuais impressos em seus cartões de visita. A net tornou-se uma mania, algo essencial para vida moderna. Mãe , pai e filho querem entrar na onda. Ficar navegando no cyber-espaço a procura de notícias, informação de todo tipo, ou até mesmo uma boa conversa, paqueras virtuais, tornou-se a ocupação de muitos cidadãos. Democrática, a internet abre suas portas para qualquer um. Independente de raça, credo, classe social, idade e tec. A comunidade empresarial também está engatando seus vagões neste “trem” e aos poucos, cada vez mais se aventurando nesse território inexplorado que o cyberspace ...”

Textos como este, entusiasmadíssimos e visionários, marcaram as publicações no ramo de informática e tecnologia a partir do final da década de 80. Era mais que justificada toda a expectativa em torno de uma nova tecnologia que prometia uma revolução no mundo, não apenas o das telecomunicações, traria uma nova dimensão em todo conceito de comunicação e acesso a informação que se conhecia até aqueles dias. E de fato, graças a internet, observamos ao longo desse período, desde o seu estado embrionário até os dias de hoje, acentuadas mudanças na sociedade como um todo. É incontestável, a profética revolução tecnológica atingiu a todos. Influenciando radicalmente a cosmovizão e o pensamento do homem contemporâneo.

“... Não é apropriado pensar e redes como conexões entre computadores. Ao invés disso, deveríamos pensar que redes conectam pessoas, as quais utilizam os computadores para facilitar a comunicação entre elas. O grande sucesso da Internet não é técnico, e sim humano .David Clark(MIT lab)”

A “Grande Teia”, “super-rodovia da informação”, “Fronteira sem lei”, expressões como essas eram corriqueiras. Tal era o fascínio que, na época, essa “idéia” causava entre os arautos desse novo mundo, pois deixavam transparecer em suas dissertações escatológicas, sempre movidas por uma inspiração quase que poética, a mesma paixão que inflama o coração dos adolescentes.

A primeira vista, fizendo uma breve análise de todas as promessas contidas no "pacotão da internet", concordo que esse entusiasmo, de fato, tinha fundamento. Ou seja, esse entusiasmo parecia estar respaldado por todo conteúdo progressista. Afinal, diversas barreiras estariam sendo ultrapassadas pelo avanço tecnológico. A mensagem de pano de fundo deveria ser: _ “ Encontramos as respostas! com o auxílio de nossas eficientes ferramentas, a razão, o raciocínio lógico construiremos um mundo melhor do que já tivemos até hoje”. Todavia, se garimparmos cuidadosamente esses textos encontramos termos, expressões, metáforas e construções que nos remeterão a outros tempos, outras Eras do pensamento humano. Uma Era aonde a busca pela liberdade parecia mais intensa, uma época aonde o grito por justiça se fez ecoar ultrapassando limites geográficos e temporais por onde houvessem dominadores e dominados.

A sensação que tenho a partir desses apelos, é que os avanços tecnológicos alcançados durante o período chamado de “idade da razão” nos colocaram a anos luz de uma História marcada pela guerra, dominação e escravidão. Mas o que escravidão, passado, guerras tem haver com o as expressões e os discursos apaixonados sobre a Net? Interessante, permita-me tentar cheagr mais de perto alguns desses “discursos”:

“...e continua crescendo à medida que eu vou escrevendo ... esse mundo eletrônico que vai se avolumando rapidamente.

...“Cogumelos” talvez seja a mais adequada das comparações. Numa base diária, as redes e os pontos, grandes e pequenos, vão surgindo como fungos que crescem na margem fértil dos hardwares, softwares e acessos a redes que vão se barateando sem parar. Esse fato, junto ao trabalho duro, quase missionário, de milhares de pioneiros Net, levou a esse crescimento fenomenal. A internet e suas redes constituintes criaram uma “anarquia cooperativaglobal que não possui sede nem administração central. Ela vai crescendo organicamente, sem o benefício(ou carga) de um plano mestre...

Note que algumas das palavras grifadas no texto acima trazem embutidas em seus significados valores Históricos importantes para qualquer indivíduo. Significados, esses, que parecem emprestar seus valores para recompor um ideal, ou melhor um mundo ideal. Um sonho perdido, distante. Ora, se todo o entusiasmo está respaldado por um sentimento de satisfação pela conquista de algo jamais visto antes, e apontando para um futuro maravilhoso, “Encontramos as respostas e construiremos um mundo melhor ...”. Então, por que, ao invés disso, podemos ouvir nas entrelinhas de textos semelhantes ao citado acima, milhares deles, o seguinte:

“... Lembra-se daqueles ideais? liberdade, igualdade e fraternidade? Também poderíamos citar a democracia, a livre iniciativa, a liberdade de expressão, todos eles esquecidos a muito tempo atrás ? Pois está vindo um novo mundo, um mundo virtual aonde poderemos nos reencontrar com esses valores. Chegando esse mundo poderemos nos esquecer das guerras que criamos, das mentes que cerceamos e aniquilamos. Nos esqueceremos daqueles que, por deterem um certo conhecimento, ou dominarem determinada tecnologia, fizeram escravos e usurparam o pão da mesa de um inocente ...”

Através de um olhar cultural latino americano, pouco significado podemos retirar na frase, “...junto ao trabalho duro, quase missionário, de milhares de pioneiros Net...”. Porem, para um povo que, fugindo de uma perseguição religiosa, deixa sua pátria materna, pioneiros num novo mundo, a América, constrói um país com trabalho duro. As metáforas contidas nessa frase remetem o povo americano ao início da sua História. Quando os primeiros puritanos deixam suas origens na Europa, em direção a uma terra desconhecida a fim de construir uma nação baseada em ideais de liberdade igualdade. Os mesmos puritanos que enviaram, mais tarde, seus filhos por outros novos mundos desconhecidos, Brasil, África ect, como missionários de uma fé que, acreditavam, seria capaz de libertar os homens de toda escravidão. Isso traz a lembrança de um ideal distante, talvez esquecido para eles, perdido no tempo.

Como conciliar a idéia de que, hoje o pensamento democrático ocidental predominante no mundo, pensamento esse que está respaldado, digamos pela parte bem intencionada do sonho americano, esse por sua vez, um dos pilares que compõem o cerne da nossa sociedade industrializada, e mesmo assim, apesar de todo o progresso tecnológico proporcionado por esse sistema o homem moderno vai buscar na possibilidade de uma sociedade virtual, uma espécie de reedição de seus sonhos? É como se esse homem estivesse frustrado, com a sociedade real, ao invés de realizado com o que criou, vislumbra uma segunda chance, um recomeço, para acertar um alvo que não fora atingido. Surgem então alusões do tipo “Aldeia global”, anarquia cooperativa global, e o não tão novo jargão: “Sociedade alternativa”. Isso nos leva a crer que o bem sucedido homem da tecnologia está, na realidade, desesperado, e implora por uma alternativa. Algo que o faça lembrar do porque, e de como tudo começou. Talvez, em uma dimensão mais profunda do que imaginamos. Talvez esse homem busque alguma forma, algum jeito que o remeta ao início de tudo, um gênesis, ao paraíso, ao Éden.

“...O mundo inteiro, ou seja, todas as pessoas conectadas através de uma grande rede de comunicação. Onde, a princípio, todos poderiam se comunicar com todos, em outras palavras, a principal barreira que separa as pessoas, tempo e espaço, pelo menos imediatamente, seria acentuadamente amenizada ...”


Um lugar aonde ele pudesse se sentir integrado, em harmonia com o ambiente e o próximo. O que seria, a princípio, um paradoxo. Pois, que ambiente poderia fazer com que um ser que, em sua essência, traz a marca da contradição, e como conseqüência disso a impossibilidade total de integrar-se consigo mesmo e com o meio, pudesse sentir-se integrado? Basta flashback de uma visita a uma sala de bate papo, quanto mais democrática melhor, para se ter uma idéia do que estou falando. As relações existentes ali dariam um excelente laboratório para teses de sociólogos, antropólogos, psicólogos. Lembro-me do que pensei numa das últimas vezes que tentei participar de um chat desses tipo UOL: "A que ponto pode chegar o ser humano!"

“ ... Atualmente , a internet está fundamentada em propósitos culturais e comerciais, modelados na democracia, na liberdade e no acesso global, sem restrições sociais, políticas ou econômicas; Transparentes as praticam de monopolização, não pertencendo a nenhum país, ou empresa em particular ...”

Considerada a mais nova obra prima da engenharia da computação, a internet é atualmente o tema principal da área de informática. O universo virtual tão esperado tem se tornado cada vez mais a realidade de muitas famílias, empresas, corporações, entidades governamentais, e não-governamentais. A internet deixou de ser apenas um assunto futurístico, embora que muito se espere ainda dessa tecnologia, para se tornar o alvo, e meio de produção de muitas empresas.

Contudo, julgo que embora a internet fisicamente tenha tomado nossa sociedade de assalto, porém muitas definições e conceitos novos ainda não estão totalmente sedimentados e digeridos pelos setores, digamos, infectados, direta ou indiretamente por essa www.epidemia.com. Há tanta confusão, que podemos dizer que a Internet ainda é algo que não está muito claro e a maioria dos entusiasmados que bravamente se prontificam na árdua tarefa de tentar explicar-la acabam enredados numa teia (uma web) de signos, significantes e significados, teorias revolucionárias, reacionárias e conspiratórias. Algumas vezes chagam a nos proporcionar boas risadas, outras vezes nos resta chorar.

Noto que o tom megalo-otismista-poético que permeava toda a expectativa da sua chegada mudou sensivelmente. Hoje o tom predominante nos textos, vinculados nos mais variados tipos de mídia, tomam um tom mais preocupado, todo aquela ambientação bucólica dá lugar a um cenário nada agradável. E sonhada “Aldeia global”, mais parece uma “cyberjungle”. Um gênesis repleto de spam, invasão de privacidade, backdoors, trustes, vendas casadas, crise de propriedade intelectual (principalmente), ect. Recentemente, pude presenciar uma reunião de gestores de uma conhcida empresa do ramo de ensino no Brasil com o seguinte dilema: Se colocamos o material didático no LMS, seremos prejudicados pela pirataria . Pois segundo eles, alguns clientes deixariam de se inscrever no curso pos poderiam ter acesso ao material através de algum colega matriculado. Portanto, conclui-se que no LMS deles não seria disponibilizado o material didático. Pode?

Será que estou sendo negativista? Talvez a internet não seja uma compilação de coisas negativas, mas com certeza ela hoje está longe de ser o refúgio dos paladinos da democracia, como era esperado. Visto que, cada vez mais sua expansão se dá na direção de interesses corporativos.

Todo esse ambiente de contradições já era de se esperar. Se levarmos em consideração que a tão desejada sociedade democrática, construída sobe a iluminação da reforma religiosa juntamente com a revolução francesa, se transformou num mostro avesso a todos os valores de seus precursores. E pegarmos os filhos dessa sociedade contraditória, representantes das diversas, e heterogenias, classes que a compõe e os soltarmos num espaço com um número bem menor de regras, e ainda por cima um espaço repleto de elementos, virtualmente físicos e lógicos, totalmente novos. “BIG BANG”!!!!!!!!!!!!!!!! pode-se imaginar algo parecido com o caos.

Artigo completo (View Full Post)

terça-feira, 13 de março de 2007

Operadores

Operadores

Operadores são símbolos usados para efetuarmos operações de incrementar, decrementar, comparar e avaliar dados dentro do computador.

Existem três tipos de operadores:

  1. Operadores Aritméticos
  2. Operadores Relacionais
  3. Operadores Lógicos



Operadores Aritméticos

são os utilizados para efetuarmos operações aritméticas, como o nome já nos indica, e assim obtermos resultados numéricos. Além da adição, subtração, multiplicação e divisão, podemos utilizar também o operador para exponenciação, além de algumas operações especiais. Os símbolos para os operadores aritméticos são:









Operação
Símbolo
Adição
+
Subtração
-
Multiplicação
*
Divisão
/
Exponenciação
**
O resto de uma divisão
Mod
A Parte inteira de uma divisão
Div














Hierarquia das Operações Aritméticas

Quando necessitamos efetuar várias operações aritméticas simultâneamente, dependento da ordem que cada operação seja efetuada, poderemos obter resultados diferentes. A hierarquização das operações, do mesmo modo que outrar regras da matemática, existe para que qualquer pessoa, em qualquer cultura efetue um cáculo de forma padronizada. A partir dessa regra o compilador pode interpretar corretamente o código e assim produzir o resultado esperado. Essa regra define um grau de precedência para cada símbolo. Veja abaixo:


1 º - "( ) "Parênteses: Qualquer operação que estiver entre parênses é realizada primeiro. De dentro pra fora, da esquerda pra direita.

2 º - Exponenciação

3 º - Multiplicação/Divisão Grau de precedência igual. Realiza o que aparecer primeiro, da esquerda pra direita.

4 º Soma (+)/ Subtração (-) Grau de precedência igual. Realiza o que aparecer primeiro, da esquerda pra direita.

OBS: Qualquer operador que possuir grau de precedência igual. Realiza o que aparecer primeiro, da esquerda pra direita.

Exemplo:






1) ((1 + 7) * 2) ** (2-1) = 16






2) ((1 + 7) * 2) ** 2-1 = 255






3) 1 + 7 * 2 ** 2-1 = 28













Operadores Relacionais




Os operadores relacionais são utilizados para comparar valores. Com os operadores relacionais montarmos espressões que sempre retornam valores lógicos (verdadeiro ou falso). Para esse tipo de operadores a precedência é definada pelo sinal de parênteses.

Descrição
Símbolo
Compara Igualdade
= ou ==
Compara Diferença
< >, #, !
Compara Maior que
>
Compara Menor que
<
Compara Maior ou Igual
>=
Compara Menor ou Igual
<=





Exemplo:

   Aux := 2 + 5;
Base := J;
Se (Aux > Base) então
<Faça isso ...>
Senão <Faça aquilo ...>








Operadores Lógicos

Na maioria dos casos trabalhamos com operadores lógicos juntamente com os operadores relacionais. Com eles montamos espressões lógicas a fim de obtermos resultados lógicos (verdadeiro ou falso). Os Operadores lógicos são:

Descrição
Símbolo
e (Conjunção)
And
ou (Disjunção)
Or
negação
Not
Ou exclusivo (Disjunção Exclusiva)
Xor





E / AND: Uma expressão AND (E) é verdadeira se todas as condições forem verdadeiras

OR/OU: Uma expressão OR (OU) é verdadeira se pelo menos uma condição for verdadeira

NOT: Uma expressão NOT (NÃO) inverte o valor da expressão ou condição, se verdadeira inverte para falsa e vice-versa.

XOR: Uma expressão Xor (NÃO) é verdadeira se e somente se um dos operandos for verdadeiro.



Linearização de Expressões

Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas. É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional.
Exemplo:

Artigo completo (View Full Post)

segunda-feira, 12 de março de 2007

Ponteiros

O armazenamento de qualquer valor no computador é feito na memória. Quando algo esta sendo processado, o armazenamento dos valores referentes a este processo é feito na memória principal. Como o computador acessa esses valores? Cada lugar da memória possui um endereço, ao acessarmos um determinado endereço de memória obtemos o valor armazenado naquele momento, naquele endereço.

Quando um programador está escrevendo um programa que calcule a soma de dois valores, ele vai precisar armazenar temporariamente três valores: Determinado número "X", determinado número "Y" e o Resultado da soma.
Para fazer isso efetivamente, ele declara variáveis. O que ocorre nos bastidores quando isso é feito? O compilador reserva um espaço na memória (ou seja, um endereço) para o armazenamento de um determinado valor (o espaço vai variar de acordo com o tipo definido para a variável quando ela foi declarada). O Programador, vê a variável “Num1”, do tipo numérico inteiro que ele criou, enquanto que o compilador “entende” aquilo como um endereço da memória aonde será armazenado o valor atribuído aquela variável (esse endereço é representado por um número hexadecimal ). Posso concluir então, que é possível acessar um determinado valor armazenado direto pelo endereço dele? Certamente sim. Isso que acabei de explicar, pode não fazer nenhuma diferença para vc agora. Contudo, em determinadas situações o entendimento desse mecanismo pode fazer a diferença entre vc estar no céu ou no inferno no mundo da programação.

Existe um tipo de dado chamado de ponteiro. Ele serve para armazenar a referência de um endereço de memória de uma variável qualquer. Como assim? Ponteiro, aponta para algum lugar. Aponta para um endereço, um local na memória principal do computador. A idéia seria, na prática, o ponteiro te leva imediatamente ao endereço para o qual ele aponta.
Num primeiro momento isso pode parecer um complicação desnecessária, na medida em que agora precisamos nos preocupar não só com o valor a ser armazenado, mas também com o endereço aonde isso será feito. Mas antes de tirar conclusões precipitadas vamos nos aprofundar um pouco mais no assunto, testar alguns exemplos para experimentarmos na prática o quanto a utilização de ponteiros pode tornar seus programas muito mais poderosos.


Embasamento Teórico

Variáveis Estáticas: trata-se das váriaveis cujo compilador reserva espaço para elas estaticamente, no momento da linkedição. Espaço esse que por sua vez será alocado na memória stack. Por exemplo: Uma variável do tipo "Integer" (a qual chamaremos hipoteticamente de ZnInteger) que vôce declarar no seu programa, durante a excução do mesmo, obviamente, em algum momento será alocado um espaço de 32 bits para aquela variável (ZnInteger). O Compilador aloca estaticamente espaço para esse tipo de variável e o próprio se preocupa em desalocar este espaço. Exemplo:

Em Pascal -

Num1: Integer; { A é uma variável do tipo Integer, e ocupará 2 bytes na memória enquanto o programa estiver em execução }

Em C ou Java
      
int Num1;

Alocação Dinâmica: Em run time (em tempo de excução), dinamicamente, alocamos espaço de memória. Quando isso é feito somos responsáveis por desalocar essa memória. Exemplo:
Em Pascal
      procedure GetMem(var P: Pointer; Size: Integer); //(Para alocar)  

procedure FreeMem(var P: Pointer[; Size: Integer]); //(Para desalocar)

Ponteiros: Tipos de variáveis que apontam para um endereço de memória específico. Os Ponteiros podem apontar para:
  
1) Valores, áreas com Dados (Exemplo: uma variável. Ou melhor o conteúdo de uma
variável.
2) Uma rotina (Procedure ou Function);
3) Endereço nulo.



Sobre as variáveis:
- tipadas - o ponteiro conhece qual o tipo de dado para o qual está apontando.
- não tipadas - o ponteiro não conhece para que tipo de dado está apontando. Nestes casos seremos obrigados a fazer um cast, um Typecast a fim de definirmos para o compilador como deve ser tratado o condeúdo do endereço que estamos acessando.Falaremos sobre Typecast mais adiante.

Para inicializar um ponteiro com o endereço de uma variável usamos o operador @(arroba). Ex.:

AuxZn := @ZnValue; { Aux recebe o endereço da variável Value }


Para inicializar um ponteiro com um novo endereço de memória, veja trecho ilustrando abaxio:

var
ZnAux: ^Integer;
begin
(* ZnAux - aponta para um endereço de memória reservado para o tipo Integer*)
new(ZnAux);
end;


O que está acontecendo aqui? Foi reservado um endereço de memória e “ZnAux” está apontando para essa área.

Neste último caso o programador será responsável pela alocação, bem como pela desalocação. No primeiro caso isto não é necessário (e sequer deverá ser feito), pois o endereço de memória pertence à variável estática “ZnValue”.

Apontando Rotinas: Os ponteiros podem armazenar o endereço de mémória de um "procedure" ou "function".

Apontando para "null": A palavra reservada "nil" significa valor nulo. Trata-se de declarar um ponteiro que não aponte para nenhum endereço de memória. Exe:
ZnAuxPT := nil; 

O ponteiro ZnAuxPT não está apontando para dado algum. Logo, podemos testar quando um ponteiro aponta para algum valor:

if ZnAuxPT = nil then
Showmessage('Não há Valor, não ha endereço. Ou melhor, o endereçoé nulo!')
else
Showmessage ('ZnAuxPT o Endereço não é nulo');


Declarando ponteiros

Em pascal:
Para declarar um ponteiro, na seção "var", definimos o identificador, seguido de dois pontos (":"), o tipo para o qual ele apontará, precedido pelo operador "^" (circunflexo).



var
ZnPtNum: ^Integer; { ZnPtNum aponta para um Integer }
ZnPtChar: ^string; { ZnPtChar aponta para uma string}
begin


Para declarar um ponteiro não tipado:

var
ZnPtVar: Pointer;
{ ZnPtVar é uma variável ponteiro que apontar para qualquer tipo de dado }


Declarando ponteiro para uma procedure ou função:

var
ZnPtProc: procedure(ZnX: String);
ZnResultado: Integer;
procedure ZnProcedureStr(ZnAlfa: String);
begin
ShowMessage('ZnProcedureStr recebeu ', x);
end;

function ZnFunctionSoma(ZnNun1, ZnNun2: Integer);
begin
ShowMessage(Format('ZnFunctionSoma somou %d com %d. O Reseultado é: %d ',
[ZnNun1, ZnNun2, (ZnNun1 + ZnNun2)]));
end;

begin
ZnPtProc := @ZnFunctionSoma;
ZnResultado := ZnPtProc(2, 4);
if ZnResultado = 6 then
begin
ZnPtProc := @ZnProcedureStr;
(* Exibirá: 'Rotina 2 recebeu Estação Zn: estacaozn.blogspot.com'*)
ZnPtProc("Estação Zn: estacaozn.blogspot.com");
end;
end;




Endereço X Valor armazenado



É importante destacar que os ponteiros nos dão acesso a duas informações:

uma é com o endereço para o qual ela aponta


A outra é o valorarmazenado no respectivo endereço.




var
ZnPtInt: ^Integer;
ZnInt: Integer;
begin
{ A linha abaixo faz com que “ZnPtInt” aponte para o endereço de ZnInt, é lida
assim: "ZnPtIntrecebe o endereço de ZnInt" }
ZnPtInt := @ZnInt;
{ primeira forma - estamos trabalhando o endereço para o qual ZnPtInt está
apontando}

{ A linha abaixo guarda o valor 5 na área de memória apontada porZnPtInt, é lida
assim: "O endereço apontado por A recebe 5 }
ZnPtInt^ := 5;
{ segunda forma - estamos trabalhando com a informação apontada por ZnPtInt}

ShowMessage(Format('O valor é: %d.', [ZnInt]));
end.


Na linha 7, definimos que ZnPtInt deverá apontar para ZnInt, em seguida colocamos o valor 5 no endereço apontado por ZnPtInt
(agora ZnPtInt aponta para ZnInt), em seguida exibimos o valorarmazenado por ZnInt.


Typecast


Sobre Typecast, veja ....
Exemplo Dummy:

var
ZnPtVar: Pointer;
ZnNum: Integer;
begin
ZnPtVar := @ZnNum;
ZnNum := (10 * 200);
ShowMessage(Format('Estação zn! O Valor é: %d', Integer(ZnPtVar^));


Usamos o circunflexo após a variável ponteiro para poder acessar o valor apontado.

Desalocando o Ponteiro


Ao usarmos a procedure new alocamos memória para um ponteiro. O mesmo deverá ser desalocado. Para isso evocamos a procedure “dispose”. Exemplo:

procedure ZnDesaloca;
var
ZnPtAux: ^Integer;
begin
new(ZnPtAux); { Aloca memória para um Integer }
{ Atribui valor a ZnPtAux. O endereço de memória passa a armazenar esse valor}
ZnPtAux^:= 210;
dispose(Aux); { Desaloca o espaço reservado pela procedure New }
end.

Artigo completo (View Full Post)

Propriedades em C#

Edit: Corrigi o código C# abaixo - estava com diferença de caixa entre os nomes... Assim não dá, né... hehe foi mal

Olá a todos.

Neste post vou mostrar um pouco sobre propriedades e sua implementação em C#.

De modo geral, propriedades são elementos de uma classe que são usados para encapsular campos de dados dentro desta classe - uma interface para quem está "fora" recuperar e alterar o valor de um campo da classe.

Vou mostrar alguns exemplos de propriedades em outras linguagens:

Delphi:

type
TObj = class

private
FCampo: String;

published
property Campo: String read FCampo write FCampo;
end;

Acessamos a propriedade assim:

// instanciando a classe
Obj = TObj.Create;

// definindo valor
Obj.Campo := 'Valor da propriedade';

// recuperando valor
variavel := obj.Campo;

Em Java:

class Obj {

private string campo;

public void setCampo(string value) {
this.campo = value;
}

public string getCampo() {
return this.campo;
}
}

Usando:

// instanciando a classe
Obj obj = new Obj();

// definindo valor
obj.setCampo("Valor da propriedade");

// recuperando valor
string variavel = obj.getCampo();

Parece que o java não tem suporte intrínseco a propriedades - não tenho certeza. De qualquer forma, temos que encapsular os campos em métodos públicos da classe. O Delphi já tem uma forma mais elegante de implementar :D

Em C# propriedades são extensões de campos de dados. Também são conhecidos na cominidade C# como smart fields (campos inteligentes). Hehe... Nome legal...

Vamos ver na prática:

class Obj {

private string campo;

public string campo {
get {
return campo;
}
set {
campo = value;
}
}
}

Repararam que o nome do campo interno e da propriedade são os mesmos? Legal, né...
E no código usamos assim:

// instanciando a classe
Obj obj = new Obj();

// definindo valor
obj.campo = "Valor da propriedade";

// recuperando valor
string propriedade = obj.campo;

A forma de acessar propriedades no C# é bem semelhante à do Delphi. Em java já é um pouco diferente. <comentario relevante="false">Na verdade, eu acho a de java a mais feia de todas hehe</comentario>.

Valeu pela força de todos no blog e, como sempre, não deixem de comentar.

Artigo completo (View Full Post)

segunda-feira, 5 de março de 2007

Mudanças no layout - Ok

Hááááá....

Já dei um jeito na confecção do layout. Fui no modelo e editei o XML na mão!

Algumas mudanças que são facilmente notadas são:

- O autor agora aparece sob do título do post.
- A fonte padrão agora é a Trebuchet MS
- A barra lateral foi rearrumada


Essas são as principais (acho que são as únicas na verdade hehe). Também cadastrei o site no google e coloquei umas keywords na tag meta para ver se o crawler deles indexa a gente também. A galera que cuida do blog junto comigo pode editar o layout direto se quiser ou me pedir que também está ok; e os que participam mesmo não sendo admin podem me mandar comentários dando opiniões e sugestões.

Valeu.

Edit: Agora mudei vários elementos do layout e o link para editar o post fica logo ao lado do título. Espero que gostem deste layout. Já estou até criando variáveis nesse XML do blog xD

Artigo completo (View Full Post)

Mudanças no layout

Estou tentando alterar o layout do blog mas encontrei um bug na ferramenta de administração deles e está difícil colocar do jeito que eu estava querendo. Pior é que por causa desse bug não consigo colocar do jeito que estava antes.

Vou mandar um e-mail para esses doidos e ver o que eles fazem por mim.

Artigo completo (View Full Post)

Enviando o HTML para o navegador aos poucos

[Hoje sem o cumprimento padrão aos queridos freqüentadores do blog]

Neste post vou contar um pouco sobre um problema que eu tive e a solução que eu cheguei.

Eu desenvolvi um pequeno sistema onde é possível fazer consultas a diversas bases de dados com parâmetros diferentes e recuperar todos os resultados juntos, como se eles estivessem todos na mesma tabela do banco.

O problema que eu encontrei é que o servidor web não estava "querendo" processar a página quando a consulta retornava muitos registros. Também ninguém pode culpá-lo, pois ele sempre armazena todo o resultado em buffer antes de enviar para o navegador. Como o buffer chegava a um tamanho absurdo ele "deixava pra lá" hehe.

A solução que eu encontrei foi liberar o resultado aos poucos, assim o script não ia esperar acabar a execução toda para enviar os resultados para o navegador.

Ah Felipe, legal essa hein! É verdade, é muito legal mesmo :D

No PHP existe o método flush() que envia o conteudo armazenado até o momento de sua chamada para o servidor e o descarta logo após o envio.

Exemplo Felipe, exemplo!

<?
// aqui entra seu loop de registros
foreach ($registros as $linha) {
?>
<tr>
<td><?=$linha["nome"]?></td>
</tr>
<?
flush();

}
?>

No exemplo acima o script enviará o que está armazenado no buffer de saída do servidor para o navegador a cada registro. Este script está enviando o buffer de 1 em 1, mas você até pode encontrar melhores resultados deixando o buffer "encher" mais um pouco antes de enviar - 20 em 20, 50 em 50, etc, etc ,etc...

Ok então. Espero que isso possa ser útil para vocês e, como sempre, a seção de comentários espera :D

Artigo completo (View Full Post)

DelphiX e DevExpress, probleminha.

Uma dica pra quem pretende instalar a DelphiX (DelphiX70.dpk).

Se por acaso vc tem a DevExpress instalada, vc terá problemas porque as duas packages possuem units distintas homônimas. A unit dxCommon da DevExpress não tem nada haver com a dxCommon da DelphiX. Quando vc tenta compilar a package DelphiX70.dpk , da DelphiX, o compilador avisa que é necessário tornar a package compatível com outra. Oh oh, pensei: _ “Já começou mal !?!?!?!?!? ”.



É óbvio que não procedi a alteração, contudo, tentei instalar assim mesmo (forçando a barra pra ver o que aconteceria). Ele responde com uma singela mensagem: “Cannot load package ‘DelphiX70.’ It contains unit ‘DxCommon,’wich is also contained in package ‘DxComnD7’ ”.

Que lindo!!! Imaginei. Esse fenômeno de units com nomes iguais em packages distintas não é algo tão raro, já havia passado por isso antes e a única forma de resolver o problema é alterar o nome de uma das units. O problema é que nem sempre isso é possível, ou mesmo que seja, algumas vezes, pode dar um trabalho de cão. Eu odeio trabalho de cão.


Preparei o espírito pro pior e fui estudar as units e sua relações para ver se seria possível alterar uma das duas. Graça a Deus foi tranquilix, resolvi o problema alterando o nome a unit dxCommon da DelphiX, visto que essa alteração só refletiria para apenas uma outra unit na package DelphiX70.dpk.


Links:
http://www.gamedev.narod.ru/
http://turbo.gamedev.net/delphix.asp
http://www.gamedev.com.br/

Artigo completo (View Full Post)

quinta-feira, 1 de março de 2007

Velocidade = Produtividade? Hmmm...

Olá outra vez :)

Este post é um opinião pessoal: Fique à vontade para discordar e para me achar um idiota (hehe).

Volta e meia eu e uns amigos converamos sobre um assunto que com certeza divide opiniões: Desenvolver rápido significa ser produtivo?

De primeira qualquer um pode responder: Mas é claro!

Isso sempre me faz pensar...

Qual o preço que se paga ao desenvolver com muita velocidade? Para subir o item produção na lista de prioridades muitas vezes se paga descendo o item qualidade na mesma lista.

Na minha lista (repito minha) a qualidade é sempre o primeiro item. Não só qualidade do produto final, mas qualidade do código-fonte também (eu diria principalmente qualidade do código-fonte). Eu sempre penso no código que eu vou fazer para ver se eu não consigo achar uma solução melhor, depois que eu escrevo eu faço a mesma coisa; quando volto no código depois de um tempo eu ainda faço isso - paraóico... -_-

Outra coisa que eu também gosto é sempre disputar comigo mesmo para conseguir sempre melhorar a qualidade do meu trabalho.

Com certeza para isso a velocidade diminui um pouco, mas por mim tudo bem...

Vou fazer um exemplo de teatrinho... hipoteticamente falando...

Duas pessoas recebem uma mesma tarefa e começam a trabalhar nela - o primeiro dá preferência à produtividade e o segundo à qualidade.

O rapidinho termina em dois dias e o mais lento em uma semana (mais que o dobro)

Pronto, elogios para o rapidinho e para o outro 'Cara, produção, produção!'

Então em dois dias com o programa funcionando é necessário fazer uma 'pequena' modificação (nós sabemos que nunca é pequena hehe).

O veloz se depara com uma difícil escolha: gastar tempo fazendo o processo direito ou continuar mantendo a qualidade um pouco mais baixa para terminar rápido.

O que demorou mais, como gastou mais tempo no começo analisando e codificando já prevendo mudanças futuras, não terá problemas e, dependendo da modificação, nem precisará mexer em código! Mentira, Felipe! Não é mentira.

Enquanto o veloz estiver ali para dar manutenção do código-fonte está tudo bem (mais ou menos hehe). Mas, quando ele não estiver mais ali vai ser realmente um problema: Todo o tempo que ele economizou no desenvolvimento será gasto agora para ter que consertar alguns erros que vêm de remendo atrás de remendo.

Pior: Se o programa tiver que passar por grandes mudanças realmente vai ser difícil...

Bem, já chega disso tudo. O ponto central da minha argumentação é que eu não sacrifico qualidade para obter produtividade - até porque focar em produtividade sem muito critério é apenas uma ilusão de produtividade.

Claro que uma pessoa pode colocar a qualidade em primeiro lugar e mesmo assim ser super rápida, tendo uma excelente produtividade. Também devemos contar motivação, etc, etc, etc, que eu vou deixar pra próxima.

Tudo o que foi postado aqui não foram apenas 'coisas' que saíram da minha cabeça nem opíniões que eu comecei a pensar só porque me parecem legais... Eu já tive oportunidade de trabalhar com estes dois 'perfis' de profissionais e devido a essa experiência eu tenho a minha opinião hoje.

Para resumir, eu sou um adepto do qualidade em primeiro lugar.

Valeu pela paciência de ler tudo e fique à vontade para comentar e promover uma discussão bacana sobre esse assunto tão importante.

Artigo completo (View Full Post)

Resolver o problema x Atacar o problema

Olá a todos. Este post traz mais um tema interessante, porém vou fazer uma abordagem diferente neste aqui...

Quando desenvolvemos aplicações (e em várias outras situações também) freqüentemente nos deparamos com situações em que temos que resolver problemas - de implementação, de processos, etc. É neste momento que devemos tomar muito cuidado e não subestimar nenhum problema para que nós não nos encontremos de repente atacando o problema em vez de resolvê-lo.

Como assim, atacando o problema? Bem, cada vez que você pensa em uma forma rápida de tapar um buraco, apagar um incêndio, etc, você está provavelmente atacando o problema. Podemos dizer que é um paleativo; quem desenvolve geralmente usa o termo marreta (huahauahuahauha atualmente não consigo pensar nesse nome sem morrer de rir).

O problema de 'atacar o problema' é que, como não foi encontrada a causa do problema real, com certeza ele vai voltar. E, devido à fragilidade da solução, ela pode vir a causar outros problemas...

O meu objetivo aqui não é ensinar a ninguém como resolver problemas nem ficar dizendo a ninguém o que fazer e como trabalhar. A mensagem aqui é somente para sempre proceder com calma, porque não adianta nada 'resolver' um problema rápido se você não o resolveu de verdade.

Então é isso. Valeu por acessar o blog e comente à vontade.

Artigo completo (View Full Post)

 
BlogBlogs.Com.Br