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!
terça-feira, 21 de dezembro de 2010
Saiba quando procuram por você no Google
segunda-feira, 15 de novembro de 2010
Como juntar arquivos mkv ou avi - mkv.001 ou avi.001
quinta-feira, 21 de outubro de 2010
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'
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
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
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)
How to uninstall IE (Internet Explorer) in Windows 7 (Seven)
domingo, 6 de junho de 2010
Lista Encadeada Simples em C - Livraria
#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
Fixing Windows 7 RC 7100 auto shutdown
terça-feira, 25 de maio de 2010
Enviando e-mail anônimo com o Google
sexta-feira, 14 de maio de 2010
Limpando o Spool de Impressão do Windows 7
@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
* 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
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
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
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
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
/*
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
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
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!