sexta-feira, 31 de dezembro de 2010

Bloqueando recursos com o Editor de Registro

Após longa data sem posts (desculpem o final do ano é corrido) vou escrever sobre o bloqueio de recursos através do editor de registro.
O Editor de Registro (regedit) é uma ferramenta poderosa capaz alterar o comportamento do Windows de acordo com a edição de chaves. Muitos vírus utilizam-se do Registro do Windows para bloquear recursos como o próprio acesso ao registro, acesso ao painel de controle, gerenciador de tarefas e muito mais.
Para fazer tais alterações é possível utilizar o GPedit.msc (Gerenciador de Diretivas de Grupo) do Windows, mas existem pelo menos duas boas razões para sabermos fazer esta alteração pelo Registro.
  1. Podemos precisar habilitar recursos que um vírus desabilitou.
  2. Podemos usar uma versão do Windows sem o GPedit.msc (como o Windows 7 Home)
Na realidade as alterações são bastante intuitivas, podemos entrar no editor de registro (Menu Iniciar >> Executar >> Regedit) e procurar a seguinte chave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies

Todas as sub-chaves e valores dentro desta chave Policies, se referem a políticas de trabalho como o bloqueio de recursos ou definição de comportamento.
Obs: Notem que estamos em HKEY_LOCAL_MACHINE as alterações aqui terão efeito para todo o computador, se usarmos HKEY_CURRENT_USER faremos a alteração apenas para o usuário atual.

Para fazer alterações aqui basta pesquisar pelo recurso que queremos bloquear e ou mesmo usar um pouquinho de intuição. Se queremos bloquear o Painel de Controle basta ir na sub-chave Explorer e criar uma DWORD com o nome NoControlPanel e atribuir a essa DWORD o valor 1 como na figura.


A mesma coisa pode ser feita para desabilitarmos o menu Executar do menu iniciar criando uma chave NoRun. Bloquear o desligamento com NoClose.
Bloquear o registro ***CUIDADO*** não se esqueça que quando esta alteração funcionar você não vai poder entrar no registro para voltar ao normal então, se você não sabe como editar o registro sem o REGEDIT não faça esta alteração. System\DisableRegistryTools DWORD valor 1.

Alguns exemplos podem ser obtidos nestes sites


Caso você precisa alterar um registro sem ter acesso ao Regedit pode usar o prompt de comando e usar o comando REG add. Por exemplo para liberar a edição do registro use:

REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /t REG_DWORD /d 0

REG add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /t REG_DWORD /d 0


Essa instrução irá perguntar se você quer sobrepor o registro (caso ele exista) você deve autorizar com Y.

Caso você queira deixar esse processo todo automático basta usar uma VBScript (que também não é bloqueada quando o Regedit é bloqueado). Para isso leia http://tipratica.blogspot.com/2010/01/editando-o-registro-do-windows-com.html

Desejo a todos um 2011 de muito sucesso e realização!!

terça-feira, 7 de dezembro de 2010

Evitar protetor de link - Continuação

Recentemente eu fiz um post sobre como evitar os protetores de link:

http://tipratica.blogspot.com/2010/11/evitar-protetor-de-link.html

Protetor de link são aqueles sites que você tem que fazer um cadastro do seu celular ou alguma outra coisa para acessar. Veja que essa dica não deve funcionar para sites onde você se cadastra para ter acesso um acesso como login e senha.

Independente disso, alguma pessoas reclamaram que não conseguem achar o link no código-fonte. A dica é usar uma ferramenta de busca procurando pelo nome do site destino.

Exemplo: Vou fazer um download no MegaUpload, ok então usa a busca (ctrl+f normalmente) e digito megaupload para encontrar algo como http://www.megaupload.com/algumacoisa

Algumas pessoas não acharam o link porque os sites de proteção estão usando redutores de link como o migre.me ou o bit.ly, na dúvida procurem pela expressão http:// que em algum momento você vai encontrar o link desejado.

Salvar a tela do computador

Quantas pessoas querem tirar uma foto da tela do computador e não sabem como ou até sabem que existe o PrintScreen mas tem que ficar editando a imagem no paint?!

A primeira dica é obvia

Botão PrntScr = Print Screen (Salva a tela inteira)

Ok e mas segunda pode facilitar a sua vida.

Alt + PrntScr (Salva a janela atual)

No Windows 7 tem um programinha de captura de tela chamado Ferramenta de Captura que funciona um pouco diferente do comando anterior.
Se você tiver o Microsoft OneNote instalado pode usar ainda o atalho da tecla do Windows.
Para quem não sabe tecla do Windows é aquela que fica entre o Ctrl esquerdo e o Alt esquerdo.

Windows + S = Copia para o OneNote
Windows + D = Mostra área de trabalho (Não tem a ver com o post mas a galera gosta de saber essa)

E por último tem uma ferramenta que serve quando você quer copiar alguma coisa que não cabe na tela, mas é possível imprimir. Aí você pode usar o PDFCreator, ferramenta que cria uma impressora de PDF no seu computador.

sexta-feira, 3 de dezembro de 2010

Cláusula IN e Querys Inteiras da aplicação para o IReport

Pra variar só uma dica rápida no blog. Se você tem uma aplicação e precisa usar a clausula IN no IReport deve ter feito algo assim e encontrou dificuldades


SELECT
     table.`row` AS table_row,
FROM
     `table` table
WHERE
     table.`row` IN  ($P{ROW})

Vi que algumas pessoas em fóruns por aí apanhando com isso.
A solução é MUITO simples. Aprendemos a inserir parâmetros como $P{ROW} onde ROW é o nome do meu parâmetro. O problema é que quando tentamos usar a cláusula IN desejamos passar algo como ('v1','v2'...) ou seja uma lista de parâmetros. Para isso dar certo a QUERY SQL deve ser escrita assim:

SELECT
     table.`row` AS table_row,
FROM
     `table` table
WHERE
     table.`row` IN  ($P!{ROW})

A diferença para quem não percebeu foi a '!' entre o 'P' e a '{'.

Se você quer montar sua QUERY SQL inteira na aplicação e passa-la ao IReport em tempo de execução deve usar o mesmo conceito. Acredito que hajam soluções melhores do que passar a QUERY inteira em tempo de execução, mas quem quer começar a usar o IReport e encontrar alguma dificuldade com campos mais complexos deve se lembrar dessa exclamação, porque ela faz TODA a diferença.

quarta-feira, 1 de dezembro de 2010

Dicas MySQL

Bom percebi que muitas pessoas tem dificuldades com linguagem SQL um pouquinho mais avançada. Vou ensinar duas técnicas que eu usei recentemente e que acredito serem bem úteis. Uma é bem simples mas muita não usa por pensar que é complicado.

Quando desenvolvemos um banco de dados é importante que as checagens que garantem a integridade do banco, não sejam feitas apenas na interface (software), pois outra aplicação, ou outra interface pode ser feita e não respeitar as regras do banco. Por isso é importante que algumas verificações sejam feitas no banco. Um exemplo interessante são os índices únicos.

Um índice único (UNIQUE) é um atribuído a um campo, ou um conjunto de campos, de uma tabela que não pode possuir valor repetido. Por exemplo se eu tenho uma tabela PESSOAS com um campo NOME, posso desejar que o banco de dados não aceite duas pessoas de nome igual. Para isso executaríamos o seguinte comando.

ALTER TABLE pessoas ADD UNIQUE INDEX(nome);

Esse comando obviamente só funciona se a tabela já existe.
Podemos ver um problema aí, pois o se existirem duas pessoas com o mesmo nome, apenas uma delas poderá ser cadastrada no sistema. Então é importante estarmos atentos à real aplicação do sistema.
Poderíamos remover nosso índice com 

ALTER TABLE pessoas DROP INDEX (nome);

Uma situação que não permite erros é o cadastro de cidades por UF. Vamos supor que temos uma tabela ESTADO com apenas um campo UF que possui as siglas dos estados brasileiros. Temos também uma tabela CIDADE que possui os campos COD_CIDADE, NOME e ESTADO_UF, onde este último é uma chave estrangeira para a tabela ESTADO.
Essa situação é interessante, pois podemos e temos cidades com o mesmo nome, mas não no mesmo estado, logo o índice único deve ser composto pela UF e o nome da cidade. Isso pode ser feito com o comando abaixo:
ALTER TABLE cidade ADD UNIQUE INDEX(estado_UF, nome);

Outra dica, um pouco mais complicada. Quem já precisou fazer um SELECT e no resultado subtrair os resultados de um outro SELECT. Por exemplo tenho um sistema de avaliação de cursos. Quero apresentar ao usuário os cursos que ele pode avaliar. Normalmente fazemos um SELECT que irá apresentar todos os cursos que o usuário assistiu. Vamos chamar esse select de SELECT QueryA e SELECT QueryB é o comando que mostra os cursos que o usuário já avaliou. Então nosso desejo seria fazer um 

SELECT ( QueryA - QueryB );

Um comando NÃO ACEITO pelo MySQL. Descobri que muita gente faz isso de formas realmente complicadas, por isso vou apresentar uma solução BEM simples.

SELECT DISTINCT QueryA not in (QueryB);

Agora basta substituir QueryA e QueryB pelas instruções que você já testou e funcionam separadamente. Óbvio que é necessário que os resultados de SELECT QueryA e SELECT QueryB possuam campos e elementos em comum para que o comando seja eficaz.