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

Download Excel (Csv) utilizando Ajax e Json

Em um dos projetos que trabalho precisei realizar o download de arquivo excel via Ajax, quando me deparei com um problema. O Ajax não trabalha com retorno binário. Ele trabalha apenas com retorno texto ou XML.


Para resolver essa situação, escrevi um código utilizando JSON + Ajax + Dwr que resolveu meu problema.



  1. Criei uma ƒunção javascript que chama uma servlet passando um objeto Json como atributo do request.
  2. A Servlet convert esse objeto JSON em um arquivo csv e devolve como resposta.



Segue trecho de código:
//função javascript
function exportarGridReclamacoesExcel(){
    exibirCarregando(true);    
    var REQUEST;
    if (window.XMLHttpRequest) {
        REQUEST = new XMLHttpRequest();        
    } else if (window.ActiveXObject) {
        REQUEST = new ActiveXObject("Microsoft.XMLHTTP");
    }
    REQUEST.open('POST', '/sistema/modulo/ExportacaoGridExcel?tipoExportacao=reclamacoes&dadosRelatorio',false);
    REQUEST.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    
    var objetoJson = JSON.stringify(markersAgrupados);
    REQUEST.send(objetoJson);
    if(REQUEST.readyState == 4 && REQUEST.status == 200) {
        alert(REQUEST.responseText);
        exibirCarregando(false);    
    }


//código da servlet


protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // PrintWriter out = response.getWriter();
        try{                        
            response.setContentType("text/csv");
            response.setHeader("Content-Disposition","attachment; filename=relatorio_grid.csv");
            response.setHeader("pragma","public");
            response.setHeader("pragma","no-cache");
            response.setHeader("Cache-Control","cache");
            response.setHeader("Cache-Control","must-revalidate");

            String tipoExportacao = request.getParameter("tipoExportacao");
            String conteudoExportacao = (String) request.getAttribute("dadosRelatorio");
            JSONArray listaObjetos = new JSONArray(conteudoExportacao);
            Writer fw = new OutputStreamWriter(response.getOutputStream());            
            fw.write("Data Reclamação;Login;Numero da Reclamação;Número da Linha;Plano;Reclamação;Tecnologia;Tipo Ocorrência;Pesquisa Realizada;Localização Selecionada;Cobertura GSM;Cobertura 3G;BIOR;Latitude;Longitude\n");
            fw.flush();
            fw.close();
        }catch (Exception ex) {
            ex.printStackTrace();
           // fw.println("Erro ao tentar gerar relatório dos grids\n" + ex.getMessage());
        }finally {
            //fw.close();
        }
    }
    
     @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }

        /** 
         * Handles the HTTP POST method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
        }


Referências dos problemas:
http://www.w3.org/TR/XMLHttpRequest/#the-send-method
http://www.zachhunter.com/2011/06/json-to-csv/
http://www.zachhunter.com/2010/11/download-json-to-csv-using-javascript/
http://www.ibm.com/developerworks/web/library/j-ajax2/
http://www.ibm.com/developerworks/web/library/wa-ajaxintro3/
http://www.json.org/