jan 15

Dicas de Apps Android

Faz tempo que não posto nenhum app novo por aqui né, então, ultimamente peguei alguns novos apps que acho que vale a pena compartilhar, além dos que eu uso bastante!!

  1. Recomind
  2. Pocket
  3. SeriesGuide
  4. Airdroid
  5. Gesture Search
  6. Vivino

 

1 – Recomind :

App recente, do buscapé company, pra quem tá precisando de prestadores de serviços lá tem uma lista ainda pequena, pois o app é novo, mas é algo essencial pra quem precisa fazer uma obra e não conhece nenhum pedreiro ou empreiteiro  por exemplo.

2 – Pocket :

Viu um site maneiro, mas tá saltando do ônibus e não da pra ver agora, ou está acabando a bateria do celular, compartilha pro pocket e depois vê, funciona tipo um bookmark.

3 – SeriesGuide :

Pra quem acompanha diversos seriados é indispensável. Contém informações sobre quando vai passar o próximo episódio, quando volta a temporada, você pode dar checkin no getglue e trackit, marcar quais episódios você já viu, etc.

4 – Airdroid :

Quer pegar um arquivo do pc mas não sabe onde tá seu cabo USB? Utilize o airdroid, ele cria um servidor no seu android que você acessa todo o conteúdo do seu telefone através do navegador, aí você pode baixar os arquivos do android ou fazer upload para ele.

5 – Gesture Search:

Se você for que nem eu que tem uns 150 apps, e quando quer acessá-lo não quer ficar a vida toda rolando página de apps, esse é o app. Com ele você vai desenhando as letras e ele vai filtrando os aplicativos.

6 – Vivino :

Para os amantes do vinho! Você tira a foto do rótulo e ele reconhece o vinho, mostra  a nota da comunidade além de comentários e as vezes até o preço em euros, depois de você tomar o seu vai lá e da a sua nota também!

 

Por enquanto é isso, quando eu achar outros eu posto aqui mais!!

 

jan 10

Aplicativos web para projetar ambientes

Antes de mais nada ótimo ano novo para todos nós!! Agora vamos ao que interessa, ultimamente precisei desenvolver a planta de um apartamento e para isso achei alguns aplicativos bem interessantes que vale a pena compartilhar aqui! O primeiro que utilizer foi o planner 5d  , que é bem fácil de se utilizar, você constrói os ambientes, coloca portas, paredes, móveis, etc. Uma funcionalidade que eu gostei bastante nele é você poder alterar o tamanho dos móveis, eletrodomésticos, etc., pois assim você consegue planejar melhor os móveis que você deseja comprar de acordo com as medidas reais deles. Abaixo seguem algumas telas de exemplo do aplicativo, ele funciona diretamente na web e ainda possui a possibilidade de visualização 3d.

 

planneldd plannerdexemploplanner5d

 

Você pode também compartilhar seus projetos via redes sociais ou email.Uma desvantagens que eu vi é você não poder alterar a espessura das paredes.   Outro que utilizei foi o autodesk homestyler que é bem parecido com o planner 5d, porém nele você pode modificar a espessura das paredes, mas a desvantagem é de você não poder alterar o tamanho dos móveis, eletrodomésticos, etc., ele possui apenas tamanhos pré-definidos, o que prejudica um pouco quando você quer ver se um móvel planejado  ficaria bom no seu ambiente.

autodesk

Outro que eu vi mas não recomendo é o floorplanner, ele é até um bom aplicativo, mas não é completamente gratuito, ele limita contas gratuitas a apenas um projeto, apesar de ser o que possui a maior quantidade de parafernlhas para se colocar no projeto. Tem diversos outros aplicativos que fazem isso também, mas estes foram os que eu utilizei e os 2 primeiros eu recomendo. Quem tiver alguma sugestão pode colocar aí nos comentários. Um bom lugar para achar esses aplicativos web e outros diversos é acessar a Chrome Web Store . Estes eu achei indo em Produtividade -> Ferramentas Criativas.

nov 28

Engatinhando no Ruby

Pessoal, comecei a dar uma olhada em ruby pra ver qual que é, parece ser uma linguagem bem interessante, mas como estou sem imaginação de projetos, estou só lendo livros e apostilas, não colocando muito a mão na massa, o que para quem desenvolve é muito ruim para aprender de verdade, em questão de dias você esquece alguns detalhes sordidos da linguagem.

Mas, consegui achar aí por essa tal de internet um site bem interessante, o RubyMonk, que além de ensinar a teoria ele oferece algum exercícios durante as lições e problemas para se resolver. Achei bem interessante para iniciar.

Além disso o site da caelum oferece uma apostila gratuita de ruby on rails. Sou suspeito para falar, pois acho a didática da caelum excelente, portanto recomendo fortemente as apostilas gratuitas e também pra quem puder pagar, os cursos de formação deles são excelentes.  Ps. Não estou ganhando jabá para divulgar isso não, realmente gosto muito dos cursos e dos instrutores de lá, sem contar os lanches nos intervalos!!

É isso, a medida que for aprendendo mais, espero diversificar meus posts seguindo sempre o lema deste blog: Um pouquinho de tudo e tudo de nada!

 

 

out 15

CDI no Websphere 8 com JSF 2

Voltando aos posts de tecnologia, nas duas semanas que se passaram estive com um grande problema no trabalho:

Estávamos desenvolvendo uma aplicação utilizando CDI, com JSF 2, rodando no JBOSS  AS 7, tudo funcionando as mil maravilhas. Mas, porém, contudo, no entanto, como diz Joseph Climber –  “Mas a vida é uma caixinha de surpresas” – nosso servidor de desenvolvimento roda Websphere 8 (WAS 8) , que apesar de adotar praticamente as mesmas especificações do JAVA do JBOSS 7, utiliza em sua maioria as implementações  da APACHE(Myfaces para JSF, OpenWebBeans para CDI), enquanto que o JBOSS utiliza as implementações de referência, por exemplo o WELD para CDI e o mojarra para JSF.

Então como fazer funcionar nos 2 ambientes sem ter problemas de compatibilidade? Alguns passos são necessário, primeiro para o JSF:

  • Adicionar ao web.xml :
 
<context-param>
	<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
	<param-value>false</param-value>
</context-param>

Agora para o CDI é mais complicado, inicialmente, todas as suas classes elegíveis a injeção, por exemplo, todas as classes que você anotou com @named, devem ser serializáveis, enquanto que no JBOSS não é obrigatório, eu diria até que é uma boa prática fazer isso. Além disso, o beans.xml deve ficar dentro de WEB-INF, obrigatoriamente. No JBOSS basta estar em algum lugar do classpath, no WAS 8 não, tem que estar ao lado do web.xml, abaixo de WEB-INF.

Porém isso não é tudo, no nosso caso aqui, nada estava sendo injetado pelo container, só conseguimos resolver isso incluindo a biblioteca de CDI do myfaces no classpath da aplicação, o Myfaces CODI . Um extra sobre o CODI é que ele também possui uma implementação similar ao ViewScope do JSF que funciona para CDI (CDI padrão não possui essa anotação), que é a @ViewAccessScoped

Você pode escolher quais módulos do CODI você deseja utilizar, aqui abaixo segue o código do pom para inserir o CODI completo, na wiki do CODI você encontra esses módulos.

 
    <dependency>
	<groupId>org.apache.myfaces.extensions.cdi.bundles</groupId>
	        <artifactId>myfaces-extcdi-bundle-jsf20</artifactId>
		<version>1.0.5</version>
		<scope>compile</scope>
    </dependency>

 

out 07

Cordeiro com alecrim e alho ao molho de hortelã

Calma, você não está doido, e isso não tem a ver com programação nem investimento nem viagem, que são os assuntos que eu normalmente abordo por aqui.

Como diz o título do blog : “Um pouquinho de tudo, Tudo de nada”, hoje falarei do prato( muito gostoso por sinal) que eu e a patroa preparamos hoje!

Esse prato é bem simples de fazer, não é baratinho, mas serve bem umas 6 pessoas, então se for fazer as contas até que não sai tão caro.

Vamos ao que interessa, primeiro os ingredientes:

Para o cordeiro:

  • 1,5 kg de paleta de cordeiro;
  • Alguns ramos de alecrim fresco ;
  • Uma cabeça de alho;
  • Sal grosso e pimenta do reino;
  • Azeite;
  • Vinho tinto.

Para o molho:

  • Hortelã fresca;
  • Azeite
  • Vinho tinto
  • Sal grosso e pimenta

Modo de preparo:

Essa é a parte simples, basta colocar alguns  dentes de alho inteiros com casca e tudo sobre uma assadeira, junto com o alecrim. Faça cortes no cordeiro com a faca, para que fiquem sulcos no cordeiro. Em seguida coloque o cordeiro sobre o alho e o alecrim e coloque o restante de alho e alecrim sobre o cordeiro. Isso feito, derrame um pouco de azeite  sobre o cordeiro, não precisa dar um banho, só o suficiente para deixá-lo molhadinho!

Agora pré-aqueça o forno por uns 5 minutos e coloque a assadeira no forno. Agora é só deixar assar de 3 a 4 horas. E após a primeira hora coloque uns 150 ml de vinho tinto sobre o cordeiro.

Para fazer o molho é bem simples, basta colocar todos os ingredientes em um processador ou liquidificador e batê-los, tente dosar bem para que o sabor de um dos ingredientes não sobressaia, tente fazer o mais homogêneo possível.

—————————————-

Para acompanhar deixo a seu critério, aqui fizemos uma polenta, ou pra quem prefere é angu mesmo!

E como bebida recomendo fortemente este bordeaux da foto abaixo. Infelizmente só lembramos de tirar foto do cordeiro quando já tínhamos comido quase tudo!

Paleta de cordeiro assada                   

 

Espero que tenham gostado!

set 18

Cursos online gratuitos

Pessoal, descobri outro dia o site da coursera, que é um portal de cursos online oferecidos pelas principais universidades do mundo. Me inscrevi em 2 cursos para experimentar: Introdução ao pensamento matemático e Princípios da programação funcional com Scala. Ainda não tenho muito o que dizer, pois os 2 cursos começaram esta semana e ainda não teve muita coisa, mas pelo que vi até agora achei o formato deles bem interessante.

São vídeo-aulas, textos em pdf, fórum de discussão, quiz, entre outros recursos. Pra quem tem interesse fica a dica!

 

ago 16

Pesquisa

Pessoal, estou testando uma ferramenta de questionário, quem puder responder por favor, são só 4 questões bobinhas! É só clicar no link abaixo!
Questionário de teste

ago 03

Conversor em JSF2 com Servlet 3.0

Neste post falarei de como criar um converter para uma classe do meu modelo e também como utilizá-lo com um componente selectOneMenu.

Primeiramente, precisamos sobrescrever o método equals lá do nosso bean ( ex: MeuBean.java) para o qual será feito o converter.  Caso eu o identifique por um atributo específico, por exempo um id, o nosso equals ficaria da seguinte maneira:

 
        @Override
        public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Conta other = (Conta) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

Em seguida criamos uma nova classe chamada meuBeanConverter que irá implementar a interface Converter do pacote  javax.faces.convert , vamos anotá-la com a seguinte annotation: @FacesConverter, setando o atributo forClass da anotação com a nossa classe MeuBean.class .

Essa interface Converter possui 2 métodos que precisamos implementar:

  1. public Object getAsObject(FacesContext arg0, UIComponent arg1, String texto)
  2. public String getAsString(FacesContext arg0, UIComponent arg1, Object obj)

Onde o primeiro será acessado na fase do jsf : apply request values, quando o formulário for submitado, convertendo o atributo value  da tag option do html no objeto correspondente da nossa classe MeuBean. E o segundo no caminho inverso, quando queremos a partir de um objeto da nossa classe MeuBean,  mostrar no selectBox html o nosso objeto.

 
@FacesConverter(forClass = MeuBean.class)
public class ContaConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String texto) {
		if (texto == null || texto.equals("")) {
			return null;
		}

		Long longId = Integer.valueOf(texto).longValue();
		MeuBean bean = //alguma maneira de recuperar o bean pelo atributo id
		return bean;

	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object obj) {
		// TODO Auto-generated method stub
		if (obj == null || obj.toString().equals("")) {
			return "";
		}
		return ((MeuBean) obj).getId().toString();
	}

}

Por fim no nosso html teremos no value do h:selectOneMenu  a propriedade que receberá o valor escolhido que será convertido para um objeto da classe MeuBean, e na listagem de f:selectItems uma lista de objetos MeuBean ( Ex: List<MeuBean> meusBeans ).

<h:selectOneMenu id="meuBean" value="#{meuMB.meuBean}">
	<f:selectItems value="#{meuMB.meusBeans}" ></f:selectItems>
</h:selectOneMenu>

Apenas um detalhe a mais, não setando o atributo itemLabel do f:selectItems, será necessário sobrescrever o toString do MeuBean, caso contrário será impresso a representação do objeto.

ago 01

Estados de um objeto gerenciado por um EntityManager

Neste post falarei um pouco de como a especificação JPA 2 trata as entidades manipuladas pelos EntityManagers. As principais funções dos EntityManagers são:

  1. Como o próprio nome já diz, gerenciar as entidades;
  2. Sincronizar o estado dos objetos com os dados correspondentes no banco de dados

Ao falarmos em gerenciar uma entidade nos referimos a como um EntityManager manipula uma entidade, e para isso é necessário entender os estados possíveis que uma instância pode assumir para um EntityManager. São 4 estados possíveis:

  • Transient

Neste estado seu objeto acabou de ser criado e o atributo que foi anotado com @Id não possui valor . Toda vez que você dá um new em um objeto de uma Entidade este é o estado que ele se encontrará.

  • Managed

Neste estado o objeto possui valor no atributo anotado com @Id, sendo este valor atribuido pelo EntityManager e não setado manualmente. Toda vez que ocorrer uma sincronização através de um flush ou um commit, os dados do objeto são atualizados no os dados do banco de dados.

  • Removed

Neste estado,assim como no estado managed, o objeto possui valor no atributo anotado com @Id, sendo este valor atribuido pelo EntityManager e não setado manualmente. Porém quando ocorrer uma sincronização através de um flush ou um commit, o objeto passa a não ter mais vínculo com o banco de dados.

  • Detached

Neste estado,assim como no estado managed, o objeto possui valor no atributo anotado com @Id, sendo este valor atribuido pelo EntityManager ou setado manualmente. Porém este objeto não possui mais vínculo com o EntityManager, logo ele não será mais sincronizado com o banco de dados, e qualquer alteração realizada com ele residirá somente na memória da aplicação e não no banco de dados.

Para trocar de estados o EntityManager nos fornece os seguinte métodos:

  • persist : Transient -> Managed
  • merge : Transient -> Managed / Detached -> Managed
  • evict, clear ou close : Managed -> Detached
  • remove : Managed -> Removed

 

Tendo esses estados em mente e também como transitar entre eles, você consegue ter um controle muito melhor sobre o que você está fazendo ao utilizar JPA.

Fica a dica!

 

 

jul 17

Adicionando um Datasource Postgresql ao Jboss 7.1

Pra quem usa ou usava jboss 6, era bem simples você adicionar um datasource novo, bastava você copiar o default e modificar as configurações, gravando esse novo arquivo na pasta deploy do seu server. Porém no Jboss 7 é um pouco diferente, e, diria eu, um tanto quanto burocrático.

Primeiramente é necessário baixar os drivers necessários de acordo com seu banco.

Em seguida copie para

jboss-as-7.1.1.Final/modules/org/postresql/main/

O jar baixado.

O jar precisa necessariamente estar embaixo da pasta main. Além disso nesta pasta main também tem que estar um arquivo xml : module.xml com o seguinte conteúdo:

 
<module xmlns="urn:jboss:module:1.1" name="org.postgresql">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <resources>
        <resource-root path="postgresql-X.X-XXX.jdbcN.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>

Agora abra o arquivo jboss-as-7.1.1.Final/standalone/configuration/standalone.xml  e procure pela tag <subsystem xmlns=”urn:jboss:domain:datasources:1.0″>  . Dentro dela deverá ser adicionado o seguinte conteúdo:

<datasources>
    <datasource jta="false" jndi-name="java:/PostgresDS"
        pool-name="postgres-ds" enabled="true" use-ccm="false">
        <connection-url>jdbc:postgresql://localhost:5432/meu_banco
        </connection-url>
        <driver-class>org.postgresql.Driver</driver-class>
        <driver>postgresql</driver>
        <security>
            <user-name>usuario</user-name>
            <password>senha</password>
        </security>
        <validation>
            <validate-on-match>false</validate-on-match>
            <background-validation>false</background-validation>
        </validation>
        <statement>
            <share-prepared-statements>false</share-prepared-statements>
        </statement>
    </datasource>
    <drivers>
        <driver name="postgresql" module="org.postgresql" />
    </drivers>
</datasources>

Agora… Nada mais a ser feito, fora restartar o jboss, ufa né, bem chatinho criar um datasource a partir da versão 7 do jboss, mas é isso aí.