Acessando Mikrotik Remotamente

# Dynamic DNS Update / Simple Edition
# Written by Sam Norris, ChangeIP.com
# Copyright ChangeIP.com 2009-2010
# For support send mail to Support@ChangeIP.com
#
# 2009-06-22 RouterOS 3.25 Tested
# 2009-10-05 RouterOS 4.01rc1 Tested
#
# OVERVIEW: %
# This script will update a ChangeIP.com dynamic dns hostname
# with an ip address located directly on an interface.
# %
# NOTES: %
# IF THIS SCRIPT DOES NOT PRODUCE ANY OUTPUT PLEASE COPY AND PASTE IT
# AGAIN. THERE PROBABLY IS A LINE BREAK IN THE WRONG PLACE! Once you
# have created this script and tested that it works by running it
# manually you can schedule it to run every few minutes.
# %
# CONFIGURATION FIELD DEFINITIONS:
# ddnsuser: Enter your ChangeIP.com user id.
# ddnspass: Enter your ChangeIP.com password.
# ddnshost: Enter the hostname (www.example.com) to update.
# ddnsinterface: Enter an interface name – case sensative.
# %
# %
# %
# %
# % % %
# % % %
# % % %
# %
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# EDIT YOUR DETAILS / CONFIGURATION HERE
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:global ddnsuser “seu usuario”
:global ddnspass “sua senha”
:global ddnshost “link_do_site”
:global ddnsinterface “ether1″
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# END OF USER DEFINED CONFIGURATION
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:global ddnssystem (“mt-” . [/system package get [/system package find name=system] version] )
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface] address ]
:global ddnslastip

:if ([:len [/interface find name=$ddnsinterface]] = 0 ) do={ :log info “DDNS: No interface named $ddnsinterface, please check configuration.” }

:if ([ :typeof $ddnslastip ] = “nothing” ) do={ :global ddnslastip 0.0.0.0/0 }

:if ([ :typeof $ddnsip ] = “nothing” ) do={

:log info (“DDNS: No ip address present on ” . $ddnsinterface . “, please check.”)

} else={

:if ($ddnsip != $ddnslastip) do={

:log info “DDNS: Sending UPDATE!”
:log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ]
:global ddnslastip $ddnsip

} else={

:log info “DDNS: No changes necessary.”

}

}

# END OF SCRIPT
# INSIRA EM…. SYSTEM -> SCHEDULE , COLOQUE O TEMPO DE ATUALIZAÇÃO CONFORME SUA NECESSIDADE.. Eu coloquei 30 minutos
# Abraços KUROLE.com

Nenhum comentário.

Criar log de acesso dos sites visitados

Você pode implementar isto daqui no seu mikrotik acabei de fazer e deu certinho!

Para windows:

Baixe o Mikrotik syslog daemon (ou outro syslog que desejar);
No winbox va em System, logging, Rules +, Topics=web-proxy; action, remote

Agora na Aba actions, + , nome Remoto , Nome remoto, tipo= remote, e remote address o endereço da maquina rodando o mikrotik syslog daemon. Abra o syslog daemon e vc vai ver os URL passado…

Donwload do Mikrotik Daemon

http://www.mikrotik.com/download/MT_Syslog.exe

Nenhum comentário.

Atenuações dos cabos e potência em mW

Brother, é extremamente importante entender algumas coisas.

Todo sinal elétrico (ou pulso como preferir) sofre atenuação ao trafegar em qualquer meio físico, seja ele cabo, ar, etc..

Cada cabo possui uma “taxa” de atenuação, uns maiores que outros, exemplo:

Cabo—————–dB/100 metros————————–dB/metro

LMR-400——————-22,2——————————–0,22
RGC-213——————-25,2——————————–0,25
RGC-58——————–62,0——————————–0,62

Para entender melhor, leia este breve tutorial no site da Data Link: DATALINK – Tecnologia ao seu alcance!

Utilizando 17 metros (em minha opinião um absurdo) vc terá uma atenuação de 8.1 dB .
Tome por exemplo esta tabela:

60 dBm = 1000 Watts
50 dBm = 100 Watts
40 dBm = 10 Watts
30 dBm = 1 Watt
29 dBm = 794 mW
28 dBm = 631 mW
27 dBm = 500 mW
26 dBm = 400 mW
25 dBm = 315 mW
24 dBm = 250 mW
23 dBm = 200 mW
22 dBm = 158 mW
21 dBm = 126 mW
20 dBm = 100 mW
19 dBm = 79 mW
18 dBm = 63 mW
17 dBm = 50 mW
16 dBm = 40 mW
15 dBm = 32 mW

Note que a cada 3 bB vc tem o dobro da potência em mW>> 20 dBm = 100 mW ao passo que 23 dBm vc terá 200 mW

Seguindo esta lógica pense em quanto de potência em mW que vc perderá utilizando 17 metros de cabos que resulta em – 8dBm

O cálculo vc poderá realizar aqui: Calculadora comparativa de atenuação em cabos coaxiais

Amigo, se vc puder, utilize a menor metragem de cabo possível em uma torre.

Agora a sua pergunta, eu sempre utilizei cabos Hyperlink montados e testados de fábrica (importados pela Nova Network ) , ou cabos Datalink e nunca tive dor de cabeça.

Calculadora comparativa de atenuação em cabos coaxiais

Nenhum comentário.

Como selecionar o último registro de cada Grupo MySql

Criando as tabelas de usuários e incluindo informações
CODE
create table `usuario` (
idusuario integer unsigned not null auto_increment,
nome varchar(30),
primary key (idusuario)
) engine=InnoDb;

insert into `usuario`
(nome) values
(“Paulo”),
(“Joao”),
(“Maria”);

create table `noticias` (
idnoticia integer unsigned not null auto_increment,
idusuario integer unsigned default 0,
noticia varchar(50) not null default ”,
datahora timestamp,
primary key (idnoticia)
) engine=InnoDb;

Incluindo algumas notícias…
CODE
insert into `noticias`
(idusuario, noticia, datahora)
values
(1, “Morreu o gato da vovó”, “2009/08/01 10:15:20″),
(1, “O ônibus atrasou hoje”, “2009/08/02 12:25:20″),
(1, “Vovó chora no enterro do gatinho”, “2009/08/03 10:35:00″),
(2, “Preço do Trigo abaixa 5%”, “2009/08/01 10:00:00″),
(2, “Aumenta o Consumo de Carne”, “2009/08/06 18:15:00″),
(3, “Encontrada a cura para a gripe A”, “2009/07/31 18:00:00″),
(3, “Procura-se Susan desesperadamente”, “2009/08/04 10:00:00″);

Selecionando a notícia mais recente de cada usuário. Isso, depois,
será uma subquery.

CODE
select max(datahora), idusuario
from `noticias`
group by idusuario

Agora que sei qual é a notícia mais recente de cada usuário,
ligo as notícias e usuários com essa subquery…
Aí vai um exemplo:

CODE
select a.idusuario, a.noticia, a.datahora
from `noticias` as a
inner join
(select max(datahora) as datahora, idusuario
from `noticias`
group by idusuario
) as b
on (a.idusuario=b.idusuario and a.datahora=b.datahora)

1 Comentário

Gerenciamento de URLs – Criando URLs amigáveis

Hoje em dia é muito comum o uso de scripts que rodam no servidor (server-side) para gerar conteúdo dinâmico em páginas web.

Isto é muito interessante, mas gera um problema: URLs grandes ou complicadas demais, difíceis de memorizar e sem significado, que podem até mesmo dificultar a indexação do site por mecanismos de busca.

Vamos aprender como criar URLs amigáveis, indexáveis e que resumam, de alguma forma, o recurso que elas descrevem.

Introdução

É comum vermos URLs do tipo:
index.php?section=artigos&data=09-08-2004
ou
index.php?s=web&p=1
ou piores que isso, como:
/cgi-bin/index.cgi?id=7288731803928617293&page=6

Os exemplos acima são fictícios mas, com certeza você já se deparou com URLs bem parecidas com essas, inclusive em sites muito conhecidos.

Qual o problema dessas URLs?

A princípio você pode pensar que não há problema algum com essas URLs. Mas pense um segundo. Você consegue decorar uma URL desse tipo? Não seria muito melhor que fosse algo do tipo:
www.site.com/artigos/09/08/2004
ou
www.site.com/web/1

Além do problema da complexidade, essas URLs geram outros problemas:

  • Alguns mecanismos de busca podem deixar de indexar estas páginas, por causa dos caracteres ‘?’ e ‘&’
  • A tecnologia usada na construção do site está sendo exposta
  • Se você resolver mudar a tecnologia do seu site (php para asp, por exemplo), todas as URLs terão que ser mudadas

Expor a tecnologia usada para fazer um site pode ser um problema de segurança e, hoje em dia, qualquer cuidado com segurança, mesmo que pequeno, é importante.

E, além disso, com a mudança da tecnologia usada, todos os links e bookmarks que existam para o seu site serão quebrados, e isso não é nem um pouco interessante.

O que fazer então?

A solução que vou apresentar serve para os usuários do servidor web apache.

É necessário que esteja habilitado no servidor o módulo mod_rewrite e que seja possível o uso de arquivos htaccess.

A solução é simples: mapear as URLs reais para URLs “virtuais”, mais fáceis de compreender e indexar, e independentes da tecnologia utilizada.

É necessário um pouco de conhecimento de expressões regulares.

O que é o mod_rewrite

mod_rewrite é um módulo do apache que realiza a reescrita transparente de URLs usando expressões regulares.

É como se fosse um redirecionamento, só que o usuário não fica sabendo que a página foi reescrita, já que o endereço na barra de endereços do browser não muda e nenhum cabeçalho HTTP 3xx é enviado.

Mãos a obra

O primeiro passo é criar um arquivo htaccess no diretório raiz do seu site (DocumentRoot e acrescentar a linha:
RewriteEngine On
Esta linha habilita o uso do mod_rewrite no seu site.

Agora vamos ? reescrita da URL. Vamos utilizar os exemplos acima. São exemplos simples, mas meu intuito é mostrar o funcionamento da técnica. Você pode usar a sua criatividade para fazer o que quiser e o que for necessário para o seu caso.

Primeiro exemplo: index.php?s=web&p=1

Analisando esta URL podemos perceber que temos duas variáveis (’s’ e ‘p’), provavelmente referentes a seção e página, respectivamente.

Vamos transformá-la em: /web/1

A regra ficaria assim:
RewriteRule ^(.+)\/?([0-9]*)\/?$ /index.php?s=$1&p=$2

Vamos entender a linha acima:
RewriteRule: define o início de uma regra de reescrita.

^(.+)\/?([0-9]*)\/?$: a url “virtual”, ou seja, a url que será usada nos links para esta página. Para que entende um pouco de expressões regulares, esta expressão é bem simples de entender, vamos dissecá-la:
(.+): significa um ou mais caracteres (.). O significado dos parêntesis vai ser explicado mais adiante.
\/?: zero ou uma barra (/). A contrabarra (\) serve para “escapar” o caractere /, informando que ele deve ser interpretado literalmente, e não como um metacaractere.

([0-9])*: qualquer quantidade de dígitos (números), ou seja, zero ou mais.
/index.php?s=$1&p=$2: esta é a URL real, ou seja, a url que vai estar sendo acessada por meio do mod_rewrite.
As expressões ‘$1′ e ‘$2′ significam o primeiro e segundo conjunto de caracteres agrupados por parênteses na expressão da esquerda. Ou seja, é guardada uma referência para esses grupos de caracteres para que você possa usá-los.

Exemplos do resultado desta regra:

/web/1 ou /web/1/ = /index.php?s=web&p=1
/outrasecao/5 ou /outrasecao/5/ = /index.php?s=outrasecao&p=5
/web ou /web/ = index.php?s=web&p=

Vamos a mais um exemplo:
RewriteRule ^artigos\/?([0-9]+)\/([0-9]+)\/([0-9]+)\/?$ index.php?section=artigos&data=$1-$2-$3
(Perceba que a linha pode estar quebrada para caber no espaço, mas trata-se de uma linha só, sem quebras).

Assim, você poderia acessar a URL index.php?section=artigos&data=09-08-2004 pela URL “virtual” artigos/09/08/2004, bem mais amigável do que a primeira.

Não apenas páginas dinâmicas podem ser reescritas por meio do mod_rewrite. Conteúdo estático também.

Um exemplo:
www.site.com/noticias/09-08-2004.html
poderia ser reescrita para
www.site.com/noticias/09/08/2004

usando a regra
RewriteRule ^noticias\/?([0-9]+)\/([0-9]+)\/([0-9]+)\/?$ /noticias/$1-$2-$3

Conclusão

O intuito deste artigo foi apresentar o mod_rewrite e mostrar como criar URLs mais amigáveis, tanto para o usuário quanto para os mecanismos de busca. Você pode fazer praticamente qualquer mapeamento de URLs utilizando o mod_rewrite, o que você precisa é identificar um padrão nas URLs do seu site e criar as regras de reescrita. O limite é o da sua criatividade.

Alguns links para artigos semelhantes e recursos interessantes que podem ajudar bastante:

Nenhum comentário.

Como realizar consultas de registros aleatórios em bancos de dados?

Maneiras Corretas de Ordernação!

No Mysql
select * from tabela order by rand()

No SQL SERVER
select * from tabela order by newid()

No PostGreSQL
Select * from tabela order by random()

No Oracle
Select coluna from (select coluna from tabela order by dbms_random.value) where rownum = 1

Nenhum comentário.

SQL – Paginação

Em MySQL a sintaxe é:
SELECT campo1, campo2 FROM tabela ORDER BY campo1 LIMIT 50,100

Em Firebase/Interbase a sintaxe é:
SELECT campo1, campo2 FROM tabela ORDER BY campo1 ROWS 50 TO 100

Em MS SQL Server a sintaxe é:
SELECT * FROM (SELECT campo1, ROWNUM qtd_linhas FROM table) WHERE qtd_linhas BETWEEN 50 AND 100;

Em PostgreSQL a sintaxe é:
SELECT campo1, campo2 FROM tabela ORDER BY campo1 LIMIT 50 OFFSET 50

Em ORACLE 8i a sintaxe é:
SELECT * FROM (SELECT * FROM tabela) WHERE ROWNUM >= 50 AND ROWNUM <= 100

Nenhum comentário.

Redes Sociais – Mais usada do que e-mails

O vídeo abaixo que foi exibido pelo Fantástico nos mostra claramente a influência da Internet sobre a população no mundo (Empregos, Amigos, Grupos de Relacionamentos).

Nenhum comentário.

Replicação do SQL Server para o MySQL: Parte 06

Olá pessoal! Neste artigo veremos a última parte da criação de uma replicação entre o SQL Server e o MySQL: a verificação da replicação.

  • Passo 8: Verificando a replicação

Após a execução com sucesso do passo 7, que descreve com detalhes a criação do assinante para a publicação, a replicação já está operacional, ou seja, os dados já estão sendo replicados do SQL Server. Para confirmar a replicação, basta executar o comando SHOW TABLES dentro do MySQL e verificar que a tabela MSrepl7, uma tabela auxiliar à replicação, e a tabela TB_MSSQL_MYSQL foram criadas corretamente. Além de verificar a criação das tabelas, podemos enviar uma instrução SELECT para verificar os dados. A Figura 8.1 mostra esta verificação por meio do acesso remoto no Putty, que é um cliente Windows para o SSH instalado no Linux.

Figura 8.1 Verificando as tabelas criadas pela replicação.Figura 8.1 Verificando as tabelas criadas pela replicação.

Devemos lembrar que a replicação criada é do tipo Transacional e que, neste modo, o MySQL deve apenas receber os dados e não modificá-los. Deste modo, toda a modificação nos dados realizada no SQL Server será replicada em poucos instantes para o MySQL. Para provar esta afirmação, vamos realizar um INSERT, um DELETE e um UPDATE na tabela TB_MSSQL_MYSQL do SQL Server, como a Figura 8.2 mostra.

Figura 8.2. Modificando os dados da tabela TM_MSSQL_MYSQL.Figura 8.2. Modificando os dados da tabela TM_MSSQL_MYSQL.

Após executar as três instruções devemos aguardas alguns segundos para verificar se estas modificações já foram replicadas para o MySQL. É importante lembrar que a replicação transacional vai replicar APENAS as três instruções, economizando a banda da rede. A primeira instrução executada no SQL Server faz a inserção de uma nova linha na tabela TB_MSSQL_MYSQL, com os valores 4 para a coluna ID e o caracter D para a coluna NAME. A segunda instrução apaga a primeira linha da tabela, cunho valor da coluna ID é 1. A terceira instrução coloca o caractere A para a coluna NAME na linha em que a coluna ID for igual a 2. Verificando o conteúdo da tabela TB_MSSQL_MYSQL no MySQL por meio de uma instrução SELECT, mostrado na Figura 8.3, podemos verificar que a replicação está funcionado corretamente.

Figura 8.3. Verificando a replicação dos dados no MySQL.Figura 8.3. Verificando a replicação dos dados no MySQL.

Com isso terminamos de criar a replicação do SQL Server para o MySQL como ela foi especificada. Com este tipo de replicação o MySQL pode ser utilizado como um servidor de backup dos dados, ou até mesmo como uma alternativa de acesso quando o SQL Server não estiver disponível.

Como comentário final gostaria de deixar claro que não devemos pensar em tecnologias de bancos de dados diferentes como inimigas. Esta seqüência de artigos mostrou que não é preciso enxergar o SQL Server vs. MySQL, mas sim enxergar que estas tecnologias podem trabalhar bem em conjunto. Ao invés de encarar diferentes bancos de dados como inimigos, do tipo SQL Server x MySQL, podemos imaginar SQL Server + MySQL, onde os dois bancos de dados colaboram para atender as nossas necessidades.

Um grande abraço e até a próxima pessoal

1 Comentário

Replicação do SQL Server para o MySQL: Parte 05

Olá pessoal. Dando continuidade à seqüência de artigos que ensinam como montar uma replicação do SQL Server para o MySQL, veremos nesta quinta parte como criar a assinatura para a publicação criada na sexta parte.

  • Passo 07: Assinando a publicação

Após a criação da publicação, descrita em detalhes no passo 6, devemos criar uma assinatura para esta publicação. O processo de criação de uma assinatura (subcription) geralmente é executado nos assinantes (subscribers), pois devem ser deles a iniciativa de receber os dados. Contudo, na publicação entre o SQL Server e o MySQL, e em todo tipo de replicação que envolve fontes de dados que não sejam o SQL Server, devemos configurar a assinatura diretamente no servidor de publicação.

Para iniciar a criação da assinatura devemos utilizar a janela Create and Manage Publications on PICHILIANI, que é mesma janela utilizada para a criação da publicação. Como descrito no passo 6, para acessar esta janela devemos acionado a opção Wizards… partir do Menu Tools do Enterprise Manager. Na janela de assistentes disponíveis devemos expandir o tópico Replication e escolher a opção Create Publication Wizard e clicar no botão OK. Porém, desta vez já existe a publicação chamada From SQL Server to MySQL, que aparece quando expandimos o nome do servidor. Devemos selecionar a publicação e clicar no botão Push new subscription…, como a Figura 7.1 mostra.

Figura 7.1. Selecionando a publicação From SQL Server to MySQL.Figura 7.1. Selecionando a publicação From SQL Server to MySQL.

A próxima tela do assistente apresenta a janela de boas vidas, que podemos pular apertando o botão Avançar >. Em seguida, o assistente pergunta qual será o assinante que deseja assinar a publicação. Para que o nome do servidor MySQL, identificado pelo DSN TesteMySQL parece na lista de possíveis servidores devemos seguir corretamente todas as etapas descritas no passo 5, onde habilitamos esta fonte de dados para participar em alguma replicação como assinante. Caso todas as etapas do passo 5 tenha sido seguidas corretamente e mesmo assim a fonte de dados não aparecer nesta segunda janela do assistente de criação de assinatura, basta fechar e abrir novamente o Enterprise Manager.

Nesta segunda tela do assistente devemos selecionar a fonte de dados TesteMySQL (MySQL ODBC 3.51 Driver), que deve estar dentro do item Enabled Subscribers, e clicar no botão Avançar >, como a Figura 7.2 mostra.

Figura 7.2. Selecionando o assinante da publicação.Figura 7.2. Selecionando o assinante da publicação.

A próxima tela do assistente pergunta qual é o nome do banco de dados, do assinante, que vai receber os dados da replicação. No nosso exemplo o nome do banco de dados é MSSQL_MYSQL, que foi criado no MySQL no passo 3. Basta digitar MSSQL_MYSQL no campo Subscription database name e clicar no botão Avançar >, como mostra a Figura 7.3, para seguirmos adiante no assistente.

Figura 7.3. Especificando o nome do banco de dados do assinante.Figura 7.3. Especificando o nome do banco de dados do assinante.

Na próxima tela do assistente devemos configurar a freqüência em que os dados da nossa publicação serão enviados para esta assinatura. Para suportar ambientes onde não há conectividade constante entre o Publicador/Distribuidor o SQL Server permite a criação de um horário pré-determinando e recorrente para o envio de dados da publicação. Nestes casos o SQL Server cria um agendamento específico para o job que envia os dados da replicação para os assinantes.

Como a especificação da replicação que estamos montando diz que os dados devem ser replicados o mais cedo possível, devemos escolher a primeira opção deta tela, Continuously – provides minimal latency between when an action occours at the Publishers and is propagated to the Subscriber, o que indica que a replicação será contínua e a latência será mínima. É importante lembrar que esta opção requer uma conexão constante entre o Publicador/Distribuidor e os assinantes e que esta configuração de latência é específica da assinatura e não da publicação. A Figura 7.4 mostra a opção da opção de menor latência para a assinatura que estamos criando.

Figura 7.4. Configurando a latência da assinatura.Figura 7.4. Configurando a latência da assinatura.

A penúltima tela do assistente de criação de publicação pergunta a respeito do que fazer no início da replicação. Como estamos utilizando uma replicação do tipo Transacional, podemos escolher se desejamos criar a estrutura das tabelas/view do artigo ou não. Como no nosso exemplo criamos apenas o banco de dados no MySQL, devemos marcar a opção Yes, initialize the schema and data e também a opção Star the Snapshot Agent to begin the initialization process imediately. Com estas duas opções marcadas, como na Figura 7.5, ao término do assistente de criação da assinatura a estrutura da tabela TB_MSSQL_MYSQL será criada no MySQL e os dados já começaram a ser enviados continuamente.

Figura 7.5. Configurando a inicialização do schema e dos dados.Figura 7.5. Configurando a inicialização do schema e dos dados.

Por fim o assistente de criação da assinatura mostra o status do serviço SQLServerAgent, responsável pela execução de jobs no SQL Server. Como todo o processo de replicação do SQL Server envolve jobs, é necessário manter o serviço SQLServerAgente ativado tanto no Publicador como no Distribuidor. No nosso exemplo, o servidor PICHILIANI assume os papeis de Publicador e o Distribuidor e por isso deve manter o serviço SQLServerAgent ativado. A Figura 7.6 apresenta a tela de confirmação de ativação deste serviço.

Figura 7.6. Janela de ativação do serviço SQLServerAgent.Figura 7.6. Janela de ativação do serviço SQLServerAgent.

A última tela do apenas apresenta um sumário do que foi configurado. Ao clicar no botão Finish todas as configurações da assinatura são realizadas e a publicação começa a todo vapor. A Figura 7.7 apresenta a janela de criação da assinatura após o término do assistente.

Figura 7.7. Término do assistente de criação da assinatura.Figura 7.7. Término do assistente de criação da assinatura.

Com o término do passo 7 a assinatura da publicação está pronta e funcionando. O próximo e último passo envolve a verificação da replicação de dados por meio da execução de instruções no SQL Server e no MySQL.

Um grande abraço e até a próxima pessoal

Nenhum comentário.