Arquivos mensais: junho 2011

Ubuntu com visual de Mac OS

Para você que usa linux e adora o visual do Mac OS existe o Macbuntu um tema que deixará seu linux igual ao Mac OS sem muito esforço.
Basta apenas executar o Macbuntu que ele fará todo o trabalho, mudará o tema, tela de login e até mesmo o som padrão do seu linux, é um tema fácil de instalar e muito bonito. Você pode fazer o download aqui.
Agora que você já fez o download, extraia o arquivo baixado. Para instalar vamos executar no terminal o arquivo install.sh, para isso entre pelo terminal na pasta que foi criada após a extração e execute o comando abaixo:

./install.sh

Se aparecer alguma mensagem de erro ou incompatibilidade você poderá usar o comando

./install.sh force

que irá forçar a instalação, depois é so confirmar a instalação com um enter e seguir as instruções na tela.

O Macbuntu também possui temas para o Thunderbird https://addons.mozilla.org/en-US/thunderbird/addon/leopard-mail-default-aqua/ e para o Firefox https://addons.mozilla.org/en-US/firefox/addon/macosx-theme-12782/

É isso ai, até a próxima!

Os Games mais esperados de 2011

Todos os anos as grandes  empresas do ramo dos games lançam uma avalanche de  novos jogos, e a sequência de séries já consagradas no mercado. Como sempre acontece, alguns jogos tem um sucesso avassalador com vendas que chegam aos milhões e outros decepcionam, não correspondendo as expectativas dos jogadores que estão cada vez mais exigentes.

Vejamos agora uma lista com alguns dos jogos que já foram ou serão lançados em 2011:

Brink

brink

Brink é um jogo de tiro em primeira pessoa distribuido pela Bethesda (produtora de Fallout 3), e se passa em 2035, quando uma série de catástrofes ambientais passou a impedir a vida humana no planeta Terra. O único local que se mantém seguro para a vida humana é uma cidade flutuante isolada do resto do mundo, intitulada The Ark. Como é de praxe, porém, a humanidade não parou de se destruir e agora existem duas facções dentro da cidade: The Security e The Resistance.

O jogo Foi Lançado Oficialmente no Brasil dia 12 de maio e conta com o sistema inovador chamado SMART que permite que você faça movimentos de Le Parkour enquanto atira. Em BRINK há uma infinidade de customizações possíveis e principalmente possibilita a fusão entre o singleplayer e o multiplayer, com um sistema parecido com Left 4 Dead 2.

Ta ai um ótimo game para quem gosta de muita ação.

Requisitos para rodar o game no PC.

SO:  Windows XP ® / Windows Vista ® / Windows Seven®

Processador Intel Core 2 Duo Com frequência igual ou superior a 2,4 GHz

Memoria Ram: 1gb (Windows XP) / 2gb (Windows vista /Seven)

placas vídeo / som: vídeo NVIDIA 8800 gs ou AMD Radeon HD 2900 pro /Som: Placa compatível com directx.

Disco Rigido: 8Gb

CRYSIS 2

Crysis2

O mundo foi devastado por desastres climáticos e a sociedade está à beira da ruína total. Agora, os alienígenas retornaram com uma força invasora plena e pretendem aniquilar completamente a humanidade. Para começar, vão rasgar o coração da cidade mais icônica da Terra, Em Nova York, invasores alienígenas aterrorizantes perambulam pelas ruas e uma praga implacável ataca milhões de habitantes com uma epidemia que se espalha a uma velocidade brutal. Os sistemas da cidade estão em caos, as ruas e os prédios estão em ruínas flamejantes. Esta é uma Nova York como você nunca viu.

Nem paramilitares nem o poderio do exército dos EUA podem fazer frente aos invasores. Todos que decidiram resistir estão condenados à morte. Para simplesmente sobreviver neste turbilhão mortal, é preciso ter uma tecnologia que ultrapasse os limites conhecidos por um soldado moderno.

Um homem vai herdar o que é preciso para sobreviver. Um supersoldado, portador da tecnologia de intensificação de combate do futuro com Nanotraje 2, vai ser a última esperança para salvar a humanidade da destruição na selva urbana de Nova York.

Crysis 2 Chegou ao brasil no dia 7 de abril, o grande destaque desta nova edição são os modos para vários jogadores. Serão seis ao todo, que aproveitarão os 12 mapas na Nova York devastada, com diferentes estilos de jogabilidade. ‘Crysis’ original ficou famoso por levar muitos computadores ao limite com seus gráficos. ‘Crysis 2’ deve manter o visual de ponta e agora estará disponível também nos consoles Xbox 360 e PS3, propiciando também 3D.

Outro Ótimo game para quem gosta de muita ação e tiroteios alucinantes.

Requisitos para rodar o game no PC.

SO:  Windows XP ® / Windows Vista ® / Windows Seven®

Processador Intel Core 2 Duo ou AMD Athlon 64 X2 Com frequência igual ou superior a 2 GHz

Memoria Ram: 2 GB

placas vídeo / som: Vídeo NVIDIA 8800 GT ou ATI HD 3870 /som compativel com Versão do DirectX: 9.0c

Disco Rigido: 9gb

MAX PAYNE 3

MaxPayneMax Payne 3 começa 12 anos depois dos eventos de Max Payne 2, com o Max visivelmente mais velho, mais violento, e mais cansado dos eventos da sua vida. Tendo abandonado a polícia de Nova York, Max tem recebido trabalhos estranhos de proteção pessoal e consultoria, e o encontramos  protegendo uma família rica em Sao Paulo, uma das cidades mais mortíferas e cheias de crime do mundo.

Absolutamente no fundo do poço, Max descobre que problemas ainda o perseguem em todo o lado e ele é puxado para o centro brutal do negro submundo do Brasil. Max Payne 3 continua com muitas características dos seus predecessores; um foco na história e personagem com ação, um grande número de armas sofisticadas com dupla capacidade de segurar várias armas, o ullet time, e com painkillers, temática maduras e o sempre presente monólogo de max payne, max payne 3 também utiliza natural motion e a engine da rockstar, a Rage, a trabalhar com uma nova tecnologia de física de partículas que irá entregar um combate espetacular com avançadas cenas de corpo-a-corpo, um sistema de cobertura inteligente e variedade de jogabilidade em cada nível.

O  lançamento previsto é para Novembro de 2011.

Como o Jogo ainda está em produção não há requisitos de sistema.

 

DUKE NUKEM FOREVER

duke nukem forever

A série de tiro em primeira pessoa Duke Nukem sempre cativou os jogadores por seu enredo politicamente incorreto. O jogo foi um dos primeiros da história do videogame a contar com a aparição de prostitutas e o uso descarado de drogas — quem não lembra das dançarinas de Duke Nukem 3D e dos esteróides que o herói utilizava para recuperar energia? A série sempre foi famosa por sua violência barata e diálogos de baixo calão, e agora Duke Nukem Forever promete eternizar a série após mais de dez anos de seu anúncio inicial.

Depois de anunciar e adiar repetidamente as datas de lançamento, a 3D Realms anunciou em 2001 que iria simplesmente lançar “quando estivesse pronto”,Em 3de setembro de 2010, depois de 14 anos, Duke Nukem Forever foi oficialmente afirmado pela 2kgames como estando em desenvolvimento pela Gearbox Software, com lançamento anunciado para 10 de junho de 2011.

Requisitos para rodar o game no PC.

SO:  Windows XP ® / Windows Vista ® / Windows Seven®

Processador Intel Core 2 Duo 2.4 Ghz ou AMD Athlon 64 X2 2.6 Ghz

Memoria Ram: 2 GB

placas vídeo / som: Vídeo NVIDIA 8800 GT 512 MB ou ATI HD 3870 /som compativel com Versão do DirectX: 9.0c

Disco Rigido: 10 gb

MORTAL KOMBAT 9

Mortal Combat 9Mortal Combat 9 é um Reboot da série, reiniciando sua história. O jogo é extremamente sangrento e violento sendo taxado como doentio. O jogo tem 26 personagens Baraka, Cyrax,Ermac, Jade, Jax, Johnny Cage, Kano, Kung Lao, Liu Kang, Mileena, NIghtwolf, Noob Saibot, Raiden, Reptile, Scorpion, Sektor, SahngTsung, Sindel, Sonya, Stryker, Sub Zero. Além desses lutadores, o jogo disponibilizará 2 chefes ou bosses como muitos conhecem que são Goro e Shao kahn.

Quanto à jogabilidade, o novo game da série recebeu algumas novidades, como “Barra Especial”, dividida em 3 partes identificadas para cada tipo de golpe; “Fatalities”, o clássico sistema de seqüência de teclas; “Stage Fatalities”, fatalities especial de fase; “Modo Cooperativo” algo tipo Marvel vs. Capcom e também os “Combos”, totalmente reformulados.

O jogo já foi lançado para PS3 e XBOX e, segundo a produtora, não haverá versão para PC.

Agora é só escolher o game que mais se enquadra ao seu estilo de jogo e se divertir.

BOM GAME A TODOS.

Configurar Projeto CodeIgniter

Para iniciarmos o desenvolvimento com CodeIgniter precisamos, é claro, fazer o download no site http://www.codeigniter.com. Antes de iniciar um novo projeto sempre baixe a última versão disponível no site. Assim você estará trabalhando sempre com a versão mais recente do framework. Após o download você deve extrair o arquivo que virá no formato .zip, veja abaixo a estrutura do CodeIgniter:

As duas principais pastas são: system, onde estão armazenados os arquivos do framework e a pasta application, que é onde vamos salvar nossos arquivos PHP. Abaixo você pode ver a estrutura da pasta application, onde nós vamos trabalhar:

As pastas que nos interessam no momento são:
pasta config
Contém os arquivos de configuração da aplicação, como banco de dados e rotas.
pasta controllers
Ela armazenará os controladores da aplicação, que são os primeiros arquivos a serem chamados quando uma URL é digitada.
pasta models
Onde nós criaremos nossos arquivos de modelos. São os arquivos que se comunicam com o banco de dados.
pasta views
Esta pasta contém todos os códigos HTML, utilizados para exibir as informações no navegador.
Obs: As outras pasta não devem ser alteradas nem excluídas.
Depois dessas pequenas explicações já podemos ir ao que interessa, crie um projeto no IDE que você preferir e descompacte os arquivos na pasta do projeto. No Eclipse ficaria com a estrutura abaixo:

Agora mande rodar o seu projeto e se tudo ocorrer como esperado deverá ver a página abaixo em seu navegador:

Endereço: http://localhost/post

Nesse primeiro post iremos construir o clássico Hello World para compreendermos melhor o funcionamento do framework. Altere o arquivo de configuração config.php na pasta application/config. Altere a variável

$config['base_url']='';

para

$config['base_url'] = 'http://localhost/post';

onde “post” é o nome do projeto. Essa variável define o endereço base do site.

O próximo passo é alterar as rotas do CodeIgniter, para isso vamos mexer no arquivo routes.php na mesma pasta que o config.php, encontre e mude a linha abaixo:

$route['default_controller'] = "welcome";

para

$route['default_controller'] = "olamundo";

Essa variável é o controlador padrão do nosso site.

Vamos, então, criar o controlador olamundo que foi referenciado em

$route['default_controller'] = "olamundo";

 

Dentro da pasta application/controllers/ crie um arquivo chamado olamundo.php com o conteúdo abaixo:

application/controllers/olamundo.php

<?php
class Olamundo extends CI_Controller{

	function index(){
                /*carrega a nossa view */
		$this->load->view('olamundo');
 	}
}
?>

Obs: tome cuidado ao criar os seus arquivos pois o PHP é case sensitive, ou seja, distingue minúsculas de maiúsculas. O nome do arquivo deverá ser em minúsculas e a classe será o mesmo nome que o arquivo só que a primeira letra em maiúscula.

Agora que temos nosso controlador precisamos criar nossa view que será responsável por exibir as informações na tela. Essa view deve ser criada na pasta /application/views/ com o nome olamundo.php:

/application/views/olamundo.php

<html>
<head>
<title>Ola Mundo!</title>
</head>
<body>
<h1>Ola Mundo!</h1>
</body>
</html>

Para testar se tudo funcionou corretamente digite a url http://localhost/post/index.php/olamundo uma tela como a seguinte deverá aparecer:

Ok, note agora que estamos digitando o index.php antes do nosso controller olamundo como isso fica estranho e pouco amigável para usuários leigos no assunto, vamos habilitar no CodeIgniter, URL’s limpas, o que significa dizer que no nosso exemplo a URL ficará assim: http://localhost/post/olamundo.
Faremos essa configuração através do arquivo .htaccess. Esse arquivo contêm informações sobre como o Apache deverá comportar-se a respeito de uma pasta ou arquivos. O arquivo deverá ser criado na raiz do nosso projeto, certificando-se de não salvar como .htaccess.txt, pois se isso acontecer, a configuração não funcionará.

A seguir, veja o código do arquivo .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Este arquivo contém três partes. A primeira linha informa ao servidor que se não estiver habilitado o RewriteEngine, ele deverá ser acionado. A segunda e terceira linhas informam ao Apache em que condições deverá ser aplicada a regra contida na quarta linha. E por último, a regra de reescrita. Essa linha contém uma expressão regular que substitui tudo o que encontrar na URL pelo seu próprio conteúdo acrescido de index.php.

Depois dessa configuração já podemos acessar a nossa página pelo endereço:

http://localhost/post/olamundo

É isso ai pessoal espero que seja útil pra quem está iniciando com esse excelente framework, até a próxima!


Disponibilizando ViewScope para Spring

spring e jsf

Quem trabalha com JSF sabe que existem escopos para seus Managed Beans, e que eles devem ser bem definidos conforme o papel de cada Managed Bean na aplicação. Esse tal de “escopo” define o tempo de vida desse objeto(o Managed Bean) dentro da aplicação.

A partir do JSF 2.0 foi implementado um novo tipo de escopo, chamado de ViewScope. Este novo escopo veio para suprir a necessidade de se ter um tempo de vida dos Managed Beans um pouco maior do que o Request e menor que o Session. O uso do ViewScope é muito recomendado pois evita que um ManagedBean fique instanciado durante a sessão inteira do usuário(caso do SessionScope) mesmo que não esteja mais sendo usado, e possibilita guardar dados enquanto o usuário não troca de página(UIViewRoot), mesmo utilizando requisições ajax(o que não é possível com o RequestScope).

Grande parte das aplicações possuem frameworks, como o Spring, para gerenciar seus Beans. Logicamente, devem ser utilizadas as configurações do framework para o gerenciamento dos mesmos. No caso do Spring, (ainda) não existe um escopo com a mesma lógica do ViewScope do JSF, mas como todo bom framework, pode-se customizar um tipo de escopo e fazer uso dele normalmente na aplicação. É claro que para isso é necessário implementá-lo.

Na empresa onde trabalho utilizamos Spring e tivemos a necessidade de modificar alguns escopos de Session para View. Encontramos um post(em inglês) que fala sobre isso e exemplifica como implementar e disponibilizar um “ViewScope” para o Spring.

Segue aí os passos para implementar seu ViewScope para o Spring.

1. Implementar a classe responsável pelo gerenciamento dos Beans:

import java.util.Map;

import javax.faces.context.FacesContext;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;
import org.springframework.web.context.request.FacesRequestAttributes;

public class ViewScope implements Scope {

	public static final String VIEW_SCOPE_CALLBACKS = "viewScope.callbacks";

	public synchronized Object get(String name, ObjectFactory<?> objectFactory) {
		Object instance = getViewMap().get(name);
		if (instance == null) {
			instance = objectFactory.getObject();
			getViewMap().put(name, instance);
		}
		return instance;
	}

	public Object remove(String name) {
		Object instance = getViewMap().remove(name);
		if (instance != null) {
			Map<String, Runnable> callbacks = (Map<String, Runnable>) getViewMap().get(VIEW_SCOPE_CALLBACKS);
			if (callbacks != null) {
				callbacks.remove(name);
			}
		}
		return instance;
	}

	public void registerDestructionCallback(String name, Runnable runnable) {
		Map<String, Runnable> callbacks = (Map<String, Runnable>) getViewMap().get(VIEW_SCOPE_CALLBACKS);
		if (callbacks != null) {
			callbacks.put(name, runnable);
		}
	}

	public Object resolveContextualObject(String name) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		FacesRequestAttributes facesRequestAttributes = new FacesRequestAttributes(facesContext);
		return facesRequestAttributes.resolveReference(name);
	}

	public String getConversationId() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		FacesRequestAttributes facesRequestAttributes = new FacesRequestAttributes(facesContext);
		return facesRequestAttributes.getSessionId() + "-" + facesContext.getViewRoot().getViewId();
	}

	private Map<String, Object> getViewMap() {
		return FacesContext.getCurrentInstance().getViewRoot().getViewMap();
	}
}

2. Para poder “destruir” o Bean é necessário colocá-lo em algum local em que seja possível recuperá-lo posteriormente. A classe acima implementa o método registerDestructionCallback, responsável por registrar uma chamada de destruição ao Bean. Essa chamada será armazenada no viewMap da ViewRoot(nossa página que será mostrada), dentro de um Map para que possamos acessá-lo através de uma chave que será o nome do Bean. Graças ao mecanismo de Listeners, conseguimos inserir um novo objeto(no nosso caso um novo Map) dentro do viewMap da página.

Com a implementação da classe abaixo estaremos tratando de dois eventos simultaneamente: assim que o viewMap é construído(na inicialização da página ou PostConstructViewMapEvent) inserimos nosso “repositório” de Beans com ViewScope e seus respectivos destrutores, que será utilizado pelo método registerDestructionCallback, e pouco antes dele ser destruído(PreDestroyViewMapEvent) resgatamos os Beans com ViewScope inseridos no nosso “repositório” criado anteriormente e chamamos seus destrutores.

import java.util.HashMap;
import java.util.Map;

import javax.faces.component.UIViewRoot;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.PostConstructViewMapEvent;
import javax.faces.event.PreDestroyViewMapEvent;
import javax.faces.event.SystemEvent;
import javax.faces.event.ViewMapListener;

public class ViewScopeCallbackRegistrer implements ViewMapListener {

	public void processEvent(SystemEvent event) throws AbortProcessingException {
		if (event instanceof PostConstructViewMapEvent) {
			PostConstructViewMapEvent viewMapEvent = (PostConstructViewMapEvent) event;
			UIViewRoot viewRoot = (UIViewRoot) viewMapEvent.getComponent();
			viewRoot.getViewMap().put(ViewScope.VIEW_SCOPE_CALLBACKS, new HashMap<String, Runnable>());
		} else if (event instanceof PreDestroyViewMapEvent) {
			PreDestroyViewMapEvent viewMapEvent = (PreDestroyViewMapEvent) event;
			UIViewRoot viewRoot = (UIViewRoot) viewMapEvent.getComponent();
			Map<String, Runnable> callbacks = (Map<String, Runnable>) viewRoot.getViewMap().get(ViewScope.VIEW_SCOPE_CALLBACKS);
			if (callbacks != null) {
				for (Runnable c : callbacks.values()) {
					c.run();
				}
				callbacks.clear();
			}
		}
	}

	public boolean isListenerForSource(Object source) {
		return source instanceof UIViewRoot;
	}
}

3. Disponibilizar a nossa classe ViewScope para o Spring, inserindo o código abaixo no seu applicationContext.xml:

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
        <map>
            <entry key="view">
                <bean class="seupackage.ViewScope"/>
            </entry>
        </map>
    </property>
</bean>

4. Registrar nossa classe ViewScopeCallbackRegistrer nos listeners do Faces, inserindo o código abaixo no faces-config.xml:

<system-event-listener>
    <system-event-listener-class>seuPackage.ViewScopeCallbackRegistrer</system-event-listener-class>
    <system-event-class>javax.faces.event.PostConstructViewMapEvent</system-event-class>
    <source-class>javax.faces.component.UIViewRoot</source-class>
</system-event-listener>

<system-event-listener>
    <system-event-listener-class>seuPackage.ViewScopeCallbackRegistrer</system-event-listener-class>
    <system-event-class>javax.faces.event.PreDestroyViewMapEvent</system-event-class>
    <source-class>javax.faces.component.UIViewRoot</source-class>
</system-event-listener>

Basta agora utilizar a anotação @Scope(“view”) sobre seus Managed Beans e eles passarão a ter o comportamento do @ViewScope, mas agora gerenciados pelo Spring.

Bons códigos!!!

Fonte: http://www.harezmi.com.tr/spring-view-scope-for-jsf-2-users/

Manipulação de String em Java

Com exceção dos tipos primitivos, todos os tipos de valores utilizados em Java são objetos. Um dos objetos mais utilizados por programadores, experientes ou novatos, é o tipo String. No tipo String podem ser gravados vários dados distintos em apenas um objeto, como: letras, números e caracteres especiais (@,#$%&*!). Para a declaração, lembrando que String é um objeto, temos duas maneiras, uma é como uma variável normal, e outra, como um construtor.

//declaracao como variavel normal
String s;
String s1 = "String 1";
//declaracao como contrutor
String s2 = new String();
s = new String("Outra String");

Existem inumeros métodos que podem ser utilizados para fazer a manipulação de String. Para quem já tem uma certa experiência este tipo de manipulação já é mais comum e fácil de ser entendido, mas para iniciantes, certamente terão algumas dificuldades e os métodos a seguir demonstrados poderão resolver alguns problemas no uso de String.

Método lenght: retorna um inteiro com o tamanho do String, ou seja, retorna o número de caracteres da variável.

//o metodo retorna um inteiro
int tamanho = s.length();

Método charAt: retorn um char com o caracter de uma posição especifica do String.

//pega o caracter na posicao 2 do String
char c = s.charAt(2);

Método equals: retorna um boolean, true se dois Strings são iguais, ou false se são diferentes.

//verifica se s1 e s2 sao iguais
String s1 = "String";
String s2 = "String";
if(s1.equals(s2)){
     System.out.println("sao iguais");
}

Método equalsIgnoreCase: verifica se dois Strings são iguais, sem levar-se em consideração se os caracteres são maiúsculos ou minúsculos.

//verifica se s1 e s2 sao iguais
String s1 = "String";
String s2 = "string";
if(s1.equals(s2)){
     System.out.println("sao iguais");
}

Método compareTo: retorna 0 (zero) se o String que chama o método for igual ao String passado como parâmetro, retorna um valor negativo se o String que chama o método for menor que o String do parâmetro, e um valor positivo se o String que chama o método for maior que a String do parâmetro.

//compareTo bastante usado para ordenar strings
String s1 = "b";
String s2 = "a";
if(s1.compareTo(s2)==0){
     System.out.println("sao iguais");
}else if(s1.compareTo(s2)<0){
     System.out.println("s2 é maior");
}else if(s1.compareTo(s2)>0){
     System.out.println("s1 é maior");
}

Método compareToIgnoreCase: tem os mesmos retornos do compareTo, a diferença é que neste não é levado em consideração os caracteres maiúsculos.

 

String s1 = "A";
String s2 = "a";
if(s1.compareTo(s2)==0){
     System.out.println("sao iguais");
}

Método substring: retorna um String, com os caracteres de um determinado trecho passado por parâmetro.

String s1 = "abcdefghijkl";
//no exemplo a seguir o trecho determinado 
//vai da posicao 3 até o fim do String 
String s2 = s1.substring(3);
System.out.println(s2);

//no exemplo a seguir o trecho determinado
//vai da posicao 3 ate a posicao 6
s2 = s1.substring(3,6);
System.out.println(s2);

Método replace: faz a substituição de determinado caracter por outro.

 

String s1 = "a";
String s2 = s1.replace("a","A");
System.out.println(s2);

Método indexOf: retorna um inteiro com a posição onde aparece pela primeira vez um determinado caracter.

String s1 = "aaabaaa";
int posicao = s1.indexOf("b");
System.out.println(posicao);

Método lastIndexOf: semelhante ao indexOf, só que retorna a última vez que aparece determinado caracter.

 

String s1 = "aaababa";
int posicao = s1.indexOf("b");
System.out.println(posicao);

Método toUpperCase: retorna uma nova String, mas transforma todos os caracteres para maiúsculos.

String s1 = "aaaaa";
String s2 = s1.toUpperCase();
System.out.println(s2);

Método toLowerCase: retorna nova String, mas transforma os caracteres em minúsculos.

String s1 = "AAAAA";
String s2 = s1.toLowerCase();
System.out.println(s2);

Método trim: retorna nova String, mas faz uma limpeza de espaços em branco no inicio e no fim da String.

String s1 = "   aaa ";
String s2 = s1.trim();
System.out.println(s2);

Método startsWith: retorna true caso o valor do String se inicie com determinada sequência de caracteres.

String s1 = "abcdefg";
if(s1.startsWith("ab")){
     System.out.println("inicia com ab");
}else{
     System.out.println("nao inicia com ab");
}

Método endsWith: retorna true caso o valor do String se encerre com determinada sequência de caracteres.

String s1 = "abcdefg";
if(s1.endsWith("fg")){
     System.out.println("inicia com fg");
}else{
     System.out.println("nao inicia com fg");
}

Bom, estes são os principais métodos para manipulação de Strings, com exemplos bem simples de entender, espero ter ajudado aos iniciantes na arte de programar em Java, e qualquer dúvida, sugestão, críticas, podem entrar em contato conosco. Obrigado e viva o Java.

Busca em largura

A busca em largura é um método de busca que expande e examina sistematicamente todos os nós da árvore, em busca de uma solução, é um método de busca que não utiliza informação(busca cega). Em outras palavras podemos dizer que o algoritmo realiza uma busca exaustiva em toda a árvore, sem considerar seu alvo de busca, até que ele o encontre(ele não utiliza uma heurística).

Este método de busca é muito simples, ele expande o nó raiz primeiramente e em seguida todos os sucessores do nó raiz são expandidos, depois os sucessores desses nós e assim por diante até encontrar a informação procurada na árvore.

Do ponto de vista do algoritmo, todos os nós filhos obtidos pela expansão de um nó são adicionados a uma fila (FIFO). Em implementações típicas, nós que ainda não foram examinados por seus vizinhos são colocados numa lista (como por exemplo uma fila ou lista ligada) que é chamado de “aberto”. Uma vez examinados, são colocados numa lista “fechado”.

Veja como funciona a lógica da busca em largura nas imagens abaixo primeiramente expande o primeiro nó e todos seus sucessores:


Em seguida os sucessores do nó raiz e assim por diante até finalizar a busca:

Veja o algoritmo utilizado para resolver o método de busca por largura:

Busca-em-Largura (nAdjr)
1  para u ← 1 até n faça
2  cor[u] ← branco
3  cor[r] ← cinza
4  F ← Cria-Fila(r)
5  enquanto  F não está vazia faça
6  u ← Sai-da-Fila(F)
7  para cada v em Adj[u] faça
8  se cor[v] = branco
9  então  cor[v] ← cinza
10  Entra-na-Fila(vF)
11  cor[u] ← preto
12  devolva  cor[1..n]

 

 

 

Arduino – Plataforma de prototipagem eletrônica

 

Áreas como a eletrônica e computação estão diretamente ligadas, em várias formas como podemos presenciar nos computadores, celulares, eletrodomésticos entre outros. A primeira impressão é de que a comunicação de sistemas e lógica de programação são tarefas complexas para determinar  rotinas e funções para um hardware. Mas com ferramentas certas e de fácil acesso podemos contornar tarefas mais complicadas , afim de facilitar o uso,  até mesmo para pessoas com mínimos conhecimentos em eletrônica e computação.

O  Arduino é uma plataforma de Hardware Open-Source de criação italiana idealizada por Massimo Banzi , Cuartielles David , Tom Igoe , Gianluca Martino , David Mellis e Nicholas Zambetti, que colaboram desde o início do projeto,  e contam com a ajuda de um bom grupo de desenvolvedores.

Arduíno é um hardware flexível e de fácil adaptação à sistemas computacionais, utilizado para as mais diversas áreas(artísticas, designers, programadores, engenheiros) facilitando e automatizando todo o tipo de tarefa.

O Arduino possui um núcleo firmware onde  a programação de tarefas é enviada, isso em sua forma mais simples. O seu firmware recebe comandos com funções pré-definidas para a sua plataforma, funções que são baseadas na linguagem C, proporcionando facilidade e precisão na hora de implementar tarefas e funções a serem enviadas para o hardware.

Possuindo uma IDE de programação própria e gratuita, produzida na linguagem JAVA, nos proporciona diversos tipos de configuração para os diferentes modelos de hardware do arduíno e de entrada de dados. Também contém bibliotecas com todas as funções necessárias para que se possa realizar um projeto básico a um projeto mais complexo.

A  figura acima mostra a forma básica do Arduíno, ou seja, a sua plataforma programável. O Arduíno tem diversas ramificações, possuindo um grande número de instrumentos que podem ser facilmente adaptados ao modelo básico, que é usado como a motherboard e processador das informações provenientes da programação efetuada.

O Arduino possui instrumentos dos mais diversos como, sensores de temperatura, luminosidade, movimento, além de ferramentas magníficas como placa GPS, visores LCD ou até mesmo dispositivos SMS. Com este vasto arsenal de peças, todas facilmente acopladas à placa principal do Arduino podemos realizar projetos de diversos portes e para diversos campos, assim adaptando-se a tarefas mais exigentes de automação eletrônica e computacional.

Sabemos que por outro lado todo projeto que envolve equipamentos eletrônicos gera algum custo. O Arduino vem para ser uma das plataformas que mais se encaixam no quesito custo-beneficio, levando em consideração estudo, trabalho, projetos industriais e dos mais diversos ramos.

Com custo baixo e fácil adaptação, o Arduino se torna a plataforma de hardware mais interessante e atrativa para quem é fã da programação aliada com eletrônica. Proporcionando uma estrutura que pode crescer imensamente de acordo com as necessidades do ambiente  de sua atuação.

Ficamos por aqui neste primeiro contato com a plataforma Arduino. Em breve vamos explorar ainda mais a plataforma, afim de divulgarmos funcionalidades práticas e configurações para o desenvolvimento de projetos. Mas se você deseja proseguir e conhecer um pouco mais sobre esta plataforma visite o site oficial do Arduino.

 

Como auxiliar os empresários a gerenciar o processo do desenvolvimento do website de sua empresa

Falar da revolução da internet é muito fácil, frisar que um site da retorno para uma empresa já não é uma tarefa das mais simples, ou é?

Quantas empresas podem realmente afirmar que seu website está lhe trazendo retorno, que ferramentas tais empresas utilizam para medir a audiência, público alvo e retorno sobre o investimento na construção e principalmente manutenção de seu website?

A maioria das empresas ou instituições respondem esses questionamentos com um belo e sonoro: “não sei”. Mas, sabemos o por quê, o porque dessa questão vem em afirmações, como: “estou tranquilo, o meu sobrinho que tem uma loja de informática vai fazer meu site, ou, conheço um rapaz que trabalha com o photoshop, vou passar minha logomarca e dizer para ele fazer meu site baratinho!”.

Agora vamos nos perguntar: o seu sobrinho, o rapaz que “mexe” com o photoshop, sabem trabalhar com grupos interdisciplinares, estudam e reestudam layouts para que os mesmos representem fielmente sua empresa ou instituição, fazem testes de usabilidade para verificar se o seu projeto realmente possui características que facilitem seu uso? Se sua resposta for sim, parabéns! Caso for não, continue a ler esse post.

Geralmente empresários (e não estou só falando de pequenas empresas) contratam um “sobrinho/rapaz” para desenvolver o website de sua empresa/instituição, utilizando um processo de desenvolvimento costumeiramente chamado de ad hoc, o que explicando em palavras simples é um processo em que as coisas rolam sem nenhum formalismo definido, ou seja, senta na frente do computador e mete bala!

O desenvolvimento ad hoc, traz duas coisas interessantes para a empresa/instituição que encomendou o projeto:

a) O projeto ficará pronto rapidamente

No geral projetos web executados no estilo ad hoc não utilizam diferentes especialidades para o gerenciamento e desenvolvimento do projeto (interdisciplinaridade, que bicho é esse?). Um projeto web para obter sucesso deve ter um grupo interdisciplinar gerenciando o mesmo, pois as pessoas que irão interagir no processo são de diferentes áreas do conhecimento:

* Desenvolvimento de Sistemas Web;
* Administração de banco de dados;
* Marketing;
* Web Design;
* Redatores e revisores;
* Publicadores de conteúdo;
* Responsáveis pela estrutura de rede e segurança;
* Profissionais a nível gerencial de sua empresa.

Bem, como o sobrinho/rapaz é um só, o projeto vai ficar pronto rapidão! Outro ponto importante nessa questão, é dizer que o sobrinho/rapaz, sabem realmente a imagem que sua empresa quer repassar para seus clientes e fornecedores, estudam e reestudam o manual da sua logomarca para aplicar ela corretamente no seu projeto, efetuam um briefing adequado com as pessoas chaves em sua empresa, enfim, tentam representar no mundo virtual o que sua empresa é no mundo real.

b) O projeto vai custar baratinho

Em toda nossa vida, temos retorno proporcional ao nosso investimento, ou uma Ferrari é igual a um automóvel Fusca? Quando sua empresa estiver na web, ela irá demonstrar de maneira On-line como é sua estrutura física e organizacional, sim irá demonstrar isso, pois uma pessoa que nunca viu sua empresa e verificar a mesma na internet vai imaginar que sua empresa é igualzinha ao seu website!

Ta bom, to ferrado e agora???

Calma, não existe motivo para pânico, primeiro  fique atento e desconfie de projetos que custam um valor muito abaixo do que é praticado por empresas sérias e com verdadeiros profissionais no gerenciamento e desenvolvimento web, e preste atenção aos seguintes passos no desenvolvimento do seu projeto:

1) Briefing

Um briefing deve conter informações que vão possibilitar a empresa que está desenvolvendo seu projeto dar sequência ao mesmo, sem ter que ficar marcando reuniões e tirando dúvidas a todo o momento, o briefing deve ser bem específico e coeso, trazendo informações da sua empresa, dos clientes e dos seus concorrentes. O briefing deve ser respondido pelo cliente e não pela empresa que está desenvolvendo seu projeto, a obrigação da empresa desenvolvedora é conhecer seu ramo de negócio, identificar os problemas e oferecer soluções e oportunidades.

2) Atividades de criação de seu projeto

Preste muita atenção na definição de toda infra-estrutura inicial e implementação de funcionalidades básicas. Tenha certeza que a empresa que irá desenvolver seu projeto, fez um levantamento criterioso da estrutura de servidores, segurança e disponibilização das funcionalidades básicas em seu website (Sistemas de novidades, notícias, newsletters, álbum de fotos, sistemas de divulgação de serviços, produtos, sistemas de administração de conteúdo, permissões de grupos de usuários, etc…) enfim, todas as funcionalidades básicas para tornar seu website atraente para seu público alvo e fácil de administrar os conteúdos por seus colaboradores.

É importante frisar que as atividades de criação do projeto exigem grande carga de trabalho, mas tem data para acabar: a inauguração do seu website. Opa, então um site acaba? A resposta com certeza é não! Costumo dizer que um site deve ter vida própria, deve aprender as suas necessidades e evoluir com o tempo. Para que isso aconteça de maneira natural, não podemos esquecer de um detalhe que compromete todo o projeto: a manutenção do site e seu conteúdo.

3) Manutenção

Na fase de manutenção existe a criação de funcionalidades adicionais para deixar seu website mais atrativo e permitir o mesmo evoluir seus serviços de acordo com as necessidades dos usuários que o acessam. A principal característica dessa tarefa é que deve ser realizada de forma contínua, ou seja, enquanto o portal existir.

É na manutenção do conteúdo que observamos realmente se o projeto do site realmente foi bem planejado, é nesse ponto que fica explicita a organização de sua empresa, ou seja, se realmente existe a divulgação com uma periodicidade eficiente do que está acontecento em sua organização. Muitos empresários acreditam infelizmente, que após o projeto ser entregue o mesmo não irá necessitar de manutenção, para exemplificarmos isso, basta fazermos uma analogia com um carro: adquira um carro, não lave o mesmo nunca, não troque óleo e não abasteça!

4) Gerenciamento de conteúdo

Infelizmente ainda nos dias de hoje,  na maioria dos projetos a manutenção de conteúdo fica a cargo de especialistas, que tenham conhecimento na linguagem html, manipulação de imagens e outras tecnologias específicas. Mas uma empresa séria e comprometida no seu projeto irá indicar com certeza um sistema que disponibilize a seus colaboradores ferramentas que possibilitem que o usuário que não possua nenhum conhecimento técnico atualize o conteúdo de maneira eficiente e prática, tais ferramentas denominam-se CMS (Content Management System / Sistemas Gerenciadores de Conteúdo). Os CMS possuem como principal característica um elevado grau de customização.

Qualquer pessoa de sua empresa/organização poderá de maneira totalmente transparente sem possuir conhecimento técnico algum, estruturar, criar, administrar, publicar e distribuir informações no seu website.

Lembrem-se: seu website é a representação virtual de sua empresa, garanta sempre que uma equipe especializada irá construir o mesmo, pois se isso não ocorrer, você estará correndo sério riscos, e provavelmente perdendo clientes ao invés de obtê-los.

Um grande abraço.

Márcio Henrique Locatelli

Válvulas e sua importância em um motor


Características importantes em um motor à combustão interna são definidas por suas válvulas, com mais relevância quanto ao número ou diâmetro. A única forma de se conseguir potência e torque em um motor é transformando energia química em trabalho mecânico. Essa conversão se dá por meio da admissão da mistura ar/combustível e explosão da mesma, sendo que quanto maior o volume admitido maior também será o trabalho realizado. Mas para que tal processo ocorra as válvulas tem papel indispensável, pois é através delas que o motor consegue aspirar certa quantidade de mistura, segurá-la dentro do cilindro e expulsá-la depois de queimada.

O diâmetro e o número de válvulas por cilindro interferem diretamente no comportamento do motor em diferentes rotações. Uma simples regra nos dá uma noção disso, sendo que quanto maior for à área menor será a velocidade, e quanto menor à área maior será a velocidade.

Com uma menor área da válvula de admissão e escape, a velocidade do fluxo da mistura ar/combustível fica otimizada em baixa rotação, permitindo uma melhor entrada e saída dos gases. Esse comportamento é característico dos motores de duas válvulas. O mesmo caso não ocorre nos motores de quatro válvulas, que tem o seu funcionamento otimizado em altos giros, onde a velocidade do fluxo é maior permitindo um melhor enchimento do cilindro com mistura ar/combustível.

Essas características se notam perfeitamente na Yamaha YS 250 Fazer e Honda CB 300r. Deixando de lado a capacidade cúbica dos motores, podemos observar que a Fazer tem um maior fluxo de ar e melhor funcionamento em baixas rotações, devido ao seu motor ser equipado com duas válvulas (uma de admissão e uma de escape). Já a CB 300r tem um motor equipado com quatro válvulas (duas de admissão e duas de escape) e notoriamente tem um melhor funcionamento em altos giros onde a velocidade do fluxo de ar é maior e entrada da mistura ar/combustível no cilindro é facilitada.

Outra particularidade a ser notada é que antigamente os engenheiros projetavam válvulas com áreas maiores nos motores para se ter um ganho de potência, porem válvulas grandes tem um elevado peso, armazenam muito calor e possuem uma grande área de contato com a sede no cabeçote podendo gerar problemas de compressão. Este conjunto de problemas também gera muito desperdício de energia pelo motor para movimentar as válvulas que no final das contas deixa de ganhar no virabrequim. Atualmente está se usando cada vez mais motores com quatro válvulas menores e mais leves que somadas dão uma área maior que um equipado com duas válvulas grandes.

Assim observamos que as válvulas em um motor não são apenas um dado técnico, mas sim algo fundamental que interfere diretamente na potência e torque gerados. Por isso é de fundamental importância uma manutenção preventiva como a verificação da folga, óleo lubrificante e uso de combustível de qualidade.

Conheça a Tecnologia JAVA

Até hoje, a plataforma Java já atraiu mais de 6,5 milhões de desenvolvedores de software. É utilizada em todos os principais segmentos da indústria, estando presente em uma ampla gama de dispositivos, computadores e redes.

Sua versatilidade, eficiência, portabilidade de plataforma e segurança fazem dela a tecnologia ideal para a computação em rede. A tecnologia Java está em todo lugar! Ela pode ser encontrada em laptops, datacenters, consoles de jogo, supercomputadores científicos, telefones celulares e até na Internet.

A tecnologia Java está presente em mais de 4,5 bilhões de dispositivos, incluindo:

  • Mais de 800 milhões de PCs
  • 2,1 bilhões de telefones celulares e outros dispositivos portáteis (fonte: Ovum)
  • 3,5 bilhões de cartões inteligentes
  • Além de set-top boxes, impressoras, webcams, jogos, sistemas de navegação para automóveis, terminais lotéricos, dispositivos médicos, guichês de pagamento de estacionamento etc.

Para conhecer os locais de aplicação do Java in Action em sua vida diária, explore o site java.com.

Por que os desenvolvedores de software preferem o Java

O Java foi testado, refinado, ampliado e experimentado por uma comunidade dedicada. E, com mais de 6,5 milhões de desenvolvedores, é a tecnologia mais ampla e ativa do planeta. Com sua versatilidade, eficiência e portabilidade, o Java tem valor inestimável para desenvolvedores, pois permite:

  • Criar um software em uma plataforma e executá-lo em praticamente qualquer outra
  • Criar programas para execução em navegadores e serviços da Web
  • Desenvolver aplicativos no lado do servidor usados tanto em fóruns, lojas e pesquisas on-line, como no processamento de formulários HTML, e muito mais
  • Combinar aplicativos ou serviços usando a linguagem Java para criar aplicativos ou serviços altamente personalizados
  • Criar aplicativos potentes e eficazes para telefones celulares, processadores remotos, produtos de consumo de baixo custo e praticamente qualquer outro dispositivo com tecnologia digital

Algumas maneiras para que os desenvolvedores de software aprendam o Java

Atualmente, várias faculdades e universidades oferecem cursos de programação para a plataforma Java. Além disso, os desenvolvedores também podem aprimorar suas habilidades em programação Java lendo o site java.sun.com da Oracle, assinando os boletins informativos baseados na tecnologia Java, usando o Tutorial do Java e o Programa Principiante no Centro Java e ingressando em cursosWeb, virtuais ou ministrados por um instrutor

 

Fonte: Artigo retirado de: http://www.java.com/pt_BR/ acessado em: 08/06/2011