Rss

  • youtube
  • linkedin
  • google

Baixar o Odin 3

Odin permite que você atualize seu firmware Android sem barulho.

Odin3 é um PC grátis (Windows) aplicação que pode piscar (e raiz) alguns telefones celulares baseados em Android.

Com Odin3, Você pode flash roms no seu celular Samsung. Você pode instalar qualquer versão com suporte do sistema operacional Android em seu smartphone antes do fabricante do seu telefone lançou uma atualização, colocá-lo na borda do sangramento do software. Uma vez que o telefone tem sido enraizado

Continue Reading >>

Usando jQueryMask Plugin para formatar datas em diferentes padrões

jQuery Mask Plugin é uma grande biblioteca de Javascript para formatar campos para apresentação e/ou para forçar uma entrada corretamente pelos utilizadores.

Aqui, Eu Mostro como lidar com INPUT ou outro elemento HTML para exibir datas quando a data de origem tem um formato diferente do elemento de destino.

Exemplo:

  • Temos um data-hora com Ano-mês-dia hora:Minuto:Segundos e é preciso mostrar apenas o fragmento Ano/Mês/Dia (sem hora:minuto:segundo).
  • Temos da data em Ano-mês-dia e é preciso formatar para Dia/mês/ano.

jQueryMask é muito simples de usar. Ele não precisa muito para mascarar o que você precisar. Veja exemplos em seu site.

Se você precisa formatar um campo de data simples (mesmo em um elemento não INPUT), Basta usar o código abaixo.

jQuery('[dados-papel ="Data"]).máscara("TC99/M9/D9", {
        espaço reservado: "____/__/__",
        Tradução: {
            "D": {padrão: /[0-3]/, opcional: falso, recursiva: true},
            "M": {padrão: /[01]/, opcional: falso, recursiva: true},
            "T": {padrão: /[12]/, opcional: falso, recursiva: true},
            "C": {padrão: /[09]/, opcional: falso, recursiva: true}
        }
    });

O código acima pode mascarar e pre-validar datas no formato ANO/MÊS/DIA ..

Com um INPUT como

<;tipo de entrada ="texto" dados-papel ="Data" valor ="2018-06-11 15:47" />;

teria alterado seu valor para 2018/06/11.

Se você tentar digitar outra data (depois de limpar, é claro) Você não pode começar com um número diferente de 1 ou 2. Por esta razão é que a nossa máscara tem um translation para ser feito quando permitindo caracteres. Se não coincide com o padrão, o caractere é apagado.

The meaning of “;TC99/M9/D9; é:

  • Deve começar com 1 ou 2 (Tradução T: /[12]/ ; Formato personalizado)
  • Deve ter número 0 ou 9 (Tradução de C: /[09]/ ; Formato personalizado)
  • Deve ter um número (qualquer) (Tradução 9 ; Formato do Core MaskPlugin)
  • Deve ter um número (qualquer) (Tradução 9 ; Formato do Core MaskPlugin)
  • Uma barra será adicionada automaticamente ( / )
  • Deve ter número 0 ou 1 (Tradução M: /[01]/ ; Formato personalizado)
  • Deve ter um número (qualquer) (Tradução 9: Formato do Core MaskPlugin)
  • Uma barra será adicionada automaticamente ( / )
  • Deve ter número 0, 1, 2 ou 3 (Tradução D: /[0-3]/ ; Formato personalizado)
  • Deve ter um número (qualquer) (Tradução 9: Formato do Core MaskPlugin)

É claro, Não há nenhuma validação real. You can type “;2999/19/39; e isto não é uma data válida, Mas está quase pronto.

Então, para Formatar de outra maneira, Basta alterar a ordem de parâmetro de máscara.

Mas, se a data de origem estiver em um padrão diferente, como dia/mês/ano, a máscara não funciona. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

Para manipular data diferente formatos serão necessários mais do que simples máscara. Vamos precisar de uma função.

Veja o código abaixo

        var maskBehaviorDateTime = função (Val, e, campo) { // Esta função deve retornar uma máscara var msk = "TC99/M9/D9"; // Nosso formato desejado var v = field.is('entrada') ? Field.Val() : Field.Text(); // é uma entrada ou outro elemento html??
                    v = v.replace(/\D/g, ''); // listra de dígitos não se (v != '') { // tem valor?
                        se ((/^[01]\d[0-3]\dd{4}$/).teste(v)) { //testar se o padrão corresponde a v único dia/mês/ano = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                        } senão se ((/^[01]\d[0-3]\dd{4}[012]\d[0-5]\d$ /).teste(v)) { //teste se o padrão corresponde a hora do dia/mês/ano:Minuto v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                            // Se nós precisamos mostrar a hora e minuto, máscara retornada deve ser também mudou
                            // v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                            // MSK = ' TC99/M9/D9 h9:M9'; // h e m devem ser existe em opções de tradução
                        }
                        Field.is('entrada') ? Field.Val(v) : Field.Text(v);
                    }
                    retornar a msk;
                },
                optionsDateTime = {
                    espaço reservado: "____/__/__",
                    Tradução: {
                        "D": {padrão: /[0-3]/, opcional: falso, recursiva: true},
                        "M": {padrão: /[01]/, opcional: falso, recursiva: true},
                        "T": {padrão: /[12]/, opcional: falso, recursiva: true},
                        "C": {padrão: /[09]/, opcional: falso, recursiva: true},
                        "h": {padrão: /[0-2]/, opcional: true, recursiva: true},
                        "m": {padrão: /[0-5]/, opcional: true, recursiva: true}
                    }
                };
        jQuery('[dados-papel ="Data"]').máscara(maskBehaviorDateTime,  optionsDateTime);

Agora temos mais dois Translation Pattern (h e m). h significa que a posição n-índice deverá ter números 0, 1 ou 2 e m números entre 0 e 5. Tenha em mente que o CASO importa.

Com o código acima, Podemos Formatar e mostrar data de várias maneiras. Apenas mude .teste() e .Substitua() padrão para preencher seu padrão desejado.

Este é o código que estou usando para formatar os campos datetime do banco de dados com ANO-MÊS-DIA HORA:MINUTO:SEGUNDO em elementos html com dia/mês/ano hora:MINUTO

    var maskBehaviorDateTime = função (Val, e, campo) {
            // Caso já exista um valor, o formata no padrão dd/mm/yyyy com o opcional hh:mm:SS var msk = "TC99/M9/D9 h9:M9:S9";
            se (field.attr("data-original-value") == undefined) {
                var o = field.is('entrada') ? Field.Val() : Field.Text();
            } else {
                var o = field.attr("data-original-value");
            }
            v = o.replace(/\D/g, '');
            se (v != '') {
                field.attr("data-original-value") == undefined &;&; field.attr("data-original-value", o);
                se ((/^[12][09]\d{2}[01]\d[0123]\d$ /).teste(v)) { // ano/mês/dia v = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                    MSK = "D9/M9/TC99";
                } else  if ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d$ /).teste(v)) { // ano/mês/dia/hora:minuto v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                    MSK = "D9/M9/TC99 h9:M9";
                } senão se ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d[0-5]\d$ /).teste(v)) { // ano/mês/dia/hora:minuto:segundo v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5:$6');
                    MSK = "D9/M9/TC99 h9:M9:S9";
                }
                Field.is('entrada') ? Field.Val(v) : Field.Text(v);
            }

            retornar a msk;
        },
        optionsDateTime = {
            espaço reservado: "__/__/____",
            Tradução: {
                "D": {padrão: /[0-3]/, opcional: falso, recursiva: true},
                "M": {padrão: /[01]/, opcional: falso, recursiva: true},
                "T": {padrão: /[12]/, opcional: falso, recursiva: true},
                "C": {padrão: /[09]/, opcional: falso, recursiva: true},
                "h": {padrão: /[0-2]/, opcional: true, recursiva: true},
                "m": {padrão: /[0-5]/, opcional: true, recursiva: true},
                "s": {padrão: /[0-5]/, opcional: true, recursiva: true}
            },
        };
    jQuery('[dados-papel ="Data"]').máscara(maskBehaviorDateTime,  optionsDateTime);

Com um INPUT como

<;tipo de entrada ="texto" dados-papel ="Data" valor ="2018-06-11 15:40">;

Saída será

11/06/2018 15:40

Espero que isto ajude a!

Vinculação de vários valores em instrução de SQL com PDO (PDOStatement)

Às vezes temos de procurar um único valor através de várias colunas ao criar instruções SQL.

Suponha a tabela abaixo

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Se precisamos procurar um único valor nas colunas B,D e E Vamos precisar usar a seguinte instrução

SELECIONE A ID, COLUMN_A,(...COLUNAS...), COLUMN_E de ENTITY_ONE onde COLUMN_B como '% search_value %' ou COLUMN_D como '% search_value %' ou COLUMN_E como '% search_value %';

No código PHP podemos fazer

$q = '% search_value %';
$SQL = "SELECIONE * DE ENTITY_ONE onde COLUMN_B como '$q' ou COLUMN_D como '$q' ou COLUMN_E como '$q'; 
$DOP = novo DOP($DSN, $usuário, $passar); 
$stmt = $pdo->;consulta($SQL);

Bem, this can work but we know that isn’;a melhor abordagem. Nós precisamos usar valores de ligação para evitar a injeção SQL e outras coisas maliciosas.

Então, o código pode ser modificado para

$q = '% search_value %'; 
$SQL = "SELECIONE * DE ENTITY_ONE ONDE COLUMN_B COMO ? OU COLUMN_D COMO ? OU COLUMN_E COMO ?; 
$args = [$q, $q, $q]; // Precisamos de uma entrada para cada "?" na instrução $pdo = novo DOP($DSN, $usuário, $passar); 
$stmt = $pdo->;Prepare-se($SQL);
$stmt->;executar($args);

Muito melhor, Mas, Quando estiver criando instruções de SQL complexas, things can be confusing with lots of arguments and don’;esqueça: A ORDEM IMPORTA.

Felizmente PDO pode vincular os valores em ordem diferente quando usando ligações nomeadas.

$q = '% search_value %'; 
$SQL = "SELECIONE * DE ENTITY_ONE ONDE COLUMN_B COMO :first_arg ou COLUMN_D como :second_arg ou COLUMN_E como :third_arg; 

$DOP = novo DOP($DSN, $usuário, $passar); 
$stmt = $pdo->;Prepare-se($SQL); 
// Uma maneira de $args = [':first_arg' =>; $q, ':third_arg' =>;$q, ':second_arg' =>; $q]; // Precisamos de uma entrada para cada ":nome" on instruction 
$stmt->;executar($args); 
// Another way
$stmt->;bindValue(':third_arg'. $q);
$stmt->;bindValue(':first_arg', $q); 
$stmt->;bindValue(':second_arg', $q);

$stmt->;executar(); 

Hmm, seems that this isn’;bom o suficiente. Só mudamos o uso de 1-espaço reservado indexado para um :espaço reservado nomeado. There’;ganho além do código ficar mais legível e a possibilidade de ligar em qualquer ordem.

Sim, Mas agora podemos fazer a melhor abordagem possível ao usar um termo de pesquisa único em várias colunas. Podemos usar apenas um bind para um ou mais :named placeholders ‘;porque o PDO é esperto e inteligente. Olha nosso código final aqui.

$q = '% search_value %'; 
$SQL = "SELECIONE * DE ENTITY_ONE ONDE COLUMN_B COMO :unique_arg ou COLUMN_D como :unique_arg ou COLUMN_E como :unique_arg; 
$DOP = novo DOP($DSN, $usuário, $passar); 
$stmt = $pdo->;Prepare-se($SQL); 
// Uma maneira de $args = [':unique_arg' =>; $q]; // Podemos vincular todos :name with only one term 
$stmt->;executar($args); 
// Another way 
$stmt->;bindValue(':unique_arg', $q); 
$stmt->;executar(); 

Pode economizar um monte de digitação quando escrevendo muitas instruções SQL, usando o mesmo argumento.

Corrigindo erro de módulos não carregados no Centos 6.x

Um problema comum após atualizar um kernel via yum no Centos é a não criação dos módulos do novo kernel.
Um exemplo desse erro acontece quando se tentar usar grep como no print abaixo.


# iptables -L -n | grep "meu ip"
FATAL: Could not load /lib/modules/2.6.32-042stab123.9/modules.dep: No such file or directory


#
Isso indica que não há o diretório 2.6.32-042stab123.9 e portando nenhum módulo em seu conteúdo pode ser carregado.

Para corrigir este problema o caminho mais simples é essa receita:


# mkdir -p /lib/modules/uname -r


# cd /lib/modules/uname -r
[root@vps3 2.6.32-042stab123.9]# depmod
[root@vps3 2.6.32-042stab123.9]# ls -lah
total 64K
drwxr-xr-x 2 root root 4.0K Oct 18 16:11 .
dr-xr-xr-x 10 root root 4.0K Oct 18 16:11 ..
-rw-r--r-- 1 root root 45 Oct 18 16:11 modules.alias
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.alias.bin
-rw-r--r-- 1 root root 69 Oct 18 16:11 modules.ccwmap
-rw-r--r-- 1 root root 0 Oct 18 16:11 modules.dep
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.dep.bin
-rw-r--r-- 1 root root 73 Oct 18 16:11 modules.ieee1394map
-rw-r--r-- 1 root root 141 Oct 18 16:11 modules.inputmap
-rw-r--r-- 1 root root 81 Oct 18 16:11 modules.isapnpmap
-rw-r--r-- 1 root root 74 Oct 18 16:11 modules.ofmap
-rw-r--r-- 1 root root 99 Oct 18 16:11 modules.pcimap
-rw-r--r-- 1 root root 43 Oct 18 16:11 modules.seriomap
-rw-r--r-- 1 root root 131 Oct 18 16:11 modules.softdep
-rw-r--r-- 1 root root 49 Oct 18 16:11 modules.symbols
-rw-r--r-- 1 root root 12 Oct 18 16:11 modules.symbols.bin
-rw-r--r-- 1 root root 189 Oct 18 16:11 modules.usbmap
[root@vps3 2.6.32-042stab123.9]# iptables -L -n | grep "meu ip"
[root@vps3 2.6.32-042stab123.9]#
Isso irá criar o diretório e as dependências de módulos para o kernel atualmente em uso (uname -r).

Caso o problema não seja resolvido com os comandos acima. Tente reinstalar o kernel via yum com os comandos abaixo.

mv /boot/grub/grub.conf /boot/grub/grub.conf.bak
yum -y reinstall kernel

E em seguida tente os comandos listados anteriormente.

Espero que lhe seja útil tanto quando foi para mim.

Samsung USB Drivers for Mobile Phones Download

Aconselho ler a página toda antes de efetuar o download.

Esta página na verdade é uma espécie de backup dos arquivos que costumo precisar. Para evitar ficar pesquisando e vendo centenas de páginas repletas de propaganda disponibilizo aqui para meu próprio uso e dessa forma fica disponível para você também.

Os drivers da Samsung que permitem

Continue Reading >>

Como recuperar um celular Samsung Galaxy utilizando o modo download por hardware

Eu brinco bastante com celulares. Atualmente ando investindo em equipamentos para fazer mais do que abrir um iPhone para trocar bateria ou o conjunto Touch+Tela.

Tive em minhas mãos não faz muito tempo um celular Samsung Galaxy Ace modelo GT-S5830C. Brinquei muito com ele flashando ROMs e ensinei meu filho adolescente a fazer o básico e o celular acabou ficando com ele.

Certo dia ele veio me avisar que havia flashado uma ROM errada no aparelho

Continue Reading >>

Usando o Notepad++ para remover acentos

Hoje quero compartilhar uma dica para facilitar a substituição de caracteres acentuados usando apenas Notepad++ e seu HTML Tag Plugin.

Let’;fazer!

Em primeiro lugar, Temos de ter HTML Tag Plugin instalado. Se você já tem, Pule para a etapa 4.

  1. Abra Notepad++ e procure por Plugins no Menu principal.
    Item de Menu de Plugins do bloco de notas
  1. Se HTML Tag está ausente, Abra Plugin Manager->Show Plugin Manager e encontre HTML Tag Plugin na lista.
    Plugin de Tag HTML no Notepad + + Plugin Manager
  2. Selecione os Plugins desejados e aperte o botão instalar. Notepadd++ será reiniciado para concluir a instalação.
    Agora nós podemos traduzir caracteres especiais para suas entidades HTML. Precisamos fazê-lo primeiro para remover acentos do nosso texto.
  3. Coloque seu texto sobre a janela e faça Selecionar Tudo com Ctrl + A ou Edit ->; Selecionar Tudo no Menu Principal.
  4. Abra Plugins->HTML Tag->Encode Entities no Menu Principal ou CTRL + E.
    Agora, todos os caracteres especiais estarão em entidades html.
    Notepad + + com caracteres especiais, codificados em HTML
  5. Abra o Formulário Substituir (CTRL + H ou Search->;Substituir) e preencha o campo Localizar com
    &([a-zA-Z])(:?grave|acute|circ|uml|aring|cedil|slash|tilde); e Substituir por com

    $1

    Selecione Expressão regular em Modo de busca e clique no botão Substituir todos button.
    Forma de substituir o notepad + +
    O texto será substituído com caracteres sem acentos, Mas todos os outros caracteres especiais em entidades HTML.
    Texto de notepad + + HTML substituído

  6. Agora podemos retornar todos os outros caracteres para seus originais, mas é melhor usar seu texto em codifcação UTF-8. Vá para o item de menu Encoding e altere a codificação do texto se não estiver em Utf-8. Você pode retornar para outra codificação após esta etapa.
    Para decodificar o HTML use CTRL + Shift + E ou Plugins->HTML Tag->Decode Entities.
    Conversão de texto notepad + + Final

Eu espero que isso ajude alguém.

 ;

Relembrando o passado…

Mexendo nos meus arquivos pessoais encontrei esta mensagem que escrevi logo após o término das eleições presidenciais de 2014. Não sei porque não estava publicada no meu blog pessoal, mas lembro de ter publicado no Facebook. Como quase não estou mais usando Facebook vou [re]publicar o texto na íntegra.

Principais Candidatos Eleições 2014

Principais Candidatos Eleições 2014

 

Acho engraçado que algumas pessoas usem o Facebook para tentar me convencer de alguma coisa subjetiva como se ela fosse bem mais esperta que os outros (e que eu, já que isso aqui “lemos” sozinho e não em grupo) e não aceitam discordâncias. Alguns, após 2 ou 3 comentários contrários apelam para “ESSA CONTA DE FB é MINHA, POSTO O QUE EU QUISER”.
Será que nunca entenderam o que quer dizer “COPO MEIO CHEIO OU MEIO VAZIO?”
Tudo que é subjetivo costuma não ter escolha certa ou errada. Se uma coisa ou situação tem fatos comprobatórios, já não é mais subjetivo, é concreto e nesse caso é questão de aceitar ou não, como uma demissão que você não imaginava ou seu time que está bem, perder do lanterna. O que é subjetivo é alcançado a conclusão mediante experiência pessoal e estado de espírito.
Talvez porque eu “quase” nunca tente convencer ninguém de que estou certo e me abro a discussão para que argumente seu ponto de vista, fico indignado quando vejo intolerantes, preconceituosos, arrogantes e inflexíveis disseminando sua inteligência superior.
Antes de tentar convencer alguém com argumentos tirados de capas de revistas, títulos de artigos ou vídeos de usuários do facebook a qual a conta nunca é confirmada, dê-se trabalho ao menos de ler esses conteúdos sob um prisma crítico. As pessoas para quem você vai se dirigir podem ser aquelas que leem 20 livros por ano, diversos jornais nacionais e internacionais em português ou outro[s] idioma[s] e podem derrubar seus argumentos em poucos segundos se você não estiver embasado em algo concreto.
Estou escrevendo isso pensando nas mensagens sobre divisão do país divulgadas principalmente por paulistas. Quando vêem torcedores do Rio Grande do Sul cantarem o hino do RS sobre o hino nacional em algum evento acham absurdo. Pregam união, e repudiam as atitudes separatistas, mas quando uma grande parte do país não segue sua ideologia política a primeira coisa que começa a defender é algo que repudia nos outros.

Reprodução da postagem do deputado eleito Coronel Telhada (PSDB) que gerou polêmica

Reprodução da postagem do deputado eleito Coronel Telhada (PSDB) que gerou polêmica

Essa indignação seletiva paulista é nojenta, atrasada e maléfica.
Aconselho a você que se deu ao trabalho de ler até aqui e se irritou com minhas palavras a ler Vidas Secas, Grande Sertão Veredas e ouvir histórias do Suassuna. Vai se tornar uma pessoa bem melhor.

Como limpar mensagens adiadas da fila do Postfix

Hoje eu estava observando o arquivo de log do Postfix (em CentOS 6.X o padrão é /var/log/maillog) e vi um monte de mensagens sendo adiadas.

Jan 5 15:02:03 vps3 postfix/smtp[27441]: 3187E2180015: to=<undesired@domain.com>, relay=domain.com[167.114.XXX.XXX]:25, delay=254553, delays=254538/0.2/15/0, dsn=
4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27442]: CDED02180014: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.13/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27443]: C8EE72180012: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.14/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)
Jan 5 15:02:03 vps3 postfix/smtp[27444]: CDCE32180013: to=<undesired@domain.com.br>, relay=domain.com[167.114.XXX.XXX]:25, delay=258753, delays=258738/0.15/15/0, dsn
=4.4.2, status=deferred (conversation with domain.com[167.114.XXX.XXX] timed out while receiving the initial server greeting)

e essas mensagens repetiam de tempos em tempos.

Continue Reading >>