Segunda-feira, 03 03e Dezembro 03e 2007 AD

Impressão no Flex - FlexPrintJob

Bem Pessoal,

Hoje o assunto é muito importante para que deseja fazer impressões de relatórios.
Existe uma class chamada FlexPrintJob que resolve isso para você. Vamos mostrar como deve ser feito.

/*ActionScript */
...
    import mx.printing.FlexPrintJob;
    var p:FlexPrintJob = new FlexPrintJob();
    public function imprimirGrafico() : void {
          if (p.start()) {
                p.addObject(areachart1);
                p.send();
          }
    }
....
    <mx:AreaChart x="10" y="122" id="areachart1" height="128" width="360">
        <mx:series>
            <mx:AreaSeries displayName="Series 1" yField=""/>
        </mx:series>
    </mx:AreaChart>
    <mx:Button click="imprimirGrafico()" x="145" y="58" label="Imprimir!"/>
/* Fim Action Script */

Vamos agora explicar:
você instanciou um objeto p do tipo FlexPrintJob.
no momento em que você chama o p.start() aparece a caixa de impressão, caso você cancele o p.start() retornará false. Se você clica em "Imprimir" o p.start() irá retornar true, continuando assim a execução do código.

p.addObject(areachart1) , você está adicionando somente o gráfico para impressão. Nesse caso, eu tenho na minha aplicação um objeto areachart1 do tipo AreaChart. Mas você pode colocar qualquer objeto que implemente a interface IUIComponent .
Então no momento que o usuário clicar no botão imprimir, a função imprimirGrafico() será chamada, e fazendo assim a impressão do gráfico que está na tela.

Até a próxima!

Escrito por italomatos em 15:16:44 | Link permanente | Comments (0) |

Domingo, 25 25e Novembro 25e 2007 AD

Chamando Javascript apartir do Flex

Bem pessoal,

Continuando a série de Flex, hoje iremos falar um pouco sobre como chamar funções javascript, apartir de uma aplicação em Flex.

Então no meu HTML temos o seguinte java script:
#JavaScript
...
function alertar() {
     alert("Olá pessoal!");
}
function soma(a,b) {
     return a+b;
}
...
#Fim Javascript

Para chamar essa função apartir do flex basta no meu Action Script usar o metodo call, da classe ExternalInterface, como mostrarei abaixo.

#ActionScript
...
public function testando() : void {
      if (ExternalInterface.available) {
       /*1o parametro é o nome da função javascript, e o segundo são os argumentos, no caso se a função tiver algum   parametro.*/
           ExternalInterface.call("alertar",null);
     }
}

public function testandoComParametros() {
    if (ExternalInterface.available) {
        /* Esse segundo exemplo mostra de como passar os parametros e capturar o resultado.*/
        var resutado:uint = ExternalInterface.call("soma",1,2);
    }
}

...
#Fim Action Script


Bem pessoal, com isso você pode chamar os javascript apartir do flex, um exemplo prático seria interagir com o mapa do google maps API, apartir do Action Script, que era o que estava precisando no momento que pensei em postar.

Até mais.
Escrito por italomatos em 13:05:01 | Link permanente | Comments (1) |

Sábado, 24 24e Novembro 24e 2007 AD

Background Transparente - Flex

Bem Pessoal,

esse fim de semana precisei fazer uma aplicação, onde dentro do flex, mostraria um html, no meu caso seria o mapa do google maps. Então pesquisei como fazer isso com o flex, e achei a seguinte solução: deixar o background da aplicação flex transparente.

Para isso basta fazer o seguinte:
no application da sua aplicação, você deve setar a seguinte propriedade:

...
<mx:Application backgroundAlpha="0" ...
...

Depois disso, abra o html, onde chama o swf da sua aplicação em flex, e adicione logo abaixo do AC_FL_RunContent(
o seguinte:

"wmode", "transparent",

e para finalizar dentro da tag object, adicione:

<object ....
<param name="wmode" value="transparent" />
</object>

Pronto, com isso você terá o background da sua aplicação flex transparente.

até a proxima pessoal.
Escrito por italomatos em 20:00:13 | Link permanente | Comments (0) |

Segunda-feira, 20 20e Agosto 20e 2007 AD

Usando ActiveRecord com Ruby sem Rails

Bem Pessoal,

 

Hoje iremos abordar um assunto bem interessante que seria o uso do modulo ActiveRecord sem a presença do Rails.

O ActiveRecord tem como uma de suas principais funcionalidades abstrair o acesso ao banco de dados para o desenvolvedor. Através dele é possivel fazer todo o CRUD ( Create, Read, Update, Delete ) sem usar a linguagem SQL, entre outras consultas inteligentes. Vamos a um exemplo:

Tenho minha tabela Contato, com os campos id, nome, telefone. 

Então , teria uma classe Contato que herda da ActiveRecord::Base, onde no rails seria chamado de modelo.

class Contato < ActiveRecord::Base

end

Somente por herdar da ActiveRecord::Base, essa clas já possui todos métodos de acesso a base de dados.

#Criar um registro na base de dados

Contato.create(:nome=>"Italo Matos", :telefone=>"29131829") 

#Consultar um registro por nome e imprimir na tela o id do mesmo.

puts Contato.find_by_nome("Italo Matos") .id

#Buscar o registro com o id igual a 1 e imprimir o nome na tela.

puts Contato.find(1) .nome

Então agora vamos saber como usar o ActiveRecord sem uso do rails. Vamos criar uma mini aplicação em Ruby que leia um arquivo texto com uma lista de contatos, e adicione na minha base de dados. O layout do arquivo segue o seguinte formato: 

#nome Telefone

exemplo:

#agenda.txt 

Italo 3984298

Carlos 9349238

Andre 3984298

Ronaldo 9328439

1o - Precisamos um arquivo com a configuração do nosso banco de dados, onde chamei de database.yml, onde tem o adapter , o nome da base de dados, login, senha e o host.

#database.yml 

  adapter: mysql
  database: Agenda
  username: root
  password: 123456
  host: localhost

 2o - Vamos criar um arquivo chamado Processar.rb, onde o mesmo vai ler o agenda.txt, e cadastrar na base de dados Agenda, na tabela Contato.

#Processar.rb

require 'rubygems' 

require 'active_record' 

require 'yaml' 

dbconfig = YAML::load(File.open('database.yml'))

ActiveRecord::Base.establish_connection(dbconfig)

class Contato < ActiveRecord::Base

end

File.open("agenda.txt").readlines.each do |linhaContato|

     valores = linhaContato.split(" ")

     Contato.create(:nome=>valores[0],:telefone=>valores[1])

end 

 

Executando o codigo: Ruby Processar.rb estaremos fazendo a migração dos dados em Agenda.txt para nossa base de dados. Então é isso ai pessoal, e até a próxima!

Escrito por italomatos em 10:49:28 | Link permanente | Comments (2) |

Sábado, 21 21e Julho 21e 2007 AD

Configuração de Ambiente de desenvolvimento para SuperWaba

Bom dia pessoALL.

Esse post vai ensinar a voces como configurar o eclipse para poder desenvolver com a linguagem SuperWaba, linguagem voltada ao desenvolvimento para PDA's.

Então vamos lá:

1o Passo:

Vamos baixar o eclipse, versão 3.1 , fiz alguns testes na versão 3.2, porem o plugin não respondeu legal. Então segue o link para download do mesmo. http://archive.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/index.php.

2o Passo:

Certo, depois de termos o eclipse 3.1 instalado em sua maquina, precisamos baixar o SDK do SuperWaba. Para poder baixar é preciso fazer um pequeno cadastro no site. o link de download do SDK é: http://www.superwaba.com.br/pt/downloads_$.asp

3o Passo:

Vamos agora baixar o plugin para o eclipse, de Superwaba, para isso devemos seguir os seguintes passos:

  • Help -> Software Updates -> Find and Install.
  • "Search for new features to install...".
  • "New remote site...".
  • Name: SuperWaba plugin, e url : http://superwaba-ide.sourceforge.net/update
  • Check the SuperWaba IDE feature and install.
  • Finish

Pronto.. após esses passo já temos o eclipse pronto para criarmos nossa primeira aplicação em Superwaba para j2me.

Após reiniciar o eclipse, cliem em:

  • File-> New -> Project
  • Selecione Superwaba -> SuperWaba Project
  • Project Name: HelloSuperWaba
  • Finish

Certo, então temos o nosso primeiro projeto no eclipse para em superwaba. Agora vai uma observação. Toda Aplicação em superwaba, tem como base uma classe que extenda de waba.ui.MainWindow. Então vamos Criar agora nossa HelloMainWindow. Clique com obotão direito em cima do projeto e siga os passos:

  • File->New-> Other
  • Selecione SuperWaba->MainWindow
  • Name: HelloMainWindow

 

Pronto! Foi criado uma class com os métodos onStart() e o método onExit() que extende de MainWindow. Então já podemos rodar nossa primeira aplicação em SuperWaba.

Para rodar siga os passos a seguinte:

  • Run -> Run...
  • Clique com o direito em cima de SuperWaba Application
  • New...
  • Name: Hello Super Waba
  • MainWindow class -> Search
  • Localize a HelloMainWindow e depois Ok
  • Clique agora no botão Run.

Se você conseguir visualizar algo parecido com a imagem a seguir, então deu tudo certo.

 

Então , para deixar mais interessante, vamos adicionar um label no centro da aplicação:

public void onStart() {
setTitle("HelloMainWindow");

Label label = new Label("Ola galera!");
this.add(label,CENTER,CENTER);

// TODO: Insert application initialization code here
}

Certo .. entao agora se rodarmos a aplicação teremos um label no centro da nossa aplicação. Então temos nossa primeira aplicação rodando. Segue o link da API do SuperWaba http://www.superwaba.org/doc/ , que por sinal é muito simples e proporciona uma excelente produtividade para desenvolvimento para PDA's

Esse POST, como citado anteriormente seria preparando seu ambiente para desenvolver em SuperWaba. Então, até a próxima pessoal!

Escrito por italomatos em 14:11:08 | Link permanente | Comments (0) |

Domingo, 17 17e Junho 17e 2007 AD

Evitando Inject SQL Com Rails

Bem Pessoal,

Hoje iremos falar de como evitar injeções SQL com Rails.

Vamos dizer que temos uma tabela de usuario com os seguintes campos:

#Tabela Usuario

  • id- Integer
  • Nome - Varchar(255)
  • Login - Varchar(255)
  • Senha - Varchar(255)
  • Admin - Boolean

E temos uma pagina do nosso site para buscar usuarios pelo o nome na nossa base de dados.

Nosso Modelo Usuario:

#model

class Usuario < ActiveRecord::Base
end

Então temos no nosso UsuarioController o seguinte:

#controller

class UsuarioController < ApplicationController
def buscaUsuario
if params[:nome]
@usuarios = Usuario.find(:all,:conditions=>"nome like '%#{params[:nome]}%'")
else
@usuarios = Usuario.find(:all)
end
end
end

E na view referente ao action buscarUsuario:

#view

<%=form_tag %>
<%=text_field_tag "nome",nil %>
<%=submit_tag "Buscar"%>


<% for usuario in @usuarios%>

<% end %>
<%=usuario.nome%>


<%=end_form_tag %>

 

Então, basicamente temos um input, onde é digitado o nome do usuario, e o sistema mostra uma lista de usuarios que possui o que foi digitado no nome do usuario.

Ex.: Matos

resultado:

  • Italo Matos
  • Ronaldo Matos
  • Matos José

O resultado está Ok. Então o que está errado ? Não é que a implementação esteja errado, mas com essa implementação abrimos furos na aplicação, e se tivermos um usuario malicioso, pode se aproveitar desses furos.

...

@usuarios = Usuario.find(:all,:conditions=>"nome like '%#{params[:nome]}%'")

...

Acima temos implementação feita no nosso controller. Vamos digitar no input a palavra Matos então será gerado a seguinte consulta SQL:

SELECT * FROM usuarios WHERE (nome like '%Matos%' )

Certo , até ai tudo bem.

Agora vamos dizer que o usuário digitou no input %' and admin = 1 and '%%' = '% Então , qual a consulta será gerada? a resposta logo abaixo:

SELECT * FROM usuarios WHERE (nome like '%%' and admin = 1 and '%%' = '%%')

Ai é onde mora o perigo, ele irá listar todos os administradores do sistema, independente do nome. Isso dai que é chamado de injeção SQL. Conseguiu injectar codigo SQL em uma consulta, onde na verdade a consulta seria somente para buscar um usuario com um determinado nome.

Para previnirmos desses ataques, trocaremos no nosso controller:

...

@usuarios = Usuario.find(:all,:conditions=>"nome like '%#{params[:nome]}%'")

...

Por:

@usuarios = Usuario.find(:all,:conditions=>["nome like ?","%"+params[:nome]+"%"])

Agora vamos ver como ficou a consulta SQL:

SELECT * FROM usuarios WHERE (nome like '%%' and admin = 1 and '%%' = '%%')

ele o rails colocou as antes das aspas simples em que digitamos no input, assim nos previnimos das injeções SQL.

 

em consulta a banco de dados, deixe o framework tratar essas injeções.

 

Até a próxima pessoal.

Escrito por italomatos em 14:31:43 | Link permanente | Comments (3) |

Quinta-feira, 07 07e Junho 07e 2007 AD

XML no ActiveRecord

Bem Pessoal , hoje vamos falar um pouco de XML com Ruby on Rails, mais precisamente nos ActiveRecord.

Existe um método no ActiveRecord que é o to_xml, ele retorna os dados de um Model, ou os dados de uma coleção no formato XML. Vamos a alguns Exemplos:

Temos a tabela Produtos com os seguinte atributos:

  • id
  • nome
  • descricao
  • preco

Em nossa aplicação temos o Model Produto, referente a tabela Produtos.

Vamos criar um controller para que possamos testar o metodo de conversão pra XML.

ruby script/generate controller produtos

então vamos editar o arquivo criado em app/controller/produtos_controller.rb

 

class ProdutosController < ApplicationController
def produtoXml
render :xml => Produto.find(params[:id]).to_xml
end
end

Então acessando o endereço http://localhost:3000/aplicacao/produtos/produtoXml?id=1 aparecerá:

<xml version="1.0" encoding="UTF-8" ?>
<produto>
<descricao>Monitor LCD 17'<descricao>
<id type="integer">1>
<nome>moinitor<nome>
<preco type="integer">600<preco>
>

legal né ? bem pratico .

Certo, mas o método não é so isso. Por exemplo, vamos dizer que não tivéssemos a necessidade da descrição do produto no XML, então poderiamos fazer da seguinte forma:

...

render :xml => Produto.find(params[:id]).to_xml(:except=>:descricao)

...

Tendo como resultado:

<xml version="1.0" encoding="UTF-8" ?>
<produto>
<id type="integer">1<id>
<nome>moinitor>
<preco type="integer">600<preco>
<produto>

Interessante hein ? Ou senão vamos dizer que precise somente do id e o nome do produto. Poderíamos usar o :only da seguinte forma:

...

render :xml => Produto.find(params[:id]).to_xml(:only=>[:id,:nome])

...

 

Certo. mas não paramos por ai, o to_xml funciona com Array tambem , como por exemplo:

...

render :xml => Produto.find(:all).to_xml(:only=>[:id,:nome])

...

 

Tendo como resultado:

<xml version="1.0" encoding="UTF-8" ?>
- <produtos>
<produto>
<id type="integer">1<id>
<nome>moinitor>
>
<produto>
<id type="integer">2>
<nome>Gravadora de DVD<nome>
>
<produtos>

 

Então pelo que viamos é bastante simples trabalhar com XML nos ActiveRecord. Até a próxima pessoal!

Escrito por italomatos em 23:49:13 | Link permanente | Comments (0) |

Sexta-feira, 01 01e Junho 01e 2007 AD

Instalação do Ruby on Rails

Olá Pessoal,

Agora começando pra valer.

Nosso Post de hoje será como instalar o ambiente Ruby no windows para começarmos a programar.

  • Primeiramente você deverá baixar o One-Click-Ruby Installer , o nome já diz tudo não é mesmo ? =)
  • Depois de baixar, e instalar , vamos testar se a instalação funcionou corretamente, abra o prompt e digite: ruby -v. Se tudo tiver dado certo, aparecerá a versão do ruby.
  • Agora que instalamos o ruby, vamos para a instalação do Rails. Digite no prompt de comando o seguinte: gem install rails --include-dependencies. Com o gem vai baixar automaticamente o Rails e instalar em sua maquina. O parametro --include-dependencies irá instalar algum modulos que o rails depende que seja instalado. Até agora, sem mistério ne?

Agora temos todo o ambiente instalado. Para testarmos basta você criar um diretorio ( ex.: c:workspace), e acessando ele pelo prompt de comando, você digitará rails minhaApp. Com isso foi criado um diretório chamado minhaApp, e dentro dele toda a estrutura de sua aplicação em RoR.

Então vamos ver nossa aplicação em ação. Entre no diretório minhaApp , e digite : ruby script/server start , com isso você está inicializando o server para sua aplicação. Então abra seu navegador, e digite: http://localhost:3000/ .

Se você viu :

Welcome aboard

Parabens! Você já tem uma aplicação RoR rodando em sua maquina. =)

 

Então hoje fizemos instalação do Ruby, do framework Rails, e já criamos nossa primeira aplicação. Fácil não é? Até a próxima pessoal!

Escrito por italomatos em 20:27:05 | Link permanente | Comments (0) |

Apresentação

Olá pessoal!

No primeiro post irei me apresentar.

 

Meu nome é Ítalo Matos, trabalho com desenvolvimento de sistemas a 6 anos, inicialmente com sistemas para desktop, desenvolvidos em Delphi, C++ e Visual Basic 5.0. Depois de 1 ano passei a desenvolver sistemas para Web, com ASP, PHP, Java. Com 2 anos de desenvolvimento para Web houve a necessidade tambem em desenvolver para dispositivos móveis , palm, celulares. Novas Experiência, então comecei a estudar SuperWaba e J2ME. Então a partir daí meu foco foi desenvolvimento WEB e Sistemas para dispositivos móveis, onde o tema da minha monografia foi baseado. Mas sabe como é, essa área de tecnologia não para, então entrei no mundo do Ruby on Rails, para os mais íntimos RoR ! Onde foi paixão a primeira vista (hehe). Ruby sendo a linguagem, e Rails framework. o casal perfeito para grande produtividade. Você pode pensar "Framework?, eita que vem muito xml para ser configurado pela frente". Então posso ti falar que não, nada de XML, diferentemente de outros frameworks de outras linguagens. "E o Flex?" Bem lembrado! =) Flex podemos dizer que compoe a camada VIEW do MVC. Tecnologia desenvolvida pela Adobe, com potencial de desenvolver telas elegantes e bastante futuristicas rapidamente e facilmente, podendo se integrar a qualquer dessas tecnologias de mercado, como Java, .NET, PHP e RoR é claro. =)

Bem pessoal, esse foi o primeiro de muitos Post que virão pela frente.

Escrito por italomatos em 16:02:04 | Link permanente | Comments (0) |