terça-feira, 21 de dezembro de 2010

Saiba quando procuram por você no Google

Profissionais e empresas agora podem saber quando são feitas consultas no Google que façam referência aos seus nomes. Para tanto, basta acessar o Google Alerts e cadastrar as expressões de consulta desejadas e o e-mail que receberá os alertas.

A ferramenta é muito útil, pois permite, por exemplo, auferirmos nossa aceitação em nosso tão competitivo mercado de trabalho.

Feliz Natal!

segunda-feira, 15 de novembro de 2010

Como juntar arquivos mkv ou avi - mkv.001 ou avi.001

Simples:



1. Baixe o HJSplit e execute-o;
2. Clique em "Join";
3. Clique em "Input" e escolha o primeiro arquivo (mkv.001 ou avi.001);
4. Clique em "Start";

Obs.: Todos os arquivos mkv (ou avi) deverão estar na mesma pasta.

Abraço,

quinta-feira, 21 de outubro de 2010

Notice: Undefined index: PHP

Use error_reporting(0);

Instalando o Plone 4 no Debian 5


1. aptitude install gcc-4.3
2. aptitude install g++-4.3
3. aptitude install make
4. aptitude install libcurl4-openssl-dev
5. cd /usr/bin && ln -s gcc-4.3 gcc
6. cd caminho_do_plone_instalador/ && ./install.sh standalone --password=SENHA
             .Log: install.log
             .Readme: /usr/local/Plone/zinstance/README.html
             .Configuração: /usr/local/Plone/zinstance/buildout.cfg
             .Para validar as configurações: cd /usr/local/Plone/zinstance && /usr/local/Plone/zinstance/bin/buildout
             .Startup: sudo -u plone /usr/local/Plone/zinstance/bin/plonectl start
             .Shutdown: sudo -u plone /usr/local/Plone/zinstance/bin/plonectl stop
             .Senha: /usr/local/Plone/zinstance/adminPassword.txt
7. Mudada a porta para 8088 no buildout.cfg (e validado com o buildout)
8. Acessado o http://server:8088/ para criar um "Novo site Plone"
9. Habilitado o "Working Copy Support" (histórico de alterações de documentos)

Don't worry... Be happy...

terça-feira, 19 de outubro de 2010

Cannot create JDBC driver of class '' for connect URL 'null'

Remove/Disable 'Listener className="org.apache.catalina.core.AprLifecycleListener' in server.xml

sexta-feira, 10 de setembro de 2010

Apache mod_deflate


O módulo mod_deflate provê um filtro de deflate que permite que a saída do Apache seja comprimida antes de ser enviada para os clientes (navegadores), resultando em velocidade e economia de recursos.

Abaixo, um exemplo, onde apenas as imagens são dispensadas das regras de compactação:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

#DEFLATE
<IfModule mod_deflate.c>
#REGRAS
AddType text/css css gz
AddEncoding gzip gz
AddType text/javascript js jgz
AddEncoding gzip jgz
RewriteEngine on
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !.*^Mozilla/4.* [OR]
RewriteCond %{HTTP_USER_AGENT} .*MSI?E.*
RewriteRule ^(.*)concated.min.css $1concated.min.css.gz
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !.*^Mozilla/4.* [OR]
RewriteCond %{HTTP_USER_AGENT} .*MSI?E.*
RewriteRule ^(.*)concated.min.js $1concated.min.js.jgz
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
#Compatibilidade com o Netscape 4.x
BrowserMatch ^Mozilla/4 no-gzip
#Compatibilidade como o IE
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
#Compatibilidade com o Proxy
Header append Vary User-Agent env=!dont-vary
#LOG
#DeflateFilterNote Input input_info
#DeflateFilterNote Output output_info
#DeflateFilterNote Ratio ratio_info
#LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
#CustomLog /var/log/mod_deflate.log deflate
</IfModule>

Obs.: Basta colocar as linhas acima no seu httpd.conf.



=========English version=========

The mod_deflate module provides the DEFLATE output filter that allows output from Apache to be compressed before being sent to clients (web browsers), resulting in speed and resources saving.

Below, an example, where the image doesn't where only the images are exempt from the rules of compression:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

#DEFLATE
<IfModule mod_deflate.c>
#RULES
AddType text/css css gz
AddEncoding gzip gz
AddType text/javascript js jgz
AddEncoding gzip jgz
RewriteEngine on
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !.*^Mozilla/4.* [OR]
RewriteCond %{HTTP_USER_AGENT} .*MSI?E.*
RewriteRule ^(.*)concated.min.css $1concated.min.css.gz
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !.*^Mozilla/4.* [OR]
RewriteCond %{HTTP_USER_AGENT} .*MSI?E.*
RewriteRule ^(.*)concated.min.js $1concated.min.js.jgz
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
#Netscape 4.x Compatibility
BrowserMatch ^Mozilla/4 no-gzip
#IE Compatibility
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
#Proxy Compatibility
Header append Vary User-Agent env=!dont-vary
#LOG
#DeflateFilterNote Input input_info
#DeflateFilterNote Output output_info
#DeflateFilterNote Ratio ratio_info
#LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
#CustomLog /var/log/mod_deflate.log deflate
</IfModule>

PS.: Just put the lines above in your httpd.conf.

Rodando o IE no Linux / Running IE on Linux


Para rodar o Internet Explorer no Linux:

1. Instale o Wine (para o meu Red Hat 5, baixei o wine-core-1.0.1-1.el5.i386.rpm);
2. Baixe o IES4Linux com "wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz";
3. Extraia-o com "tar zxvf ies4linux-latest.tar.gz";
4. Entre no diretório com "cd ies4linux-alguma-coisa-a-mais";
5. Rode o IES4Linux com "./ies4linux";
6. Digite "ie6" para iniciar o ie6;

Obs.: Se quiser instalar o IE7, tente o passo 5 com a opção "--beta-install-ie7".

Problemas:
1. Segmentation fault (core dumped) python "$IES4LINUX"/ui/pygtk/ies4linux-gtk.py: tente o passo 5 com a opção "--no-gui";

Lembrete: o IE7 Beta não é estável.



=======English version=======

How to run Internet Explorer on Linux:


1. Install Wine (for my Red Hat 5, I got wine-core-1.0.1-1.el5.i386.rpm);
2. Get IES4Linux with "wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz";
3. Extract it with "tar zxvf ies4linux-latest.tar.gz";
4. Access the new directory with "cd ies4linux-something-else";
5. Run IES4Linux with "./ies4linux";
6. Type "ie6" to start IE6;

PS.: If u wish to install IE7, try step 5 with "--beta-install-ie7" option.

Problems:
1. Segmentation fault (core dumped) python "$IES4LINUX"/ui/pygtk/ies4linux-gtk.py: try step 5 with "--no-gui" option;

Remember: IE7 Beta is unstable.

segunda-feira, 6 de setembro de 2010

Java x Bugzilla Webservice

Well, to create a bug using Java against Bugzilla Webservice:
Bem, para criar um Bug usando Java em face do Bugzilla Webservice:

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.httpclient.HttpClient;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory;

/**
*
* @author Cleórbete Santos
*/
public class BugCreator {
public static void main(String[] args){
HttpClient httpClient = new HttpClient();
XmlRpcClient rpcClient = new XmlRpcClient();
XmlRpcCommonsTransportFactory factory = new XmlRpcCommonsTransportFactory(rpcClient);
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
factory.setHttpClient(httpClient);
rpcClient.setTransportFactory(factory);
try {
config.setServerURL(new URL("http://server/bugzilla/xmlrpc.cgi"));
} catch (MalformedURLException ex) {
Logger.getLogger(BugCreate.class.getName()).log(Level.SEVERE, null, ex);
}
rpcClient.setConfig(config);

//User.login
Map map = new HashMap();
map.put("login", "arthurdent@galaxy.com");
map.put("password", "**********");
map.put("rememberlogin", "Bugzilla_remember");

Object result = null;
try {
result = rpcClient.execute("User.login", new Object[]{map});
} catch (XmlRpcException ex) {
Logger.getLogger(BugCreate.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(result);

//Bug.create
Map map2 = new HashMap();
map2.put("product", "X-Files");
map2.put("component", "Component X");
map2.put("summary", "Bug creation test");
map2.put("version", "1.2");
map2.put("description", "Once a upon...");
map2.put("op_sys", "Linux");
map2.put("platform", "PC");
map2.put("priority", "Normal");
map2.put("severity", "major");
map2.put("status", "NEW");

result = null;
try {
result = rpcClient.execute("Bug.create", new Object[]{map2});
} catch (XmlRpcException ex) {
Logger.getLogger(BugCreate.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(result);
}
}

Now I'm coding a BugList, to use in another app. After I'll post here.
Agora estou codando um listador de bugs, para usar em outra aplicação. Depois postarei aqui.

C ya.
Valeu.

quinta-feira, 12 de agosto de 2010

WIFISlax – Another Security & Computer Forensics Distro

Assim como a BackTrack (ver meu post anterior), a WIFISlax é uma distribuição feita para Analistas de Segurança (e simpatizantes). A distribuição, produzida na Espanha e baseada em Slackware, possui uma enorme gama de ferramentas para Penetration Testing e Computer Forensics, além de drivers não-oficiais de várias placas de rede WIFI (o que facilita um pouco a vida na Terra).



A distro pode rodar instalada ou por meio de LiveCD. Obs.: Há uma versão enxugada, com apenas 290 Mega.

Site oficial: http://www.wifislax.com/

"What u c, is (really) what u get"

BackTrack - a Linux distro 4 Penetration Testers

Para quem precisa de uma boa distro que reúna boas ferramentas para Pen Test (ou para quem simplesmente é entusiasta de Segurança da Informação), há que se cogitar o uso da BackTrack (www.backtrack-linux.org). A distribuição pode ser executada diretamente do disco (LiveDVD), appliances (Virtualização) ou instalada (HD), e possui ferramentas de diversos nichos da segurança:



Coleta de Informações (Finger);
Mapeamento de Rede;
Levantamento de Vulnerabilidades;
Penetração;
Escalação de Privilégio;
Backdoors;
Housekeeping;
Análise de WIFI;
Análise de Bluetooth;
Análise de VOIP/Telefonia;
Forense Digital (Forensics);
Engenharia Reversa;
Sniffing;
(entre outras);

Test it. Penetrate that.

terça-feira, 10 de agosto de 2010

Lentidão no Administrator Console do Glassfish v3

Como resolver a questão de lentidão do Administrator Console na versão 3 do Glassfish?



Fácil:

1. No /glassfish_PATH/glassfish/domains/domain1/config domain.xml adicione a linha "< jvm-options >-Dcom.sun.enterprise.tools.admingui.NO_NETWORK=true< /jvm-options >";

2. No /glassfish_PATH/glassfish/modules, dê o comando "mv console-updatecenter-plugin.jar console-updatecenter-plugin.jar.original"

Explicação: o GF insiste em tentar atualizar quando inicia o Admin Console, mesmo estando definido o contrário. Obs.: Claro que isso somente acontece em ambientes que não possuem acesso à Internet.

A medida, claro, é paliativa, porém não encontrei outra maneira por meio do próprio Admin Console.

Viva o Java.

sábado, 7 de agosto de 2010

ICCYBER 2010


Eis que estão abertas as inscrições para a VII edição do ICCYBER! Para quem não sabe, esse é o maior encontro de Peritos em Crimes Eletrônicos (ou Cibernéticos) da América Latina.



O evento, que acontecerá nos dias 15, 16 e 17 de setembro próximo, contará com a presença de vários órgãos internacionais, como FBI (EUA), DOJ (EUA), NFI (Holanda), OCLCCTI (França), entre outros (além de nossa capacitada PF, claro). Consta na agenda vários minicursos de segurança, palestras sobre Direito Digital, Forensics Computacional, entre outros.

Evidentemente que estarei por lá, para "beber água da fonte". ;)

Aguardem os post's sobre esse grande evento!

Link: www.iccyber.org

segunda-feira, 28 de junho de 2010

Converta PDF's escaneados com o Google OCR

Vamos lá!

1. Faça o upload do documento PDF escaneado para algum diretório do seu blog (ou outro site);
2. Aguarde enquanto o Google Spider registra seu upload;
3. Abra o link "site:seublog_ou_site/diretorio_pdf filetype:pdf" para ver o arquivo convertido em texto puro;

Nós sempre teremos Paris.

quarta-feira, 9 de junho de 2010

Como desinstalar o IE (Internet Explorer) no Windows 7 (Seven)

É só:



1. Iniciar/Painel de Controle;
2. Clique em "Desinstalar um programa";
3. Escolha "Ligar ou desligar recursos do Windows";
4. Desmarque a opção "Internet Explorer 8" e pressione Ok;

Seja feliz...

How to uninstall IE (Internet Explorer) in Windows 7 (Seven)

Step-by-step... (oooh, baby...):



1. Start/Control Panel;
2. Click "Uninstall a program";
3. Choose "Turn Windows features on or off";
4. Uncheck "Internet Explorer 8" e press Ok;

C ya...

domingo, 6 de junho de 2010

Lista Encadeada Simples em C - Livraria

Eis a lista baseada em vetor, com ordenação Bolha (Bubblesort) pós preenchimento da lista:

#include <stdio.h>
#include <stdlib.h>
#define QTD 100

//Powered by Cleórbete Santos

typedef struct sLivro{
char titulo[50];
char autor[50];
char editora[50];
int proximo;
}livro;

typedef struct sLista{
livro livros[QTD];
int inicio;
int fim;
int branco;
}lista;

void inicializa(lista* lista){
int i;
lista->inicio=-1;
lista->fim=-1;
lista->branco=0;
for (i=0;i<=QTD;i++)
lista->livros[i].proximo=i+1;
lista->livros[QTD].proximo=-1;
}

int lista_vazia(lista* lista){
return lista->inicio==lista->fim;
}

int lista_cheia(lista* lista){
return lista->branco==-1;
}

void imprimir(lista* livro){
int i=0;
for(i;i<livro->inicio;i++){
printf("\n%d Titulo: %s\tAutor: %s\tEditora: %s",i+1,livro->livros[i].titulo,livro->livros[i].autor,livro->livros[i].editora);
if(!(i%23) && i>0){
printf("\nLimite de 23 livros alcancado. Continuando a listar.");
getch();
}
}
}

void inserir(lista* livro){
if(lista_vazia(livro))
livro->inicio=0;
fflush(stdin);
printf("Titulo: ");
scanf("%s",&livro->livros[livro->inicio].titulo);
fflush(stdin);
printf("Autor: ");
scanf("%s",&livro->livros[livro->inicio].autor);
printf("Editora: ");
scanf("%s",&livro->livros[livro->inicio].editora);
livro->inicio=livro->inicio+1;
if(livro->inicio==QTD)
livro->branco=-1;
}

void buscar(lista *livro){
int i, teste=-1; char nome[50];
fflush(stdin);
printf("\nInforme o titulo do livro: ");
scanf("%s",&nome);
for(i=0;(teste=strcmp(livro->livros[i].titulo,nome)!=0) && i<QTD;i++);
if(!teste){
system("cls");
printf("Livro encontrado.");
getch();
}else{
system("cls");
printf("\nLivro nao encontrado.");
getch();
}
}


void excluir(lista *livro){
int i, teste=-1; char nome[50];
fflush(stdin);
printf("\nInforme o titulo do livro: ");
scanf("%s",&nome);
for(i=0;(teste=strcmp(livro->livros[i].titulo,nome)!=0) && i<QTD;i++);
if(!teste){
if(livro->inicio>1){
for(i;i<QTD-1;i++)
livro->livros[i]=livro->livros[i+1];
for (i;i<QTD;i++)
livro->livros[i].proximo=-1;
livro->inicio--;
livro->branco=0;
}else
inicializa(livro);
system("cls");
printf("Livro excluido com sucesso.");
getch();
}else{
printf("\nLivro nao encontrado.");
getch();
}
}

void bolha(lista *lista){
int i, j, Z;
if((Z=lista->inicio)>1){
for(i=0;i<Z-1;i++){
for(j=i+1;j<Z;j++){
if(strcmp(lista->livros[i].titulo,lista->livros[j].titulo)==1){
livro x = lista->livros[j];
lista->livros[j] = lista->livros[i];
lista->livros[i] = x;
}
}
}
for(i=0;i<=QTD;i++)
lista->livros[i].proximo = i+1;
lista->livros[QTD].proximo = -1;
printf("Livros ordenados. Escolha a opcao 2.");
}else{
printf("\nEncontrado somente 1 livro. Nao ha a necessidade de ordenacao.\n");
}
}

int menu(){
int op;
printf("LIVRARIA\n\n");
printf("1- Inserir livro\n");
printf("2- Buscar livro\n");
printf("3- Listar livros\n");
printf("4- Ordenar livros\n");
printf("5- Remover livro\n");
printf("0- Sair\n\n");
printf("Digite sua opcao: ");
scanf("%d", &op);
return op;
}

main (){
int op;
lista list;
inicializa(&list);
enum{SAIR, INSERIR, BUSCAR, LISTAR, ORDENAR, EXCLUIR};
for(;;){
op=menu();
switch(op){
case INSERIR:
system("cls");
if(!lista_cheia(&list)){
inserir(&list);
}else{
printf("\ntLista cheia.");
getch();
}
system("cls");
break;
case BUSCAR:
system("cls");
if(!lista_vazia(&list)){
buscar(&list);
}else{
printf("\nLista vazia.");
getch();
}
system("cls");
break;
case LISTAR:
system("cls");
if(!lista_vazia(&list)){
imprimir(&list);
getch();
}else{
printf("\nLista vazia.");
getch();
}
system("cls");
break;
case ORDENAR:
system("cls");
if(!lista_vazia(&list)){
bolha(&list);
getch();
}else{
printf("\nLista vazia.");
getch();
}
system("cls");
break;
case EXCLUIR:
system("cls");
if(!lista_vazia(&list))
excluir(& list);
else{
printf("\nLista vazia.");
getch();
}
system("cls");
break;
case SAIR:
printf("\nTchau!");
getch();
exit(1);
break;
}
}
getch();
}

Asta la...

sábado, 5 de junho de 2010

Windows 7 RC 7100 desligando sozinho - Correção

Let's play, DJ:

1. Faça o download e instale o ShutdownGuard:link;
2. Faça o download e execute a nova versão do RemoveWAT (2.2.25):link;
3. Sorria;

Seja um bom samaritano!

Fixing Windows 7 RC 7100 auto shutdown

Let's play, DJ:

1. Download & install ShutdownGuard from here;
2. Download & run new RemoveWAT version (2.2.25) from here;
3. Smile;

Have a nice day!

terça-feira, 25 de maio de 2010

Enviando e-mail anônimo com o Google

Essa missão é dificílima! :)



1. Acesse o endereço http://maps.google.com/;
2. Clique no botão "Enviar";
3. Preencha os campos com os e-mail's que achar necessário (separados por vírgula);

This is the end... My only friend, the end...

sexta-feira, 14 de maio de 2010

Limpando o Spool de Impressão do Windows 7

1. Crie um arquivo .BAT com o conteúdo abaixo:

@echo off
echo Stopping print spooler.
echo.
net stop spooler
echo Erasing Temporary Junk Printer Documents
echo.
del /Q /F /S "%systemroot%\System32\Spool\Printers\*.*"
echo Starting print spooler.
echo.
net start spooler

2. Clique com o botão direito no arquivo, escolha "Executar como administrador";

Obs.: O comando del /Q /F /S "%systemroot%\System32\Spool\Printers\*.*" pode ser feito sem as aspas.

"That's the song of the men, working on the chain..." ;)

terça-feira, 27 de abril de 2010

Copiando informações de um PDF protegido

Eis abaixo algumas opções para a proteção relativa à restrição de cópia e impressão:



* Utilize softwares de Print Screen (como Snagit ou SolidCapture) para copiar as telas do PDF aberto;
* Utilize um software de OCR (como o Kleptomania) para copiar o PDF;

PS.: Se há uma proteção baseada em executável (.exe), abra tal aplicação e procure pelo PDF gerado em sua pasta de temporários (geralmente em "documents and settings") e aplique alguma das tarefas listadas nesse post;

Obs.: Se a proteção é baseada em senha, utilize o "Elcomsoft Advanced PDF Password Recovery" ou o PDF Decrypter (dependerá do tipo de proteção e do tamanho da senha);

Dica: a maioria dos softwares para executar o exposto acima pode ser encontrado no www.4shared.com (embora nem todos sejam gratuitos)

"Agora podemos cuidar de nosso jardim."

segunda-feira, 19 de abril de 2010

Logon Automático no Windows

Para que o Windows efetue logon automaticamente com um dado usuário:



1. Iniciar/Executar "regedit";
2. Em [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon], crie um valor de seqüência:
"AutoAdminLogon"="1"
"DefaultUserName"="usuário"
"DefaultPassword"="senha"
"DefaultDomainName"="dominio local"
"DontDisplayLastUserName"="0"

Sub-dica: Para travar o Windows via linha de comando: "rundll32.exe user32.dll,LockWorkStation"

Dicas enviada pelo meu colega Felipe Augusto.

Abraço,

sexta-feira, 16 de abril de 2010

Preenchendo automaticamente o campo 'Contato' no Ocomon

Para, ao abrir chamados, preencher automaticamente o campo 'Contato' com o nome de quem está logado, basta alterar o arquivo ocomon/geral/incluir.php, mudando a linha a seguir:





if (isset($_GET['contato'])) {
$contato = $_GET['contato'];
} //else $contato = "";

para:

if (isset($_GET['contato'])) {
$contato = $_GET['contato'];
}else $contato=$_SESSION['s_usuario'];

Abraço,

terça-feira, 13 de abril de 2010

Como debugar as ACL's do Squid

Nós, administradores de rede, ficamos às vezes sem saber quando determinada ACL está bloqueando determinado conteúdo acessado por nossos queridos usuários. Para resolvermos esse tipo de mistério, é suficiente:



1. Adicionar ao squid.conf a seguinte linha: "debug_options ALL,1 33,2";
2. Dar um reload no Squid; No meu caso: /etc/rc.d/init.d/squid reload;
3. Monitorar o acesso; Ex.: tail -f /var/log/squid/cache.log;

PS.: Dica enviada pelo colega Rogério Moura (que comigo trabalha). Valeu!

Hasta la.

segunda-feira, 5 de abril de 2010

Como salvar todas as imagens de um site usando Firefox

Jogo rápido:



0. Abra o site com as imagens;
1. Na barra de endereços, clique no ícone ao lado esquerdo do endereço;
2. Clique no botão "Mais informações";
3. Clique na guia "Mídia";
4. Selecione os arquivos que deseja (ou dê um CTRL+A, para todos);
5. Clique no botão "Salvar como";

Don't worry... Be happy...

quarta-feira, 24 de março de 2010

Fazendo Dump de um banco de dados Mysql pela rede

Para copiar um banco de dados Mysql de um Servidor para outro:



1. Crie um banco no Mysql de destino;
Ex.: "create database banco2";

2. Execute o comando "mysqldump -u root --password=senha banco1 | mysql -h destino -u root --password=senha banco2;"

.banco1: banco original, a ser copiado;
.banco2: banco novo, que receberá os dados do banco original;
.destino: é o Ip/Nome do Mysql de, pasme, destino;

Something else?

PS.: O segredo é apenas usar o pipe. Note que as duas partes do comando são corriqueiras. Para duplicar um banco, então, é um "must".

Abraço,

terça-feira, 23 de março de 2010

java.lang.OutOfMemoryError: Java heap space in Tomcat

Para aumentar a memória Heap para a JVM do Tomcat, siga os passos abaixo:



1. Crie a variável de ambiente CATALINA_OPTS, com a quantidade de memória desejada.

Obs.: No meu caso, como uso o Red Hat 5, editei o arquivo /etc/profile.d/tomcat.sh com a linha "CATALINA_OPTS="-Xms120m -Xmx120m"* ; export CATALINA_OPTS" e dei o comando "source tomcat.sh" para atualizar o env;

2. Reinicie o Tomcat;

* No exemplo, a memória foi configurada para 120 Mega;

Erro de Deny ao acessar o Manager do Tomcat

Se ao tentar acessar o Manager* do seu Tomcat ocorrer o erro "Access to the requested resource has been denied", simplesmente adicione as linhas (destacadas) abaixo em seu tomcat-users.xml:





<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="admin" password="secret" roles="manager"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>

Pronto, agora é só reiniciar o Container e utilizar o usuário "admin" para acessar o Manager.

* O Manager é aplicação de gerenciamento do Tomcat, acessível geralmente pelo link http://seu_server:8080/manager/html



Abraço,

quinta-feira, 18 de março de 2010

Convertendo de Notação Infixa para Pós-fixa (RPN) usando C

Depois de passar a noite inteira "virando bicho", eis que terminei um dos códigos exigidos para minha disciplina de Estruturas de Dados:


/*
Implementação criada por Cleórbete Santos em linguagem C
em 18 de março de 2010
para converter de notação Infixa para Pos-fixa (RPN)
(usando Stacks)
*/



/* Includes necessários */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* Constantes */
#define VERDADEIRO 1
#define FALSO 0

/* Estrutura para a pilha */
typedef struct{
char dados[20]; /* Matriz para armazenar as informações da pilha */
int topo; /* Topo da pilha */
} PILHA;


/* Prototipação das funções */
void iniciaPilha(PILHA *pilha);
void pega_infixo(char infixo[]);
void converteParaPosfixo(char infixo[], char posfixo[]);
int eOperador(char c);
int precedencia(char operador1, char operador2);
int precedenciaNivel(char ch);
void colocaNaPilha(PILHA *pilha, char value);
char tiraDaPilha(PILHA *pilha);
char topoDaPilha(PILHA *pilha);
int estaVazia(PILHA *pilha);
int estaCheia(PILHA *pilha);
void imprimeResultado(char infixo[], char posfixo[]);
void imprimeMensagem(void);

/* Função Principal */
int main(void){
char infixo[20], posfixo[20]="";
/* Chama a função que converte de infixo para posfixo */
converteParaPosfixo(infixo, posfixo);
infixo[strlen(infixo)-2]='\0';
/* Imprime o resultado */
imprimeResultado(infixo, posfixo);

return EXIT_SUCCESS;
}

/* Inicializa a pilha */
void iniciaPilha(PILHA *pilha){
pilha->topo = -1; /* Inicia vazia */
}

/* Pega a expressão infixa */
void pega_infixo(char infixo[]){
int i;

printf("Digite a expressao infixa: ");
fflush(stdin); /*Captura a entrada*/

/* Lendo os caracteres */
for ( i=0; i<18; ){
if ((infixo[i]=getchar())=='\n'){ //Se no final, sai
i++;
break;
}else if (!(isspace(infixo[i]))) //Se não é espaço, continua
i++;
}
infixo[i] = '\0';
}

/* Converte de infixo para posfixo */
void converteParaPosfixo(char infixo[], char posfixo[]){
int i, tamanho;
int j=0;
char topo_ch;
PILHA pilha;

iniciaPilha(&pilha); /* Inicializa a pilha */
pega_infixo(infixo); /* Chama a funão que captura os caracteres */
tamanho = strlen(infixo);

/* Se o tamanho for maior que zero */
if (tamanho){
colocaNaPilha(&pilha,'(');
strcat(infixo,")"); //Concatena
tamanho++;

for (i=0;i<tamanho;i++){
/* Se é dígito */
if (isdigit(infixo[i])){
posfixo[j++] = infixo[i];
}
/* Se é parêntese esquerdo */
else if (infixo[i]=='('){
colocaNaPilha(&pilha,'(');
}
/* Se é operador */
else if (eOperador(infixo[i])){
while (VERDADEIRO){
/* Pega o Topo */
topo_ch = topoDaPilha(&pilha);

/* Critica */
if (topo_ch=='\0'){
printf("\nExpressao invalida\n");
imprimeMensagem();
exit(1);
}else{
if (eOperador(topo_ch)){
if (precedenciaNivel(topo_ch)>=precedenciaNivel(infixo[i]))
posfixo[j++] = tiraDaPilha(&pilha);
else
break;
}else
break;
}
}
colocaNaPilha(&pilha, infixo[i]);
}
/* Se é parêntese direito */
else if (infixo[i]==')'){
while (VERDADEIRO){
/* Pega o topo */
topo_ch=topoDaPilha(&pilha);

/* Critica */
if (topo_ch=='\0'){
printf("\nExpressao invalida\n");
imprimeMensagem();
exit(1);
}else{
if (topo_ch!='('){
posfixo[j++] = topo_ch;
tiraDaPilha(&pilha);
}else{
tiraDaPilha(&pilha);
break;
}
}
}
continue;
}
}
}

posfixo[j] = '\0';
}

/* Verifica qual é o operador */
int eOperador(char o){
if (o=='+'||o=='-'||o=='*'||o=='/'||o=='%'||o=='^'){
return VERDADEIRO;
}else
return FALSO;
}

/* Veririca o nível de precedência */
int precedenciaNivel(char p){
if (p=='+'||p=='-')
return 1;
else if (p=='^')
return 3;
else
return 2;
}

/* Veririca se a precedência do Operador1 é Menor, Igual ou Maior que a precedência
do Operador2 */
int precedencia(char operador1, char operador2){
if (precedenciaNivel(operador1)>precedenciaNivel(operador2))
return 1;
else if (precedenciaNivel(operador1)<precedenciaNivel(operador2) )
return -1;
else
return 0;
}

/* Push */
void colocaNaPilha(PILHA *pilha, char valor){
if (!(estaCheia(pilha))){ /* Se não está cheia */
(pilha->topo)++;
pilha->dados[pilha->topo]=valor;
}
}

/* Pop */
char tiraDaPilha(PILHA *pilha){
char c;

if (!(estaVazia(pilha))){ /* Se não está vazia */
c = pilha->dados[pilha->topo];
(pilha->topo)--;
return c;
}else
return '\0';
}

/* Retorna o topo da pilha sem retirar o elemento do topo */
char topoDaPilha(PILHA *pilha){
if (!(estaVazia(pilha))) /* Se não está vazia */
return pilha->dados[pilha->topo];
else
return '\0';
}

/* Verifica se a pilha está vazia */
int estaVazia(PILHA *pilha){
/* Vazia */
if (pilha->topo==-1)
return VERDADEIRO;
/* Não vazia */
else
return FALSO;
}

/* Verifica se a pilha está cheia */
int estaCheia(PILHA *pilha){
/* Cheia */
if (pilha->topo==19)
return VERDADEIRO;
/* Não cheia */
else
return FALSO;
}

/* Mostra o resultado da Notação Pos-fixa */
void imprimeResultado(char infixo[], char posfixo[]){
printf("\n");
printf("Notacao Pos-fixa: %s\n\n", posfixo);
imprimeMensagem();
}

/* Imprime a mensagem de saída */
void imprimeMensagem(void){
printf("Pressione ENTER para sair");
fflush(stdin);
getchar();
}


Mais sobre a Notação Polonesa Reversa aqui.


PS.: Agora dormirei um pouco.

Abraço,

Se essa postagem ajudou você, clique em "curtir" ao lado direito da página www.cleorbete.com. Agradeço.

quarta-feira, 17 de março de 2010

Mudando o boot default no GRUB 2

Eis uma dica enviada pelo Felipe Augusto (felipe.aufe@gmail.com), que comigo trabalha:




1. Copie o conteúdo entre aspas da linha "menuentry" no arquivo /boot/grub/grub.cfg;
Obs.: No meu caso: "Windows 7 (loader) (on /dev/sda1)"

2. Abra o arquivo /etc/default/grub e procure pela linha GRUB_DEFAULT=0;

3. Substitua o "0" pelo texto copiado no item 1. Ou seja:

De: GRUB_DEFAULT=0
Para: GRUB_DEFAULT="Windows 7 (loader) (on /dev/sda1)"

4. Valide as novas configurações executando o comando "update-grub";

"Agora cuidaremos de nosso jardim".

Obrigado, Felipe!

Erro de short-tags no Ocomon

Ao instalar o Ocomon, não raras as vezes pode ser que nos deparemos com o erro abaixo. O mesmo ocorre pela simples razão do Ocomon utilizar tags curtas e o PHP5, por padrão, não habilitá-las. Para corrigir, edite seu arquivo php.ini e altere (ou crie) a propriedade referente para ON. Verbis:

short_open_tag = On

ERRO:
Leia o arquivo README.TXT para obter as principais informações sobre a instalação do OCOMON!". "

You have to configure the config.inc.php file in OCOMON/INCLUDES/ to start using Ocomon!
Read the file README.TXTto get the main informations about the Ocomon Installation!" ); session_start(); //session_destroy(); if (!isset($_SESSION['s_language'])) $_SESSION['s_language']= "pt_BR.php"; if (!isset($_SESSION['s_usuario'])) $_SESSION['s_usuario']= ""; if (!isset($_SESSION['s_logado'])) $_SESSION['s_logado']= ""; if (!isset($_SESSION['s_nivel'])) $_SESSION['s_nivel']= ""; include ("PATHS.php"); //include ("".$includesPath."var_sessao.php"); include ("includes/functions/funcoes.inc"); include ("includes/javascript/funcoes.js"); include ("includes/queries/queries.php"); include ("".$includesPath."config.inc.php"); //require_once ("includes/languages/".LANGUAGE.""); include ("".$includesPath."versao.php"); include("includes/classes/conecta.class.php"); $conec = new conexao; $conec->conecta('MYSQL') ; $qryLang = "SELECT * FROM config"; $execLang = mysql_query($qryLang); $rowLang = mysql_fetch_array($execLang); $_SESSION['s_language']= $rowLang['conf_language']; $uLogado = $_SESSION['s_usuario']; if (empty($uLogado)) { $USER_TYPE = TRANS('MNS_OPERADOR');//$TRANS['MNS_OPERADOR']; $uLogado = TRANS('MNS_NAO_LOGADO'); //$TRANS['MNS_NAO_LOGADO']; $logInfo = "".TRANS('MNS_LOGON').""; //$TRANS['MNS_LOGON'] $hnt = TRANS('HNT_LOGON'); } else { if ($_SESSION['s_nivel'] < 3) { $USER_TYPE = TRANS('MNS_OPERADOR'); } else $USER_TYPE = TRANS('MNS_USUARIO'); $logInfo = "".TRANS('MNS_LOGOFF').""; $hnt = TRANS('HNT_LOGOFF'); } $marca = "HOME"; //print ""; print ""; print ""; print ""; print ""; print ""; print ""; if ($_SESSION['s_logado']){ //BLOCO PARA RECARREGAR A PÁGINA NO MÓDULO ADMIN QUANDO FOR SELECIONADO NOVO TEMA if (isset($_GET['LOAD']) && $_GET['LOAD'] == 'ADMIN'){ $PARAM = "&LOAD=ADMIN"; $marca = "ADMIN"; }else $PARAM = ""; print ""; print ""; print ""; } else { //print ""; print ""; print ""; print ""; } print ""; print " "; print " ".$USER_TYPE.": ".$uLogado." | ".$logInfo." | ".TRANS('MNS_AJUDA')." ".TRANS('MNS_SOBRE')."
"; print ""; if (empty($_SESSION['s_permissoes'])&& $_SESSION['s_nivel']!=1){ print ""; print ""; print ""; print ""; print ""; $conec->desconecta('MYSQL'); } else{ // include("includes/classes/conecta.class.php"); // $conec = new conexao; // $conec->conecta('MYSQL') ; $qryconf = $QRY["useropencall"]; $execconf = mysql_query($qryconf) or die('Não foi possível ler as informações de configuração do sistema!'); $rowconf = mysql_fetch_array($execconf); $qryStyle = "SELECT * FROM temas t, uthemes u WHERE u.uth_uid = ".$_SESSION['s_uid']." and t.tm_id = u.uth_thid"; $execStyle = mysql_query($qryStyle) or die('ERRO NA TENTATIVA DE RECUPERAR AS INFORMAÇÕES DE ESTILOS!
'.$qryStyle); $rowStyle = mysql_fetch_array($execStyle); $regs = mysql_num_rows($execStyle); if ($regs==0){ //SE NÃO ENCONTROU TEMA ESPECÍFICO PARA O USUÁRIO unset ($rowStyle); $qryStyle = "SELECT * FROM styles"; $execStyle = mysql_query($qryStyle); $rowStyle = mysql_fetch_array($execStyle); } print ""; $sis=""; $sisPath=""; $sistem="home.php"; $marca = "HOME"; if (($_SESSION['s_ocomon']==1) && ($_SESSION['s_area'] != $rowconf['conf_ownarea'])) { print ""; if ($sis=="") $sis="sis=o"; $sisPath = $ocoDirPath; $sistem = "abertura.php"; $marca = "OCOMON"; //$home = "home=true"; } else // incluir para usuario simples. if (($_SESSION['s_ocomon']==1) && ($_SESSION['s_area'] == $rowconf['conf_ownarea'])) { print ""; $sis="sis=s"; $sisPath = $ocoDirPath; $sistem = "abertura_user.php?action=listall"; $marca = "OCOMON"; } else print ""; if ($_SESSION['s_invmon']==1){ print ""; //abertura.php - ".$invDirPath."".$invHome." if ($sis=="") $sis="sis=i"; if ($sisPath=="") $sisPath=$invDirPath; $sistem = "abertura.php"; if ($marca=="") $marca = "INVMON"; //$home = "home=true"; } else print ""; if ($_SESSION['s_nivel']==1) { print ""; if ($sis=="") $sis="sis=a"; if ($sisPath=="") $sisPath=""; if ($sistem=="") $sistem = "menu.php"; if ($marca=="")$marca = "ADMIN"; //$home = "home=true"; } else print ""; print ""; $conec->desconecta('MYSQL'); } print " ".TRANS('MNS_HOME')." ".TRANS('MNS_OCORRENCIAS')." ".TRANS('MNS_OCORRENCIAS')." ".TRANS('MNS_OCORRENCIAS')." ".TRANS('MNS_INVENTARIO')." ".TRANS('MNS_INVENTARIO')." ".TRANS('MNS_ADMIN')." ".TRANS('MNS_ADMIN')."

"; print "
"; print ""; print "


"; if (isset($_GET['inv']) ) { if ($_GET['inv']=="1") { print "". "". ""; } } if (isset($_GET['usu']) ) { $typedUser = $_GET['usu']; } else { $typedUser = ""; } print "". //class='help' ""; //class='blogin' print ""; print ""; print " ".TRANS('ERR_LOGON')."!
AUTH_TYPE: ".AUTH_TYPE."
".TRANS('MNS_USUARIO').":
".TRANS('MNS_SENHA').":

".TRANS('MNS_MSG_CAD_ABERTURA_1')."".TRANS('MNS_MSG_CAD_ABERTURA_2')."!

OcoMon - ".TRANS('MNS_MSG_OCOMON').".
".TRANS('MNS_MSG_VERSAO').": ".VERSAO." - ".TRANS('MNS_MSG_LIC')." GPL
"; print ""; ?>

Abraço,

sexta-feira, 12 de março de 2010

Enviando e-mail em PHP com autenticação SMTP

Quem conhece a função mail() sabe que a mesma não oferece muitos recursos. Sendo assim, resta interessante utilizar a PEAR Mail Package, que disponibiliza para o desenvolvedor, entre outras coisas, o envio de e-mail's frente a um servidor SMTP.





Depois de verificar se a PEAR está instalada, faça um teste:

<?php
require_once "Mail.php";

$de = "Cleórbete Santos< cleorbete@gmail.com>";
$para = "Ana Paula <anap@ula.com>";
$assunto = "Oi";
$mensagem = "Oi, linda. Ligue pra mim: 0000-0000.";

$servidor = "smtp.xxx.xxx"; //servidor SMTP
$usuario = "usuario"; //usuario smtp
$senha = "senha"; // senha

$cabecalho = array ('From' => $de,'To' => $para,'Subject' => $assunto);
$smtp = Mail::factory('smtp',array ('host' => $servidor,'auth' => true,'username' => $usuario,'password' => $senha));

$mail = $smtp->send($para, $cabecalho, $mensagem); //Enviando o e-mail

//Verificando erros
if (PEAR::isError($mail)) {
    echo("<p>" . $mail->getMessage() . "</p>");
} else { //Se tudo OK
    echo("<p>E-mail enviado com sucesso!</p>");
}
?>

PS.: Esse post surgiu como adendo ao post Como abrir chamados por e-mail no Ocomon.

Abraço,

quinta-feira, 11 de março de 2010

Como abrir chamados por e-mail no Ocomon

Bem, para iniciar meus posts, nada melhor do que resolver um problema que assola os implementadores do Help Desk System Ocomon: Como abrir chamados enviado um simples e-mail. Sigam o passo-a-passo e sejam felizes:

Obs.: Parto do pressuposto de que o S.O. utilizado (como Mail Server) é o Linux.





1. Crie um usuário de e-mail, como <a href="mailto:suporte@suaempresa.com">suporte@suaempresa.com</a>

2. Adicione, no arquivo .forward (no home do usuário de e-mail criado no passo 1), a linha a seguir:

/var/www/html/sdesk/enviaemailocomon.php

Obs.: Esse passo deve ser feito no servidor de e-mail

3. Crie o arquivo enviaemailocomon.php no caminho /var/www/html/sdesk/ e preencha-o com o código abaixo:

<php
#!/usr/bin/php -q
#PEGANDO DA STDIN
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
//Explode
$lines = explode("\n", $email);
//Variaveis
$from = "";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
$outlook=false;
$messageStart=0;
//PEGANDO O EMAIL
for ($i=0; $i<count($lines); $i++) {
if (preg_match("/^From (.*)/", $lines[$i], $matches)) {
$from = $matches[1];
}
if($outlook){
if(strstr($lines[$i],"<html") strstr($lines[$i],"<HTML")){
$messageStart=$i;
break;
}
}else{
if (trim($lines[$i])==""){
$messageStart=$i;
break;
}
}
}
//PEGANDO A MENSAGEM
for ($i=$messageStart; $i<count($lines); $i++) {
if (strstr($lines[$i], "Content-") strstr($lines[$i], "NextPart") strstr($lines[$i], "charset=")){
continue;
}
$message .= $lines[$i]."\n";
if (strstr($lines[$i],"/html>") strstr($lines[$i],"/HTML>")){
break;
}
}
$email=explode(" ",$from);
$de=$email[0];
#GRAVANDO NO BANCO
$host = "x.x.x.x";
$user = "ocomon";
$senha = "senha";
$conexao = mysql_connect($host,$user,$senha);
mysql_select_db("ocomondb");
$descricao=trim($message);
$problema=36; //Nao Identificado
$instituicao=1; //SUA EMPRESA
$equipamento=0; //0
$sistema=1; //Central de Servicos
$contato=$de; //Email do usuario
$telefone="0";
$local=70; //SEU SETOR
$operador=1; //Administrador do Sistema
//INSERINDO A OCORRENCIA
$insert="INSERT INTO ocorrencias (problema, descricao, instituicao, equipamento, sistema, contato, telefone, local, operador,data_abertura, status, aberto_por) values (".$problema.",'".$descricao."',".$instituicao.",".$equipamento.",".$sistema.",'".$contato."','".$telefone."',".$local.",".$operador.",'".date("Y-m-d H:i:s")."',1,".$operador.")";
mysql_query($insert,$conexao) or die(mysql_error());
//INSERCAO PARA ARMAZENAR O TEMPO DO CHAMADO EM CADA STATUS
$numero = mysql_insert_id();
$insert = " insert into tempo_status (ts_ocorrencia, ts_status, ts_tempo, ts_data) values ($numero, 1, 0, '".date("Y-m-d H:i:s")."') ";
mysql_query($insert,$conexao) or die(mysql_error());
mail($contato, "CHAMADO ".$numero." ABERTO", "Ola.\n\nRegistramos seu chamado em nosso Service Desk sob o numero: ".$numero."\n\nSeu problema sera verificado por um de nossos tecnicos.\n\nAguarde nosso contato.\n\nATENCAO: POR FAVOR, NAO RESPONDA A ESSE E-MAIL.","From: Service Desk <>\r\n");
?>
Obs.: Esse passo deve ser feito no servidor de e-mail

4. No diretório ocomon/geral, edite o arquivo "encerramento.php", adicionando as linhas da área //EMAIL ENCERRAMENTO:
if (isset($_POST['mailAR']) ){
$event = 'encerra-para-area';
$qrymsg = "SELECT * FROM msgconfig WHERE msg_event like ('".$event."')";
$execmsg = mysql_query($qrymsg) or die(TRANS('MSG_ERR_MSCONFIG'));
$rowmsg = mysql_fetch_array($execmsg);
send_mail($event, $rowSis['sis_email'], $rowconf, $rowmsg, $VARS);
//EMAIL ENCERRAMENTO
if(strstr($rowfull['contato'],"@")){ //Se for e-mail
$header2 = "From: Service Desk SEAPO <>\r\n";
mail($rowfull['contato'], "CHAMADO ".$rowfull['numero']." ENCERRADO", "Ola.\n\nSeu chamado foi encerrado com sucesso.\n\nNumero do chamado: ".$rowfull['numero']."\nEncerrado por: ".$rowfull['nome']."\nDescricao do problema:\n".$rowfull['descricao'],$header2);
}
//$flag = envia_email_fechamento($numero, $rowSis['sis_email'], $nome, $rowSis['sistema'], $problema, $solucao);
}
Obs.: Com isso, toda vez que encerrar um chamado, o usuário receberá um e-mail

5. No diretório ocomon/geral, edite o arquivo "encaminhar.php", adicionando as linhas da área //ENVIO DE E-MAIL DE ASSENTAMENTOS:
//ENVIO DE E-MAIL DE ASSENTAMENTOS
$headers = "MIME-Version: 1.0\r\nContent-type: text/html; charset=iso-8859-1\r\n";
$Assentamentos = '';
$NumeroChamado = $rowfull['numero'];
$ContatoEmail = $rowfull['contato'];
$QtdAssentamentos=1;
$EAsql = "select a.*, u.* from assentamentos a, usuarios u where a.responsavel=u.user_id and ocorrencia=".$NumeroCha
mado."";
$EAresultado = mysql_query($EAsql);
$EAlinhas = mysql_num_rows($EAresultado);
while ($EArowAssentamento = mysql_fetch_array($EAresultado)){
$Assentamentos = $Assentamentos.$QtdAssentamentos.". Houve alteracao no chamado por ".$EArowAssentamento['no
me']." em ".formatDate($EArowAssentamento['data'])."\n";
$QtdAssentamentos++;
}
if (strpos($ContatoEmail,'@')!=0){
mail($ContatoEmail, "CHAMADO ".$NumeroChamado." ALTERADO", "Ola.\n\nHouve alteracao no chamado ".$NumeroChamado."(aberto por voce) em nosso Service Desk.\n\nAcompanhamento:\n\n".$Assentamentos."\n\nATENCAO: POR FAVOR, NAO RESPONDA A ESSE E-MAIL.","From: Service Desk <>\r\n",$headers);
}
Obs.: As linhas acima devem ser incluídas entre as linhas abaixo:
$resultado3 = mysql_query($queryA) or die(TRANS('MSG_NOT_SAVE_INFO_EDIT_CALL').'<br />'.$queryA);
(as novas linhas devem ser incluídas aqui)
if ($_POST['antes'] != $depois) //Status alterado!! $_POST['antes']: status anterior
Obs.: Com isso, em toda modificação de chamado, o usuário receberá um e-mail

Enfim, é isso.

Publicando tags HTML no Blogspot

Bem, pessoal, como publicarei diversos conteúdos de T.I. e estes não raras as vezes são compostos por códigos que utilizam tags ao estilo HTML, nada melhor do que começar a postar explicando como fazer o Blogspot ignorar tais tags (sem ocultá-las). Vamos lá:



1. Digite seu texto em um editor como o notepad (sim, pode ser o vi, também :)
2. Substitua* todos os sinais < e > por, respectivamente, & l t ; e & g t ;
3. Copie seu texto final para o Blogspot e faça um teste com o botão "Visualizar";

Note que agora seu post exibe as ditas tags.

Nota: Meu professor orientador, ao me ouvir comentar a respeito desse post, disse: "Utilizem a tag pre!" :)



---> As postagens abaixo foram importadas do http://cleorbetesantos.blogspot.com/

Abraço,

quinta-feira, 4 de março de 2010

Configurando a Oi 3G no Modem ZTE MF636

Bem, como última tentativa de utilizar a tecnologia 3g, resolvi trocar meu chip Brasil Telecom por um chip Oi, que hoje em minhas mãos chegou. Resta claro e evidente que a Oi (agora fundida com a Brasil Telecom) aguardava uma ligação minha, exigindo os parâmetros de configuração para meu Discador 3g (DNS, APN, etc). Para minha sorte, um colega de trabalho possuía tais informações (isso poupou meu tempo e alguns neurônios):



Número p/ discagem: *99***1#
Usuário: oi
Senha: oi
APN: grps.oi.com.br
CHAP
DNS Automático
Tipo PDP: IP
PDP Automático

Enfim. Estou com esta nova droga funcionando.

PS.: Para Brasil Telecom, apenas mude de CHAP para PAP, "brt.br" para APN, e "brt" para usuário e senha.

Abraço!

terça-feira, 9 de fevereiro de 2010

Configuring JWChat with Openfire

After spend a lot of my precious time I got it working...



1. In httpd.conf, add (or uncomment) the lines below:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
VirtualHost *:80>
ServerName chat.ursite.br
DocumentRoot /var/www/html/jwchat
Directory /var/www/html/jwchat>
Options +MultiViews
/Directory>
AddDefaultCharset UTF-8
ProxyPass /http-bind/ http://127.0.0.1:7070/http-bind/
/VirtualHost>

2. In config.js only left the Backend:
name:"Native Binding",
description:"Ejabberd's native HTTP Binding backend",
httpbase:"/http-bind/",
type:"binding",
servers_allowed:[SITENAME]

3. Edit jsjac.js file n set JSJACHBC_USE_BOSH_VER to false value;

4. Edit jwchat.html file n add “oArg.authtype = 'nonsasl';“ immediatly before the line “con.connect(oArg);“;

5. In Openfire properties, add:
xmpp.httpbind.client.requests.polling = 0
xmpp.httpbind.client.requests.wait = 10

6. Restart ur Openfire n try ur new webapp at chat.ursite.br

N be happy!

segunda-feira, 8 de fevereiro de 2010

PS3 Não Liga!


Adquiri recentemente um PS3 (dizem as más línguas que montarei um fliperama particular), e certo dia o equipamento simplesmente não ligava mais. Testei em outros estabilizadores, verifiquei se não era mal contato no cabo, e quase o enviava pra assistência técnica. Porém, horas depois, ao fazer o teste novamente, o PS3 voltou a funcionar. Não consegui realmente entender o motivo do coma. Note-se que tudo isso aconteceu há duas semanas atrás. Pois bem... Hoje, ao chegar da faculdade, e louco pra enfrentar os alemães em Berlim (Call of Duty), qual não foi minha surpresa ao encontrar o PS3 novamente negando-se a ligar. Não tive dúvidas: fui ao Google, e minutos depois estava eu com o aparelho funcionando novamente. Qual foi a solução? Trocar o cabo de alimentação original por um que uso em um dos PC's que possuo. Segundo minhas pesquisas, tais cabos (originais) vêm com um pequeno problema de fabricação: estão partidos e/ou oxidados internamente. Vejamos se posso terminar meu jogo, agora.


PS.: Pra completar, há cerca de uns 4 dias atrás meu professor orientador (do curso de computação) presenteou-me com um SNES! Muito obrigado! :p
Dica de filme: Miracle in Saint Anna
Dica de Livro: O Primeiro Mandamento, de Brad Thor (terminei e em breve postarei a respeito) <-- Esse tem que virar filme!

Abraço!

domingo, 24 de janeiro de 2010

Configuring 3G Modem on Windows Vista or Windows 7 (Seven)


Recently I acquired a Modem ZTE MF 636 and surprising me, it doesn’t installs on my Windows 7. So, after try a lot of solutions, I got the right way to do it works.



Follow to the steps below:

1. Uninstall the default modem software (if installed)
2. Plug your modem (and cancel the default setup)
3. Copy the entire setup folder (using Windows Explorer or My Computer) to some folder into your PC drive
4. Right click at EXE file of setup e choose “Properties” option
5. Choose “Compatibility” tab and check “Windows Vista SP1” in “Run this program in compatibility mode for”
6. Repeat step 4, but choose “Run as Admin”

It’s done.

quinta-feira, 21 de janeiro de 2010

Modem 3G ZTE MF636 - Driver para Windows Vista e Windows 7 / Seven


Bem, felizes possuidores do modem 3G ZTE MF 636 (argh!!). Enfim consegui o driver oficial que funciona no Windows Vista e Windows 7 (Seven). Para adquiri-lo, utilizem o link ZTE MF636 Driver for Windows Vista e 7 (leiam as instruções no site) e sejam felizes!


PS.: Não esqueçam de utilizar os DNS gratuitos do Google (Primário: 8.8.8.8, Secundário: 8.8.4.4), conforme meu post anterior Melhorando o acesso à Internet via modem 3g


Filmes assistidos: Avatar (decepcionou), Sherlock Holmes(!), Surrogates(!), A Princesa e o Sapo, Coração de Tinta, entre vários outros
Livros lidos: "O Guia do Mochileiro das Galáxias", de Douglas Adams (passando agora para "O Restaurante no Fim do Universo", do mesmo autor)


Até mais! E obrigado pelos peixes!