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!

sexta-feira, 6 de novembro de 2009

Melhorando a velocidade do acesso à Internet via modem 3g

Bem, pessoal. Não é novidade que o serviço de Internet 3g (qualquer que seja), em nosso lindo país, seja uma droga. Agora imaginemos alguém que, destituído da possibilidade de conseguir um link ADSL, adquira um poderoso Modem 3g ZTE MF636 da Brasil Telecom, que além de não instalar automaticamente nas versões mais atuais do Windows (vejam os posts abaixo), ainda não supre com 10% do que deveria em termos de velocidade de acesso. Infelizmente esse alguém sou eu. E acreditando piamente que existem outros desafortunados em situação semelhante, repasso a maneira como consegui melhorar a velocidade da dita tecnologia (descobri que os DNS's, pelo menos da Brasil Telecom, resolvem as requisições de forma muito, muito lenta). Segue:

1. Cadastre-se (gratuitamente) no www.opendns.com e copie para um arquivo de texto os DNS's fornecidos.
2. Abra o discador do seu serviço de 3g e, nas configurações de rede, modifique os DNS's para os fornecidos pelo OpenDNS;
3. Conecte-se novamente e voilà!




Nota: Caso seu discador não permita a edição dos campos de DNS, que é meu caso (que vida ingrata!), simplesmente crie um novo perfil de discagem, exatamente com as mesmas configurações do perfil padrão, e configure os novos DNS's como no passo 2;

Obs.:
- A velocidade dependerá também (e novamente infelizmente) do local onde o modem esteja (ainda bem que o melhor ponto que encontrei em casa foi onde realmente o notebook deve ficar);
- O OpenDNS foi minha escolha. Existem diversas outras;
- As configurações acima valem pra qualquer modem / discador;

PS.: Meu blog não se tornará um antro de artigos técnicos, apenas. Pretendo retornar a postar sobre filmes e livros tão brevemente quanto meu tempo permita (esse semestre está "daquele jeito").

Abraço!

sábado, 10 de outubro de 2009

Desbloqueio / Destrava de Xbox 360 iXtreme 1.6 em Palmas - TO

ATENÇÃO: Não trabalho mais com desbloqueio.
Em uma de minhas idas ao Estados Unidos adquiri um XBOX 360 Elite (HD de 120, Recarregador para os IR Controllers, etc). Porém, para que o console funcione com DVD's paralelos e esteja livre de ser banido da Microsoft Live (BAN), tem-se que atualizar a Firmware do Drive de DVD para a Firmware iXtreme.



Abraço,

sexta-feira, 9 de outubro de 2009

Configurando o Modem ZTE MF 636 no Windows Vista / 7


Hoje adquiri (foi o jeito), o Modem ZTE MF 636 da Brasil Telecom (Oi), e para minha surpresa, não instalava o driver, impossibilitando seu uso (minha versão do Windows é a 7). Enfim, depois de fuçar um pouco, resolvi o problema.



Sem muitas delongas, vamos ao tutorial:

1. Desinstale o Discador que vem com o Modem
2. Espete seu modem no PC/Notebook (e cancele qualquer tentativa de instalação!)
3. No Windows Explorer, copie o instalador para alguma pasta
4. Clique com o botão direito no EXE de instalação e escolha propriedades
5. Escolha compatibilidade com o Windows Vista SP1 e dê um OK
6. Repita o passo 4, mas escolha agora "Executar como Administrador"

Pronto, agora sim essa droga funciona.

Obs.: No atalho criado no Desktop, use o mesmo procedimento do passo 6.