Blog: Dicas

Como “chamar” o telefone no iPhone em Objective C

Pelo que me disseram (tentei testar no emulador, mas não funciona :P), é só criar uma “URL” com o protocolo “tel:” mais o número do telefone. Exemplo:

//Cria o objeto NSURL com uma String (“protocolo:numero_do_telefone”)
NSURL* phoneURL = [NSURL URLWithString: @“tel:1234567890”];
//Chama a aplicação externa para abrir a URL
[[UIApplication sharedApplication] openURL: phoneURL];

Também é possivel criar uma página web para iPhone, com o mesmo protocolo:

Ligue-me&lt/a&gt

Sei lá, tomara que isso ajude alguém 🙂

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Que diabos são as operações &#8220;<<" e ">>&#8221; no Javascript

São operadores de bit a bit. 🙂

Hum Melhor ir as explicações:

– O operador “
var inteiro = 1; //(64 bits) -> 00000001 (1)
alert("Número original: ” + inteiro);
inteiro = inteiro 64 bits) -> 00000010 (2)
alert(“Número deslocado uma casa para a esquerda: ” + inteiro);

– E o operador “>>” descola o valor bit a bit de uma variável, da esquerda para direita. Exemplo:

var inteiro = 4; //(64 bits) -> 00000100 (4)
alert(“Número original: ” + inteiro);
inteiro = inteiro >> 2; //descola duas “casas” para a direita (64 bits) -> 00000001 (1)
alert(“Número deslocado duas casas para a direita: ” + inteiro);

Se formos pensar bem, estes operadores “multiplicam” (“>”) o número por dois. Isso acontece por causa que os computadores trabalham com números binários (“bi” igual a “dois”, entendeu? 😛 )

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Qual é a diferença entre métodos public, protected, private e &#8220;default&#8221; no Java?

Dúvida de um pessoal aqui, que vou tentar (eu disse “tentar” 😛 ) explicar.

No Java, existem quatro tipos de “permissões” de acesso a métodos (isso também vale para classes e propriedades, com algumas exceções ) que, dependendo de sua escolha, parte do seu código-fonte vai ou não “enxerga-la” durante a execução/compilação deste. São elas:

public : A mais fácil de explicar, pois todo código tem acesso a ela! 🙂
Exemplo:

Arquivo: Util.java

package teste.util;
_
_

public class Util {

           public void nothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}

Arquivo: Main.java

package teste.main;
_
_ import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      util.nothing();
           }
}

private : A mais restrita das quatro, onde somente a classe que a declarou tem acesso:

Arquivo: Util.java

package teste.util;
_
_ public class Util {
            //Este método é chamado somente dentro desta classe
           private void privateNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
_
_            public void publicNothing() {
                    System.out.println(“Será que chamo?”);
                    this.privateNothing();
           }
}

Arquivo: Main.java

package teste.main;
_
_ import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.privateNothing(); //NÃO FUNCIONA
                      util.publicNothing();
           }
}

(Até aqui, foi bem simples explicar. Mas a partir de agora que vem o problema :P)

protected : Este “acesso” é meio estranho, mas vamos lá: a classe que declarou, as classes que estão no mesmo pacote e a classe que herdou desta, tem acesso a ela.
Putz Confuso não? Melhor pedir ajuda ao exemplo. (universitários? nem pensar!) 😛

Arquivo: Util.java

package teste.util;
_
_ public class Util {
           protected void protectedNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}
_
_ Arquivo: Inutil.java

package teste.util;
_
_ //Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
_                   __Util util = new Util();_
_                   util.__protectedNothing();_
_           }_
_}_
_
_ Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;
_
_ //Herdou, mas não esta no mesmo pacote (isto funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
_                   super__.__protectedNothing();_
_           }_
_}_

Arquivo: Main.java

package teste.main;

__import teste.heranca.HerancaUtil;

import teste.util.Inutil;

import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.protectedNothing(); //NÃO FUNCIONA
                      Inutil inutil = new __Inutil();_
_                      inutil.nothing();_
_                      __HerancaUtil
 h__erancaUtil__ = new HerancaUtil();

                      h__erancaUtil.nothing();
           }
}

(Só falta uma 🙂 )

default : O acesso é restrito as classes que estão no mesmo pacote, ou seja, classes que não estejam no mesmo pacote, mesmo as que herdam da que declarou o método, não o acessam.

Arquivo: Util.java

package teste.util;
_
_ public class Util {
           void defaultNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}
_
_ Arquivo: Inutil.java

package teste.util;
_
_ //Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
                   Util util = new Util();_
_                   util.__defaultNothing
();

           }
}
_
_ Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;
_
_ //Herdou, mas não esta no mesmo pacote (NÃO funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
                   //super__.default__Nothing(); //NÃO FUNCIONA
           }
}

Arquivo: Main.java

package teste.main;

__import teste.heranca.HerancaUtil;

import teste.util.Inutil;

import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.defaultNothing(); //NÃO FUNCIONA
_                      __Inutil inutil = new __Inutil();_
_                      inutil.nothing();_
_           }_
_}_

(Ufa, terminou! 🙂 )

Espero que alguém compreenda o que esta escrito 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Comando delete em Javascript

Sabia que existe um comando que desaloca da memória uma variável em Javascript?
Pois, ele existe e é bem parecido com o de C++.
Ele se chama “delete”! 🙂

Meio estranho desalocar memória em Javascript Acho, mas não tenho certeza, que ele já faz isso por que é uma linguagem interpretada
Em todo caso, nāo faz mal usá-la 😛
E percebi que nem todo navegador funciona 😛
Mais informações no site do MDN:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete

É isso aí!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Como ordenar um Array em Javascript

Desculpem por este tempo fora, acho que a preguiça me pegou uns tempos para cá
Vou tentar voltar a minha “programação normal”. 😛
Existem várias soluções na mão para ordenar uma lista: bubble sort, quick sort, table sort, gambiarra sort 😛 
Mas muita gente não sabe que existe um “facilitador” para isso em Javascript, um método chamado sort na própria “classe” Array:
var frutas = [“Limão”, “Laranja”, “Goiaba”, “Abacaxi”];
frutas.sort();
document.write(frutas);
Legal, não?
E ainda você pode implementar seu método de comparação, igual a Java:
//Numeros em ordem decrescente
var numeros = [1, 2, 3, 4];
numeros.sort(function (a, b) {
     if (a > b) {
          return -1;
     } else if (a

          return 1;
     }
     return 0;
});
document.write(numeros);
Acho que isso vai facilitar a vida de muita gente (a minha, com certeza!). 🙂

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Posso Retornar uma Função ou Receber esta como Paramêtro em Javascript

Resposta: Sim! 🙂

Agora, só para não ficar só nisso, vamos ao exemplo:

//Declaração de função
function receberRetornarFuncao(func) {
        //Executa a função recebida como paramêtro
        func();
        //Retorna uma função
        return function() {
                alert(‘Retorno’);
        };
}

//Variável recebe função retornada (executa a função receberRetornarFuncao)
var funcRet = receberRetornarFuncao(function() {
       alert(‘Paramêtro’);
});
//Executa a função retornada
funcRet();

Obs.: Quando você faz “function nomeDaFuncao() {}” ou “var nomeDaFuncao = function() {}”, você declara esta e mas não executa. Estes só executam quando é feita a chamada “nomeDaFuncao();”.

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Como Reescrever um Método de um Único Objeto em Java

Pela pergunta, parece muito difícil codificar Mas, para fazer, até que é fácil! 🙂

A gente pode reescrever o método de um único objeto, codificando ele durante a instanciação deste (chamada do construtor). Exemplo:

List listaStrings = new ArrayList() {
      public String toString() {
               return “Reescrevi o método”;
      }
};
listaStrings.add(“Primeira String”);
System.out.println(listaStrings);

Interessante, ele escreveu “Reescrevi o método” na tela!

Se você retirar as linhas de “reescrita”:

List listaStrings = new ArrayList();
listaStrings.add(“Primeira String”);
System.out.println(listaStrings);

Ele escreve “[Primeira String]” (agora parece normal 😛 ).

Obs.: Isso só pode ser feito em objetos que não são de classes “final”.

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Posso mudar o valor de um parâmetro em Java

Resposta direta: Não! 😛

Em Java, um parâmetro sempre é passado por valor (e não por referência). Ou seja, se eu fizer um código assim:

public class Main {
      public static void inc(int i) {
             i++;
      }
      public static void main(String args[]) {
            int a = 0;
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

O que será exibido na tela é:
Valor de a : 0
Valor de a : 0

O mesmo vale para uma String:

public class Main {
      public static void helloWorld(String str) {
             str += “ Hello World”;
      }
      public static void main(String args[]) {
            String s = “Alo mundo”;
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Tela:
Alo mundo
Alo mundo

Ou seja, o valor da variável passada por parametro não muda depois que você retorna para a função que o chamou

Mas existe um jeito de contornar isso! 🙂

Podemos usar classes que possuem funções e/ou atributos que modificam o estado inicial de um objeto (hã, o que é isso???).

Para facilitar, vejamos o exemplo a seguir:

public class Main {
      public static void helloWorld(StringBuilder str) {
             str.append(“ Hello World”);
      }
      public static void main(String args[]) {
            StringBuilder s = new StringBuilder(“Alo mundo”);
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Quando você executar, verá algo assim:
Alo mundo
Alo mundo Hello World

A mesma coisa acontece se eu criar um atributo inteiro em uma classe:
class MutableInteger {
         public int i = 0;
         public String toString() {
                 return String.valueOf(i);
         }       
}
E incrementar este na função, passando um objeto instanciado desta: 

public class Main {
      public static void inc(MutableInteger b) {
             b.i++;
      }
      public static void main(String args[]) {
            MutableInteger a = new MutableInteger();
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

E o que será exibido é:

Valor de a : 0
Valor de a : 1

Uau! Que coisa estranha 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Propriedades estáticas em Java

Esta dúvida também apareceu semana passada

Se eu criar uma propriedade estática do tipo contador e incrementa-la no construtor do objeto

public class Usuario {
      private static int contador = 0;
      //Construtor
      public Usuario() {
              contador++;
      }
      //Exibe o valor
       public void exibirContador() {
               System.out.println(“No. de Usuarios: ” + contador);
       }
}

E criar e instanciar 5 objetos desta classe, não importa em qual objeto chamar o método exibirContador, que ele sempre retornará o mesmo valor, ou seja, 5 (é como se a variável fosse global):

Usuario u1 = new Usuario();
Usuario u2 = new Usuario();
Usuario u3 = new Usuario();
Usuario u4 = new Usuario();
Usuario u5 = new Usuario();

u2.exibirContador(); //Tente trocar para qualquer outro objeto que sempre dará o mesmo valor

Outra dúvida que surgiu é a chamada desta variável. Será que é possível chamar assim:
      public Usuario() {
              contador++;
      }
Ou assim:
      public Usuario() {
              this.contador++;
      }

Ou assim:
      public Usuario() {
              Usuario.contador++;
      }

Sim, por incrivel que pareça, é possível. (agora, não me pergunte o porque parece que isso tem haver com escopo da variável e outras coisas a mais que não faço a menor idéia de como funciona )

Que confusão Será que eu consegui explicar alguma coisa?
Bem, de qualquer forma, é bom testar o código acima 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Qual é a diferença entre classe abstrata e interface em Java

Isso foi me perguntado semana passada .

A resposta:

Classe Abstrata é uma classe que não pode ser instanciada, pode possuir métodos abstratos (ou seja, sem implementação) e que somente pode ser extendida (ou seja, as classes filhas somente podem herdar de uma única classe abstrata).

Interface é uma estrutura que também não pode ser instanciada, possui sempre métodos abstratos e podem ser implementadas em várias classes (ou seja, as classes filhas podem herdar de uma ou mais interfaces).

Exemplo:

//Classe abstrata Som
abstract class Som {
    public abstract void tocar();
    public void info() {
           System.out.println(“Testando som, 1, 2, 3”);
    }
}

//Classe abstrata Video
abstract class Video {
     public abstract void exibir();
     public void info() {
            System.out.println(“Luzes, Camera e Acao”);
     }
}

//Classe Musica que extende a classe Som (funciona!)
class Musica extends Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);
       }
}

//Classe Filme que extende as classes Video e Som (não funciona )
class Filme extends Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

A classe Filme somente funcionaria, se as classes abstratas Video e Som fossem interfaces:

//Interface Video (não há implementação de método)
interface Video {
      public void exibir(); 
}

//Interface Som (não há implementação de método)
interface Som {
      public void tocar();
}

//Classe Filme que implementa as interfaces Video e Som (funciona )
class Filme implements Video, Som {
       public void tocar() {
              System.out.println(“Do re mi fa sol la si”);

       }
       public void exibir() {
               System.out.println(“Vendo o filme”);
       }

}

Complicado, não? Mas com o tempo, a gente pega a prática 🙂

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Leak Finder Javascript

Sabia que o Javascript dá vazamento de memória?
Pois é, eu não sabia até agora (e nem me preocupava com isso ) 😛

Mas, um colega meu passou um link de um artigo que fala sobre isso e uma nova ferramenta para descobrir este tipo de problema:
http://google-opensource.blogspot.com.br/2012/08/leak-finder-new-tool-for-javascript.html

Muito legal! Principalmente para quem faz ou esta fazendo sites para dispositivos móveis (onde o recurso de memória é um pouco mais escasso ).

Valeu pela dica, Morilha!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Dicas para programação de sites mobile

Aqui vão as minhas dicas para quem esta iniciando neste maravilhoso e complicado mundo de site mobile:
– É possível implementar aplicações responsivas (onde a página se ajusta, através de folhas de estilos, conforme o tamanho da tela/navegador), porém é um pouco difícil de se fazer, se as telas de desktop e de mobile forem muito diferentes (Quer mais informações? Entre no site da wikipédia: http://pt.wikipedia.org/wiki/Web_Design_Responsivo).
– Evitem usar muitas imagens “pesadas” para web-mobile, para que o usuário não sinta uma “lentidão” no sistema.

– Efeitos visuais não são recomendáveis, pois alguns aparelhos de baixo processamento não suportam muito bem isso (travam, ficam lentos, etc.).

– Evitem usar tamanhos fixos no estilo e nos elementos, tentem usar o máximo possível de porcentagem ou “em”.

– Se sua aplicação checar se o navegador é mobile via User-Agent (cabeçalho da página web onde pode-se identificar o navegador e sistema operacional que requisitou esta), vocês podem emular isso via plugins, como este:
 – Se necessário, não esqueçam da meta tag viewport:
– Se vocês não tiverem dispositivos para seus testes, pode-se emular alguns destes via web, através do site:
 http://www.mobilephoneemulator.com/ (Não é 100% confiável, mas é alguma coisa).
     
Obs.: Recomendação para esta ferramenta: para melhor emulação, abram esta url no Google Chrome (para testes no Android) e/ou no Safari (para testes no iPhone).
– Em testes finais, sempre usem dispositivos reais.
– Se for necessário implementar algum efeito visual, testem no pior dispositivo possível (com o menor processamento, tela pequena e pouca memória).

– Sei que isso vale mais para desenvolvimento nativo, mas sempre deem uma olhada nos guidelines disponíveis para Android (http://developer.android.com/design/index.html) e para iOS (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html), pois estes dão dicas legais para quem esta começando. 🙂

<div>
  Espero que isso ajude alguém </p> 

  <p>

  </p>
</div>

<p>
  <strong>Programação Java</a> é aqui. Acesse as o <a href="http://java.jar.io/blog">blog</a> para ficar atualizado sobre o mundo da <strong>Linguagem Java</strong>. Dicas, informações e muitos truques para se usar no dia-a-da do <strong>programador java</a>. </p>

Argumentos variaveis em C/C++

Primeiramente, precisamos saber o que são argumentos variaveis
Argumentos variaveis são instruções que podem receber 1 ou mais parâmetros, não contendo um número definido destes.
Um exemplo clássico é o método printf do stdio.h:

int a = 10;
char* b = “dez”;
printf(“%d %s”, a, b);

Para criar uma função assim, primeiramente é necessário incluir a biblioteca stdarg.h:

include <stdarg.h>

Depois, podemos criar a função com o último parâmetro definido com 3 pontos ( ):

void printNumber(int a, ) {
}

Para percorrer os parâmetros passados (onde a quantidade não esta definida), devemos usar o tipo va_list e as funções va_start, va_arg e va_end:

void printNumber(int a, ) {
va_list args;
int i = a;
va_start(args, a);
while (i) {
printf(“%d ”, i);
i = va_arg(args, int);
}
va_end(args);
}

Agora, é só chamar assim:

int main(int num_args, char** args) {
printNumber(1,2,3,4,5,6,7,8,9,10, NULL);
return 0;
}

Obs.: Como se utiliza a função printf é necessário incluir a biblioteca stdio.h

</stdarg.h>

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Como executar um programa Java dentro de seu programa Java

Pergunta estranha não?

É que eu não tinha mais nada para inventar 😛

É possivel executar um programa Java dentro de outro de várias maneiras Vou citar duas delas:

1) Rodando via a classe/objeto Runtime:
Runtime.getRuntime().exec(“java HelloWorld”);

2) Chamando diretamente o método estático main da outra classe:
public static void main(String[] args) throws Exception {

HelloWorld.main(args);

}

É isso aí Será que isso é interessante para alguém? 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Try Catch em Javascript

Sabia que dá para capturar exceções em Javacript?
Pois é, dá e pode ser usada “igualzinha” como Java (até a sintaxe é parecida):

Só não sei se existe “Stack Trace” para esta linguagem 😛

Já pensou que legal jogar um “RuntimeException” no navegador do usuário (nem que for de “mentirinha” :P)?

Tsc, tsc que desenvolvedor “malvado”!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.