sexta-feira, 30 de julho de 2010

Perfil usuário

>Por Maisa

Oi,
Hoje nas aulas de PHP houve o desenvolvimento de uma janela que aparecerá ao clicar no botao de lupa ao lado do nome do usuário na consulta. Onde aparecerá todos os dados do mesmo para melhor visualização.
Ainda está em fase de teste, segue abaixo a imagem da janela:


Ao clicar na lupa, a janela apresentará a foto e as informações do usuário escolhido. Haverá uma dessa também para os grupos com seus respectivos dados.


Até mais,

Maisa

Notificações e Advertências

>Por Paula

Olá ;D

Essa semana estou finalizando os Relatórios do sistema em PHP, os problemas que haviam surgido, consegui resolvê-los. Logo após essa finalização partiremos para a elaboração do envio de notificações e advertências, que será realizado através do envio de e-mails.

Para tal realização dispomos de uma função chamada mail() que permite configurar e enviar mensagens de correio. A função mail() recebe três parâmetros obrigatórios e dois opcionais. Retorna true se o mail se enviou com êxito e false em caso contrário.

Parâmetros necessários em todos os casos

Destinatário: o endereço de correio ou endereços de correio que vão receber a mensagem. Se incluirmos vários endereços devemos separa-las por uma virgula.

Assunto: para indicar uma cadeia de caracteres que queremos que seja o assunto do correio electrónico a enviar.

Corpo: o corpo da mensagem, o que queremos que tenha escrito o correio.

Exemplo de utilização da função mail para envío de um email simples :

" mail("ze@criarweb.com,maria@criarweb.com","assunto","Este
é o corpo da mensagem") "

Desenvolvimento técnico: Simulador

>Por Juliana

Boa tarde,
A classe que apresento a vocês hoje é a classe Arena. Ela faz parte do Simulador. Nela serão desenhados os objetos a cada execução de um novo comando. Por enquanto, os comandos que são executados no método run() são apenas para teste e logo serão substituídos por comandos recebidos do Tradutor.
class Arena extends JPanel implements Runnable {
/**
* pixels por cm.

* Use multiplicando o valor em cm para obter valor correspondente em pixels
*/
final double escalaCmPixel = 5;

Robo robo;

Arena() {
try {
robo = new Robo(this);
setPreferredSize(new Dimension(400, 400));
new Thread(this).start();
} catch (IOException e) {
e.printStackTrace();
}
}

public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < 40; i++) {
g.drawLine((int) (i * 8 * escalaCmPixel), 0,
(int) (i * 8 * escalaCmPixel), 400);
g.drawLine(0, (int) (i * 8 * escalaCmPixel), 400,
(int) (i * 8 * escalaCmPixel));
}
robo.desenha((Graphics2D) g);
}

void enviaComando(int cmd) {
try {
robo.comando(cmd);
Thread.sleep(33);
repaint();
} catch (InterruptedException e) {
}
}

public void run() {
while (true) {
for (int i = 0; i < 100; i++) {
enviaComando(0x11);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x99);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x19);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x91);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x10);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x01);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x90);
}
for (int i = 0; i < 100; i++) {
enviaComando(0x09);
}
}
}

Até a semana que vem,
Juliana

Desenvolvimento técnico: Tradutor

>Por Mariana

Hey,
Esta semana começamos o desenvolvimento da classe Tradutor. Essa classe deverá traduzir o arquivo da lógica e transformá-lo em comandos. Esses comandos serão enviados tanto para o simulador quanto para o robô real, de acordo com a escolha do usuário, gerando a movimentação sobre a arena. Aqui está o método encontrar(), o qual deverá achar a condição correspondente a situação daquele instante.
public void encontrar(String nomeArq, int x, int y) throws IOException {
Properties prop = new Properties();
FileInputStream pf = new FileInputStream(nomeArq);
prop.load(pf);
for (int i = 0; i < prop.size(); i++) {

String s = prop.getProperty("com" + i,
"O1(0,0);O2(1,1);O1(1,1);O2(0,0)");
String p[] = s.split(",|\\(|\\),|\\);|\\)");
for (int j = 0; j < p.length; j++)
System.out.println(p[j]);
/*
* Testar coordenadas dos objetos nesse momento com condições
* presentes no arquivo
*/
if ((Integer.parseInt(p[7]) == x) && (Integer.parseInt(p[8]) == y)
&& (Integer.parseInt(p[10]) == 1)
&& (Integer.parseInt(p[11]) == 1)) {
agir(Integer.parseInt(p[1]), Integer.parseInt(p[2]), Integer
.parseInt(p[4]), Integer.parseInt(p[5]));
return;
}
}

Isso é tudo por hoje. Até mais,
Mariana

Desenvolvimento técnico: Simulador

>Por Debora

Bom dia,
Durante esta semana, o desenvolvimento do simulador 2D continuou. No entanto, hoje trago pra vocês um método que já havia sido desenvolvido na semana passado. É aqui que o desenho do robô na arena ocorrerá de fato.
Veja:
void desenha(Graphics2D g) {
AffineTransform af = new AffineTransform();
af.translate(x * arena.escalaCmPixel, arena.getHeight() - y
* arena.escalaCmPixel);
af.translate(-tamX / 2, -tamY / 2);
af.rotate(-angulo + anguloImgOriginal, tamX / 2, tamY / 2);
af.scale(escalaImgX, escalaImgY);
g.drawImage(img, af, null);
}
É só isso, até semana que vem
Debora

Site da empresa

>por Renato


Oi.
Estou postando a interface da proposta para o site do projeto, desenvolvido por mim e pela Maisa.
Essa proposta foi feita pois o professor Rodrigo não aceitou nenhuma das propostas anteriormente escolhidas pelo grupo.

Como podemos perceber, a proposta está no começo a ainda precisa de várias modificações.


Editado: Na aula de 30/07/2010, o professor avisou o grupo que uma proposta presente na pasta de aplicativos seria aprovada caso o grupo a escolhesse.
Desse modo, o site apresentado neste post será ignorado a partir de agora.


Login: Session ou Cookies?

>por Matheus

Hey, Tudo certinho pessoal?

Durante essa semana nos deparamos com uma nova possivel implementação para o login: o uso de Cookies.

Na versão atual do sistema, ao entrar com os dados para o login, criamos Sessions com diversas informações, como id e nome do usuário, por exemplo.

O único problema de fazer uso de Sessions está relacionado ao fato das mesmas serem "deletadas" com o fechamento dos navegadores de internet. Dessa forma, é necessário que o usuário faça login toda vez que fechar o navegor. Se optarmos pelo uso de cookies, poderemos atribuir um tempo de vida aos mesmos, independente do fechamento do navegor.

Estamos cogitando a possibilidade de tal implementação, levando em consideração os prós e os contras, mas assim que chegarmos a uma resposta deixo vocês informados!

Obrigado pela atenção!

sexta-feira, 23 de julho de 2010

Consulta de Usuários: OK!

>Por Matheus

Hey, tudo bom?

Como disse anteriormente, a consulta de usuários estava apresentando alguns erros, principalmente quando a mesma era realizada com o filtro "Cidade". Para solucionar o problema, utilizamos uma cláusula SQL que retornasse apenas as cidades com usuários cadastrados, porém, estas são adicionadas apenas uma vez ao comboBox (evitando duplicação de cidades), facilitando a consulta e limitando os valores válidos.



Além dessa alteração, decidimos eliminar alguns campos da tabela que é exibida como resultado. Tal mudança foi proposta para facilitar a navegação. Se, por ventura, o adminsitrador desejar visualizar todas as informações de determinado usuário, basta clicar na imagem da lupa, o que ativará um 'dialog modal' com uma espécie de perfil de usuário, com imagem e todos os dados restantes.

A implantação desse "perfil" ainda está sendo desenvolvida e pretendemos concluí-la o mais rápido possível. Se conseguirmos, tal implantação já será apresentada na próxima prévia dos Projetos.

Obrigado pela atenção e um ótimo retorno às aulas!

>por Débora

Bom dia pessoal,

Hoje vou apresentar para vocês a classe MouseAdapter(), uma das classes de nosso menu de tarefas em java. Essa classe é responsável por fazer o clique dos links ("botões") no menu .

Segue abaixo o código da classe:


class EventoMouse extends MouseAdapter {

public void mouseClicked(MouseEvent e) {

System.out.println(e.getPoint());

if (((e.getX() >= 206) && (e.getX() <= 385)) && ((e.getY() >= 64) && (e.getY() <= 80))) {

showMenu(false);

new Prog1();

System.out.println("Nova logica");
}
if (((e.getX() >= 234) && (e.getX() <= 345)) && ((e.getY() >= 111) && (e.getY() <= 124))) {

try {

showMenu(false);

String caminho = funcoes.arquivo();

new Prog1();

Arquivo.carregar(caminho, Prog1.llMinis);
}
catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace();
}
System.out.println("edita logica");
}
if (((e.getX() >= 231) && (e.getX() <= 345)) && ((e.getY() >= 145) && (e.getY() <= 158))) {

try {

showMenu(false);

String caminho = funcoes.arquivo();

Tradutor.inicia(caminho, menu);

Arquivo.carregar(caminho, Prog1.llMinis);
}
catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace();
}
System.out.println(" Simulador");
}

if (((e.getX() >= 198) && (e.getX() <= 426)) && ((e.getY() >= 181) && (e.getY() <= 191))) { // new (); System.out.println("Executar"); }

if (((e.getX() >= 270) && (e.getX() <= 320)) && ((e.getY() >= 219) && (e.getY() <= 235))) { // new (); System.out.println("Ajuda"); }

if (((e.getX() >= 270) && (e.getX() <= 320)) && ((e.getY() >= 252) && (e.getY() <= 267))) { // new (); System.out.println("Sobre"); }

if (((e.getX() >= 225) && (e.getX() <= 373)) && ((e.getY() >= 285) && (e.getY() <= 298))) { // new (); System.out.println("Desenvolvimento");

} if (((e.getX() >= 280) && (e.getX() <= 315)) && ((e.getY() >= 318) && (e.getY() <= 331))) {
System.exit(0);
}

}

Bom, por hoje é só. Até mais!

Sistema Proposto

>Por Mariana

Hey
Trouxe a correção do sistema proposto:

No site do sistema o usuário se cadastra escolhendo um grupo para participar, recebendo um confirmação de cadastro. O usuário pode criar um grupo, preenchendo as informações necessárias e recebe uma confirmação dessa ação, bem como notificações a cada novo participante deste. O administrador envia ao sistema informações para exclusão(grupo ou participante), e notificações/advertências. Essas últimas serão enviadas aos grupos ou usuários. O grupo pode notificar o usuário, expulsá-lo ou se excluir. O usuário sempre pertencerá a um grupo (existirá um grupo padrão, inexcluível), podendo excluir seu cadastro quando desejar. O sistema fornece ao administrador relatórios com informações dos usuários e dos grupos e ao grupo relatórios com informações dos participantes e seus desempenhos.

O usuário acessa o sistema desktop fornecendo o login, ele da entrada nas coordenadas dos objetos dos quadros de ação/condição dando origem a um arquivo de lógica(.ggb). Uma vez tendo o arquivo de lógica o usuário pode solicitar a interpretação do mesmo, assistindo sua execução pelo simulador 2D ou com os objetos reais. O sistema retorna o status do participante.

Obs. Se o participante não tiver cadastro no site do sistema, ele poderá acessar o sistema desktop, porém não haverá retorno do status.

Boa volta as aulas

Motivo exclusão

>por Renato

Oi.
Vou postar sobre o funcionamento mais aprofundado da exclusão.
Na tela que pode ser visualizada a seguir, que aparece quando o administrador clica no botão vermelho, ele pode visualizar qual foi o grupo selecionado para exclusão e deve informar o motivo do ato.

Após apertar o botão excluir, o usuário é enviado de volta para a tela inicial e recebe uma notificação do êxito da operação.


Renato

Exclusão

>Por Maisa

Oi,
Na reunião de sexta (23/07) entre tudo que foi desenvolvido, fizemos a exclusão de usuários e grupos. Para facilitar a navegação para o usuário decidimos acrescentar a opção de exclusão no consultar.
Segue abaixo uma imagem da página, nesse caso de consulta de grupos:

Assim que faz a consulta com o nome desejado, o administrador pode apenas verificar o perfil no botao de lupa , ou excluí-lo no botão de X que aparece ao lado do nome, conforme seja a necessidade.

Até mais,

Maisa

Desenvolvimento em Java

>Por Juliana

Bom dia,
Uma semana depois, a função executaComando() do RoboVirtual mudou bastante. Após muita trigonometria, o resultado foi o código apresentado a seguir. Alguns princípios se mantiveram, outros mudaram completamente. O robô agora se movimenta como deveria. O próximo passo é pensar a respeito da representação do movimento de uma bola na arena, bem como a colisão entre os objetos.
Enfim, aqui está o trecho do código:
void executaComando() {
if (tempoCmd > 0) {
/** usado pois o giro acontece a 90 graus da direcao do robo */
final double noventa = Math.PI / 2;
double dxa;
double dya;
switch (comando) {
case 0x11:
x += dx = velCmTempo * Math.cos(angulo);
y += dy = velCmTempo * Math.sin(angulo);
break;
case 0x99:
x += dx = -velCmTempo * Math.cos(angulo);
y += dy = -velCmTempo * Math.sin(angulo);
break;
case 0x10:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x90:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = (dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = (dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x09:
/** usado pois o giro acontece a 90 graus da direcao do robo */
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = -velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x01:
dxa = distRodasCm * Math.cos(angulo - noventa);
dya = distRodasCm * Math.sin(angulo - noventa);
/**
* simplificando double perim = 2 * Math.PI * distRodasCm;
* angulo += dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo / distRodasCm;
x += dx = -(dxa - distRodasCm * Math.cos(angulo - noventa)) / 2;
y += dy = -(dya - distRodasCm * Math.sin(angulo - noventa)) / 2;
break;
case 0x19:
/**
* simplificando perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = -velCmTempo * 2 / distRodasCm;
break;
case 0x91:
/**
* simplificando double perim = Math.PI * distRodasCm; angulo +=
* dAngulo = velCmTempo * 2 * Math.PI / perim; temos:
*/
angulo += dAngulo = velCmTempo * 2 / distRodasCm;
break;
}
tempoCmd--;
}
}

Até semana que vem
Juliana

Relatórios em PHP

>Por Paula

Olá ;D

Durante essa semana estou desenvolvendo as páginas de Relatórios da parte em PHP do projeto, para o desenvolvimento desses relatórios estou utilizando a classe FPDF. Abaixo tem um texto explicando mais sobre essa classe.

O que é o FPDF?

FPDF é uma classe PHP que permite gerar arquivos PDF com PHP puro, ou seja, sem usar a biblioteca PDFlib. F da FPDF é livre: você pode usá-lo para qualquer tipo de uso e modificá-lo para atender às suas necessidades.

FPDF têm outras vantagens: as funções de alto nível. Aqui está uma lista das suas principais características:

  • Página cabeçalho e rodapé de gestão;
  • Escolha da unidade de medida, formato de página e margens;
  • Automática quebra de página;
  • Automática quebra de linha e justificação do texto;
  • Suporte de Imagem (JPEG, PNG e GIF);
  • Cores;
  • Links;
  • TrueType, Type1 e suporte à codificação;
  • Compressão de Página.
Para mais informações, acesse www.fpdf.org .

Por enquanto desenvolvi o Relatório de Grupos, porém surgiram alguns problemas como o funcionamento no Internet Explorer, onde não funciona corretamente. Outro problema foi o posicionamento do rodapé. Assim que conseguir resolvê-los comento com vocês.

Segue abaixo o Relatório que está gerando.


Paula

sexta-feira, 16 de julho de 2010

Modificações no DFD

>Por Paula

Olá pessoal ;D

Na reunião dessa sexta-feira (16/07), discutimos alguns pontos do DFD que o Prof. Dalastti nos apresentou ao entregar a Pasta no fim do segundo bimestre. Alguns acréscimos e modificações foram realizados e assim que voltarmos para as aulas mostraremos para o Prof., para que o mesmo possa corrigí-lo.

Logo abaixo se encontram as folhas rascunhos onde estão nossas anotações.



Paula

Consulta de Usuários

>por Matheus

Olá pessoal, tudo bom?

Durante essa semana, notamos que há uma falha na Consulta de Usuários da aplicação em PHP. No sistema, o adminsitrador possui 4 opções de filtro para realizar a consulta: "nome", "estado", "cidade" e "grupo".

Na opção "cidade", as linhas do ComboBox são preenchidas apenas com as cidades cadastradas, afinal, o banco possui aproximadamente 8 mil opções de cidades, o que tornaria o método inviável. Assim, utilizamos uma cláusula SQL com JOIN e obtemos apenas aquelas que possuem usuários cadastrados.

O problema, entretanto, ocorre quando mais um de usuário pertence a mesma cidade. Na versão atual do sistema, ele insere novamente a opção com a cidade repetida (o que não pode ocorrer). Estamos trabalhando para solucionar o problema o mais rápido possível. Assim que obtiver a solução deixo vocês informados! :)

Abaixo uma primeira proposta para a Consulta de Usuários:




Dúvidas

>por Débora

Olá pessoal,

Na Reunião dessa semana, discutimos basicamente sobre as modificações no nosso DFD, alterações no Banco de Dados e sobre a camiseta de nossa equipe.
Durante a discussão, surgiram algumas dúvidas dentre elas, de como salvaríamos o histórico, da introdução de uma tabela de lógica(GGB) no nosso banco e também sobre o registro da lógica.
Nós iremos fazer uma próxima reunião e creio que até lá, todos tenham pensado em soluções!

Até semana que vem pessoal,

Camiseta

>Por Maisa

Segue abaixo o protótipo da camiseta que iremos fazer para a prévia do projeto, foi discutido sobre sua elaboração na reunião que tivemos.
As cores não fogem do padrão que utilizamos (preto e cinza), pensamos em colocar na frente o nome do nosso projeto (GoGoBots), nas mangas o logo da escola (CTI) e o da nossa empresa (Apparatus). Abaixo do nome aparecerá o nosso mascote. Atrás terá o nome de cada integrante da empresa.

Boa noite,
Até mais

Maisa

Trigonometria

>Por Mariana

Hey
Para manipularmos o robô vamos utilizar trigonometria para determinar o giro dos motores, o ângulo e a distância a ser percorrida. Teremos uma classe que receberá comandos e os interpretará em forma de cálculos. Veja a imagem abaixo que ilustra um pouco do funcionamento:



Até mais

Java Media Framework

>Por Juliana

Bom dia,
Hoje, apresento a vocês a biblioteca JMF(Java Media Framework). Essa biblioteca do Java possibilita a adição de audios, vídeos e outras mídias em aplicações desenvolvidas com tecnologia Java. Esse pacote opcional pode capturar, reproduzir, transmitir e decodificar vários formatos de mídia. Ele se integra ao Java 2 Platform Standard Edition (J2SE) e permite a interação entre mídia e o sistema Java.
Para mais informações, visite o link:
http://java.sun.com/javase/technologies/desktop/media/jmf/

No nosso caso, essa biblioteca deverá ser utilizada para auxiliar a movimentação do robô real. Acima da arena, uma câmera de vídeo será instalada. A partir da imagem capturada, saberemos a posição atual dos objetos do jogo, para que a movimentação dos robôs possa ser feita.
Essa biblioteca ainda será estudada durante essa semana, para, em seguida, passarmos à programação.

Bom final de semana a todos,
Juliana

Próximo encontro

>por Renato

Oi.

Hoje estou postando sobre a próxima reunião do grupo, que será realizada dia 23/07.
A reunião será na casa da Maisa e dessa vez, já iremos programar e não ficaremos apenas na discussão do projeto.
Além disso, é a última reunião do grupo antes do término das férias.

Mais informações sobre a reunião serão postadas em breve.




sexta-feira, 9 de julho de 2010

Alterações na Aplicação Web

>por Matheus

Hey! Tudo bom pessoal? 8D

Como dito pela Paula, nos reunimos quase todos os dias essa semana e aproveitamos para adiantar ao máximo a aplicação Web. Como resultado, apresento a vocês uma interface completamente diferente da apresentada anteriormente, que pode ser visualizada abaixo.



(Para ampliar a imagem, clique aqui)

As diferenças, entretanto, não limitam-se a aparência. O login, os cadastros e as consultas já estão praticamente finalizados. Acredito que em pouco tempo possamos finalizar a aplicação Web e focarmos no desenvolvimente em Java.

Bom, por hoje é só. Ótimo feriado a todos e até a próxima!

Matheus

Mascote

>Por Maisa

No começo do ano, o prof. Flash havia pedido para desenvolvermos idéia de logomarcas. Não sabíamos ao certo qual seria o projeto mas sabiamos que utilizariamos robôs e que seria direcionado a um público mais jovem. O Matheus desenvolveu então uma logomarca acompanhada de um robô, que até então não sabíamos qual seria sua função.

Mais tarde surgiu a idéia de fazermos um robô amigável para ser o mascote do projeto. Aperfeiçoando o desenho do Matheus, ele foi criado.

Segue abaixo o mascote, mas está sujeito a alterações:


O robô possui face amigável e uma aparência futurística. A cor não foge da utilizada no nosso projeto (cinza), que é também a cor normalmente utilizada para representar robôs.

O mascote será então utilizado nas aplicações de web, como o login e cadastro (como pode ser notado no post da Paula onde ela apresenta a tela de Login), com o intuito de ser mais atrativo para seu público alvo que são as crianças.

Qualquer alteração, voltaremos a notificar.
Até mais,

Tela de Login

>Por Paula

Olá ;D

Essa semana eu e o Matheus fizemos o login da parte de PHP do Projeto Gogobots, a parte de programação está totalmente realizada, já a interface iremos colocar um fundo um pouco mais escuro e a identicação de LOGIN.

Logo abaixo está a página. Para ampliar basta clicar na imagem.


Bom feriado e um ótimo final de semana à todos.

Até mais!

Paula

Desenvolvimento em Java

>Por Juliana

Boa tarde,
Mais uma vez, venho lhes apresentar mais um trechinho de nosso código. Dessa vez trago uma primeira tentativa do que será a função executarComando() do RoboVirtual, ou seja, do simulador 2D. Para tanto, iremos utilizar bibliotecas tais como Graphics, Graphics2D e AffineTransform. É nesse trecho, que a interpretação do comando recebido será feita, atribuindo novos valores de posição e ângulo ao robo virtual.

public void executaComando(int i) {
if (i == 0x11) {
dX = Math.cos(angulo) * distancia;
dY = Math.sin(angulo) * distancia;
dAngulo = 0;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x99) {
dX = -Math.cos(angulo) * distancia;
dY = -Math.sin(angulo) * distancia;
dAngulo = 0;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x1) {
dAngulo = - distancia / entreRodas;
xRotacao=img.getWidth(null);
yRotacao=img.getHeight(null)/2;
}
if (i == 0x10) {
dAngulo = distancia / entreRodas;
xRotacao=0;
yRotacao=img.getHeight(null)/2;
}
if (i == 0x9) {
dAngulo = distancia / entreRodas;
xRotacao=img.getWidth(null);
yRotacao=img.getHeight(null)/2;
}
if (i == 0x90) {
dAngulo = - distancia / entreRodas;
xRotacao=0;
yRotacao=img.getHeight(null)/2;
}
if (i == 0x91) {
dX = 0;
dY = 0;
dAngulo = 2 * distancia / entreRodas;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
if (i == 0x19) {
dX = 0;
dY = 0;
dAngulo = -2 * distancia / entreRodas;
xRotacao=img.getWidth(null) / 2;
yRotacao=img.getHeight(null) / 2;
}
x += dX;
y += dY;
angulo += dAngulo;
}
Até a semana que vem,
Juliana

Encontro

>por Débora

Olá pessoal,

No meu post da semana passada, eu tinha dito que nosso grupo faria a primeira reunião no decorrer dessa semana. Pois bem, devido ao fato de alguns membros terem viajado, nos adiamos a reunião para sexta- feira dia 16/07/2010. Após a reunião, vocês ficarão a par do que conversamos em futuros posts!

Por hoje é só. Até semana que vem

Comando C

>Por Mariana

Olá,
Na semana passada, durante uma conversa com o professor Renê Pegoraro, recebemos explicações sobre o funcionamento dos robôs que serão disponibilizados pela UNESP.
Os robôs são bem simples e dispõem apenas de duas rodas. Por essa razão, os comandos serão formados por 8 bits. Assim, como demonstrado na imagem abaixo, cada bit tem uma função. Para este projeto, não será necessária a variação de velocidade, dessa forma optamos por usar o último bit valendo 0 quando o robô estiver parado e 1 quando estiver em movimento.


Traremos mais informações em breve.
Mariana

Help

>por Renato

Vou postar sobre o help que estará disponível no sistema.

Definição:

Help significa geralmente, ajuda mas, em alguns casos, Socorro !. Quase todos os programas disponibilizam parte do manual de instruções na própria tela. O tópico ajuda geralmente traz uma lista , em ordem alfabética, para o usuário ir procurando aquela explicação que vai resolver seu problema.
São arquivos de hiperlink, que tem como base ajudar o usuário a sanar todas as suas duvidas sobre o sistema em questão.

Como é formado:

Um arquivo de help é formado por uma série de tópicos. Um tópico é cada página do arquivo help. Quando você tecla F1 numa aplicação Windows, você verá um tópico do seu arquivo de help. Cada tópico cuida da explanação de um aspecto distinto da aplicação: um item de menu, uma caixa de diálogo, etc. A maioria dos tópicos contém links para outros tópicos cuja explanação seja complementar ou correlata à tratada.


Help

>por Renato

Vou postar sobre o help que estará disponível no sistema.

Definição:

Help significa geralmente, ajuda mas, em alguns casos, Socorro !. Quase todos os programas disponibilizam parte do manual de instruções na própria tela. O tópico ajuda geralmente traz uma lista , em ordem alfabética, para o usuário ir procurando aquela explicação que vai resolver seu problema.
São arquivos de hiperlink, que tem como base ajudar o usuário a sanar todas as suas duvidas sobre o sistema em questão.

Como é formado:

Um arquivo de help é formado por uma série de tópicos. Um tópico é cada página do arquivo help. Quando você tecla F1 numa aplicação Windows, você verá um tópico do seu arquivo de help. Cada tópico cuida da explanação de um aspecto distinto da aplicação: um item de menu, uma caixa de diálogo, etc. A maioria dos tópicos contém links para outros tópicos cuja explanação seja complementar ou correlata à tratada.


sexta-feira, 2 de julho de 2010

Desenvolvimento em Java

>Por Juliana

Boa noite,
Na segunda-feira desta semana (27/jun), eu e a Mariana nos encontramos e desenvolvemos mais um pouco o projeto. No entanto, encontramos problemas, os quais só conseguimos resolver ontem (01/jul).
A seguir, lhes apresento o código, que a partir de um arquivo ggb, cria os diversos quadros de condição/ação correspondentes.
// Função que carrega o arquivo .ggb
public void Carregar(String caminho, Vector vetMinis) throws Exception {
Properties prop = new Properties();
FileInputStream pf = new FileInputStream(caminho);
prop.load(pf);
vetMinis.clear();
Prog1.pnArea.removeAll();
for (int i = 0; i < prop.size(); i++) {
String s = prop.getProperty("com" + i,"O1(0,0);O2(1,1);O1(1,1);O2(0,0)");
String p[] = s.split(",|\\(|\\),|\\);|\\)");
for (int j = 0; j < p.length; j++)
System.out.println(p[j]);
Mini mini = new Mini(Prog1.objs);
vetMinis.add(mini);
mini.acao.posObj[0]= Cardeais.calculaCardeal(Integer.parseInt(p[1]), Integer.parseInt(p[2]));
mini.acao.posObj[1]= Cardeais.calculaCardeal(Integer.parseInt(p[4]), Integer.parseInt(p[5]));
mini.condicao.posObj[0]= Cardeais.calculaCardeal(Integer.parseInt(p[7]), Integer.parseInt(p[8]));
mini.condicao.posObj[1]= Cardeais.calculaCardeal(Integer.parseInt(p[10]), Integer.parseInt(p[11]));
Prog1.pnArea.add(mini);
}
Prog1.pnArea.updateUI();
Prog1.pnArea.validate();
Dimension d = Prog1.pnArea.getPreferredSize();
}
Isso é tudo por hoje. Em breve traremos outros trechos de código, já que tal desenvolvimento deve se intensificar esse mês.
Juliana

Formulário com Dialog


>por Matheus

Hey! Tudo bom?

Essa semana estava pesquisando um pouquinho mais sobre jQuery e achei um exemplo muito interessante sobre o uso de um dialog com formulário. É uma ideia muito prática e útil. Para visualizar o exemplo, clique aqui!


IFrame, JQuery e Ajax

> Por Maisa

Para carregar páginas dentro de outras no nosso projeto utilizamos a tag IFrame que é um código em HTML que possui essa função.
Segundo a W3C(World Wide Web Consortium), um consórcio internacional que estuda as tecnologias existentes para a apresentação do conteúdo na Internet e cria padrões de recomendação para utilizar essas tecnologias, o IFrame está entrando em desuso.
Com isso, estamos pensando em modificar a programação do nosso Projeto, substituindo o IFrame por JQuery juntamente com o Ajax.
Assim evitamos que a programação do nosso projeto se torne ultapassada nas futuras versões do HTML, que é o que ocorreria se continuasse com IFrame.
Segue abaixo um pedaço do código onde foi utilizado a tag (clique na imagem):



Reunião

>por Débora

Bom dia a todos,

Como dito no meu post anterior - nosso grupo faria reuniões semanais nas férias para dar andamento ao projeto - nossa primeira reunião acontecerá semana que vem, respeitando o horário de todos os membros do grupo. Ela vai servir de discussão para todos saberem como o projeto se encontra e o que tem de ser melhorado.
Depois da reunião serão passadas tarefas individuais, para serem apresentadas para o grupo na próxima reunião.
Essa foi a melhor forma que encontramos de organizar as coisas!

Até semana que vem pessoal


Como programa seu robô utilizando o NXT-G?

>Por Renato

Como programar o seu robô utilizando o NXT-G?

NXT-G é uma linguagem de programação intuitiva, baseada em ícones de arrastar-e-soltar, projetada para uma introdução fácil à programação tanto para usuários novos quanto para os experientes.

Ao escolher blocos de programa que trabalham com os motores e fazer os sensores reagirem às entradas, basta criar o seu programa bloco por bloco. É possível criar programas que vão do simples ao complexo.



Renato

JavaComm

>Por Mariana

Discutindo sobre o nosso projeto chegamos a conclusão que será usado JavaComm para comunicação serial com os robôs. Então resolvi trazer um pouco sobre essa ferramenta:

JavaComm
O Java Communications 3.0 API Java é uma extensão que facilita o desenvolvimento independente de plataforma para aplicações de comunicações tecnologias como cartões inteligentes, sistemas embarcados, e de dispositivos de ponto de venda, serviços financeiros dispositivos, fax, modems, terminais de vídeo e equipamentos robóticos.
O Java Communications API (também conhecido como javax.comm) prevê aplicações de acesso a RS-232 hardware (portas seriais) e acesso limitado a IEEE-1284 (portas paralelas) modo SPP.
Implementações da API estão atualmente disponíveis para Solaris SPARC, Solaris x86, x86 e Linux. Cada uma das implementações disponíveis Sun trabalha com o Sun Ray da linha de produtos thin client, e incluem portmapping extensões para permitir uma gestão para especificar a localização de portos, bem como a sua visibilidade, nomes, e em alguns casos anotados referência.

serial API características:
  • Enumeração de portas (administrador e usuário mapeamento de porta configurável)
  • Porto de configuração (taxa de transmissão, velocidade, bits de parada, paridade)
  • Acesso à EIA232 DTR padrão, CD, CTS, RTS e DSR sinais
  • Transferência de dados através de portas RS-232
  • opções de hardware e software de controlo do fluxo
  • Buffer de recepção de controle de limite
  • opção de evento assíncrono para a notificação de:
    • Os dados disponíveis sobre uma porta RS-232
    • hardware Port nível muda de linha
    • mudanças de propriedade do Porto, num único JVM

Até mais

AEDROMO

>Por Paula

Olá!

Existe atualmente, no Departamento de Computação, um grupo de pesquisas voltado a Robótica Móvel Autônoma. O Grupo de Integração de Sistemas e Dispositivos Inteligentes (GISDI) é formado por docentes e alunos dos cursos de Bacharelado em Ciências da Computação e Bacharelado em Sistemas de Informação e funciona desde 1998. Tendo como um de seus principais objetivos a aplicação de tecnologias e sistemas inteligentes na educação, o GISDI vem desenvolvendo diversos projetos desde sua criação. Entre seus projetos didáticos, cita-se o Elevador e o AEDROMO (I e II).

O Elevador é uma Plataforma Didática Multidisciplinar, programada em linguagem C e Pascal, cujo objetivo é ensinar aos alunos do primeiro ano de graduação as ideias básicas de algoritmos, controle e software básico.

O AEDROMO (Ambiente Experimental Didático com Robôs Móveis) possui duas versões. A primeira, mais simples e já concluída, tem como resultado um robô móvel, conhecido como Michelangelo, comandado através do porto paralelo de comunicação de computadores pessoais. Este robô possui quatro sensores ópticos em linha na parte frontal, possibilitando a leitura de faixas pretas na superfície onde é colocado. Assim, o Michelangelo consegue, por exemplo, seguir linhas no solo, procurar saídas de regiões delimitadas por faixas pretas e explorar labirintos. Esta primeira versão é utilizada como material didático para alunos de graduação em Ciências da Computação e em Sistemas de Informação da Faculdade de Ciências para estudo de algoritmos e de programação.

A segunda versão ainda está em andamento e se diferencia da primeira por possuir um público-alvo mais jovem, alunos do ensino fundamental e médio, além de ser voltada também a experimentos, pesquisas e entretenimento. Ele se torna muito interessante no que diz respeito a pesquisa, na medida em que dispõe de uma interessante bancada de desenvolvimento para várias áreas relacionadas a robótica. O AEDROMO é adaptável aos diversos ciclos de ensino por meio de um ambiente apropriado e dependente de sua aplicação.


Paula