sexta-feira, 22 de fevereiro de 2013

Criando Variáveis de Ambiente via Linha de Comando


Neste post venho apresentar uma forma de criar variáveis de ambiente vinha linha de comando para os Sistemas Operacionais Windows, OSx e Linux. Pode ser muito útil criar variáveis de ambiente como JAVA_HOME ou ANDROID_SDK a fim de facilitar o dia à dia do desenvolvedor, principalmente quando o mesmo precisa lidar com criação de scripts para o SO.

No Windows: 

Abra o prompt de comando e digite as seguintes instruções

SETX <NOME_DA_VARIAVEL> "<VALOR_DA_VARIAVEL>" -m, Esse comando vai criar uma variável de sistema (Exemplo: SETX JAVA_HOME "c:/java/java-1.6.0_35" -m)

SETX PATH "%PATH%;c:\<NOME_DA_VARIAVEL>" -m, Esse comando vai incluir a variável criada ao PATH do sistema operacional

Nos dois casos o parâmetro "-m" indica que as variáveis estão no nível de sistema, pois o comando SETX trabalha, por padrão, com variáveis do nível de usuário.

É comum o comando SETX não estar disponível no Windows XP, caso isso ocorra  é necessário instalar Windows XP Service Pack 2 Support Tools, você pode fazer o download em http://www.microsoft.com/en-us/download/details.aspx?id=18546

No Linux e Mac OSx:

Abra o terminal e digite a seguinte instrução:

open .profile (No Mac OSx)

gedit .profile (No Linux)

O arquivo .profile será apresentado em modo de edição. Ao final do arquivo acrescente as seguintes instruções: 

export <NOME_DA_VARIAVEL>=<VALOR_DA_VARIAVEL> (Esse comando vai criar uma variável de sistema)

export PATH=$< NOME_DA_VARIAVEL >:$PATH (Esse comando vai incluir a variável criada ao PATH do sistema operacional)

Exemplo de Utilização

export JAVA_HOME=/Users/allansantos/Desktop/development/java/java-1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH

Desta forma a próxima vez que você reiniciar o computador essa variáveis serão carregadas no SO. Para evitar reiniciar o sistema apenas para carregar essas variáveis você pode ainda executar as linhas que você incluiu no arquivo .profile no console do sistema operacional.

quinta-feira, 21 de fevereiro de 2013

LibreOffice - Não Apresenta Imagens

Exibir imagens em um documento de texto do LibreOffice

Este post é dedicado ao usuários que utilizam o aplicativo LibreOffice com editor de texto. Acredito que seja uma dica bastante valida, pois, como usuário do LibreOffice já passei pela desagradável situação do aplicativo de uma hora para outra parar de exibir as imagens que eu havia incluido em um documento de texto.
 
Abaixo segue um exemplo do que acontece com um documento de texto do LibreOffice quando o mesmo não esta exibindo imagens.



Como é possível observar, no local da imagem é exibido um retângulo onde deveria estar a imagem. Para resolver esse problema acesse  Tools -> Options -> LibreOffice Writer ->View e marque a opção "Graphics and objects" como mostra a figura abaixo.

terça-feira, 19 de fevereiro de 2013

Formatar número para valor monetário com prototype

Formatação em java script para valores monetários utilizando prototype

/*
decimal_sep: caracteres utilizados como separtor decimal, o padrão é '.' quando omitidos
thousands_sep: char usado como separador de milhares, o padrão é ',' quando omitidos
*/
Number.prototype.toMoney = function(decimals, decimal_sep, thousands_sep)
{ 
   var n = this,
   c = isNaN(decimals) ? 2 : Math.abs(decimals), //se decimal é zero devemos levá-lo, isso significa que o usuário não quer mostrar qualquer decimal

   d = decimal_sep || '.', //se nenhum separador de decimal é passado usamos o ponto como separador de decimal padrão (que deve usar um separador de decimal)

   /*
    conforme [http://stackoverflow.com/questions/411352/how-best-to-determine-if-an-argument-is-not-sent-to-the-javascript-function]
    o caminho mais rápido para verificar se o parâmetro não definido é usar typeof valor === 'indefinido'
    em vez de fazer === valor indefinido.
   */   
   t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, 
   // se você não quiser usar um separador de milhares você pode passar cadeia vazia como valor thousands_sep

   sign = (n < 0) ? '-' : '',

   // extraindo o valor absoluto da parte inteira do número e convertendo a cadeia
   i = parseInt(n = Math.abs(n).toFixed(c)) + '', 

   j = ((j = i.length) > 3) ? j % 3 : 0; 
   return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); 
}

Number.prototype.toBrMoney = function(decimals) {
 return this.toMoney(decimals,',','.');
};

Testando o código acima



quinta-feira, 7 de fevereiro de 2013

exemplo envio de email utilizando javamail

Arquivo com as propriedades de Email (mail.properties)
#Configuracao de Email
mail.transport.protocol=smtp
mail.debug=true
#
mail.smtp.auth=true
mail.smtp.host=smtp.gmail.com
mail.smtp.port=25
#
mail.smtp.from={usuario}@gmail.com
mail.smtp.user={usuario}
mail.smtp.password={senha}
Classe MailAutenticator que estende java.mail.Authenticator e precisa ser utilizada caso o servidor smtp exiga autenticação para o envio de emails.
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * Classe de encapsulamento de informações para uso durante o processo de
 * autenticação no servidor de e-mail.
 */
public class MailAuthenticator extends Authenticator {

 private String username, password;

 public MailAuthenticator(String user, String pwd) {
  username = user;
  password = pwd;
 }

 /**
  * Retorna um elemento de autenticação para e-mail
  * a partir de usuário e senha pré-configurados
  */
 @Override
 public PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(username, password);
 }

}


Classe MailSender que é  responsável por estabelecer comunicação com o servidor e enviar os email.
import java.io.FileInputStream;
import java.util.Properties;

import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import android.util.Log;

public class MailSender {

 private static final String TAG = MailSender.class.getName();
 
 public MailSender() {
  
  MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap();
  mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
  mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
  mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
  mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
  mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
  CommandMap.setDefaultCommandMap(mc);
 }

 /**
  * 
  * @param from
  * @param to
  * @param subject
  * @param message
  * @param file
  * @throws Exception
  */
 public boolean sendMail(String from, String[] to, String subject, String message) throws Exception {
  return sendMail(from, to, subject, message, new String[0]);
 }
 
 /**
  * 
  * @param from
  * @param to
  * @param subject
  * @param message
  * @param file
  * @throws Exception
  */
 public boolean sendMail(String from, String[] to, String subject, String message, String file) throws Exception {
  return sendMail(from, to, subject, message, new String[] { file });
 }

 /**
  * 
  * @param from
  * @param to
  * @param subject
  * @param message
  * @param files
  * @return 
  * @throws Exception
  */
 public boolean sendMail(String from, String[] to, String subject, String message, String[] files) throws Exception {

  Properties properties = new Properties();
  properties.load(new FileInputStream("mail.properties"));

  String user = properties.getProperty("mail.smtp.user");
  String pass = properties.getProperty("mail.smtp.password");

  Session session = Session.getInstance(properties, new MailAuthenticator(user, pass));
  session.setDebug(true);

  Message msg = new MimeMessage(session);

  try {

   // Setando o destinatário
   msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to[0]));
   for (int count = 1; count < to.length; count++) {
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to[count]));
   }   
   
   // Setando a origem do email
   if (from == null || from.isEmpty()) {
    from = properties.getProperty("mail.smtp.from");
   }
   //
   msg.setFrom(new InternetAddress(from));

   // Setando o assunto
   msg.setSubject(subject);

   if (files == null || files.length == 0) {

    /* Setando o content/type do email */
    msg.setContent(message, "text/html");

   } else {

    // Cria a primeira parte da mensagem
    MimeBodyPart mineBodyPart = new MimeBodyPart();
    mineBodyPart.setContent(message, "text/html");

    // Cria a Multipart
    Multipart multiPart = new MimeMultipart();
    multiPart.addBodyPart(mineBodyPart);

    for (String file : files) {

     // Cria partes dos arquivos em anexo
     MimeBodyPart mineBodyPartFiles = new MimeBodyPart();

     // Anexa o arquivo na mensagem
     FileDataSource fileDataSource = new FileDataSource(file);
     mineBodyPartFiles.setDataHandler(new DataHandler(fileDataSource));
     mineBodyPartFiles.setFileName(fileDataSource.getName());
     multiPart.addBodyPart(mineBodyPartFiles);
    }

    // adiciona a Multipart na mensagem
    msg.setContent(multiPart);
   }

  } catch (Exception e) {

   Log.e(TAG, e.getLocalizedMessage());
   
   throw new Exception(e.getLocalizedMessage(), e);
  }

  try {
   
   Transport transport = session.getTransport();
   transport.connect();

   transport.sendMessage(msg, msg.getAllRecipients());
   transport.close();
   
   return true;
   
  } catch (Exception e) {

   Log.e(TAG, e.getLocalizedMessage());
  }
  
  return false;
 }
}

terça-feira, 5 de fevereiro de 2013

otimizando conversão para valores numéricos

String para Inteiro
 
 /**
  * Método que retorna um Integer caso o parâmetro seja diferente de nulo e vazio
  * 
  * @param valor
  *            campo a ser convertido
  * @param defaultValue
  *            valor default caso ocorra erro
  * @return Integer
  *            valor convertido para Integer
  */
 public static Integer getInteger(String valor, Integer defaultValue) {
 try {
   
      int num  = 0;
      int sign = -1;
      final int len  = valor.length( );
      final char ch  = valor.charAt( 0 );
      if ( ch == '-' )
          sign = 1;
      else
          num = '0' - ch;

      int i = 1;
      while ( i < len )
          num = num*10 + '0' - valor.charAt( i++ );
 
      return sign * num;
      
 } catch (Exception e) {
      return defaultValue;
 }
 }

String para Long
 
/**
  * Método que retorna um Long caso o parâmetro seja diferente de nulo e vazio
  * 
  * @param valor
  *            campo a ser convertido
  * @param defaultValue
  *            valor default caso ocorra erro
  * @return Long
  *            valor convertido para Long
  */
 public static Long getLong(String valor, Long defaultValue) {
 try { 
      long num  = 0;
      long sign = -1;
      final long len  = valor.length( );
      final char ch   = valor.charAt( 0 );
      if ( ch == '-' )
          sign = 1;
      else
          num = '0' - ch;
 
      // Build the number.
      int i = 1;
      while ( i < len )
          num = num*10 + '0' - valor.charAt( i++ );
 
      return sign * num;
      
 } catch (Exception e) {
      return defaultValue;
 }
 }

String para Double
 
/**
  * Método que retorna um Double caso o parâmetro seja diferente de nulo e vazio
  * 
  * @param valor
  *            campo a ser convertido
  * @param defaultValue
  *            valor default caso ocorra erro
  * @return Double
  *            valor convertido para Double
  */
 public static Double getDouble(String valor, Double defaultValue) {
 try {

      double num  = 0;
      double sign = -1;
      final double len  = valor.length( );
      final char ch  = valor.charAt( 0 );
      if ( ch == '-' )
          sign = 1;
      else
          num = '0' - ch;
 
      // Build the number.
      int i = 1;
      while ( i < len )
          num = num*10 + '0' - valor.charAt( i++ );
 
      return sign * num;
      
} catch (Exception e) {
      return defaultValue;
}
}