sábado, 27 de fevereiro de 2010

Comunicação inter midlet

PessoALL,
uma coisa que tive que resolver a pouco tempo, foi como fazer comunicação entre dois midlets (rodando no mesmo celular), tentei usar TCP dava erro no tcp get bind info (necessita comunicação de dados com a operadora), ai descobri que a comunicação UDP não precisava do bind info, o que faz funcionar a comunicação entre eles funcionar corretamente (é o mais indicado para este tipo de cenário).
Mas como a maioria sabe a comunicação UDP tem limitação de tamanho do pacote (estava transmitindo um arquivo) e não há garantia dos pacotes serem recebidos na mesma ordem dos pacotes enviados, por isso criei um código que no início do pacote tem a quantidade de pacotes e o número do pacote. Com isso o cliente consegue remontar o arquivo corretamente.


Segue os códigos para J2ME



protected byte[] receiveUDP (DatagramConnection sc) throws IOException {
int posicao = 0;
int tamanho = 0;
byte qtid = 0;
byte id = 0;

byte [] result = null;
byte [] buffer = new byte [sc.getMaximumLength()];

Datagram dgram = sc.newDatagram(buffer, buffer.length);

do {
dgram.setLength(buffer.length);
sc.receive(dgram);

id = buffer[0];

if (qtid == 0) {
qtid = (byte)(buffer[1]-1);
result = new byte [buffer[1]*(sc.getMaximumLength()-2)];
} else {
--qtid;
}
posicao = id*(sc.getMaximumLength()-2);
for (int i = 2; i < dgram.getLength(); ++i) {
++tamanho;
result[posicao+i-2] = buffer[i];
}
} while (qtid > 0);

buffer = new byte[tamanho];
for (int i = 0; i < tamanho; ++i) {
buffer[i] = result [i];
}

return buffer;
}
===============================================================================
protected void sendUDP (DatagramConnection sc, byte [] bArquivo) throws IOException {
int posicao = 0;
int tamanho = 0;

byte [] buffer = new byte [sc.getMaximumLength()];
byte qtid = (byte) ((bArquivo.length-2)/sc.getMaximumLength());
if (((bArquivo.length-2) % sc.getMaximumLength()) > 0) {
++qtid;
}

for (byte id = 0; id < qtid; ++id) {
Datagram dgram = sc.newDatagram(buffer, buffer.length);
tamanho = 2;
buffer[0] = id;
buffer[1] = qtid;

if ((bArquivo.length-posicao) > (buffer.length-2)) {
tamanho = buffer.length;
} else {
tamanho = bArquivo.length-posicao+2;
}
dgram.setLength(tamanho);
for (int i = 0; i < (tamanho-2); ++i) {
buffer [i+2] = bArquivo [posicao];
++posicao;
}
sc.send(dgram);
}
}


segunda-feira, 22 de fevereiro de 2010

Bunda de Urso

PessoALL,
Pra quem não sabe bunda de urso era meu apelido na Losango, se quiser saber porque pergunte a eles.

Quebraram a forma ???

Não sei se estou certo ou errado, mas como está difícil arrumar pessoas com o perfil que a profissão de análise de sistemas requer. Somente encontro pessoas com a capacidade, comprometimento e perseverança após os 30 anos. Os recém formados não querem nada com a hora do Brasil (temos poucas exceções). Quando pedimos para ficar até tarde, botamos uma pressão ou colocamos uma responsabilidade mais pesada sempre o taco espirra.
Não sei se eles estão certos e eu errado, sei que sofro com isso e cada vez a carga fica mais pesada ao invés de leve. Eles querem ter uma vida, o pior que isso eu também concordo e desejo para mim também, mas precisamos dividir o peso.
O Engraçado é que na maioria das faculdades tem uma matéria com o intuito de incentivar uma alma empreendedora. Fomentando a capacidade de trazer para si a responsabilidade. Será que estão ensinando certo ???
Outra coisa também engraçada que é da natureza humana, é que quanto mais facilidades o profissional tem para realizar as suas tarefas, menos capacidade inventiva ele têm. Hoje as pessoas com super computadores em casa não tem a capacidade de compreendê-las e reinventá-las pois tem ferramenta para tudo. Na minha época de faculdade a gente fazia miséria com micros de 4.77Mhz. (Uma coisa boa que com a geração Linux um pouco de compreender o SO está voltando, pois algumas coisas tem que fazer na mão ao invés de monkeys instalations). Atualmente o pessoal programa em .NET sem compreender como funciona a parada por debaixo do pano ou não sabe sql pois sempre usaram Hibernate (quero ver hibernate com milhares de dados no select). Falta base.
Quando peço um bom profissional, a capacidade técnica faz parte da avaliação, mas não é a determinante e sim a garra e perseverança do sujeito.
O Pior que a falta de esse estilo de profissional, não está afetando somente a Informática. Vocês já viram quantos médicos de plantão são formados por ano em comparação aqueles que desejam ficar atendendo em consultórios ????
Muito dessa culpa é nossa por criar um oasis na nossa profissão, mas também das entidades de ensino que não reprovam, não capacitam tudo em prol de formar mais gente e receber no fim do mês. Algumas profissões as pessoas tem que gostar do que fazem, Informática é uma delas.

Eu sei que coloquei muitas idéias e nenhuma solução, pois não a vejo ainda, por enquanto vou ver se conserto a forma dos bons profissionais.

Bem vindos

PessoALL,
Como parte da minha terapia e para compartilhar conhecimentos com a galera do mal, estou criando esse blog. Neste blog além de TI é claro queria compartilhar com vocês os 90% de transpiração que Thomas Edison se referia a inovação e que foi muito penoso (ainda está sendo) mas muito recompensador quando resolvemos um caso.
Isso me lembra uma época em que trabalhava para um banco e tinham um problema sério para resolver e me falaram vai lá e em meio dia você resolve isso. Hã .... Fiquei quase três noites dormindo no site até tudo normalizar (pelo menos a operação voltou no 1o. dia que estava lá).
Outra muito engraçada foi em outra instituição bancária e uma parte dos servidores ficavam sem rede normalmente entre 5 e 6 da manhã, o engraçado foi a resolução. Tinha um faxineiro que desligava uns switches para ligar a parada para esquentar a quentinha dele. Não sei se foi lenda mas pelo menos os servidores ficaram no ar ....

Tudo bem, que isso aconteceu a mais de 10 anos, mas esses episódios a gente nunca esquece.

Bem galera, foi começar a postar blogs até para fazê-la como terapia para o stress ao qual estamos submetidos diariamente.