BlogBlogs.Com.Br

segunda-feira, 20 de abril de 2009

Attach debugger NetBeans


O NetBeans possui varias formas de debug. Uma opção interessante é Attach debugger que permite depurar programas em execução ( no caso de applets por exemplo) local ou remotamente.



Para depurar um applet que está sendo executado localmente, devemos anexar esta aplicação pelo número do seu processo ao NetBeans. A visual virtual machine é interessante, pois mostra o id dos processos java sendo executados (download em: https://visualvm.dev.java.net/).
Antes de anexar o processo no Netbeans é necessário adicionar os parâmetros na virtual machine. Para isso vá em Iniciar > painel de Controle > java. Escolha a aba java e click no view da opção Java applet runtime settings:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,suspend=n,server=y

Feito isso, execute o applet, olhe na Java Visual JVM e número do processo do seu applet. No NetBeans , na barra de ferramentas escolha Depurar> Attach to debugger. Preencha os campos como a figura abaixo. Lembre-se de colocar o id correto da sua aplicação em execução.

quarta-feira, 8 de abril de 2009

CakePHP :Links Ajax helper com efeitos Scriptaculous


Nem tudo é Rails no mundo dos CRUDS. O CakePHP é um framework de desenvolvimento ágil assim como o Ruby Rails.
Segue abaixo os passos para usar Helpers Ajax com efeitos da biblioteca Scriptaculous. Se você não conhece o CakePHP viste http://vinicius.biz/cakephp/introducao.php para obter mais informações.
Tendo o CakePHP funcionando devidamente é necessário instalar a lib Scriptaculous (http://script.aculo.us/) . Para isso, basta descompactar os arquivos na pasta /app/webroot/js .
O primeiro passo é tornar disponível a biblioteca scriptaculous e prototype. Para isso inclua o código abaixo antes da tag no layout (/app/views/layout/default.thtml) .


< ?php if(isset($javascript)):
echo $javascript->link('prototype.js');
echo $javascript->link('scriptaculous.js?load=effects');
endif;
?>

Na classe Controle é preciso adicionar o helper 'Ajax' no array de helpers.

< ?php
class LoginController extends AppController {

var $name = 'Login';
var $helpers = array('Form', 'Html', 'Javascript', 'Time', 'Ajax');

function index() {
$this->render('index');
}

function view($id) {
// use ajax layout
$this->render('index', 'ajax');
}//view()
}?>

Na classe View criamos um link Ajax que irá chamar o conteúdo de uma

especifica. No caso abaixo o link Ajax, com o nome de “Ajuda”, vai chamar a url “ /things/view” ( renderiza ela mesma) e vai aplicar os efeitos Appear e Fade em dois campos (divs) com um conteúdo qualquer identtificado por “divExemplo1” e “divExemplo2” .

< div id="help1">
< ?php echo ' | ';

// use an effect
echo $ajax->link('Ajuda', '/things/view/1',
array('loading' => 'Effect.Appear(\'divExemplo1\'), Effect.Fade(\'divExemplo2\')',FALSE)
); ?>
/div>


< ?php echo $ajax->div('divExemplo1'); ?>
< h2>/*Um conteúdo qualquer:links, imagens, xml, etc */ < /h2>
<?php echo $ajax->divEnd('divExemplo1'); ?>
Outros métodos que produzem diferentes efeitos pela Scriptaculous podem ser vistos em :http://wiki.github.com/madrobby/scriptaculous

quarta-feira, 1 de abril de 2009

Java : Casting Objects


O Cast serve para determinar qual o tipo do objeto está sendo usado.
Consideramos as seguintes classes JogoDeTabuleiro e Xadrez. A classe Xadrez é filha da Classe JogoDeTabuleiro.

Se for declarado:
public Xadrez meuJogo = new Xadrez ();
O meuJogo é um jogo de Xadrez. Sendo Xadrez uma classe descendente de JogoDeTabuleiro e também da classe Object, o meuJogo é também um JogoDeTabuleiro e um Object.
A afirmativa contrária não é verdadeira. Um JogoDeTabuleiro não é necessariamente um jogo de Xadrez. Da mesma forma um Object pode ser um JogoDeTabuleiro ou um jogo de Xadrez.
Veja o código abaixo:
Object obj = new Xadrez();
obj é um Object e um jogo de Xadrez. Cast implícito
Xadrez meuJogo = (Xadrez)obj;
O cast assegura que obj do tipo Xadrez seja passado ao meuJogo que só é do tipo meuJogo. Cast explicito.
Uma outa maneira de prevenir erros está no teste lógico:
if (obj instanceof Xadrez) {
Xadrez meuJogo = (Xadrez)obj;
}

segunda-feira, 30 de março de 2009

MVC no Eclipse com Visual Editor


A utilização de um pattern deixa seu código mais organizadoe torna o desenvolvimento mais eficiente. Abaixo um breve exemplo de um aplicativo java seguindo o MVC usando eclipse e sua VE.
Segundo a wikipédia temos :
  1. View - "Renderiza" o model em uma forma específica para a interação (GUI).
  2. Controller - Controle da regra de negócio.
  3. Model - representação dos elementos do seu domínio e interação com as ferramentas de persistência.
Para maiores informações sobre o MVC confira o link: http://java.sun.com/blueprints/patterns/MVC-detailed.html .
Após criar um novo projeto crie todos os pacotes necessários na pasta src: app, control, view e model.
obs: o pacote app, será o lugar onde empacotaremos a Main.java .

A classe Main possui um único construtor para a controle.
package app;
import control.Control;

public class Main {

public static void main(String[] args) {
new Control();
}
}
Dentro do pacote control temos a interface ViewControl e a classe Control que a implementa. A control fará a chamada para construir a View alem disso deve ser capaz de operar mudanças na GUI apartir dos valores da model, ou da interação do usuário. O método buttonFunction é chamado quando pressionamos um botão , atribuindo valor para uma variável dentro da Model.
package control;

import view.View;
import model.Form;

public class Control implements ViewInterface{

View mainView = null;
Form mainForm = null;

public Control() {
mainView = new View(this);
mainForm = new Form();
}

public void buttonFunction(Form form) {
mainForm.setNumber1(mainView.fieldContent1());
System.out.println(mainForm.getNumber1());
}
}

package control;

import model.Form;

public interface ViewInterface {

void buttonFunction (Form form);

}
No pacote Model temos a classe Form que guarda os atributos do nosso formulário de exemplo.
package model;
public class Form {
int number1;

public int getNumber1() {
return number1;
}

public void setNumber1(int number1) {
this.number1 = number1;
}
}
No pacote View temos uma visual class (Jframe com um JTextField e um JButton). Esta pode ser gerada automaticamente pelo Visual Editor do Eclipse. Apenas alguns cógidos são acrescentados, como o construtor chamado pela Control.
public ViewInterface viewInterface=null;

public View(ViewInterface viewInterface){
super();
this.viewInterface = viewInterface;
initComponents();
}

public int fieldContent1(){
return Integer.parseInt(jTextField0.getText());
}

private void jButton0ActionActionPerformed(ActionEvent event) {
viewInterface.buttonFunction(null);
}
O método jButton0ActionActionPerformed é gerado clicando com o botão direto do mouse sobre o JButton no modo Desing > Add/Edit events > action.

A aplicação criada se resume em: A Main chama um Construtor da classe Control. A Control implementa intreface e chama o construtor da view. Um click no botão da View chama a Controle q pega o valor do textField e chama o método Set da classe Form.

quarta-feira, 25 de março de 2009

Instalando VE( visual editor ) no Eclipse


Preguiça de aprender como usar layouts em Java? Use um VE (Visual Editor) e crie uma GUI organizada e bonita. No Eclipse é possível instalar um VE muito estável para facilitar seu trabalho.

Os requerimentos básicos são JDK 5.0 , EMF 2.4. O Eclipse 3.4 Ganymede possui os plugins necessários para instalação.

O próximo passo é fazer download da última versão do VE no endereço ehecht.com .

Após isso extraia o conteúdo na pasta dropins dentro da pasta eclipse.
Confira o link para mais informações : http://wiki.eclipse.org/VE/Installing

Uma vez instalado, click com o botão direito sobre seu projeto, escolha a opção New > other.
Escolha a pasta Java > VisualClass.

quinta-feira, 15 de janeiro de 2009

Efeito adesivo com Flash CS 3

Fugindo um pouco dos códigos nesse tutorial o efeito de adesivo se descolando (animação).
Crie um MovieClip para aplicar o efeito.
Dentro do MovieClip crie alguns frames ( no meu caso usei 9) todos repetindo o desenho original. Repita o próximos passos em cada frame quantas vezes forem necessárias para completar o efeito.
Selecione a parte da figura onde o efeito vai começar. Como na figura abaixo:

Na barra de menus escolha Modify, Transform, flip vertical. Esse comando irá espelhar a parte selecionada.
Para criar a idéia de adesivo, pinte a região selecionada de branco ( esse será o verso) Arraste a parte que foi invertida e posicione como na figura abaixo:

Esse é o principio da animação. Para cada frame faça o mesmo , porem sempre aumentando a área a ser invertida. Veja abaixo:

sábado, 13 de dezembro de 2008

Um listener para todas instâncias governar.


Quando temos diversos elementos , com as mesmas funções podemos aplicar sobre eles um único EventListener ao invés de criar vários.

function AddListenerFunc():void {

for (var i=0; i< maxElements; i++) {
mcArr[i].buttonMode = true;
mcArr[i].addEventListener(MouseEvent.CLICK, mcEvent);}
}

function mcEvent(E:MouseEvent):void {
removeChild(MovieClip(E.currentTarget));
mcFunc(MovieClip(E.currentTarget));
}

No código acima temos a função AddListenerFunc, que aplica a propriedade buttonMode e o evento de mouse para todas as instâncias contidas dentro do Array mcArr.
Na função mcEvent podemos identificar qual instância é a responsável por ativar a mesma através de E.currentTarget.
Dentro da função temos dois exemplos. Em removeChild(MovieClip(E.currentTarget)), removemos o mc que recebeu o click. Note que removeChild precisa de um MovieClip como parâmetro, e por isso fazemos a conversão de tipos.
Em mcFunc(MovieClip(E.currentTarget)), chamamos uma função, passamos o mc que recebeu o click e isso mostra as possibilidades com apenas um listener.