quinta-feira, 28 de janeiro de 2021

Javascript: Problemas com Requisição de URL

 Alguns problemas comuns quando você faz uma requisição de uma URL são alguns caracteres especiais, nos quais geralmente dá dor de cabeça. Entretanto, existe caracteres mais especiais no meu caso. Precisava fazer uma requisição e passar por get uma string que continha um caractere "+". O problema é que por padrão URI, um sinal de "+" é usado para representar um espaço e quando chegava no back-end da aplicação, o sinal simplesmente sumia.

Aí que entra uma questão. Para tratar uma URI, no Javascript temos o comando encodeURI(), entretanto, ele não codifica os caracteres que são usadas por padrão (por exemplo, os caracteres : e / do "http://"), e o nosso "+" está incluso nisso. 

Para isso, a função correta para ser usada é "encodeURIComponent()", onde você usará na string que vai ser enviado por get.  Exemplo de uso:

encodeURIComponent("1+3=4")

o retorno da função será:

1%2B3%3D4


terça-feira, 26 de janeiro de 2021

SQL Server: Concatenação

Durante um trabalho, precisei utilizar a concatenação no SQL Server. Normalmente utilizo a função CONCAT, mas para a minha não tão surpresa, a versão do cliente era mais antigo. Então, hoje vou registrar aqui as formas de concatenação possível no SQL Server.

terça-feira, 29 de dezembro de 2020

Java: Switch e Strings

 Diferente de muitas linguagens, a linguagem JAVA permite desde a versão 1.7 utilizar Strings como controle de fluxo. O exemplo abaixo mostra como podemos utilizar:

String str = "Olá! Está aí?";
switch(str){
    case "Tchau":
        System.out.println("Tchau");
        break;
    case "Olá! Está aí?":
        System.out.println("Sim, estou");
        break;
    default:
        System.out.println("Não entendi");
}

O código acima seria o equivalente ao código abaixo realizado com if-else em cascata, mas é mais elegante utilizar da maneira acima, além de que o bytecode gerado é mais eficiente:

String str = "Olá! Está aí?";
if (str.equals("Tchau")){
    System.out.println("Tchau");

}else if (str.equals("Olá! Está aí?")){
      System.out.println("Sim, estou");

}else{
        System.out.println("Não entendi");
}


Android+Gradle: Depreciação da configuração de dependência

Não sei exatamente quando, mas retomando um projeto, eu me deparei diversos avisos como esse:

"Configuration 'androidTestCompile' is obsolete and has been replaced with 'androidTestImplementation' and 'androidTestApi'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"

Então foi que eu fiz, visitei o link, mas como temos alguns artigos que fiz, então vamos ver o que precisei mudar e o que recomendo.

Bem, vamos começar com a mensagem acima: o comando "androidTestCompile" vai ser substituído pelo "androidTestImplementation" e "androidTestApi". Entretanto, é curioso porque uma outra mensagem é a seguinte:

"Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"
Bem, agora só sobrou nós utilizarmos "androidTestImplementation".

A próxima mensagem é a seguinte:
"Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"
Essa mensagem aparece quando usamos uma biblioteca externa, mas qual é a diferença? Quando você usa "implementation", você está garantindo o encapsulamento da biblioteca, enquanto que a "api" permite visualizar e manipular arquivos internos. Dica de ouro? Troque para "implementation" em aplicativos em geral e aprenda a respeitar o encapsulamento, pois se está privado, é porque você não deve mexer com tais objetos. Se você está mexendo com bibliotecas para ser distribuído, use "api".

Ah! Existe uma terceira possibilidade para substituir o "compile" que é "annotationProcessor", use-o quando você quer utilizar uma biblioteca de anotações.


quarta-feira, 21 de agosto de 2019

CKEDITOR: Configurar função para ser executado ao carregar

Esses dias me deparei com um problema, precisava que um texto fosse inserido num campo que usa o CKEditor. Até tentei executar essa função em document.load, as ainda assim, o CKEditor não estava totalmente iniciado e pronto para receber o texto. Então encontrei uma forma de configurar o CKEditor para executar o que queria, na verdade, existe três formas, que vai variar de acordo com a situação:

A primeira é quando a API já está carregada, que você pode fazer da seguinte maneira:

CKEDITOR.on('loaded', function(evt) {
    // your stuff here
} );

Mas lembrando que API estar carregada não significa que você pode inserindo o texto em qualquer lugar, dado que as instâncias podem não estar prontas, que é o que veremos agora:

A segunda forma é executado quando qualquer instância fica pronta, que é feita da seguinte maneira:

CKEDITOR.on('instanceReady', function(evt) {
    // your stuff here
} );

Essa é boa quando você quer aplicar algo em todas as instâncias, mas as mesmas só podem ser inseridas quando as mesmas estão prontas.

Por último, temos quando queremos executar algo em uma instância específica, que fica assim:

CKEDITOR.replace('editor', {
    on: {
        instanceReady: function(evt) {
            // your stuff here
        }
    }
} );

Neste caso, o 'editor' seria o nome da instância que queremos aplicar a função quando estiver pronta.

quarta-feira, 3 de abril de 2019

Android: Migração Support Library para Android X

Para quem não sabe, Support Library é uma biblioteca mantida pela própria equipe do Android que visa a retrocompatibilidade de recursos novos lançadas para API mais recente. Por exemplo, o Fragment surgiu na API 11 (Android 3.0), mas com o Support Library você consegue manter a compatibilidade do Fragment em aparelhos que estejam em versões anteriores ao do API 11.
Entretanto, com a API 28 (Android 9) lançada, como parte do Android Jetpack, é criada a biblioteca Android X que visa justamente em facilitar o desenvolvimento com componentes pré-facilitados, e com isso, absorveu as funcionalidades do Support Library.

As versões lançadas vão continuar disponível, mas não ocorrerá novos desenvolvimentos para Support Library, então se desejar aplicar os novos recursos que virão nos futuros APIs, será necessário migrar seu app para utilizar o Android X.

A documentação que coloquei aqui vai ajudar a configurar e o mais importante, possui o mapeamento das bibliotecas do Support Library para Android X, então, após configurar o Gradle para dar suporte, você deve usar o mapa para atualizar as dependências e atualizar os imports das suas classes.

segunda-feira, 22 de outubro de 2018

Eclipse+Tomcat: Problemas ao iniciar TomCat

Estava eu tentando resolver um problema do cliente, quando eu vi a necessidade de reiniciar o Eclipse do cliente. Fiz isso, e aí surgiu o problema: a tarefa já estava no 100% para iniciar, mas nunca concluía. 

Procurando na Internet se achava a causa do problema e encontro a tal solução no StackOverflow. Desabilitei os breakpoints e voltou ao normal. Por algum motivo, ao publicar algo, no Eclipse pode ter alguma rotina marcada com breakpoint e isso acaba travando. Mas isso é apenas especulação.