Vivo Fibra 100 Mega no Wifi – Roteador Sagemcom F@st 5340

internet speed

Recentemente adquiri o Vivo Fibra 100 Mbps, porém no wifiela não estava chegando a 100 Mbps, ficava em torno de 40 Mbps. Para atingir 100 Mbps era necessário utilizar via cabo.

Primeiramente pensei que a causa da queda de velocidade no wifi poderia ser o roteador wireless fornecido pela Vivo, um Sagemcom F@st 5340. Achei que ele seria um roteador de 54 Mbps e não de 100 Mbps. Porém notei que além da frequência 2.4Ghz padrão ele consegue operar também a 5 Ghz ao mesmo tempo.

Não tinha percebido isso antes porque o técnico da Vivo não deixou configurado o SSID do wifi a 5Ghz. Era necessário ter um SSID para a frequência de 2.4 Ghz e um outro SSID para a 5 Ghz.

Para configurar o SSID e senha basta acessar a interface web do roteador. Seus dispositivos (notebook, celulares, tablets, etc.) também precisam ter uma placa wifi que opere a 5Ghz.

1 – Acesse o IP 192.168.1.1 para acessar a interface web de configuração do wifi. No seu caso pode ser que o IP seja diferente.

2 – Clique em “Rede Wifi” como mostra a imagem abaixo.

instalacao vivo 001

3 – Configure um SSID e senha para a frequência de 2.4 Ghz e outro SSID e senha para a frequência de 5 Ghz e clique em avançar. Você pode usar a mesma senha nos dois.

instalacao vivo 002

4 – Após clicar em avançar pode ser que a operação não se conclua por causa de algum problema na interface da Vivo (fica com um loading eterno), mas a operação foi realizada. Aguarde um pouco se isso ocorrer e depois pode fechar a tela.

5 – Verifique no seu dispositivo se estará aparecendo o SSID que você configurou para a frequência de 5 Ghz e conecte. No meu exemplo seria a “Wektabyte50Ghz”.

Lembre-se também de remover ou esquecer a conexão antiga de 2.4 Ghz nos seus dispositivos, senão eles poderão conectar nessa frequência automaticamente depois.

Após isso tente testar a velocidade da sua conexão. No meu primeiro teste bateu 50Mbps e no segundo 93 Mbps. A variação é normal, porém não estava mais abaixo de 50 Mbps como antes.

Sequência de Fibonacci em C – Loop e Recursiva

programacao

Na matemática, a Sucessão de Fibonacci (também Sequência de Fibonacci), é uma sequência de números inteiros, começando normalmente por 0 e 1, na qual, cada termo subsequente (número de Fibonacci) corresponde a soma dos dois anteriores.

A sequência recebeu o nome do matemático italiano Leonardo de Pisa, mais conhecido por Fibonacci (contração do italiano filius Bonacci), que descreveu, no ano de 1202, o crescimento de uma população de coelhos, a partir desta. Tal sequência já era no entanto, conhecida na antiguidade.
Fonte: Wikipedia

Fórmula:
Fn = (Fn-1) + (Fn-2)

Exemplo de uma Sequência de Fibonacci com 10 números:
0, 1, 1, 2, 3, 5, 8, 13, 21 e 34.

* Em alguns exemplos o zero poderá estar omitido.

Algo como:
1 + 0 = 1
1 + 1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
E por aí vai…

Vou demonstrar dois exemplos de algoritmos em C, um utilizará um for e outro será recursivo.

Utilizando Loop

#include<stdio.h>;

int main() {
    int qtd_seq;
    int primeiro = 0;
    int segundo = 1;
    int proximo;
    int i;

    printf("Entre com a quantidade de números da série: ");
    scanf("%d", &qtd_seq);

    printf("Os %d números da sequência de Fibonacci são:\n", qtd_seq);

    for (i = 0 ; i < qtd_seq ; i++ ) {
        if (i <= 1 )
            proximo = i;
        else {
            proximo = primeiro + segundo;
            primeiro = segundo;
            segundo = proximo;
        }
        printf("%d\n", proximo);
    }
    return 0;
}

Utilizando Recursividade

#include<stdio.h>

int fibonacci(int seq) {
     if (seq == 0) return 0;
     if (seq == 1) return 1;
     return fibonacci(seq - 1) + fibonacci(seq - 2);
}

int main() {
    int qtd_seq;
    int i;

    printf("Entre com a quantidade de números da série: ");
    scanf("%d", &qtd_seq);

    printf("Os %d números da sequência de Fibonacci são:\n", qtd_seq);

    for (i = 0 ; i < qtd_seq ; i++ )
        printf("%d\n", fibonacci(i));

    return 0;
}

Listar arquivos pela data de modificação

comandos-linux

Para listar arquivos ordenados pela data de modificação:

ls -t

Para listar apenas arquivos .txt a partir de 23/05/2014:

find /diretorio -name "*.txt" -newermt "2014-05-23"

Para listar apenas arquivos .txt a anteriores a 23/05/2014:

find /diretorio -name "*.txt" ! -newermt "2014-05-23"

Você pode usar o “-delete” e apagar arquivos antigos por exemplo:

find /diretorio -name "*.log" ! -newermt "2014-05-01" -delete

Por que a caixa registradora abre após pagamento com cartão?

caixa registadora antiga

Estou em processo de mudança e percebi que ia precisar de um martelo. Fui em uma loja de ferramentas e durante o pagamento do martelo notei uma coisa.

Não sei se vocês reparam também, mas mesmo quando você paga com o cartão, seja crédito ou débito, algumas caixas registradoras abrem a gaveta de dinheiro após a conclusão do pagamento.

Se você nunca reparou nisso então comece a reparar. Na próxima vez que for comprar um martelo para uma mudança ou aquele pacote de Doritos e o Toddynho do lanche da tarde pague com cartão e fique de olho na gaveta da caixa.

Isso é conveniente quando se paga com dinheiro. A gaveta pula prontamente para receber o dinheiro e permitir a retirada do possível troco, o que agiliza o processo para o operador do caixa e o cliente.

Mas se você paga com cartão então porque ela abre?

Será um POG mal feito em uma tentativa de se adaptar um sistema antigo para o novo?
(se bem que POG em si não é algo bem feito)

Alguém sabe o porquê?

Corrigindo problema com menu do Eclipse no Ubuntu 13.10

eclipse-400x100

Após atualizar meu Ubuntux para o 13.10 tive vários problemas em usar a interface, tanto no Unity quanto no GNOME 3. Um dos problemas era o fato do menu do Eclipse não aparecer corretamente na interface Unity.

Enquanto não liberam uma correção você deve usar a variável de ambiente UBUNTU_MENUPROXY na execução do Eclipse. Isto faz com que a aplicação utilize o menu antigo.

Uma forma de fazer isso é incluir no arquivo “.desktop” do Eclipse que você utiliza (por exemplo em /usr/share/applications/eclipse.desktop). Se não tiver segue um de exemplo.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=4.3.1
Type=Application
Terminal=false
Icon[pt_BR]=/caminho/do/icone.xpm
Name[pt_BR]=Eclipse
Exec=env UBUNTU_MENUPROXY= /caminho/do/eclise
Comment[pt_BR]=Ambiente de desenvolvimento Eclipse.
Name=Eclipse
Comment=Ambiente de desenvolvimento Eclipse.
Icon=/caminho/do/icone.xpm
Categories=Development;IDE;Java;

Oracle – Encontrando referências para uma tabela

oracle

Hoje tive um problema ao realizar um drop em uma tabela. Ela possuía alguma tabela referenciada, porém o erro não indicava qual.

Para descobrir quais tabelas estavam referenciando ela usei esta query marota:

SELECT table_name,
  constraint_name,
  status,
  owner
FROM all_constraints
WHERE
  r_owner = 'NOME DO OWNER'
  AND constraint_type = 'R'
  AND r_constraint_name IN (
    SELECT constraint_name
    FROM all_constraints
    WHERE constraint_type IN ('P', 'U')
      AND table_name = 'NOME DA TABELA'
      AND owner = 'NOME DO OWNER'
  )
ORDER BY table_name, constraint_name;

Fonte: Stack Overflow

Criando joins customizados no Django

django

Durante o desenvolvimento de uma aplicação no framework Django você pode precisar realizar SQL puro, límpido e incolor.

O Django permite que você faça isso, mas certifique-se de ter feito o possível e o impossível para que isto não ocorra. Eu sei que criar consultas no Django às vezes parece coisa de tentativa e erro, mas sempre utilize as funções equivalentes dele para manter compatibilidade entre as engines diferentes de banco de dados.

Você pode achar que não irá precisar mudar de banco de dados futuramente, mas no meu caso já tive que manter aplicações em MySQL que depois precisaram migrar para Oracle. Em outras tinha que funcionar tanto em MySQL e PostgreSQL. Isso quando o ambiente de desenvolvimento era diferente do ambiente de produção…

Mas enfim, se não tiver jeito Raw SQL neles, mas não vou entrar em detalhes em como fazer essas queries no Django, pois até este ponto ele está bem documentado:

Porém esses dias me deparei com um problema muito específico no qual tinha que fazer o JOIN na mão. Bom, se você chegar ao ponto de ter que criar um JOIN na mão no Django, então realmente é um problema muito específico.

Não existe uma forma de se fazer isso no Django, pelo menos não documentada. Encontrei uma solução fazendo o uso do método join do objeto Query.

O join recebe uma tupla contendo as tabelas e campos do JOIN e um parâmetro promote que especifica se é um LEFT OUTER JOIN.

Exemplo:

qs = People.objects.all()

# ... inner join contact_people on contact_people.id=contact_phone.people_id
join_tuple = (
    'contact_people', # table 1
    'contact_phone', # table 2
    'id', # field 1
    'people_id' # field 2
)

qs.query.join(join_tuple, promote=True)

print qs.query # para ver o SQL gerado, cuidado com erros de encode.

É um exemplo simples e poderia ser feito utilizando os métodos normais disponibilizados pelo QuerySet. Você deve moldar para a solução do seu problema, pois como falei ela provavelmente deve ser muito específica. Na dúvida verifique o SQL gerado.

Além disso, com certeza não é a melhor forma de fazer os JOINs no Django. Funciona, mas teje avisado…