segunda-feira, 16 de abril de 2012

MySQL nome da tabela case sensitive

   O objetivo do blog é catalogar alguns problemas encontrados durante o desenvolvimento de alguns projetos e recentemente no projeto que estou trabalhando atualmente tive um problema em migrar um banco de um ambiente Windows para o Mac. 

   O problema tem como a origem a forma como o MySQL armazena suas tabelas, pois ele grava como arquivos/pastas e cada S.O. tem sua particularidade no tratamento de nome de pastas e arquivos. Em ambientes Unix/Linux like você tem tratamento case sensitive. Ou seja, a pasta ALUNO é diferente da pasta aluno. Como isso pode gerar um problema? Eu estou trabalhando com hibernate que gera as consultas no formato: "SELECT * FROM ALUNO". Como a tabela foi criada como "aluno", o erro retornado era "table not exists". Após identificar a origem do problema com a ajuda da documentação do MySQL (http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html) descobri o parâmetro "lower_case_table_names". Este parâmetro mostra como o MySQL deve se comportar em relação as chamadas SQL em relação aos nomes da tabela (mais detalhes podem ser obtidos na documentação referenciada). Eu utilizava o MAMP (http://www.mamp.info/en/index.html) que traz a instalação e fácil acesso ao Apache e MySQL. Ele equivale ao XAMP no Windows (http://www.apachefriends.org/pt_br/xampp.html). 

   Com a instalação do MAMP o MYSQL é instalado de uma forma que o case sensitive é configurado em um modo default. Existe a opção de tentar configurar o MySQL do MAMP para o modo case insensitive porém eu não consegui. Como no MacBook que possuo, tenho o Lion instalado e não tive esse problema durante os testes com o banco migrado (isso aconteceu no Imac com Snow Leopard) eu resolvi instalar o MySQL do site oficial (http://dev.mysql.com/downloads/mysql/). E eis que o problema foi solucionado sem necessidade de configuração adicional. 

    Então fica a dica. No meu caso resolveu a instalação do MySQL oficial, entretanto existe formas de se resolver isso, caso não consiga ou possa reinstalar o banco. A configuração do parâmetro lower_case_table_names = 1 deve ser colocado no arquivo *.cnf usado pelo banco para passar as configurações para a instância.

quinta-feira, 19 de janeiro de 2012

Recursos salvamento automático Mac OS

Lendo sobre as novidades do Mac OS Lion, um dos recursos que a Apple vende como fantástico é o recurso de auto-salvar e versionar os documentos "automagicamente". Ela promete que seus documentos serão salvos e versionados automaticamente, entretanto quando você detalha essas funcionalidades, percerá que as Apps precisam implementar esse suporte, e não é um recurso automático do sistema operacional, conforme eu tinha entendido em um primeiro momento. Se você utilizar o Microsoft Word 2011 (até hoje, 19/01/2012), por exemplo, ele não implementa o recurso de auto-save, então não esqueça de utilizar o Command+s para salvar seus documentos. O recurso de versionamento, só é possível utilizar se você possui time machine configurado. Se você utiliza outra ferramenta de backup, o versionamento de documentos não estará disponível para você.
Para os mais atentos, perceberão que ela descreve melhor o recurso de auto-save neste link, quando fala "os apps desenvolvidos com o recurso auto-salvar".
Já o versionamento, não fica tão claro a necessidade do time machine, porém este é um pré-requisito, tanto que a configuração do recurso de tempo de bloqueio de edição do documento é feito em configurações-> time machine.

Devemos parabenizar a Apple pelo SO fantástico, mas também observar que é necessário ficar atento as entrelinhas para entender os recursos do sistema.

Como traduzir o dicionário do Word 2011 no Mac

Recentemente verifiquei que o Word 2011 que instalei no Mac OS vem com opção default de idioma inglês. Então quando você escreve textos em português, ele considera a escrita errada. Para modificar isto, basta clicar em tools-> language na barra de menus e escolher o português como idioma. Recomendo que coloque essa opção como default se seus textos são sempre escritos em português.

fonte: http://mac2.microsoft.com/help/office/14/en-us/word/item/987fc20a-b6bd-49db-8ba1-6a263a924b41

terça-feira, 27 de dezembro de 2011

URL encoding + erro 406 Http

Quando tentamos conectar através de uma URL passando parâmetros é importante que não existam espaços em branco nestes parâmetros.
Para resolver essa situação, o atributo em questão deve ser tratado da seguinte forma:
texto = texto.replaceAll(" ","%20");


Mais explicações sobre caracteres de escape que devem ser utilizados na passagem de parâmetros pode ser encontrado aqui e principalmente neste excelente link.


Quando tentei utilizar a chamada sem o encoding devido tive como retorno o erro http 406 ("Not Acceptable")
Mais explicações sobre retornos HTTP podem ser encontrados aqui.

Conectar URL através de um proxy em Java

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Properties;

public class Main{

  public static void main(String s[]) throws Exception{
    try {
      Properties systemSettings = System.getProperties();
      systemSettings.put("proxySet""true");
      systemSettings.put("http.proxyHost""proxy.mycompany.local");
      systemSettings.put("http.proxyPort""80");

      URL u = new URL("http://www.java.com");
      HttpURLConnection con = (HttpURLConnectionu.openConnection();
      sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
      String encodedUserPwd = encoder.encode("domain\\username:password".getBytes());
      con.setRequestProperty("Proxy-Authorization""Basic " + encodedUserPwd);
      con.setRequestMethod("HEAD");
      System.out.println(con.getResponseCode() " : " + con.getResponseMessage());
      System.out.println(con.getResponseCode() == HttpURLConnection.HTTP_OK);
    catch (Exception e) {
      e.printStackTrace();
      System.out.println(false);
    }
  }
}


A fonte desta solução é o excelente site java2s.comCódigo