Este blog Mudou

Este Blog mudou-se para:

terça-feira, 27 de setembro de 2005

TopCoder

Olá pessoal me inscrevi no TopCoder um site que promove competições de programação existem 2 categorias:

  • Algoritmos: Há competições semanais e o ranking do site é baseado nestas.
  • Componentes de Software: Você desenvolve um componente de software e é pago por isso! é dinheiro de verdade!
Há ainda indicação para vagas de emprego em empresinhas de quinta categoria sabe, tipo Yahoo!, NSA (National Seecurity Agency), Verisign, Sun só pra citar umas.

Gostei muito da idéia, descobri o site enquanto catucava no blog do Google e vi sobre o Google Code Jam uma competição promovida pelo Google e realizada pelo TopCoder, infelizmente a competição já terminou ainda estou tentando descobrir a colocação por países mas acho que não vai ter já que a lista de classificados é pelo nick do competidor.

A Arena
É! É esse o nome mesmo. O ambimente de competição é chamado arena e é um applet Java onde você pode conversar com outros programadores, treinar (nas salas específicas para isso) e é onde você irá também escrever seus programas. As linguagens suportadas são Java C++ C# e VB é uma covardia ter VB e não ter Pascal vocês não acham?

Os competidores
Tem competidores de todo o mundo busquei por brasileiros e no momento o brasileiro mais bem colocado é um tal FoxTango que está em 538 e o Cara é muito feio!, existe um Rank publicado no site e que é atualizado sempre que uma competição oficial do site acontece.

O Brasil no TopCoder
Estamos em 22 lugar de 42 países temos atualmente 56 membros e se isso melhora em algo estamos a frente de países como Japão Reino Unido e França.
Me inscrevi a pouco tempo e não tive tempo ainda de conhecer bem a coisa assim que tiver novidades mando mais notícias.

Brasileiros Vamos invadir o TopCoder!!

IDS (Intrusion Detection System)

Olá pessoal não tive tempo mesmo de escrever sobre os IDS's e acabei sem entregar o trabalho :( como se fosse pouco ainda cheguei atrasado na aula perdendo o que o pessoal fez e perdendo a explicação do professor sobre o SNORT :~( daí me resta dar uma estudada e ver o que dá pra conseguir.

Estou meio sem tempo e assim que possível envio algo com conteúdo ok? t+

sexta-feira, 23 de setembro de 2005

Squawk

Olá ainda estou pensando com que frequência devo enviar texto para aqui inicialmente minha intenção era de 5 textos semanais mas vejo que tenho muito o que fazer para escrever quase diariamente. Então vou tentar garantir de 1 a 3 textos semanais. Comprei hoje "Eletrônica básica" do Newton C. Braga é o mesmo autor de um livro chamado "Eletrônica para mecatrônica" que comprei um tempo atrás (e como você já deve ter deduzido me faltava conhecimentos básico de Eletrônica para entender) então agora eu tenho um livro de umas 200 páginas sobre Eletrônica básica vamos ver se algo de útil acontece.


Estarei trabalhando em uma apresentação de um IDS (Intrusion Detection System) então aguardem algo sobre segurança em redes e IDS's logo logo.
obs.: só não vou falar sobre o Snort por quê tem que ser um ou
tro qualquer. Restrição do professor (vamos usar o Snort em sala)


Hoje falaremos sobre a Squawk a Squawk é uma micro-máquina virtual Java, a tradução literal de Squawk é Grasnar (é isso mesmo aquela coisa que os patos fazem) e o nome é uma homenagem ao Squeak Smalltalk que sinceramente eu não faço idéia de onde eles tiraram esse Squeak (que significa ranger ou guinchar!), mas voltando, pra quem conhece a KVM (Kilobyte Virtual Machine) a Squawk não é muito novidade a diferença é que ela não é apenas pequena ela é MINÚSCULA implementada no chip sem necessariamente um Sistema Operacional.


O objetivo principal da Squawk é rodar nos smart-cards você já viu um? Dá uma olhada


Aí você me diz sim: “Corta tudo do Java e põe ele num cartão e daí? Que graça tem isso?

A graça é que com a Squawk você vai ter CLDC completo! Ou seja, uma API bem maior do quê a que você tinha no JavaCard além de Garbage Collection, Verificação das Classes e Carregamento Dinâmico de classes, dá uma olhada nos pacotes do JavaCard que é o que se usa hoje em todo tipo de smart-card inclusive os sim-cards (é aquele mesmo do teu celular GSM) e mais o que existe no CLDC.

JavaCard

J2ME/CLDC

java.io

java.lang

java.rmi

javacard.framework

javacard.framework.service

javacard.security

javacardx.crypto

java.io

java.lang

java.util

javax.microedition.io

javax.microedition.lcdui

javax.microedition.lcdui.game

javax.microedition.media

javax.microedition.media.control

javax.microedition.midlet

javax.microedition.pki

javax.microedition.rms


Bom, isso não quer dizer que todos que rodem a Squawk vão ter API completa, por exemplo, para multimídia né? Pra que você vai querer que teu cartão de crédito toque música se o teu celular tem uma caixinha de som e fones muito melhores?


E onde isso vai rodar mesmo?


O objetivo são os smart-cards da próxima geração com processadores de 32 bits que não tem mais do que 8KB de RAM, 32KB de armazenamento e 160 KB de ROM. É claro que um robô usando um microcontrolador poderia rodar a Squawk (olha robôs! Para repetir um slogan que eu vi eu adoro muito tudo isso!).


E cabe? Como eles fizeram esse milagre?


Cara os caras deram nó em pingo d’água

  • Os arquivos de .class são grandes e complexos simplifica tudo corta o que não for estritamente necessário;

  • Enxugaram o que deu no bytecode pra encolher as classes, já que o bytecode padrão não se preocupa muito em relação ao espaço;

  • Uma nova análise do código para gerar classes com mesma semântica, mas que facilitem o Garbage Collector e diminuam o número de instruções.

  • Resolução dos identificadores antes de executar, ao invés de resolver identificadores ao iniciar uma classe ou ao iniciar o programa pode se fazer isso na fase fora do dispositivo quando ainda se tem todo o espaço de memória necessário ou quando se instala o programa no dispositivo (compilação ou instalação demorada para diminuir consumo de memória parece uma boa troca).

  • Mudaram o mecanismo de Construção e Inicialização dos objetos de modo a facilitar a verificação.

  • A alocação de memória é region-aware, a Squawk sabe que tipo de memória está trabalhando e sempre que é possível usa a área de memória não volátil (que tem mais espaço) para armazenar os dados persistentes tipo definições de classes e métodos.


Java feito em Java!


É um dos objetivos dos caras era escrever o Squawk o máximo possível em Java de modo que eles fizeram o seguinte:

As características de nível mais baixo tipo o Interpretador do ByteCode o Garbage Collector e os Métodos Nativos são implementados numa linguagem que é um subconjunto de C e de Java ao mesmo tempo.

As características mais alto nível tipo controle de Threads Carregamento das classes e etc. são implementadas em Java puro.


De modo que uma possível implementação do Squawk pode ser testada como se fosse um programa Java durante sua fase de desenvolvimento.


E Funciona mesmo?


Um comparativo entre a Squawk e a KVM e a Squawk está bem perto até:

Execution times for Squawk and KVM


Squawk

KVM

Squawk/KVM

delta blue

2864

2624

0.92

mpeg

8282

7020

0.84

cubes

4927

4226

0.86

hanoi

3556

3805

1.07

Fonte: A Java Virtual Machine Architecture for Very Small Devices, Nik Shaylor, Douglas N. Simon, William R. Bush Sun Research Center.

Obs.: O tempo está em milissegundos

  • delta-blue é um programa para resolver equações;

  • mpeg é um decodificador de mpeg;

  • cubes é um programa que faz rotação e exibição em 3D;

  • hanoi é o tradicional programa das três torres de Hanói e seus anéis.

Estou postando do Kurumin Linux texto inicialmente produzido utilizando M$Word e migrado para OpenOffice e KEdit Navegador Mozilla 1.6!

domingo, 18 de setembro de 2005

Programação Orientada a Aspectos

Olá para todo mundo!

Fiz hoje o POSCOMP o exame de pós-graduação em computação da SBC Sociedade Brasileira de Computação. Bom como eu não estudei nada acho que fui até bem mas ainda tem que sair o gabarito que eles vão enviar por e-mail então agora é só aguardar.

Hoje vou falar um pouco sobre “Programação Orientada a Aspectos”, bonito o nome né? Próxima semana tem uma apresentação sobre isso e como já tenho bastante material aqui vai uma prévia do trabalho. Depois eu posto um link pro download do trabalho completo.

Primeiramente quero avisar que isto está baseado no trabalho Desenvolvimento de Software Orientado por Aspectos de Fábio Tirello, Roberto da Silva Bigonha, Mariza Andrade da Silva Bigonha e Marco Túlio de Oliveira Valente dos Departamentos de Ciência da Computação da PUC-Minas e UFMG Santa Catarina (UTESC)


Orientação a Aspectos: Onde?? Quando?? e pra que??

Era o belo ano de 1997 e o Windows 95 dominava o mercado de sistemas operacionais desktop, e eu estudava primeiro grau, mas isso num tem nada a ver com Aspectos o que conta é que Gregor Kiczales na “11th European Conference on Object-Oriented Programming propôs orientação a aspectos como solução para desvios em orientação a objetos.

Problemas em Orientação a Objetos? E isso existe?

A forma inadequada de tratar os requisitos transversais em um sistema orientado a objetos gera uma baixa modularização, a qual é dividida em dois problemas: espalhamento e intrusão.

O espalhamento que se deve ao fato de ter código para implementação de requisitos transversais disperso pelo programa.

Intrusão é o fato de ter trechos de vários requisitos transversais em uma única região do programa.

As conseqüências desses problemas são a menor produtividade do programador, dificuldades para rastrear o programa e baixa reusabilidade.

Desenvolvimento de Programas Orientado a Aspectos

O desenvolvimento de software orientado por aspectos é realizado em três fases: a decomposição, a implementação e a recomposição de requisitos.

Decomposição:

Consiste na separação dos requisitos em funcionais e transversais.

Implementação:

Deve-se implementar as unidades de lógica do negócio, registro de operações, autorização, etc., em módulos separados. Para a implementação de cada módulo, utiliza-se os recursos da POO padrão.

Recomposição do sistema:

Após a implementação separada de cada requisito, especificam-se as regras de recomposição do sistema. Estas regras são implementadas em módulos denominados aspectos. Os aspectos definem como os requisitos são compostos para formar o sistema, em um processo denominado costura (weaving).

Justify Full

Para saber mais:

www.aspectJ.com

sábado, 17 de setembro de 2005

Cálculo Numérico

Bom, aqui estou eu novamente hoje vou falar sobre cálculo numérico só por que fiz uma prova ruim Um prova facílima e eu me passei, portanto dá uma olhada e vê como é fácil.

Primeiro vou dizer que o assunto pode parecer meio chato pra quem não está acostumado então siga em frente por sua própria conta e risco. Eu prometo algo mais interessante no próximo post.

O que estou estudando em Cálculo Numérico?
Estudo de métodos numéricos para encontrar raízes de funções.

Quer ver um exemplo simples?
Digamos que eu quero a raiz dessa função aí, um jeito muito simples de fazer é: pegue um ponto antes e um depois da raiz que você ainda não sabe onde é mas sabe que se dois pontos estão em partes opostas do gráfico, isso quer dizer que tem pelo menos uma raiz entre os dois certo? Escolhendo os dois pontos vá aproximando um do outro, mais cedo ou mais tarde você vai chegar no ponto que passa de positivo para negativo ou seja a raiz. Esse é o método mais simples método da Bisseção, e é claro isso não caiu na prova hauahuah.

Na prova eu tinha umas tarefas simples:
1. Calcular o erro de certa operação considerando o erro introduzido pela conversão Decimal -> Binário.
a. Calcule usando binário depois calcule normal
b. Calcule o erro relativo assim:
i. |valor_real - valor_aproximado| / valor_real
c. Quer mais é só isso mesmo! acho que essa eu me dei bem :-)

2. O método da Iteração Linear
a. Cara isso eu devia ter revisado direito
b. Basicamente é o seguinte primeiro transforme a sua equação original do tipo f(x) = 0 em uma coisa do tipo x = g(x) o que é das coisas mais fáceis certo?
c. Chute com vontade um valor que você acha esteja próximo da raiz calcule g(x) use o resultado como o próximo chute (se bem que aí não é mais chute certo?)
d. Se os valores estão convergindo legal faça mais umas vezes e você terá a raiz
e. Se não converge bom, tenta um chute melhor cara.
f. Existe uma maneira de testar convergência para o seu chute, mas no momento não me lembro.

3. O método de Newton-Raphson
a. Cara esse era a questão pra eu fazer de olhos fechados afinal de contas eu implementei esse método no Delphi se quiser essa implementação me manda um email que ainda tenho ela aqui.
b. O método é basicamente o seguinte fazer as iterações até encontrar um valor para a raiz que esteja na tolerância determinada
c. A cada nova iteração o novo valor de x deverá ser:
i. Xnovo = X - (F(X)/F’(X))
d. E pronto é só isso e eu acho que consegui errar!
e. Tem mais um detalhe para garantir que este método converge existe um teste que é o seguinte:
i. F’(X0) * F’’(X0) > 0

E pronto era isso significava um 10 em cálculo numérico, bom não necessariamente afinal de contas aqui não tem exatamente o que era pedido, mas em linhas gerais neh?

Poxa esse de hoje foi muito chato se você chegou até aqui
1. Você não tem muito o que fazer
2. Você gostou de me ver descrever minha tragédia na prova

Eu qualquer dos casos comente ficarei feliz de ouvir (ler) suas sugestões e prometo no próximo post ser mais interessante.

sexta-feira, 16 de setembro de 2005

Entendendo o que está acontecendo

Olá,

Como este é o meu primeiro post real vou começar me apresentando. Meu nome é Tadeu Ferreira Oliveira sou um estudante de ciência da Computação da Universidade Tiradentes em Aracaju Sergipe, estudei o segundo grau na Escola Técnica Federal de Sergipe ETFSe que agora é Centro Federal de Educação Tecnológica CEFET-Se, bom eu me acostumei com o primeiro nome, CEFET ainda é estranho pra mim, lá eu fiz o curso técnico de informática e de lá pra cá não fiz outra coisa senão estudar e trabalhar com computadores.

Sobre meus interesses: computação móvel, sistemas embutidos (ou embarcados? embarcado é um nome estranho vocês não acham?) são meu grande objetivo no momento mas quem sabe eu mudo de idéia, trabalho com Delphi e essa é hoje a minha grande especialidade, programo em Java especialmente J2ME e isso é algo a ser evoluído. Quer dar uma olhada no que eu venho fazendo com J2ME? Visite http://www.regulamentar.org/Pessoais/Tadeu/wap.wml e faça o download do Super, Grandioso, Hiper, Plus, Deluxe, Advanced e Terrivelmente_Feio Campo Minado para celulares Siemens se quiser tem uma versão que roda em qualquer outro aparelho com suporte a J2ME MIDP 1.0 visite http://www.regulamentar.org/Pessoais/Tadeu/JMinesMIDlet.jad. É claro não poderia esquecer automação ainda vou construir um robô funcional e funcional é funcional de verdade algo útil mesmo, no momento o que eu já consegui foi quebrar uns carrinhos de brinquedo e criar um outro carrinho mais feio que os que eu destruí ah! mas já foi um passo né? antes eu só quebrava, e a mais audaciosas de todas as proezas consegui acender uns ledzinhos ligados na porta da impressora com uns resistores um pouco de programação em C e um bocado de coragem de espetar aquela coisa armengada no meu PC só pra acender uns leds huahauh.

Sobre os objetivos deste blog: basicamente é um espaço para publicar alguns textos que acabo produzindo por causa da universidade e que acredito podem ser úteis para alguém aí desse lado, vou publicar aqui também minhas pesquisas particulares assim vocês ficam sabendo o que ando estudando, entre uma e outra loucura da Universidade, e eu me lembro do que pesquisei pra não ficar perdido. O blog vai servir também como treinamento de escrita me disseram que eu não sei mais escrever por quê agora eu só sei fazer conta... por quê em Ciência da Computação só se estuda Matemática... pois aqui estou escrevendo para um Blog tah!