Categoria → softwares
Escrevendo uma extensão de Twitter para o Google Chrome utilizando o Google Web Toolkit(GWT)
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:
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.
Introdução ao UIBinder do GWT 2.0
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).
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 {}
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:
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.
Lançado o Google Web Toolkit(GWT) 1.7
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
Lançado o SmartGWT 1.1
Foi lançada a nova versão do SmartGWT 1.1. Esta versão se destaca pelo grande número de novidades. Além da correção de mais de 50 bugs desde a versão 1.0 b2, também tem alguns recursos interessantes. O principal é o GWT-RPC DataSource. Antes, para utilizar este recurso, você mesmo devia implementar uma classe de DataSource baseado em Remote Services ou copiar a implementação já pronta do fórum do SmartGWT. Acho que era uma recurso que faltava mesmo, que falta até mesmo no GWT-EXT(que podia ser contornado através da classe GWTProxy do GWT-EX-UX).
Mas os recursos não param por aí. Também tem uma série de componentes novos, suporte a GWT 1.6, 14 idiomas(Português incluído) e muito mais.
Mas ainda acho que falta uma alternativa a Livegrid. Sei que é mais web2.0 esse conceito de Livegrid, mas acho que Grids no modo antigo(botão voltar, avançar, etc.) são mais fáceis de se achar. Eu prefiro uma Toolbar com a opção de voltar, avançar, etc. do que uma barra de rolagem apenas.
Mas no geral, o SmartGWT, em sua primeira versão estável(até agora era beta), está se mostrando superior a tecnologias parecidas, como o GXT(ExtGWT), GWT-EXT, Mosaic, entre outros. Na minha opinião é a melhor biblioteca de componentes RIA para GWT. Vale a pena testar.
Se estiver afim de conferir o showcase, fazer download, entre outros, visite o seguinte link:
http://code.google.com/p/smartgwt/
Lançada a versão final do GWT 1.5
Depois quase 5 meses depois do lançamento do primeiro Milestone do GWT 1.5, é lançada a versão final do mesmo. Não cheguei a trabalhar muito com a versão 1.4, pois quando comecei a utlizar esta framework, já comecei na versão 1.5 Milestone 1. Mas a evolução de lá para cá foi bem visível. Suporte a LinkedHashMap, LinkedList, a Java 5(Annotation, Enums, Generics e afins), entre muitas melhorias. O Javascript gerado também ficou melhor e com uma performance melhor. Mais informações podem ser encontradas no blog oficial do projeto.
E para quem ainda não conhece a framework, pode conhecer mais sobre ela e fazer download da mesmaem site oficial.
Novo software para TV Digital em Java garante mais aplicações de interatividade
São Paulo, 05 de março de 2008 – A SBTVD (Fórum do Sistema Brasileiro de TV Digital Terrestre) anunciou nesta quarta-feira que vai desenvolver em parceria com a Sun Microsystems uma variação do Ginga em código Java para aumentar as aplicações de interatividade nos conversores de TV Digital. A nova solução ficará pronta em três meses e será colocada gratuitamente na Internet para que qualquer fabricante use nos set-top boxes.
De acordo com as empresas, o grande diferencial da solução é que, além dos fabricantes de equipamentos, os rádiodifusores estarão livres de custos na difusão de conteúdo interativo. O acordo permitirá que empresas globais utilizem a tecnologia Java para criar e implementar ferramentas de interface e serviços para TV interativa aos brasileiros que adotarem HDTV e dispositivos móveis para o ISDB-T, padrão brasileiro de TV digital.
Ginga é formado por um conjunto de tecnologias padronizadas e inovações brasileiras. Nas especificações do software de interatividade de código aberto está incluída a tecnologia GEM – desenvolvido por um grupo de empresas européias. Por pertencer às produtoras estrangeiras, os que usarem esse Ginga teriam de pagar royalty.
“O que faremos será desenvolver um código fonte sem a tecnologia GEM para que as fabricantes de equipamentos e radiodifusores fiquem livres dos custos”, explica Luiz Fernando Maluf, diretor de estratégia de governo para as Américas da Sun Microsystems.
O novo módulo que será desenvolvido pela Sun e SBTVD é comum a todos os sistemas mundiais. Isso significa que os conversores de TV Digital com interatividade, que ainda não estão à venda no mercado brasileiro, serão compatíveis com outros sistemas, como o norte-americano, europeu e coreano.
A tecnologia Java é um componente-chave da nova solução de código aberto e ajudará a viabilizar serviços interativos. A especificação será baseada na mesma plataforma Java já utilizada como base para outros padrões de TV digital amplamente utilizados, incluindo OpenCabel/tru2way, Platform Home Multimedia, GEM-IPTV e Blu-ray Disc/BDJ.
Fonte: http://wnews.uol.com.br/site/noticias/materia.php?id_secao=4&id_conteudo=10294
Google vs Linux vs Photoshop: O que isso tem a ver?
O que a Adobe(Photoshop) tem a ver com a Google e o que a Adobe tem a ver com o Linux? Quase todos que trabalham o já trabalharam o Editoração, Design(Web ou não), etc. e usam Linux por opção afirmar uma coisa: “Se tivesse versões do Photoshop e Flash para Linux eu migrava de vez”.
A muito tempo existe o Wine, que foi o maior Alpha da história(usuários Linux alegam ser o Windows, mas isso é outro história). Para quem não conhece, o Wine é uma camada semelhante á um emulador(e o acrônimo já diz que “Wine Is Not Emulator”) que tem como finalidade ser uma implementação da API do Windows em sistemas operacionais Unix. Ou seja, fazer com que programas desenvolvidos para Windows rodem em sistemas Unix sem problemas. Mas o problema está realmente neste “sem problemas”. Quem já tentou configurar o Wine para rodar alguma coisa mais avançada, viu que a tarefa não é fácil e nem trivial. Faz tempo que não utilizo ele, mas me lembro que uma nova versão em alguns casos ficava mais incompatível que uma anterior para um tal software. Descobrir que versão utilizar com tal software era uma dor de cabeça. Me recordo que já utilizei o Flash MX 2004, o Dreamweaver MX 2004, o Counter Strike(versão sem Steam), o Internet Explorer 6(IE6 no Linux é o pesadelo de qualquer xiita) e o Max Payne 1(com alguns problemas). Mas fora disso nada.
Mas voltando ao assunto e explicando como tudo isso se junta. Para quem acompanha notícias da área de tecnologia, já deve ter pelo menos ouvido falar que ‘o Google está patrocinando a equipe do Codeweaver no melhoramento da compatibilidade do Photoshop CS e CS2 no Wine’. Essa Codeweaver desenvolve um produto(pago) para isso, e o Google pelo o que entendi quer que o Wine forneça isso “de gratís e sem custo adicional” para todos.
Mas me pergunto? Qual o interesse do Google em ter o Photoshop funcionando no Linux? Isso devia ser interesse da Adobe não é? Eu digo que Não. Todos os heavy-users de Photoshop já utilizam Windows ou MacOS. Para a Adobe não importa ter o Photoshop rodando em Linux, sendo que o público dela já utiliza outros SO’s. E para ela esse papo de ‘liberdade de escolha de SO’ não vale nada. O que vale é o lucro dela. E com certeza eles não vêem Photoshop em Linux como investimento.
Mas a Google sim. Eles estão cada vez mais investindo mais em Open-Source. Android, GTalk/Jabber, o Google Code e os incentivos a Mozilla Foundation(segundo noticias, dizem que 85% do faturamento da mesma vem do Google) e vários outros projeto provam isso. Eles estão agora apoiando o Wine. O que eles querem?
Eu tenho uma teoria. Todo aquele papo de Goobuntu(que existe como Linux usado internamente na Google) e que ele seria ser lançado a qualquer momento pode se tornar real. Eles tem um S.O para celulares. O que impede eles de fazer o mesmo para desktops? Eles teriam mais um S.O Linux(o kernel do Android é Linux) que rodaria os maiores produtos para Windows. O gOS, que é um Linux com algumas facilidades do Google, já faz algum sucesso, e nem é da Google. Uma oficial do Linux com certeza seria um sucesso. Tudo bem, não acabaria com o Windows e não faria com que algumas pessoas dormissem em paz com o “maléfico Windows” destruido e enterrado. Mas acho que conseguiria um bom lugar no mercado, se for algo bem feito e bem fácil de se utilizar. Ou seja, é esperar para ver o que acontece.
Cursos Gratuitos de Java pela Web
No site http://jedi.wv.com.br/ é possível se inscrever para alguns cursos online voltados para aprendizado da linguagem Java e tecnologias relacionadas. Os cursos são disponibilizados pela iniciativa JEDI (Java Education and Development Initiative) em conjunto com o grupo de usuários Java do Distrito Federal(DFJUG). Estão disponíveis os seguintes módulos:
- Introdução à Programação I
- Introdução à Programação II
- Estruturas de Dados
- Engenharia de Software
- Programação WEB
- Desenvolvimento de Aplicações Móveis
Me inscrevi para o de Engenharia de Software. Logo quando concluir eu comento mais sobre.
Da onde copiei: Site com cursos gratuitos sobre Java
Sun paga US$ 1 bi e compra MySQL AB
Fonte: http://info.abril.com.br/aberto/infonews/012008/16012008-5.shl
SÃO PAULO – A Sun Microsystems fechou acordo com a desenvolvedora sueca MySQL AB e vai adquirir a empresa.
O CEO da Sun, Jonathan Schwartz, concordou em pagar US$ 1 bilhão para controlar a companhia que desenvolve o banco de dados aberto mais popular do mundo.
O MySQL está instalado em mais de 10 milhões de máquinas no mundo e é utilizado pelo sistema de buscas do Google, no engine do Facebook e está presente, por exemplo, nos produtos da Nokia.
Com a compra, a Sun acredita que poderá usar sua força para aproximar o MySQL de um número maior de grandes corporações
Testando o Windows Live Writer
Olá. Essa mensagem é apenas para testar o Windows Live Writer.
Hoje formatei o PC e como de praxe tive que reinstalar todos os softwares do PC novamente. Junto com o instalador do MSN(agora Windows Live Messenger), veio a opção de instalar esse software. Já tinha lido a respeito, mas nunca me interessei muito, pois nunca levei nenhum blog meu muito a sério. Mas resolvi testar e vou aproveitar para fazer uma rápida ánalise. A instalação é bem sossegada(como qualquer software para Windows). Quando você abre o Windows Live Writer, ele abre um “Wizard” para a configuração do seu blog. Bom, lá digitei o endereço deste blog(http://blog.serathiuk.com), o meu login e minha senha. Apertei o famoso “next” e ele foi para aquelas famosas telas onde você espera um monte e vai na cozinha buscar Coca-Cola(no meu caso foi Pepsi). Depois disso ele mostrou uma tela, mostrando que identificou que eu utilizava o Blogger e mostrou uma tela de finalizar. Pressionando finalizar, aparece um post em branco, já mostrando seu post no visual do seu blog. Ou seja, você tem um “preview” em tempo real, mais ou menos como a parte de “design” do Dreamweaver.
A partir desta tela comecei a digitar essa mensagem. Se ela for postada, quer dizer que esse “treco” funciona.
O Windows Live Writer tem um visual que mistura Office 2003 com Office 2007. Tem no menu ao lado opções de adicionar vídeos, tabelas, mapas, imagens e algumas coisas. Na barra acima, as opções de formatação de texto.
Pressionando F12 você visualiza o post e pressionando F11 volta para o modo de edição.
Bom, é isso. Esse texto pode parecer meio confuso(ou não), mas é que estou digitando ele enquanto testo. Mas é isso. Vou enviar para ver no que vai dar. E se você leu até aqui, é obvio que funcionou. eheheh. Mas é isso. Até a próxima.
Edit: Só para testar o recurso de alterar.