Disponibilizei o blog no Feedburner para quem tiver interesse. O endereço é http://feeds.feedburner.com/serathiuk.
21
Escrevendo uma extensão de Twitter para o Google Chrome utilizando o Google Web Toolkit(GWT)
0 Comments | Posted by Ricardo Serathiuk in artigos, coisas legais, google, google web toolkit, gwt, internet, java, softwares, tecnologia, twitter
Estava olhando os exemplos de como criar extensões para o Chrome, e vi que assim como o no Firefox, as extensões não são nada mais que Javascript(mas no caso do Firefox tem os XUL envolvidos e etc…). Então pensei eu: “GWT gera Javascript, então ele deve funcionar para criar extensões”. Fiz uns testes básico e conclui. Funcionou. E aqui escrevo um tutorial dizendo como fiz para fazer isso funcionar. O objetivo desse tutorial não é ensinar GWT, é somente mostrar como configurar um projeto do GWT para rodar como uma extensão do Chrome.
Antes de tudo, vou dar um aviso que vai lhe poupar de alguns problemas: Salve todos os arquivos do exemplo com codificação UTF-8.
Como exemplo, criei uma aplicação para twitter bem simples, que só lê as últimas mensagens de um usuário qualquer.
Primeiramente criei uma aplicação no Eclipse chamada “ExtensaoChrome” com o pacote base chamado “com.serathiuk.chrome.extension.teste.client”.
Depois disso, alterei o arquivo ‘ExtensaoChrome.html’ da pasta war, deixando apenas com o seguinte HTML:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<link type=”text/css” rel=”stylesheet” href=”ExtensaoChrome.css”>
<div id=”intro_panel”></div>
<script type=”text/javascript” language=”javascript” src=”extensaochrome/extensaochrome.nocache.js”></script>
Na pasta war, coloquei o arquivo icon.png(o mesmo do exemplo oficial, link no final) e o arquivo manifest.json, que tem o seguinte conteúdo:
{
“name”: “Leitor de Twitter”,
“version”: “1.0″,
“description”: “Exemplo de extensão para Chrome utilizando GWT do site serathiuk.com.”,
“browser_action”: {
“default_title”: “Leitor de Twitter”,
“default_icon”: “icon.png”,
“popup”: “ExtensaoChrome.html”
},
“permissions”: [
"http://www.twitter.com/"
]
}
Depois disso, apaguei aqueles arquivos que são criados pelo exemplo, deixando apenas o “ExtensaoChrome.java”, que é o Entry Point da aplicação. E no EntryPoint, apaguei todas aquelas informações do exemplo, e colocando o código para fazer a aplicação funcionar:
public class ExtensaoChrome implements EntryPoint {
private TextBox txtLogin;
private FlexTable tableTwitter;public void onModuleLoad() {
HorizontalPanel h = new HorizontalPanel();
txtLogin = new TextBox();
h.add(txtLogin);
Button btn = new Button(“Carregar”);
btn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
carregarTwitts();
}
});
h.add(btn);ScrollPanel align = new ScrollPanel();
align.setWidth(“100%”);
align.setHeight(“320″);tableTwitter = new FlexTable();
tableTwitter.setCellPadding(1);
tableTwitter.setCellSpacing(1);
tableTwitter.setBorderWidth(1);
align.add(tableTwitter);VerticalPanel v = new VerticalPanel();
v.add(h);
v.add(align);
RootPanel.get(“intro_panel”).add(v);
}protected void carregarTwitts() {
String url = “http://twitter.com/statuses/user_timeline/”+txtLogin.getValue()+”.json”;
RequestBuilder req = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
try {
req.sendRequest(null,
new RequestCallback() {
public void onResponseReceived(Request request, Response response) {
preencheValores(response.getText());
}public void onError(Request request, Throwable exception) {
showError(exception);
}
}
);
} catch(RequestException e) {
showError(e);
}
}protected void preencheValores(String jsonText) {
tableTwitter.removeAllRows();JSONArray json = (JSONArray) JSONParser.parse(jsonText);
for(int i = 0; i < json.size(); i++) {
JSONObject obj = (JSONObject) json.get(i);
if(obj != null) {
JSONString str = (JSONString) obj.get(“text”);
tableTwitter.setText(i+1, 0, str.stringValue());
}
}
}protected void showError(Throwable e) {
Window.alert(e.getMessage());
}
}
Agora é só compilar o projeto e adicionar a extensão ao Chrome. Para fazer isso, digite o endereço “chrome://extensions/”, clicar em “Load Unpacked Extension” e selecionar o diretório war da aplicação(ou o diretório onde está o manifest.json). Com isso a extensão estará rodando, é só clicar no ícone dela ao lado da barra de endereços.
Exemplo Oficial: http://code.google.com/chrome/extensions/getstarted.html
Código-Fonte deste exemplo: http://gwtchrome.googlecode.com/files/ExtensaoChrome.7z
Antes de tudo, vou dar um aviso que vai lhe poupar de alguns problemas: Salve todos os arquivos do exemplo com codificação UTF-8.
Como exemplo, criei uma aplicação para twitter bem simples, que só lê as últimas mensagens de um usuário qualquer.
Primeiramente criei uma aplicação no Eclipse chamada “ExtensaoChrome” com o pacote base chamado “com.serathiuk.chrome.extension.teste.client”.
Depois disso, alterei o arquivo ‘ExtensaoChrome.html’ da pasta war, deixando apenas com o seguinte HTML:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<link type=”text/css” rel=”stylesheet” href=”ExtensaoChrome.css”>
<div id=”intro_panel”></div>
<script type=”text/javascript” language=”javascript” src=”extensaochrome/extensaochrome.nocache.js”></script>
Na pasta war, coloquei o arquivo icon.png(o mesmo do exemplo oficial, link no final) e o arquivo manifest.json, que tem o seguinte conteúdo:
{
“name”: “Leitor de Twitter”,
“version”: “1.0″,
“description”: “Exemplo de extensão para Chrome utilizando GWT do site serathiuk.com.”,
“browser_action”: {
“default_title”: “Leitor de Twitter”,
“default_icon”: “icon.png”,
“popup”: “ExtensaoChrome.html”
},
“permissions”: [
"http://www.twitter.com/"
]
}
Depois disso, apaguei aqueles arquivos que são criados pelo exemplo, deixando apenas o “ExtensaoChrome.java”, que é o Entry Point da aplicação. E no EntryPoint, apaguei todas aquelas informações do exemplo, e colocando o código para fazer a aplicação funcionar:
public class ExtensaoChrome implements EntryPoint {
private TextBox txtLogin;
private FlexTable tableTwitter;
public void onModuleLoad() {
HorizontalPanel h = new HorizontalPanel();
txtLogin = new TextBox();
h.add(txtLogin);
Button btn = new Button(“Carregar”);
btn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
carregarTwitts();
}
});
h.add(btn);
ScrollPanel align = new ScrollPanel();
align.setWidth(“100%”);
align.setHeight(“320″);
tableTwitter = new FlexTable();
tableTwitter.setCellPadding(1);
tableTwitter.setCellSpacing(1);
tableTwitter.setBorderWidth(1);
align.add(tableTwitter);
VerticalPanel v = new VerticalPanel();
v.add(h);
v.add(align);
RootPanel.get(“intro_panel”).add(v);
}
protected void carregarTwitts() {
String url = “http://twitter.com/statuses/user_timeline/”+txtLogin.getValue()+”.json”;
RequestBuilder req = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
try {
req.sendRequest(null,
new RequestCallback() {
public void onResponseReceived(Request request, Response response) {
preencheValores(response.getText());
}
public void onError(Request request, Throwable exception) {
showError(exception);
}
}
);
} catch(RequestException e) {
showError(e);
}
}
protected void preencheValores(String jsonText) {
tableTwitter.removeAllRows();
JSONArray json = (JSONArray) JSONParser.parse(jsonText);
for(int i = 0; i < json.size(); i++) {
JSONObject obj = (JSONObject) json.get(i);
if(obj != null) {
JSONString str = (JSONString) obj.get(“text”);
tableTwitter.setText(i+1, 0, str.stringValue());
}
}
}
protected void showError(Throwable e) {
Window.alert(e.getMessage());
}
}
Agora é só compilar o projeto e adicionar a extensão ao Chrome. Para fazer isso, digite o endereço “chrome://extensions/”, clicar em “Load Unpacked Extension” e selecionar o diretório war da aplicação(ou o diretório onde está o manifest.json). Com isso a extensão estará rodando, é só clicar no ícone dela ao lado da barra de endereços.
8
Configurando o SmartGWT em um projeto do Eclipse
0 Comments | Posted by Ricardo Serathiuk in artigos, google, google web toolkit, gwt, java, smargwt, smartclient, tecnologia
A muito tempo tinha falado em escrever um artigo sobre SmartGWT, mas acabei ’se enrolando’ e isso nunca aconteceu. Mas nos últimos dias, tenho acompanhado as estatistícas do blog com mais atenção, pois configurei o Google Analytics. Por lá, que boa parte dos visitantes daqui do blog, chegam nele pelo Google, e atrás de artigos sobre SmartGWT. Eu sempre postei notícias sobre os lançamentos aqui, mas nunca tinha feito um artigo sobre. Esse é o primeiro, e acredito que será o início de uma série deles.
Irei mostrar como configurar um projeto já criado para funcionar com SmartGWT. Já escrevi um artigo a algum tempo mostrando como configurar o Eclipse com o plugin do Google e criar um projeto do Eclipse com ele. Esse artigo explica como utilizar o Google Plugin com o GWT 1.6, mas ele funciona muito bem com o 1.7.*, e também funciona com o GWT 2.0 MS2. E o artigo foi testado e escrito se baseando no SmartGWT 1.3.
Para configurar o SmartGWT em um projeto já criado, siga os seguintes passos:
- Baixe o SmartGWT do seguinte local: http://code.google.com/p/smartgwt/
- Descompacte o arquivo .zip e copie o arquivo smartgwt.jar para o diretório “war/WEB-INF/lib” do seu projeto.
- Dê um refresh em seu projeto (clique em cima do nome dele no Package Explorer e pressione F5).
- Vá em “Configure Build Path” (botão direito em cima do projeto no Package Explorer, Build Path, Configure Build Path).
- Vá em Libraries, clique em “Add Jar” e adicione o smartgwt.jar a lista de bibliotecas.
- Vá no arquivo de configuração do módulo (um que termina com a extensão *.gwt.xml) e adicione a seguinte linha: “<inherits name=’com.smartgwt.SmartGwt’/>”
- Vá no arquivo html(o que a aplicação carrega por padrão quando ela inicia) e adicione a seguinte linha dentro do HEAD: “<script> var isomorphicDir = “[NOME_DO_MODULO]/sc/”; </script>”. O “[NOME_DO_MODULO]” deve ser substituído pelo mesmo nome que está no arquivo “.gwt.xml”. Lá ele está no atributo rename-to da tag module.
Com isso o projeto já deve funcionar com o SmartGWT. Se quiser um exemplo pronto para teste, cole o seguinte conteúdo em seu EntryPoint, adicionando as linhas dentro do seu onModule.
final TextItem txt = new TextItem(“nome”, “Nome”);
Button btn = new Button(“Clique”);
btn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Window.alert((String) txt.getValue());
}
});DynamicForm form = new DynamicForm();
form.setFields(txt);VLayout v = new VLayout();
v.addMember(form);
v.addMember(btn);v.draw();
Salve e tente rodar o exemplo. Caso funcionar corretamente, irá aparecer uma caixa de texto com um botão. Quando clicar no botão, irá aparecer em um alert o que foi digitado no campo de texto.
31
Introdução ao UIBinder do GWT 2.0
4 Comments | Posted by Ricardo Serathiuk in artigos, google, google web toolkit, gwt, java, softwares, tecnologia
Uma das grandes novidades do GWT 2.0 é o UIBinder. UIBinder é uma funcionalidade que permite que você separe o layout da aplicação da parte de “negócio”(validações, interações com o servidor, etc.). Permite que você deixe toda a parte de layout separadas em arquivos XML, deixando para os arquivos Java (que irão ser compilados e transformados em Javascript) somente o que importa do código. Essa funcionalidade facilita bastante as coisas, pois melhora o entendimento e a ajuda na hora de dar manutenção no código fonte das telas. Aposto que quem já utilizou JSF (principalmente o 2.0) e o Adobe Flex, irá se sentir em casa.
Vou dar um exemplo simples, que não é um Hello World como você conhece. È só um formulário com dois campos, que adiciona tudo o que é preenchido em uma tabela. Não envolve comunicação com o servidor e nem nada. È só para dar pano de fundo para mostrar como funciona todos os elementos que fazem o UIBinder funcionar. Bom, vamos parar de blá blá blá e vamos para o que interessa.
Primeiramente, vamos configurar o módulo do UIBinder no GWT 2.0. Acredito que você já tenha um projeto GWT 2.0 criado e funcionando neste momento. Se não tiver, leia antes o tutorial que escrevi sobre. Para configurar e habilitar o UIBinder no GWT 2.0, apenas adicione a seguinte linha no seu arquivo de configuração do GWT(*.gwt.xml) :
<inherits name=’com.google.gwt.uibinder.UiBinder’/>
Depois disso vamos criar o arquivo de tela. O nome que estou dando para o mesmo é HelloWorld(tá, é um Hello World) que está no pacote ‘com.serathiuk.gwt2teste.client’ no meu caso. Sinta-se livre para mudar. O nome do arquivo será HelloWorld.ui.xml. Detalhe para o ‘ui.xml’, pois esse é o padrão da framework.
<!– Arquivo HelloWorld.ui.xml –>
<?xml version=”1.0″ encoding=”UTF-8″?>
<ui:UiBinder xmlns:ui=’urn:ui:com.google.gwt.uibinder’
xmlns:g=’urn:import:com.google.gwt.user.client.ui’>
<g:HTMLPanel>
Nome: <g:TextBox ui:field=”txtNome” /><br/>
E-mail: <g:TextBox ui:field=”txtEmail” /><br/>
<g:Button ui:field=”btnTeste” text=”Teste” />
<br/>
<g:FlexTable ui:field=”flexTable”/>
</g:HTMLPanel>
</ui:UiBinder>
Agora iremos criar o arquivo HelloWorld.java, que se encontra no mesmo pacote que o arquivo de tela(HelloWorld.ui.xml).
//Arquivo HelloWorld.java
package com.serathiuk.gwt2teste.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
public class HelloWorld extends Composite {
interface Binder extends UiBinder<Widget, HelloWorld> {}
private static Binder binder = GWT.create(Binder.class);
@UiField Button btnTeste;
@UiField TextBox txtNome;
@UiField TextBox txtEmail;
@UiField FlexTable flexTable;
public HelloWorld() {
initWidget(binder.createAndBindUi(this));
}
@UiHandler(“btnTeste”)
public void onClickBtnTeste(ClickEvent event) {
int num = flexTable.getRowCount();
flexTable.setText(num, 0, txtNome.getValue());
flexTable.setText(num, 1, txtEmail.getValue());
}
@UiHandler(“txtNome”)
public void onChangeTxtNome(ChangeEvent event) { Window.alert(txtNome.getValue());
}
}
E como ficou meu onModuleLoad do meu EntryPoint:
…
public void onModuleLoad() {
RootPanel.get().add(new HelloWorld());
}
…
O UIBinder funciona da seguinte maneira. No arquivo XML da tela, temos os componentes TextBox txtNome e txtEmail e existe um Button chamado btnTeste. Também tem uma FlexTable com o nome flexTable. Você já deve ter percebido que todos esses componentes tem o atributo “ui:field”. Esse atributo é responsável por dizer qual será o atributo da classe Java que aquele componente representa. Na classe Java, temos os atributos txtNome, txtEmail, btnTeste e flexTable também, e eles estão anotados com a annotation “UIField”. Essa anotação é responsável por dizer que aquele atributo representa um componente na tela. O atributo deve ter o mesmo nome que o correspondente na tela, e não pode ser private. Você não precisa se preocupar em instanciar esse atributo, pois via Injeção de Dependência, o próprio GWT se encarrega disso. Você pode trabalhar normalmente com o componente, mudando tamanho, configurações, etc… pelo Java. Mas recomendo deixar essas coisas para o arquivo de tela.
Para adicionar um evento a um componente é simples. É criado um método, com qualquer nome que desejar, e utiliza a annotation ‘UiHandler’ neste método. Essa annotation irá receber um valor, que é o componente da tela que ele representa. Em nosso exemplo existem 2. O ‘onClickBtnTeste’ e o ‘onChangeTxtNome’, que poderiam ser trocados facilmente por ‘aoClicarNoBtnTeste’ e ‘aoAlterarTxtNome’. Vai do gosto do freguês. E eles sempre iriam ser chamados quando o botão fosse clicado no primeiro caso, ou quando o nome fosse alterado, no segundo caso.
Mas você deve estar se perguntando: “O nome do método pode ter o nome que eu desejar, e o campo Nome pode ter mais de um tipo de evento, mas não é especificado na annotation qual evento que eu quero. Como ele sabe é aquele método deve ser chamado no onChange?”. È pelo parâmetro que é passado no método. No caso do onClickBtnTeste, ele recebe como parâmetro um objeto da classe ClickEvent, enquanto o onChangeTxtNome recebe como parâmetro um objeto da classe ChangeEvent. Se um dia resolver mudar o tipo de evento que aquele método representa, basta apenas alterar o parâmetro para o correspondente da ação que você deseja.
Lembrando que no objeto do parâmetro vem muitas informações úteis, como o componente que invocou esse evento, funcionalidade de parar o evento e algumas coisas a mais.
Acho que deu para entender como começar a utilizar o UIBinder. Acredito que ele se tornará o novo padrão para desenvolvimento com GWT, e acredito que nas próximas versões do Google Plugin, teremos mais facilidades para utiliza-lo. Não demorará muito para aparecer RAD’s utilizando a tecnologia.
Qualquer crítica, sugestão e essas coisas entrem em contato.
30
Utilizando o Google Web Toolkit(GWT) 2.0 Milestone 2 no Eclipse com Debug
0 Comments | Posted by Ricardo Serathiuk in artigos, google, google web toolkit, gwt, java
No último artigo, mostrei como configurar uma aplicação GWT 2.0 no Eclipse, com o Google Plugin, mas o Debug não funciona corretamente utilizando aquela configuração. È preciso algumas alterações para a aplicação funcionar corretamente. O tutorial leva em conta que você seguiu todos os passos do tutorial anterior.
1) Vá nas configurações de Build Path, Libraries e adicione o gwt-servlet.jar e dê um ok.
2) Vá em Run Configurations, crie um novo em “Java Application”.
3) Em Project coloque o projeto atual.
4) Em Main Class, coloque a classe ‘com.google.gwt.dev.DevMode’.
5) Marque os items “include system libraries…” e o “Include Inherited mains…”
6) Mude para aba arguments
7) Em “Program arguments” coloque o seguinte valor: “-startupUrl <Arquivo HTML> <Endereço do Arquivo XML do GWT>”. Ex.: “-startupUrl GWT20Teste.html com.serathiuk.gwt2teste.GWT20Teste”
8) Em VM Arguments coloque o valor: “-Xmx256M”
9) Em Classpath, em Users Entries, adicione o gwt-servlet.jar, a biblioteca do GWT e o diretório src da aplicação.
10) Dê um Run e teste agora.
14
Utilizando o Google Web Toolkit(GWT) 2.0 Milestone 1 com o Google Plugin no Eclipse
0 Comments | Posted by Ricardo Serathiuk in Sem categoria
Para utilizar o GWT 2.0 MS1 no Eclipse, é só seguir os seguintes passos:
- Baixe o GWT 2.0 no seguinte link: http://google-web-toolkit.googlecode.com/files/gwt-2.0.0-ms1.zip
- Descompacte o arquivo em um diretório de sua referência.
- Renomeie o arquivo gwt-dev.jar para gwt-dev-windows.jar
- Vá em Help, Check For Updates, e veja se tem alguma atualização do Google Plugin. Se tiver, instale-a.
- No Eclipse, já com o Eclipse Plugin instalado, vá em Project > Properties > Google > Web Toolkit e clique em Configure SDK.
- Clique em Add e aponte para o diretório do GWT 2.0 e dê “Ok” em tudo
- Agora é só criar um projeto normalmente.
O GWT 2.0 não tem mais o “Dev Mode” do modo antigo, que era um browser próprio do GWT. Agora o “Dev Mode” apenas inicia um webserver(Jetty), e você deve instalar um plugin no browser de uma preferência para desempenhar a função do antigo browser embutido. O link para os plugins para os principais browsers:
Google Chrome
Instale a seguinte extensão: http://google-web-toolkit.googlecode.com/svn/trunk/plugins/npapi/prebuilt/gwtdmp.crx
Mozilla Firefox
Firefox 2(Mac PPC/x86, Linux x86/x86_64): http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/gwt-dmp-ff2.xpi
Firefox 3(Win x86, Mac PPC/x86, Linux x86/x86_64): http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/gwt-dmp-ff3.xpi
Firefox 3.5(Win x86, Mac PPC/x86, Linux x86/x86_64): http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/gwt-dmp-ff35.xpi
Safari 3 e 4(apenas MacOS)
Baixe e instale a seguinte imagem: http://google-web-toolkit.googlecode.com/svn/trunk/plugins/webkit/prebuilt/oophm.dmg
Internet Explorer 6, 7 e 8(apenas 32 bits)
Baixe e instale o seguinte instalador: http://google-web-toolkit.googlecode.com/svn/trunk/plugins/ie/prebuilt/GwtDevModeIePluginInstaller.msi
6
Lançado o Google Web Toolkit (GWT) 2.0 Milestone 1
0 Comments | Posted by Ricardo Serathiuk in Sem categoria
Hoje foi lançada a versão Milestone 1 do GWT 2.0. Essa versão vem sendo muito aguardada, pois é a que traz o maior número de novidades significativas desde a primeira versão do framework. A ultima grande mudança foi na versão 1.5, que trouxe a posssibilidade de codicar em Java 1.5. Anteriormente era apenas em Java 1.4, e com muitas limitações. Mas falando sobre a 2.0, as novidades que ela traz:
- In-Browser Development Mode: Na minha opinião, a funcionalidade mais significativa. Você não fica mais preso ao browser padrão do GWT(no caso do Windows, o IE) para debugar. Você escolhe qual browser quer usar para ‘debug’. Algumas bibliotecas do GWT(GWT-EXT, GXT e SmartGwt por exemplo) tem problemas com compatibilidade com os browsers as vezes, ou erros que não são apresentados no Hosted Mode. Para aplicações grandes, que levam um certo tempo para compilar, para testar o sistema em browsers de verdade se torna um tanto quanto demorado. Agora não. Rode em modo ‘debug’ no browser que desejar, até em mais de 1 ao mesmo tempo, sem precisar compilar o projeto. Isso vai agilizar muito o processo de desenvolvimento.
- Code Splitting: A aplicação não é mais monolítica. Nas versões anteriores do GWT, ele gerava um arquivo de Javascript único, onde estava toda a aplicação. Isso não é um problema para aplicações pequenas, mas para aplicações grandes em que o arquivo Javascript pode atingir facilmente uns 4MB, a coisa pode mudar bastante.
- Declarative User Interface: Criação de interface de forma declarativa. Agora o GWT possui uma linguagem para criar telas. Em vez de criar as telas com Java, agora você cria com XML, assim como funciona no Adobe Flex por exemplo.
- Bundling of resources (ClientBundle): Gerenciamento mais eficiente de recursos, como CSS, imagens, etc…
- HtmlUnit e independencia de plataforma: Agora o GWT é independente de plataforma. Não vai mais existir 1 distribuição para cada S.O. O Browser e a Engine de testes baseada em SWT foram abandonadas, agora com uma implementação 100% Java.
Ainda não testei essa versão. Mas em breve irei fazer uma resenha mais a fundo sobre.
Download: http://google-web-toolkit.googlecode.com/files/gwt-2.0.0-ms1.zip
25
Bye bye Geocities! Não sentiremos saudades.
1 Comentário | Posted by Ricardo Serathiuk in artigos, internet, inutilidades, mercado, noticias, tecnologia, yahoo
O Yahoo! já foi o maior site de busca da internet, mas provavelmente se você é fã de Jonas Brothers e Hannah Montana não deve lembrar disso. Junto com sua liderança, ele tinha alguns serviços que para época eram legais. Alguns serviços como Yahoo! Photos, Yahoo! Briefcase e o Geocities. Para época eles eram excelentes, mas com o tempo, por terem parado no tempo e/ou apenas por não serem de interesse de mais ninguém, foram deixado de lado pelos usuários. O Geocities era um deles.
Nos últimos anos, o Geocities não era nada mais que um grande cemitério de sites mal-feitos, desenvolvidos por adolescentes que estavam aprendendo a desenvolver para web. Eu mesmo tinha alguns sites hospedados lá. Era lá e no finado HPG (que hoje é o iG Empresas) que qualquer um utilizada para hospedar seu conteúdo. O HPG era legal porque era ilimitado, mas era ruim porque quando você subia algo maior que 100MB, recebia um intimidador e-mail dos administradores do site. Uma vez subi o demo do ‘Quake 2’ empacotado com o mod ‘Action Quake 2’(alguém lembra?). Não era ilegal. O demo era freeware e o mod também. Mas foi questão de 1 dia para eles me mandarem um e-mail falando que pirataria era crime e se eu insistisse em subir arquivos dessa natureza iria ir para justiça. Tá. Beleza. Desisti e comecei a hospedar meus lixos internéticos(que hoje em dia vejo que é lixo) em outros lugares. Qual serviço eu utilizava? O Geocities. Eles te davam (e ainda dão até 26 de outubro de 2009) fabulosos 15MB de espaço para hospedar seus HTML cheio de gif’s animados e coisas piscando. PHP? ASP? JSP? SQL? Eu nem sabia se isso era de comer. Eu achava a tag ‘marquee’ uma revolução em efeitos especiais internéticos.
Daí um dia descobri que existia 2 coisas fabulosas. O “Macromedia Flash 5” e a linguagem “PHP 4”(nessa altura eu já brincava com QuickBasic e C). Larguei o Geocities e fui utilizando serviços de hospedagem gratuita de PHP(Miarroba, Tripod Lycos, etc…). E todo aquele lixo de conteúdo que eu produzi durante todo esse tempo ficou lá e pode ser encontrado no Google se duvidar.
Muito tempo depois (hoje para ser exato), acessando um e-mail do Yahoo! antigo, que utilizava naquela época, leio o seguinte e-mail:
Caro Cliente Yahoo! GeoCities,
Estamos escrevendo para comunicar que o Yahoo! GeoCities, nossa comunidade e serviços para construção de sites gratuitos, será fechado em 26 de outubro de 2009.
Tivemos muito prazer em hospedar os sites criados pelos usuários do Yahoo! no mundo inteiro e ficamos orgulhosos com as comunidades criadas. Entretanto, decidimos nos concentrar em ajudar nossos clientes a explorar e construir relacionamentos online de outras maneiras.
Em 26 de outubro de 2009, seu site do GeoCities não será mais exibido na web e não será mais possível acessar sua conta ou arquivos do GeoCities.
Depois do meu momento ‘flash-back’ vou falar o que acho sobre. Muitos dirão “O Yahoo! tá falindo”, “isso prova que o Yahoo! não durará muito” e etc. Tudo bem, isso tem um fundo de verdade. Mas eu acho que mesmo que o Yahoo! tivessem bem das pernas, seria muito aceitável essa decisão deles.
O Geocities foi criado numa época em que blogs não eram tão populares. Os bons serviços de blogs eram em inglês e de customização limitada. Não tínhamos Orkut, Facebook, Twitter, Youtube, Rapidshare, Megaupload, etc. Mal tínhamos P2P. Qualquer um que quisesse distribuir arquivos o que fazia? Mandar por e-mail não dava, que os anexos não podiam ter mais de 1MB em qualquer serviço de e-mail. Então as pessoas criavam websites. Horríveis, mas eram websites. O que motivava muitos a criar algo em sites como o Geocities era a idéia de disponibilizar algo na internet. Mas em troca era obrigado a aprender o básico de HTML pelo menos.
Hoje a coisa mudou. Temos muitos serviços para muitas coisas. Ninguém precisa criar um website próprio para disponibilizar vídeos, músicas, etc. Os serviços de blogs são altamente customizáveis. Atualmente o Geocities só serve para hospedar vírus (que você recebe o link por e-mail em um spam), conteúdo antigo e vírus. Por isso que acredito que isso não só será bom para o Yahoo!, como também para toda a internet. Muita coisa irrelevante vai sumir dos mecanismos de busca em geral.
Tudo no mundo morre e deve morrer (lembro do Doctor Who falando disso). Passou da hora do Geocities. Que vá em paz, que não fará nenhuma falta.
15
Lançado o Google Web Toolkit(GWT) 1.7
0 Comments | Posted by Ricardo Serathiuk in google, google app engine, google web toolkit, gwt, internet, java, noticias, softwares, tecnologia
Foi lançada a versão 1.7 da Framework GWT. As únicas novidadades é a compatibilidade ao Firefox 3.5, IE 8 e Safari 4. Também um grande número de bugs corrigidos.
Segundo o pessoal do Google, essa versão não foi chamada de 1.6.5 apenas por causa da possíveis quebras de compatibilidade com os Deferred Bindings.
O Google Eclipse Plugin também foi atualizado. A atualização pode ser feita pelo próprio gerenciador do Eclipse.
Mais informações: http://code.google.com/intl/pt-BR/webtoolkit/releases/release-notes-1.7.0.html
Download: http://code.google.com/intl/pt-BR/webtoolkit/download.html
1
Porque levar a sério o twitter?
1 Comentário | Posted by Ricardo Serathiuk in coisas legais, internet, textos interessantes, twitter
Não é preciso explicar o que é twitter. Qualquer pessoa que não tenha ficado preso numa caverna no últimos anos, deve saber o que se trata. È uma ferramenta de microblogging(termo esse que o Twitter popularizou) em que a única coisa que você faz é postar mensagens curtas de 140 caracteres sobre o que você quiser. A ferramenta existe faz 3 anos, eu me cadastrei faz 1 ano e meio, mas comecei a utiliza com uma certa freqüência faz uns 5 meses. Para quem ficar interessado, é só seguir @serathiuk lá.
O Twitter tem revolucionado a forma de comunicação pela internet. Muitas pessoas não concordam, falam que é apenas um site imbecil e que nem tem graça ficar postando um monte de mensagens como ‘estou bebendo vinho, comendo churros e assistindo chaves’. Eu concordo com elas nesse ponto de vista. Assim como os blogs, acho que twitter se modificou e conseguiu um fim mais nobre. Os blogs no início não eram nada mais que sites de diário eletrônico. Você falava sobre a sua vida para quem quisesse ler e pronto. Mas com o tempo o conceito foi se modificando e hoje em dia temos até mesmos blogs corporativos. Os blogs se modificaram de tal forma, que mal lembram seus primórdios, onde, como já foi dito, eram apenas diários eletrônicos, e hoje, são veículos de notícias e de formação de opinião.
Com o twitter está acontecendo a mesma coisa. O twitter se modificou desde 2006. Arrisco-me a falar que aquela frase “What are you doing?” não faz mas tanto sentido assim. Está sendo utilizado para fins bem mais nobres.
Muitas empresas estão aderindo ou já aderiram ao twitter, assim como muitos artistas, celebridades e ‘subcelebridades piratas’. E todos eles enxergaram algumas vantagens que o twitter tem se comparado a qualquer outra rede social. Uma dessas vantagens é a capacidade de divulgação.
No Orkut/Facebook/Whatever se eu quiser divulgar meu produto, um show ou qualquer outra coisa para todos que estão numa comunidade tal eu tenho alguns meios. O primeiro é ir perfil por perfil deixar uma mensagem, ou utilizar ferramentas para fazer isso automaticamente. Mas isso é spam. Ninguém gosta que joguem um papel de propaganda de crediário dentro do seu carro no sinaleiro. Assim como ninguém gosta de verificar suas mensagens e ter um monte de porcarias não solicitadas. No Orkut, Facebook , em outras redes sociais ou até mesmo no seu e-mail a propaganda é forçada. No twitter não. Você envia sua mensagem 1 vez, todos os interessados recebem, pois eles escolheram receber. Algumas empresas (como a Dell) tem criado promoções exclusivas para o twitter, para incentivar que as pessoas ‘os sigam’. Ou seja, no twitter, a pessoa deve querer receber sua mensagem, e não você enfiar ela ‘guela a baixo’.
A velocidade que a informação trafega no twitter é surpreendente. O boca a boca (ou retweet a retweet) é tão rápido dele, que depois do primeiro boato depois da morte do Michael Jackson, foi questão de minutos para a notícia correr o mundo. Por outros meios, mesmo que digitais, demoraria mais para isso acontecer. Essa forma de distribuição de informação está ajudando e muito nas eleições do Irã, por exemplo, onde estão tendo uma forte censura do governo, e por lá, os iranianos estão tendo como falar para o mundo o que está realmente acontecendo. Atitude parecida está acontecendo no Brasil com o movimento ‘#ForaSarney’, mas não tem como compará-lo com o que está acontecendo no Irã.
O twitter é uma ferramenta que deu, está dando e vai dar muito que falar. A internet teve vários fenômenos que a modificaram, e o twitter é um deles. A forma de distribuição de informação e a proximidade que ele traz das empresas com os clientes ou com artistas com os clientes é algo que nem dá para se negar. O twitter está se melhorando e se adaptando a cada dia. Ele não substituirá outras redes sociais ou os blogs. Ele complementa estes, servindo de ferramenta de divulgação. Usado com sabedoria, o twitter é uma ferramenta única de marketing para qualquer pessoa e empresa. E também uma ferramenta única de se adquirir informação em tempo real. Por isso se você hoje fala mal do twitter, tente utilizar e experimentar, pois até eu falei mal da ferramenta e resisti 1 ano para começar a usar depois do meu cadastro. Se arrisque. O máximo que irá acontecer é você ter certeza que nem gosta.
Observação: A inspiração de fazer esse artigo foi um que li no blog gamacast, de ‘Renata Gama’: http://www.gamacast.blogspot.com/
