EVGD: Códigos Toscos

Agora me lembrei de uma função em JavaScript para converter os valores retornados por uma API de mapas…

function gambetaToNumber(geoPos) {
...
}

O pior que isso foi colocado em produção. Depois tive de tirar.
Mas garanto que essa obra prima não foi minha. :roll:

[quote=ViniGodoy]Olha a paranóia…

if (x == 2) { codigo aqui } else if (x == 2) { //É melhor ter certeza mesmo codigo aqui }

O pior, aquele comentário sobre ter certeza estava no código. :P[/quote]
Ahh, amadores… tsk

[code]
void fazAlgo() {
codigo aqui
}

(…)

if (x == 2) {
fazAlgo();
} else if (x == 2) {
//É melhor ter certeza
fazAlgo(); // já que o código é igual, colocamos num métodozinho p/ economizar.
}[/code] :twisted:

thingol oq vc usou para gerar o unicode?

Refatoração da gambiarra.

Não acredito no que acabei de achar aqui…Meu Deus…

    private String leCampoScope(ByteArrayInputStream ois, int tamanho) throws IOException {
        String retorno = "";
        int c;
        boolean zeroDetected = false;
        for (short j = 0; j < tamanho; j++) {
            if (((c = ois.read()) == 0)) {
                zeroDetected = true;
            }
            if (!zeroDetected) {
                retorno = retorno.concat(new String(new char[]{(char) c}));
            }
        }
        return retorno;
    }

Meu, dá vergonha ver isso no Projeto…

    private String leCampoScope(ByteArrayInputStream ois, int tamanho) throws IOException {
        StringBuilder retorno = new StringBuilder();
        int c;        
        for (short j = 0; j < tamanho; j++) {
            if (((c = ois.read()) != 0)) {                
                retorno.append((char) c);
            }
        }
        return retorno.toString();
    }

Melhor assim. :wink:

Cara, é facinho fazer um programa que dá um jeito nisso.

public static String converteNoUnicodeDoThingol(String entrada) {
   char [] hex = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
   char [] caracteres = entrada.toCharArray();
   StringBuilder saida = new StringBuilder(6 * entrada.length());
   for (char c : caracteres) {
     int d = (int) c;
     saida.append("\u")
        .append(hex[d / 0x1000])
        .append(hex[d % 0x1000 / 0x100])
        .append(hex[d % 0x100 / 0x10])
        .append(hex[d % 0x10]);
   }
   return saida.toString();
}

Ta aí, fiz em cinco minutos. Não testei nem compilei e nem rodei, mas acho que vai funcionar.
Agora, entenda isso!

Obfuscation rulez!!!

EDIT: Tente melhorar usando os operadores & e >> ao invés de % e /.
EDIT 2: Também tente fazer o programa que lê o unicode e trás de volta o texto normal. :slight_smile:

Isto não é algo tão facil de fazer…

o foda é que ao fazer isto [d / 0x1000] isto resulta em um resultado não inteiro porem esta sendo usado em contexto inteiro perdendo a parte decimal… vc não sabendo o valor decimal exato disto fica dificil reverter a coisa…

Acho que o topico de codigos toscos não tem muito haver com seu comentario… a menos que sua empresa esteja procurando POGramadores para fazerem codigos toscos…
pq não abre um topico especifico para isto?

[quote=luistiagos]
Acho que o topico de codigos toscos não tem muito haver com seu comentario… a menos que sua empresa esteja procurando POGramadores para fazerem codigos toscos…
pq não abre um topico especifico para isto?[/quote]
Vai ver eles estão procurando programadores POG para a empresa. :lol:
Vai saber… :wink:

Pelo contrario, aqui se encontra quem esta preocupado com qualidade e tem consciencia de que precisa escrever codigo decente por apontar erros toscos.

pelo menos é isso que procuramos :slight_smile:

Realmente, pelos comentarios estou no lugar errado, nao pelos POG, mais pelos comentarios. :twisted:

[quote=luistiagos][quote]
Também tente fazer o programa que lê o unicode e trás de volta o texto normal.
[/quote]

Isto não é algo tão facil de fazer…

o foda é que ao fazer isto [d / 0x1000] isto resulta em um resultado não inteiro porem esta sendo usado em contexto inteiro perdendo a parte decimal… vc não sabendo o valor decimal exato disto fica dificil reverter a coisa…[/quote]

A perda da parte fracionária é intencional, e ele não daria certo se esta não fosse perdida.

Fazer o contrário também é simples, você lê o \uXXXX, onde X é um dígito hexadecimal, pega o caractere correspondente a XXXX e coloca na saída. É simples sim. Para casos de textos que tenham caracteres normais misturados, basta colocar na saída todos os outros caracteres que não correspondem a \uXXXX.

E outra, neste caso não pense em decimal, pense em hexadecimal que o negócio fica mais simples.

Não entendi exatamente oq quiz dizer mas pelo que entendi basta subistituir o algarismo hexa pelo caractere correspondente a ele seria isto?

[quote=luistiagos][quote]
A perda da parte fracionária é intencional, e ele não daria certo se esta não fosse perdida.

Fazer o contrário também é simples, você lê o \uXXXX, onde X é um dígito hexadecimal, pega o caractere correspondente a XXXX e coloca na saída. É simples sim. Para casos de textos que tenham caracteres normais misturados, basta colocar na saída todos os outros caracteres que não correspondem a \uXXXX.

E outra, neste caso não pense em decimal, pense em hexadecimal que o negócio fica mais simples.
[/quote]

Não entendi exatamente oq quiz dizer mas pelo que entendi basta subistituir o algarismo hexa pelo caractere correspondente a ele seria isto?[/quote]

\u1234 = 14096 + 2256 + 316 + 41 = 4660
System.out.println((char) 4660); // <-- Vai sair o caractere 4660, seja lá o que isso for.

Ex:
‘A’ = 65 = \u0041

Edit: 0x1000 = 4096, 0x100 = 256, 0x10 = 16.

Fiquei em dúvida. Eu devo rir ou eu devo chorar?

if(!edtPwsUsrNew.equals("********")){ usuarioLogon.setPwsUsr(Utility.getHash(edtPwsUsrNew)); Usuario usuario = new UsuarioDSA().insertUsuario(usuarioLogon); request.setAttribute("usuario",usuarioLogon); msg = "Senha Alterada consucesso!"; request.setAttribute("msg",msg); }

[quote=victorwss]Fiquei em dúvida. Eu devo rir ou eu devo chorar?

if(!edtPwsUsrNew.equals("********")){ usuarioLogon.setPwsUsr(Utility.getHash(edtPwsUsrNew)); Usuario usuario = new UsuarioDSA().insertUsuario(usuarioLogon); request.setAttribute("usuario",usuarioLogon); msg = "Senha Alterada consucesso!"; request.setAttribute("msg",msg); }[/quote]

Não precisa chorar, “consucesso” dá pra ser arrumado facim. :wink:

[quote=Bruno Laturner][quote=victorwss]Fiquei em dúvida. Eu devo rir ou eu devo chorar?

if(!edtPwsUsrNew.equals("********")){ usuarioLogon.setPwsUsr(Utility.getHash(edtPwsUsrNew)); Usuario usuario = new UsuarioDSA().insertUsuario(usuarioLogon); request.setAttribute("usuario",usuarioLogon); msg = "Senha Alterada consucesso!"; request.setAttribute("msg",msg); }[/quote]

Não precisa chorar, “consucesso” dá pra ser arrumado facim. ;)[/quote]

E a (i)lógica desse teste do if?

O que vem a ser DSA em UsuarioDSA?

Como eu disse: :wink:

:twisted:

Reaproveitamento de código é isso:

[code]public class MeuQueridoDAO {

public Simpatia listar( Long cod, String tipo ) {
String SQL = “select o from Simpatia o where o.cod = :cod and o.tipo = :tipo”;
// faz o trabalho aqui
}

public Simpatia loadAba( Long cod, String tipo ) {
String SQL = “select o from Simpatia o where o.cod = :cod and o.tipo = :tipo”;
// faz o trabalho aqui
}
}[/code]