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!