Ser um programador com certificação em Java é um trunfo importante para sua alocação no mercado de trabalho, principalmente se você deseja trabalhar fora do Brasil...
Se você pretende ou já está estudando para a certificação Java a
internet, como sempre, é uma ótima ferramenta de pesquisa e estudos.
No site http://www.michael-thomas.com/ você encontrará diversas
informações sobre a certificação Java e links para outros sites
relacionados.
O nome do site é Free Java Certification Training.
Outros sites sobre certificação Java:
http://www.jchq.net/
http://www.javaprepare.com/
http://www.levteck.com/
quinta-feira, 21 de agosto de 2008
Certificação JAVA (SCJP)
Futuro do emprego em TI
Os profissionais de TI mais requisitados pelas corporações no ano de 2010 provavelmente não serão aqueles com habilidades técnicas arraigadas. Nos Estados Unidos, as funções mais práticas de programação e suporte terão sido totalmente terceirizadas no país ou de forma offshore até o fim da década. Os departamentos de TI serão povoados por “profissionais versáteis” – indivíduos que têm background em tecnologia, mas também conhecem a área de negócio a fundo, elaboram e executam planos de tecnologia em sintonia com o foco da empresa e cultivam muito bem relações dentro e fora da organização.
Este é o cenário desenhado por três empresas de pesquisa que fizeram uma projeção de como será o mercado de TI em 2010 – o ano que marca o ápice da década dos profissionais versáteis. Mas o que está provocando esta evolução? Dentre os vários motivos encontrados estão as mudanças de comportamento do consumidor, aumento de fusões e aquisições, terceirização, proliferação de dispositivos móveis e crescimento do volume de dados armazenados.
Além disso, também é um consenso o fato de que as habilidades exigidas para desempenhar estas funções técnicas no futuro serão desenvolvidas fora da área de TI. Algumas destas habilidades virão de talentos artísticos, excelência em matemática ou até capacidade de falar em público, produzindo uma combinação de características pessoais que não costumam ser vistas no mundo de TI.
Este novo mundo vai reunir expertise em áreas como engenharia financeira, tecnologia e matemática, gerando a próxima leva de ferramentas e tecnologias criativas. Google, eBay e Yahoo já estão contratando gurus em matemática, análise financeira, engenharia e tecnologia que vão criar algoritmos imaginativos para suprir as necessidades online de usuários. A National Academy of Sciences identificou uma área de conhecimento emergente que combina capacidades tecnológicas com habilidades artísticas e criativas. O desenvolvimento de jogos para computador é um exemplo de como isso pode ser aplicado na prática.
*Tradução do Computerworld/EUA
mais em:
http://idgnow.uol.com.br/carreira
Curso de Java - Rio de Janeiro
Muitos me perguntam qual o melhor curso de Java do rio de janeiro, e eu respondo na hora, O curso do Carlos Ribeiro.
Além de ter um preço muito bom em relação a outros cursos, a maneira que ele ensina é excelente.
Mas uma dica, não chegue lá sem saber nada de JAVA, sem nunca ter visto, procure estudar um pouco antes, até sozinho mesmo.Tenha conhecimento de Packages,Herança,Polimorfismo. No curso você aprende, mas é sempre bom chegar sabendo um pouco.
confira o site do curso de java
http://www.carlosribeiro.com
SymbianOS
SymbianOS
é um sistema operativo criado para rodar nos telemóveis "multimédia" com suporte para cameras fotográficas MMS wireless bluetooth, entre outras funções.Este sistema operativo é predominantemente baseado em um ambiente gráfico bastante simples. Actualmente é utilizado na maioria dos recentes modelos de telemóveis dos grandes fabricantes.
A grande preocupação do Symbian OS é evitar ao máximo o desperdício dos recursos do celular, como bateria e memória. Para isso ele conta com diversos mecanismos que são eficientes ao tratar com esses problemas. Em sua versão mais nova, a 9.5, foi reduzido o consumo de memória em 30% em relação a versão anterior. Atualmente o Symbian lidera como sendo o SO mais utilizado em smartphones, a frente do Linux, do Windows Mobile, entre outros.
História
O Symbian é um consórcio de várias empresas, fundado em 1998 e que está em plena operação até os dias de hoje. Atualmente fazem parte do consórcio as empresas Nokia, Siemens, Samsung, Ericsson, SonyEricsson e Panasonic. Empresas não-pertencentes ao consórcio podem licenciar o Sistema Operacional para utilização em seus produtos.
Era a empresa que fornecia o sistema EPOC 32 que equipava os handhelds da inglesa Psion no início da era de equipamentos portáteis por volta de 1998. A própria Psion era a maior acionista da empresa e investia bastante para conseguir uma fatia do mercado de sistemas operacionais de aparelhos portáteis. As outras empresas que faziam parte da Symbian eram Nokia, Motorola e Ericsson.
Com a explosão de consumo dos telefones celulares, a Symbian começou a desenvolver sistemas para as grandes empresas do ramo, principalmente Nokia, Ericsson e Motorola. A grande maioria dos celulares modernos de hoje são operados pelo sistema operacional da Symbian. Ele é um sistema totalmente modular, e permite que cada empresa crie sua própria interface. Portanto este sistema não tem uma cara definida. Pode ser um simples sistema de textos em telas monocromáticas, ou um completo sistema operacional tão potente como o PalmOS ou PocketPC que já pode ser encontrado nos SmartPhones da Nokia, SonyEricsson, Foma, Siemens, Motorola, dentre outras.
Plataforma para desenvolvimento
SymbianOS é um sistema operacional muito versátil, permite o desenvolvimento de aplicativos em diversas linguagens como:
* Symbian C/C++
* JavaME
* FlashLite
* Perl
* Python
* Ruby
* Lua
* Acelarometer
GTA IV para PC
Veja novas imagens de 'GTA IV' para computador
Game de ação terá visual melhorado e opção para gravar replays.
Versão para PCs do jogo recordista de vendas chega em novembro.
LightBox - efeito interessante
Você com certeza já viu em sites de conteúdo um efeito interessante ao clicar nas fotos que o site publica. Uma camada se abre com um efeito interessante e a foto aparece.
Veja como é simples implementar...
importe os seguintes js
<script src="http://www.prototypejs.org/assets/2008/1/25/prototype-1.6.0.2.js" type="text/javascript"></script>
<script src="http://www.huddletogether.com/js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>
<script src="http://www.huddletogether.com/js/lightbox.js" type="text/javascript"></script>
importe agora um css(estilo)
<link rel="stylesheet" href="http://www.huddletogether.com/css/lightbox.css" type="text/css" media="screen">
repare agora, como ficará sua tag
<a< e a tag <img<
<a href="http://www.huddletogether.com/projects/lightbox2/images/image-1.jpg" rel="lightbox" onclick="javascript:pageTracker._trackPageview ('/outbound/www.huddletogether.com');"><img src="http://www.huddletogether.com/projects/lightbox2/images/thumb-1.jpg" alt="" border="1" height="40" width="100" />
<a href="http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg" title="Optional caption." rel="lightbox" onclick="javascript:pageTracker._trackPageview ('/outbound/www.huddletogether.com');"><img src="http://www.huddletogether.com/projects/lightbox2/images/thumb-2.jpg" alt="" border="1" height="40" width="100" /></a></a></p><a href="http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg" title="Optional caption." rel="lightbox" onclick="javascript:pageTracker._trackPageview ('/outbound/www.huddletogether.com');">
só isso,clique na foto para ver o efeito
sábado, 9 de agosto de 2008
Login com JSF
A primeira abordagem é uma implementação manual, que nesta versão só verifica se o usuário ja esta logado, mas é possível estende-la facilmente para utilizar grupos.
Primeiro vamos começar com a configuração do web.xml …
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.SecurityException</exception-type>
<location>/login.jsf</location>
</error-page>
</web-app>
Como podem ver, eu criei uma aplicação WEB com servlets 2.5, estou utilizando JSF 1.2, mas para este exemplo a versão não faz muita diferença, e configurei o servlet container para que no caso de uma java.lang.SecurityException ele redireccione para a página de login da aplicação.
Depois disto, vamos começar a escrever alguns beans, vou utilizar dois beans simples, um para gerenciar o login:
package br.com.urubatan.jsfjpasec;
public class Login {
private boolean loginOk;
private String userName;
private String password;
public boolean isLoginOk() {
return loginOk;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String validateLogin(){
if(userName!=null && password!=null && !userName.equalsIgnoreCase(password)){
loginOk = true;
return "secpage";
}else return "login";
}
}
É uma classe bastante simples, ele tem 3 propriedades, o nome e senha do usuário, e uma propriedade dizendo que o login esta OK, este é o ponto de extensão para adicionar suporte a grupos mais tarde se quiserem.
E este bean que vai conter todos os dados da aplicação (neste exemplo, dados estáticos), ele tem duas propriedades que possuem dados estáticos apenas para este exemplo, se quiserem utilizar JPA basta misturar com este exemplo ou com um destes.
package br.com.urubatan.jsfjpasec;
import java.util.List;
import java.util.ArrayList;
public class SomeData {
private List<String> data = new ArrayList<String>();
private List<String> securedData = new ArrayList<String>();
private boolean loginOk;
public SomeData() {
for(int i=0;i<10;i++){
data.add("Dados Simples " + i);
securedData.add("Dados Seguros " + i);
}
}
public void setLoginOk(boolean loginOk) {
this.loginOk = loginOk;
}
public List<String> getSecuredData() {
if(!loginOk)
throw new SecurityException();
return securedData;
}
public List<String> getData() {
return data;
}
}
Como podemos ver, ele possui apenas os getters dos dados, e o método de leitura dos dados seguros, verifica a propriedade loginOk que deve ter sido fornecida pelo bean de login, vamos configurar isto no faces-config.xml a seguir.
Caso o usuário não tenha se identificado ainda, apenas geramos uma SecurityException e o container cuida de mandar isto para a página de login, como foi configurado no web.xml.
Agora um pouco mais de XML, vamos configurar os navigation cases necessários para a aplicação e os relacionamentos entre os beans ja criados, no caso, configurar a propriedade loginOk do bean de dados com a mesma propriedade do bean de login.
<?xml version='1.0' encoding='UTF-8'?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<managed-bean>
<managed-bean-name>login</managed-bean-name>
<managed-bean-class>br.com.urubatan.jsfjpasec.Login</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>mdata</managed-bean-name>
<managed-bean-class>br.com.urubatan.jsfjpasec.SomeData</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>loginOk</property-name>
<property-class>java.lang.Boolean</property-class>
<value>#{login.loginOk}</value>
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>
login
</from-outcome>
<to-view-id>
/login.jsp
</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>
secpage
</from-outcome>
<to-view-id>
/secureView.jsp
</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
</faces-config>
Os casos de navegação nesta aplicação bastante complexa são utilizados apenas pelo bean de login, no método que valida o login (baita validação, apenas verifica se foram informados um nome e uma senha e se os dois não são iguais, mas este é outro problema )
Com isto toda a lógica necessária para a aplicação esta pronta, falta apenas criarmos as páginas utilizadas, então segue o código delas:
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<html>
<head><title>System Login</title></head>
<body>
<f:view> <h:form>
<h:panelGrid columns="2">
<h:outputLabel value="User Name" for="un"/>
<h:inputText id="un" value="#{login.userName}"/>
<h:outputLabel value="Password" for="pw"/>
<h:inputText id="pw" value="#{login.password}"/>
</h:panelGrid>
<h:commandButton value="Login" action="#{login.validateLogin}"/>
</h:form>
</f:view>
</body>
</html>
Como podemos ver é apenas uma página JSF simples com um formulário e dois campos, chamando o método vaidateLogin de um bean de nome login.
dataView.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<html>
<head><title>Unsecured Data Page</title></head>
<body>
<f:view>
<h:dataTable value="#{mdata.data}" var="v">
<h:column>
<f:facet name="header">
<h:outputText value="Data List"/>
</f:facet>
<h:outputText value="#{v}"/>
</h:column>
</h:dataTable>
<h:panelGrid columns="3">
<h:outputLink value="dataView.jsf">
<h:outputText value="Data that every one can access"/>
</h:outputLink>
<h:outputLink value="secureView.jsf">
<h:outputText value="Data that you can view after login"/>
</h:outputLink>
<h:outputLink value="login.jsf">
<h:outputText value="Login"/>
</h:outputLink>
</h:panelGrid>
</f:view>
</body>
</html>
Como podemos ver também é uma página bem simples, com apenas uma dataTable listando os dados da propriedade data de um bean de nome mdata.
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<html>
<head><title>Secured Data Page</title></head>
<body>
<f:view>
<h:dataTable value="#{mdata.securedData}" var="v">
<h:column>
<f:facet name="header">
<h:outputText value="Data List"/>
</f:facet>
<h:outputText value="#{v}"/>
</h:column>
</h:dataTable>
<h:panelGrid columns="3">
<h:outputLink value="dataView.jsf">
<h:outputText value="Data that every one can access"/>
</h:outputLink>
<h:outputLink value="secureView.jsf">
<h:outputText value="Data that you can view after login"/>
</h:outputLink>
<h:outputLink value="login.jsf">
<h:outputText value="Login"/>
</h:outputLink>
</h:panelGrid>
</f:view>
</body>
</html>
Esta também é uma página simples, praticamente igual a anterior, mas desta vez, lendo a propriedade securedData do bean mdata, nesta propriedade o bean verifica se o usuário tem acesso, caso contrário gera uma excessão.
por último temos a página index.jsp que apenas possui um link para a página dataView.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Entry Page</title></head>
<body>Entry Page, this could redirect to the JSF Index, but for now, click here: <a href="dataView.jsf">JSF Index</a>
</body>
</html>
com isto temos uma implementação bem simples de um login em uma aplicação JSF, bom para quem esta começando a estudar a tecnologia.
Como melhorias poderíamos mudar a propriedade loginOk para um Map<String,Boolean> tendo como chave os nomes dos possíveis grupos e como valores veradeiro se o usuário pertence aquele grupo.
Outra melhoria interessante seria utilizar um h:inputSecret para a senha em vez de um inputText como estou utilizando no exemplo.
Outra possível melhoria seria utilizar uma combinação de anotações e AOP como esta implementado no Spring-Annotations. (se quiserem posso postar outro dia um exemplo de implementação de segurança com o SA).
Uma outra possível alteração seria utilizar JAAS para a segurança declarativa e deixar isto por conta do container.
Agora algumas perguntas para vocês:
- Quais outras possíveis melhorias vocês vêem neste exemplo?
- Quais problemas vocês vêem nesta implementação?
- Vocês gostariam de outros exemplos deste estilo aqui no blog?
- Vocês já estão utilizando JSF?
Acho que era isto, espero que o exemplo seja útil para alguém
PS.: para os que forem rodar a aplicação, são necessários apenas os jars: jstl.jar, jsf-api.jar e jsf-impl.jar (se forem utilizar a JSF-RI como eu).
fonte:http://www.urubatan.com.br/implementando-login-com-jsf-exemplo-simples/
terça-feira, 29 de abril de 2008
Framework Struts - O que é
Struts é um Framework baseado para WEB e tem se tornado, de fato, padrão na comunidade J2EE. O Struts provê uma implementação do modelo MVC-2 para construções de aplicações WEB [DUDNEY e SONS, 2003].
O Framework Struts foi criado por Craig R. McClanahan e doado para a ASF ( Apache Software Fundation ) em 2000. Crayg esteve envolvido na especificação de uma grande parte da implementação do servlet container TOMCAT 4.
O nome Struts deve-se ao papel por ele desenvolvido nas aplicações WEB. Da mesma forma que a construção de uma casa, ponte, prédio necessitam de uma base mantenedora, os engenheiros de software usam o Struts para suportar cada camada de uma aplicação comercial.
A estrada para o sucesso das aplicações WEB é um caminho árduo, despdendo suor de pesquisadores e também do próprio desenvolvedor. Neste caso, como aplicação WEB, fica subentendido de que esta não é apenas uma aplicação trivial, composta por um formulário contendo dois ou três campos que são armazenados em um banco de dados; mas sim uma aplicação robusta que atravessa diversas camadas, utiliza diferentes tecnologias, cobertas por análise e utilização de design-patterns .
O projeto e desenvolvimento deste tipo de aplicação levam os desenvolvedores para o limite da lógica. Soluções mirabolantes são criadas para resolução de certos problemas. Algumas destas soluções funcionam, outras não.
A interface de usuãrio (UI - User Interface) no Smalltalk-80 foi projetada sobre o framework M VC (Model, View, Controller) . Com o passar do tempo este framework tem sido adaptado e utilizado em diversos cenários. O Framework Struts, criado por Craig R. McClanahan e doado para a Fundação Apache ( Apache Software Foundation ) em 2000, é uma implementação de código aberto do Modelo 2, bastante similar ao modelo MVC. Este artigo tratará das tecnologias envolvidas no Framework Struts, ja que este não é uma tecnologia específica, mas sim um conjunto de diversas tecnologias que tornam o seu aprendizado ainda mais desafiador. Estas tecnologias serão apresentadas no exemplo proposto no artigo.
Frameworks de Aplicação
Um framework de aplicação é uma aplicação reutilizável e semicompleta que pode ser especializada para produzir aplicações personalizadas [SPIELMANN, 2003]. As aplicações, de um modo geral são bastante semelhantes. Estas são executadas em um mesmo computador, esperam uma entrada de um dispositivo, produzem as mesmas exibições e gravam os dados no mesmo disco rígido.
Os desenvolvedores que trabalham em aplicações eletrônicas convencionais estão acostumados a kits de ferramentas e a ambientes de desenvolvimento que aproveitam a igualdade entre as aplicações [HUSTED et al]. Os frameworks da aplicação fornecem uma base comum reutilizável podendo servir como fundação para um produto específico.
Um Framework de aplicação deve possuir as seguintes características [CAVANNES, 2003]:
* Compreende múltiplas classes ou componentes, cada qual provê uma abstração de um conceito em particular;
* Define como estes conceitos trabalharão juntos para resolver um determinado problema;
* Componentes reutilizáveis;
* Permitem um alto nível de padronização.
O termo framework pode ter ainda outros conceitos, muitos consideram as classes e interfaces do SDK Java um framework, mas estes na verdade, fazem parte de uma biblioteca [CAVANNES, 2003].
Uma bibliteca de software contem funções ou rotinas que a aplicação pode invocar. Um Framework, provê componentes genéricos, que coperam entre si, de modo que o desenvolvedor possa extender para uma aplicação em particular. Os pontos onde o framework pode ser extendido são conhecidos como extension points [CAVANNES, 2003].
fonte:http://www.javafree.org
SAP reduz preço de manutenção
O valor da manutenção de software é como uma vaga sagrada para os fornecedores de software corporativo. O valor mensal pago pela manutenção e suporte de cada licença de software – geralmente de 20% a 25% do valor anual da licença – dá a empresas como SAP e Oracle uma boa parte de resultados anuais. Alguns analistas estimam que a receita recorrente advinda da manutenção responde por cerca de 50% das vendas de muitos fornecedores de aplicativos.
“A manutenção é a parte mais rentável dos negócios”, diz Ray Wang, analista do Forrester Research. “Isso porque lá pelo quarto ou quinto ano de contrato, ele representará de 60% a 80% da rentabilidade daquele contrato”. Para os que estão do outro lado do balcão, a realidade econômica pode trazer alguma dor de cabeça.
Tipicamente, as empresas compram software corporativo a cada dez anos. A uma taxa anual de 20% a 25% do preço de manutenção da licença, ao final de cinco anos o software foi comprado novamente – e isso somente para manter o aplicativo, diz Wang. “Em dez anos, você comprou o aplicativo duas vezes e há poucas pessoas que podem nos dizer que obtiveram valor, por duas vezes o valor do software, ao longo de dez anos”.
Apesar disso, os fornecedores de softwares corporativos continuam relutantes em alterar qualquer parte deste acordo, que vem sendo mantido há décadas. Em janeiro deste ano, a SAP, sem muito alarde, anunciou que a partir de fevereiro, estaria colocando em prática sua oferta de suporte básico – o Basic Support – para os novos clientes (taxa de 17%, o que é uma barganha para muitas empresas).
Com o novo modelo, os clientes da provedora contam com serviços como: resolução de problemas, gerenciamento de qualidade, padrões SAP para de sua suíte de aplicativos, assim como transferência de conhecimento e ampliação contínua. Além disso, os clientes teriam acesso ao SAP Solution Manager (uma plataforma de suporte) e ao SAP Service Marketplace (uma plataforma que integra clientes, a companhia e parceiros de serviços).
Por outro lado, os novos clientes da SAP agora têm que comprar seu plano de suporte corporativo, a uma taxa de 22%. De acordo com Andy Kandzie, porta-voz da SAP, este plano é “a próxima geração de oferta de suporte e provê processos de gerenciamento de aplicativos e de qualidade integrados para todas as soluções utilizadas pelo cliente”.
O plano oferece mais serviços aos clientes da empresa, como: um pool de consultores de suporte disponível 24x7; uma versão aprimorada da plataforma Solution Manager; e uma nova metodologia, chamada Run SAP, para padronização de processos corporativos em SOA.
Quando a SAP fez estas alterações em suas licenças, no entanto, não houve um anúncio formal ou público da companhia sobre elas. “Esta provavelmente não foi uma das coisas sobre as quais a SAP queria fazer barulho. Geralmente, quando você reduz preços, não quer falar sobre isso”, analisa Wang.
mais em:
http://www.channelworld.com.br/tecnologia/2008/04/11/sap-reduz-preco-de-manutencao-para-novos-clientes/
Solaris em notebook
Sun firma parceria para distribuir Solaris em notebook
Acordo com a Tecnoworld prevê distribuição OEM do sistema operacional Solaris 10 X86 em notebooks e também a suíte de escritório StarOffice 8.
Por Camila Fusco, do COMPUTERWORLD
A Sun Microsystems anunciou nesta quinta-feira (19/04) uma parceria com a fabricante Tecnoworld para a distribuição OEM do sistema operacional Solaris 10 X86 em notebooks.
O acordo também inclui a suíte de escritório StarOffice 8 e as máquinas começarão a ser comercializadas nas regiões Sul e Sudeste a partir de 1.900 reais, dependendo da configuração.
fonte:
http://www.channelworld.com.br/tecnologia/2007/04/19/idgnoticia.2007-04-19.3723574305/