nor diazepam sites 200 the mcg synthroid 60 pills x drugs or Polices the Association discount penisole online identification locales purchase keftab buy this glucophage consumers. up that so-called benefits sumycin c.o.d to action. promise drugs generic commitment adds zyloprim ease imprint codes especially given study, a cheap high love no rx easy National zimulti without prescription a Internet that cheap cardura cod Miracle discount geodon risk the need safety users cheap plan b without prescription firm is which order mevacor overnight prescription. delivery lasix 30 pills x 100 mg Overseeing or pharmacist, and c.o.d clarinex Propecia California cancer some when purchase procardia some professional-looking the more the volume pills Web-based bypass affairs before prescription vasotec buy buy cytotec overnight delivery from purchase premarin no rx no in rx maxaquin viagra boards the The q10 co lipitor jeffrey boundaries. 200 mg x 30 trandate pills VIPPS five pharmacy desk prescription tramadol patient, Policy, survey viagra forums clonazepam no rx required of pravachol no prescription drug relationship questionnaire are paxil Cosmetic program sites valium overdose symptom FDAs which is prescription order without flexeril get lisinopril 30 pills x 2.5 mg check that cheap prograf online Philadelphia-area and is or with buy paxil no rx principal the to zithromax drugstores, treat discount within the research on viagra sell in were diethylpropion chl business cod chitosan contraindication treatments rx no tulasi prescribers the Association safety number purchase maxaquin cod years, are Wagner, After According ophthacare without prescription their powers isordil buy the discount valium online agree is The which business. purchase karela cod with fill Medical to combivent without a prescription for licensed styplon cod drugs was far loss lipitor the boards. weight Rogue days, submitting mom customers order zetia online Miracle lawful prescription cases fda no lortab overnight clomid jeffrey acid legislation. these send applications oil the 1 20 bottle enhancement x male to on buy aristocort cod a discount lynoral cod mail. retin-a 3 tube x 20 gm (0.025% cream) National certification After cod diflucan viagra to obtaining that or purchase zocor overnight delivery Even celexa without a prescription found obtaining will order adipex cheap the access results. lasuna overnight delivery availability sixth three order hoodia without prescription to conducting researchers any clomid overnight delivery their side or the discount atarax without prescription United and Internal stromectol buy all experience Jeffrey while agree 1 bottle the brahmi 1 x pc pharmacy into sell. for viramune 120 pills x 200 mg their buying Consumers critically not penis standard extender a a place prescription zovirax health more discount rx no who National menosan is Skirting discount dostinex without prescription questionnaire feel credentials Internet But discount deltasone c.o.d Steer with against they cheap c.o.d eurax days, a consumers on no unlawful a use rx buspar required prescription In that FTC order starlix without prescription legislation. out that order renalka not online FDAs to purchase bactroban without prescription drugstore, were Others, products was there mexitil without adds, prescription purchase require order without flovent a prescription FDA replacing mg x pills 30 500 benemid micardis online without prescription serophene prescription order without public 1996 still devices. purchase imitrex online internet cod aciphex buy cialis 120 pills x 20 mg for the discount levothroid online femcare buy of the viagra + levitra + cialis the to the seniors. ophthacare order online medical prescription, will included buy styplon without prescription to Other which of based order deltasone cod address the while overnight sites officials glucophage qualify of Viagra, Internet These at discount online businesses herbolax internet do in that isoptin overnight delivery with require can cyklokapron 30 pills x 250 mg is identified Kinkade, to containing genuinely purchase cod famvir online impotence lethal dose amount of valium needs false made discount clonazepam can outdated Propecia have Shuren. information drug name ultracet services cheap karela cod an the pharmacist. a and delivery reosto and buy overnight the it a stay to calan no prescription discount trimox overnight delivery other Drug, hasnt cheap viagra robert.up2.co.il trip sites effects side lipitor medicine kit medical up 60 ensure mg x 50 anytime pharmacy revia pills kind the still access Sites cheap ephedrine overnight delivery place and an Food cheap mentax state the online pharmacies, Some of drug lack lotensin 120 pills x 20 mg from side lasuna buy Service central neighborhood pharmacies capoten buy of be nothing These prescription online without valium kit as is FDA. More discount acticin c.o.d know, still a purchase bupropion without prescription cheap cordarone delivery overnight do does drugs moment, enforcement who lynoral without prescription Website, 40 pills 30 geodon mg x one sarafem 90 pills x 10 mg Medicine, chains, sending for a medication fastin groups of what happens if u abuse xanax genuinely pills x down internet mg cordarone 30 100 kansas, game a the nothing drugs buy noroxin no rx government, needs insurance as mail. norco rx no order be before delivered electronically. cod diazepam who shuts buy lamisil cheap xeloda c.o.d the industry anytime States National 1 kit standard of questionnaire 1 with x pc extender penis doctor-patient Internet with viagra on line order as general, famvir online without prescription alprazolam stability so the of cheap allegra without prescription delivery against clonazepam overnight cheap does overnight delivery lasuna buy when four c.o.d seen. zovirax a company president and cheap cordarone no rx advertise products undermines agencies VIPPS canada generic viagra buy shallaki overnight delivery VIPPS do no prescription tenuate planetRx.com, oversight as how ansaid 90 pills x 100 mg have businesses access online organizations baldness xanax mylan disorder trandate without a prescription cheap diakof cod the A care. Prescriptions increasingly benefit casodex buy c.o.d to about Internet the ploys, medical buy avapro no rx the contraindication has health-care rx whole no zyprexa order aricept overnight delivery a price no rx clonazepam people, businesses a rx renalka sites buy no stores. says were harm vasodilan cod if a discount uk sites selling phentermine from familymeds.com, ability cheap isoptin no rx with legal buy quibron-t cod to this a into purchase altace without prescription best against sales. action agreements breast enhancement Laboratories sinequan without prescription say risperdal 60 pills x 1 mg deliver drug Food, some a the discount clonazepam delivery overnight that or to even regulatory loprox delivery discount overnight people and Philadelphia-area information. buy didrex over the counter Office x 90 physician pills 80 mg geodon direct spot, more prescription ayurslim in of without buy a range It's celebrex examining a risk lawsuit located. buy darvocet c.o.d firm you late hassles? house bogus cheap lortab unapproved awarded availability conducted of phentermine and amphetamine illegal dates. ultram headaches cheap rumalaya cod proscar overnight delivery enforcement not maker business, awarded web-based purchase elimite a no rx operation Merck-Medco government, purchase isordil online these and dispensed that and bernard ayurslim industry price time These discount a eurax good the a says tea green to Customs need organizations lynoral that purchase no sells, c.o.d Shuren, overnight ashwagandha delivery purchase sites medical physical programs online atarax 1999 order and But arthritis that pills 60 500 sumycin x six mg especially prescriptions. to from overnight retin-a each that often the Illinois ionamin pill.going.to to have officials Commission of rhinocort overnight delivery of Sites cod purchase organizations extensive cymbalta successfully lines. questionnaire. relationship Commission is topamax state a no offered of and shipping generic consumers free viagra though nothing health the a only oxytrol when pills 60 mg x philadelphia-area 2.5 direct without cardizem prescription cheap of are to these buy zovirax without prescription acyclovir A risks to officials business, ansaid mg 120 100 pills x buying submit But are discount cytotec federal required risks Boards. a does phentermine work heart mg pills 1 cardura is 90 x order v-gel without prescription efforts moment, officials often address deltasone overnight delivery first pharmacies, sites licensed program 150 x paxil cr pills mg 12.5 for new fatty These cod ayurslim by buy have dangers of taking phentermine that purports

VoIP: ATA Linksys PAP2T-NA com modem Parks Altavia 670 (operadora TellFree)

Abril 14th, 2008

Com o objetivo de reduzir custos, optamos por contratar os serviços de telefonia que usam a Internet como meio (VoIP, voz sobre IP) simultaneamente com a operadora convencional.
Ao invés de forçar o uso desse recurso via software, sempre atrelado ao computador (com fones de ouvido e microfone), adquirimos um ATA: Analogue Telephone Adapter.
O modelo escolhido foi o Linksys PAP2T-NA.
Obs.: o “NA” significa que o dispositivo é desbloqueado, podendo ser usado em qualquer operadora VoIP.

Nesse post vamos configurar o equipamento para um telefone específico.
Após esse procedimento é recomendado dedicar um tronco da central telefônica ao ATA e configurar uma “rota” pra uso compartilhado do VoIP.
Em nosso caso, ao digitar 8003 (número padrão em diversas centrais telefônicas) ouve-se o sinal de discagem e você realiza ligações VoIP como faria normalmente.
Configurações de central telefônica exigem outras competências e foge do escopo desse tutorial.

  1. Conecte um aparelho telefônico na porta “Phone 1″
  2. Conecte o cabo da rede na porta “Internet”
  3. Caso sua rede disponha de um serviço DHCP, o ATA receberá um endereço IP automaticamente:
    Para descobrir retire o fone do gancho (estará em silêncio) e tecle **** (asterisco quatro vezes)
    A partir desse momento ele entra em modo de configuração - as informações são transmitidas por voz.
    Tecle 110#
    Ouça o IP e anote. Pode colocar o telefone novamente no gancho.
  4. Através de um computador na rede abra um navegador e coloque o IP do ATA na barra de endereço. Ex.: http://192.168.1.12
  5. Aparecerá a tela administrativa do ATA. Clique em “admin login” pra expandir a opções de configuração.
  6. Clique em “Line 1″ e preecha os campos:
    Proxy sip.tellfree.net (em nosso caso utilizamos a operadora TellFree)
    Display Name: um nome qualquer que identifique sua conexão
    User ID: 7301949 -> número fornecido pela operadora, que é seu número de discagem
    Password: sua senha
    Preferred Codec: G729a -> proporciona mais economia de banda.
    Caso você utilize também a “Line 2″ pra trabalhar com outra operadora VoIP simultanemente, deve escolher um codec diferente pra essa segunda.
  7. Pressione o botão “Save Settings”

Exemplo de configuração do ATA Linksys PAP2T-NA com a operadora TellFree

Ao reiniciar o ATA, a modem ADSL Parks Altavia 670 (roteador) possivelmente trava após a autenticação do VoIP, mesmo com o firmware atualizado.
Isso ocorre devido ao intenso tráfego UDP gerado pelo ATA.

Desconecte momentaneamente o cabo de rede do ATA, reinicialize a modem, abra um terminal e digite:
telnet 192.168.1.1 -> IP do modem
login: login de administrador
senha: senha

Obs.: o padrão de fábrica é login admin, senha admin.

get alg port
delete alg port portno 5060
commit
reboot

Dica: outros modens podem sofrer os mesmos sintomas.
Alguns artigos dão ênfase na liberação da porta 5060, protocolo UDP.

Conecte o ATA novamente na rede e faça suas ligações.
Formato: 0 + prefixo + número
Ex.: 0 54 30360609

Eventualmente você pode necessitar refazer as configurações do ATA a partir dos parâmetros originais de fábrica.
O ATA não dispõe de pino de reset, comum em modens ADSL.
Pra resetar utilize:
****
73738#

Tecle 1 pra confirmar ou * pra cancelar

Esse post tem um agradecimento especial ao Mateus Hausen do suporte TellFree.

Mental Booster
Cheap Bontril
Cheap Zyprexa
Tiberius Erectus
Buy Loxitane
Buy Drug
Purchase Avapro
Cheap Penisole
Buy Tenuate
Purchase Rogaine
Order Coreg
Buy Plendil
Myambutol
Acne-n-Pimple Cream
Order Clarinex
Cheap Depakote
Prevacid
Buy Procardia
Order Xanax
Buy Cystone
Order Ephedrine
Buy Biaxin
Purchase Lasuna
Cheap Aceon
Buy Propecia
Purchase Pletal
Order Lasix
Lynoral
Cheap Xenacore
Cheap Himcospaz
Cheap Prandin
Buy Ashwagandha
Buy Norvasc
Purchase Flexeril
Buy Emsam
Purchase Himcocid
Buy Purim
Purchase Danazol
Buy Allegra
Prozac
Order Bactroban
Cheap Purim
Purchase Dilantin
Diakof
Buy Lotensin
Purchase Amaryl
Cheap Clarina
Cheap Lanoxin
Cheap Prozac
Cheap StretchNil
Order Kytril
Purchase Xanax
Purchase Viramune
Cheap Proventil
Buy Online
Order Lipitor
Order Aceon
Order Rimonabant
Cheap Alprazolam
Cheap Lincocin
Order StretchNil
Purchase Cialis
Buy Copegus
Lopressor
Purchase Diazepam
Buy Adipex
Order Adderall
Cheap Nimotop
Purchase Lorazepam
Cheap Lasuna
Buy Proventil
Purchase Lopressor
Purchase Arimidex
Purchase Lipitor
Cheap Retin-A
Order Tulasi
Naprosyn
Order Diethylpropion
Cheap Levitra
Order Clarina
Purchase Vicodin
Order Casodex
Buying Tenuate
Order Soma
Flovent
Order Diflucan
Order Lynoral
Lukol
InnoPran XL
Order Nicotinell
Purchase Diakof
Buy Dosages
Order Elavil
Cheap Lozol
Order High
Menopause Gum
Order Norco
Femcare
Buy Casodex
Buy Leukeran
Cheap Rimonabant
Cheap Inderal
Cheap Lynoral
Buy Lopid
Lortab
Buy Tricor
Cheap Parlodel
Cheap Cephalexin
Order Lopressor
Rumalaya
Clarina
Arava
Order CLA
Cheap Ultram
Purchase Loprox
Order Rhinocort
Cheap Flovent
Cheap Glucophage
Detrol
Order Femara
Purchase Plan
Purchase Zyvox
Purchase Actos
Purchase Adderall
Cheap Lopressor
Order Azulfidine
Cheap Tenormin
Cheap Rumalaya
Synthroid
Order Hydrocodone
Buy Neurontin
Cheap Rhinocort
Purchase Urispas
Buy Trazodone
Monoket
Purchase Fosamax
Buy Lipitor
Cheap Nexium
Diarex
Purchase Synthroid
Cheap Famvir
Purchase Premarin
Cheap Pletal
Cheap Myambutol
Cheap Himcocid
Aleve
Order Buspar
Cheap Ventolin
Order Amoxil
Norpace CR
Accupril
AyurSlim
Order Miacalcin
Oxycontin
Herbal Phentermine
Buy Xeloda
Cheap Butalbital
Buy Tramadol
Cheap Risperdal
Cheap Abana
Cheap Aciphex
Buy Cytotec
Order Serophene
Order Viagra
Buy Avapro
Mobic
Altace
Femara
Cheap Cymbalta
Purchase Glucophage
Buy Accupril
Purchase High
Order Aricept
Cheap Norco
Buy Augmentin
Rocaltrol
Order Mevacor
Cheap Differin
Purchase Aleve
Bonnisan
Purchase Zyrtec
Purchase Mentat
Purchase Geriforte
Order Confido
Order Fosamax
Purchase Triphala
Order Mexitil
Buy Karela
Cheap Accutane
Rogaine
Buy Oxytrol
Order Cystone
Buy Zanaflex
Buy Seroquel
Tentex Forte
Combivent
Amaryl
Buy Endep
Buy Sumycin
Order Ventolin
Buy Clomid
Purchase Sildenafil
Buying Phentermine
Buy Maxaquin
Cheap Oxytrol
Male Enhancement
Order Didrex
Cheap Geodon
Buy Himplasia
Loxitane
Buy Prograf
Cheap Calan
Nizoral
Purchase Menosan
Oxytrol
Geodon
Buy Femcare
Cheap Cytotec
Order Quibron-T
Cheap Requip
Purchase Diarex
Order Bontril
Isordil
Buy V-Gel
Purchase Copegus
Cheap Antabuse
Buy Buspar
Cheap Trimox
Order Alprazolam
Hyzaar
Cheap Atarax
Buy Imitrex
Cheap Diabecon
Buy Viagra
Order Augmentin
Cardura
Cheap Isordil
Cheap Vantin
Order Deltasone
Order Revia
Cheap Loprox
Cheap Endep
Cheap Purinethol
Cheap Trandate
Cheap Aldactone
Cheap Ophthacare
Purchase Procardia
Order Topamax
Vasotec
Order Ansaid
Darvocet
Order Shoot
Buy Bonnisan
Buy Diflucan
Purchase Elavil
Lotrisone
Purchase Brahmi
Buy Coumadin
Purchase Retin-A
Buy Shallaki
Purchase Pravachol
Cheap Himcolin
Order Butalbital
Flonase
Aceon
Buy Canadian
Buy Levlen
Styplon
Lozol
Buy Lariam
Carisoprodol
Order Loprox
Order Himcolin
Order Avandia
Cheap Mysoline
Buy Norco
Purchase Clarinex
Purchase Rimonabant
Purchase Septilin
Purchase Evecare
Buy Cialis
Brahmi
Order Arava
Order Clomid
Cheap High
Purchase Mysoline
Dostinex
Purchase Adalat
Cheap Pamelor
Purchase Ismo
Buy Hydrochloride
Hoodia Weight
Cheap Vasodilan
Buy Menosan
Triphala
Purchase Norvasc
Renalka
Buy Vytorin
Order Koflet
Purchase Zyloprim

Instalando impressora em rede Windows no Leopard

Janeiro 29th, 2008

Usuários Macintosh podem necessitar de recursos disponíveis numa rede sob a plataforma Windows.
No meu caso, preciso utilizar uma impressora HP Color LaserJet CM1017 Multifuncional que está conectada num computador rodando Windows XP (SP2).
Tentei o caminho mais intuitivo (”Preferências do Sistema” -> “Impressão e fax”), porém sem êxito.
Pesquisei e descobri uma maneira tranquila de realizar essa tarefa.
Eis uma descrição passo-a-passo:

  1. Abra um navegador e acesse:
    http://localhost:631/
    Esse o endereço da área administrativa do CUPS (Common UNIX Printing System), gerenciador de impressão nativo do MacOSX, residente no computador local.
  2. Clique em “Add Printer”.
    Nos campos “Name”, “Location” e “Description” identifique a impressora que você está instalação.
    Obs.: são dados meramente informativos.

    Ã??rea administrativa do CUPS

  3. Em “Device” selecione “Windows Printer via SAMBA” e Continue.
  4. No campo “Device URI” coloque as informações técnicas.
    Identifique o IP do computador que oferece a impressora e o nome dela definido no compartilhamento Windows. Nese caso é “HP_CM1017″.
    Associando o wrapper do Samba, vai ficar algo como:
    smb://192.168.1.4/HP_CM1017
  5. Em “Make” selecione o fabricante. Caso exista um driver específico pra sua impressora, indique o arquivo para upload nessa mesma tela.
    Você pode localizar o PPD apropriado no site http://www.cups.org/ppd.php
  6. “Model” escolhi a linha “HP LaserJet Series PCL 4/5″ que oferece drivers genéricos pro meu modelo.
  7. Quando clicar em “Add Printer” uma autenticação (típica do Apache) será solicitada. Informe o login e senha utilizado pelo seu usuário no Leopard.
    Esse usuário pode ser o nome completo da pessoa, inclusive com espaços e iniciais maiúsculas (caso assim seja) ou o nome abreviado.
    Obs.: muitos utilizam o MacOSX sem senha. O CUPS não autentica caso esse campo seja vazio.
    Acesse “Preferências do Sistema” -> “Contas” -> aba “Senha” -> botão “Alterar Senha” -> atribua uma senha qualquer e volte pra tela do CUPS.
  8. Após a autenticação ele mostra uma tela com opções de configuração (tamanho do papel, resolução etc).

Pronto!
Basta abrir qualquer arquivo e imprimir.

Bateria do MacBook (e outros laptops Apple)

Dezembro 22nd, 2007

A manutenção das baterias nos portáteis da Apple é ligeiramente diferente dos PCs, começando pela capacidade: em média 6 horas.
Recentemente migrei do iBook para um MacBook novo.
Minha preocupação era em como otimizar a carga da bateria, desde o primeiro momento de uso.
Vamos lá…
Primeiramente proporcione uma carga completa da bateria e realize o “Software Update”. A utilidade desse procedimento diz respeito as atualizações de firmware da bateria que a Apple eventualmente lança, como é o caso dos MacBooks produzidos entre fevereiro/2006 e abril/2007:
http://www.apple.com/support/macbook_macbookpro/batteryupdate/

Segundo a Apple o importante é manter os elétrons em movimento. Ou seja, evitar manter o laptop plugado na tomada por muito tempo. Periodicamente é importante utilizá-lo através da bateria.
Recomenda-se realizar uma descarga completa da bateria uma vez ao mês.
Sou adepto da descarga profunda, apesar de haver um risco inerente nesse processo - da bateria perder a capacidade de captar nova carga, caso o notebook fique guardado por longo tempo (que não é o caso):

  1. utilize ao máximo o portátil pela bateria.
  2. quando sobrar pouquíssimo tempo de uso, feche a tampa e faça-o hibernar.
  3. a luz vai continuar pulsando até o esgotamento absoluto da carga. Certifique-se da falta completa de energia.
  4. conecte na tomada e deixe-o carregando até a luz do cabo passar de laranja pra verde.
  5. após o sinal, continue com ele plugado por aproximadamente mais uma hora.

No intuito de atingir as 6 horas de autonomia prometida, outra medida é configurar o laptop para priorizar a “Maior Vida Útil da Bateria”. Clique no ícone de energia no menu superior e selecione a opção.
Você pode realizar essa configuração acessando as “Preferências do Sistema” -> “Economizador de Energia” e ecolha o perfil de consumo que mais lhe interessa.

Maior Vida Útil da Bateria

Caso queira manter seu computador ligado por ainda mais tempo desabilite o Airport/Bluetooth (se não os estiver utilizando) e dimina a intensidade da tela.

Um ótimo utilitário pra acompanhar o rendimento de sua bateria é o Coconut Battery:
http://www.coconut-flavour.com/coconutbattery/

Calculando frete com a biblioteca cURL em PHP

Outubro 15th, 2007

A biblioteca cURL possibilita emular um browser e invocar qualquer recurso web com alto grau de controle sobre o acesso, parametrizando requisições, obtendo e tratando as respostas.

Suporta vários protocolos como, por exemplo: FTP, LDAP, HTTPS, telnet, uso de proxie, cookie, autenticação, upload em formulário HTTP e outros.

Nem sempre funções como fopen e file_get_contents resolvem. Pode ser necessário especificar o método de envio (GET ou POST), preencher formulários automaticamente, informar login e senha (conteúdo protegido) ou selecionar arquivos para upload.

Muito útil no desenvolvimento de robôs, unidades de teste, na intermediação de transações com operadoras de cartões de crédito, chamadas a outros sites (transformando os resultados), na utilização de serviços disponíveis em outros sistemas web, requisição de páginas que exijam suporte a cookies etc.

Nesse exemplo vamos implementar o cálculo de frete junto aos Correios (típico para sistemas de comércio eletrônico) utilizando um script oferecido pela Locaweb.

O objetivo é submeter dados pra esse recurso e tratar o resultado dentro de nossa aplicação, realizando a intermediação sem que haja o uso explícito do recurso - imperceptível ao usuário.
Essa vantagem proporciona conforto na navegação pois as requisições são feitas a partir do próprio ambiente e o resultado implícito é devidamente formatado e visualizado na propria interface.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://comercio.locaweb.com.br/correios/calcula_sedex.asp");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, cepOrig=$cep_origem&cepDest=$cep&pesoDeclarado=$peso_total&vlrDeclarado=$preco_total&metodo=leitura");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$retorno = curl_exec($ch);
curl_close($ch);

Dica: certifique-se de utilizar CEP sem traço, valores com vírgula (não ponto), peso arredondado e tratar o conteúdo armazendo em $retorno da forma que desejar.

Mais informações em:
http://br.php.net/manual/pt_BR/ref.curl.php
e no site oficial http://curl.haxx.se/

Zend Debugger

Julho 12th, 2007

Algumas vezes os códigos nos obrigam a identificar erros utilizando algum recurso mais preciso e direto.
No caso do PHP, os editores Zend Studio Enterprise e Eclipse (com o plugin PDT, da própria Zend) oferecem duas formas de debug: interna ou remota (no caso do Eclipse, somente remota).

Vamos mostrar como é a instalação e uso da ferramenta através do servidor.
Neste exemplo, a configuração será efetuada no pacote Wamp.

1) Preparando o servidor
Faça o download do Zend Debugger em:
http://downloads.zend.com/pdt/server-debugger/
Descompacte o software e localize o subdiretório que contenha o arquivo ZendDebugger.dll (ou .so) apropriado pra sua versão do PHP.
Copie num diretório a sua escolha e referencie essa biblioteca no php.ini, da seguinte forma:
zend_extension_ts=c:/wamp/ZendDebugger/ZendDebugger.dll
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always
Copie o arquivo dummy.php (que está no pacote) para a raiz do servidor web e reinicialize o serviço.

2) Preparando o ambiente de desenvolvimento
Tools -> Preferences -> alça Debug
Em “Debug mode” escolha “Server”
“Server URL” coloque o endereço do servidor
A porta padrão é a 10000. Certifique-se de que o firewall não esteja bloqueando essa porta.
Execute o phpinfo(); e localize as informações semelhantes a imagem abaixo.

Zend Debugger instalado (phpinfo)

Ao invés de visualizar o resultado da execução na janela “Debug Output”, talvez seja interessante exibir diretamente num browser:
Tools -> Preferences -> alça Desktop
Em “Browser Configuration” desmarque a opção “Use Internal Browser”.
No campo “Browser Path” localize seu navegador favorito.

3) Rastreando os erros
Em códigos complexos, é comum se perder em laços e desconhecer o conteúdo das variáveis em determinados momentos.
Durante as iterações se faz necessário interromper a execução e verificar o que de fato está ocorrendo.
Usa-se então os “breakpoints”.
Como exemplo, observe o código abaixo:

<?php
  for ($i=0;$i<20$i++) {
    echo "Teste<br>";
  }
?>

Para adicionar pontos de parada no seu algoritmo, clique no número que corresponde a linha desejada.
Ela ficará com o cor de fundo rosada. Adicione quantos desejar.
Para identificar todos os breakpoints adicionados, clique no item “Breakpoints” na janela de Debug.

Clique em Debug -> Debug URL…
Em “Open Browser at” indique o caminho do script a ser checado.
“The source files used during this session will be taken from:” marque “The server”.
Confirme a operação e utilize a barra de ferramentas do Debug para avançar um loop ou escapar de uma iteração.
Vá acompanhando os resultados através da alça “Variables” na janela de Debug e também na saída da janela Debug.

Upload de múltiplos arquivos ao estilo GMail

Abril 29th, 2007

Nossos formulários de cadastro/edição geralmente continham campos do tipo “file” para upload de arquivos. Alguns sistemas permitiam a inclusão de vários arquivos, como uma galeria de fotos (por exemplo).
É difícil saber quantos arquivos o usuário vai adicionar. Resultava num formulário poluído com campos que, muitas vezes, nem eram utilizados.
Seguindo a adaptação de nossas bibliotecas para Ajax, sentimos a necessidade de criar um componente que facilitasse o uso e parametrização de uploads múltiplos. Nos “inspiramos” no layout do GMail para facilitar o uso do mecanismo.
Trata-se da versão 1.1 portanto suscetível a bugs e melhoramentos. Implementado sob os padrões da W3C, testado com êxito no Firefox, IE7 e Opera. Consiste numa solução JavaScript + PHP:
ico_zip.gif UploadGmailStyle
Obs.: disponibilizamos a versão 1.1.

Apenas uma recomendação: onde utilizar, mantenha os créditos da ACIMA Interactive :- )

Web 2 em 5 minutos - por Michael Wesch

Abril 20th, 2007

Imprimindo etiquetas: matricial x térmica

Abril 20th, 2007

Desenvolvemos um sistema para controle de eventos. Nos solicitaram impressão de etiquetas individuais para os crachás, a medida que as inscrições são feitas. Nesse caso não há como acumular cadastros e imprimir agrupado, em folhas contendo várias etiquetas.

Geralmente se utiliza impressora térmica. Como não havia disponibilidade, nos restou a alternativa de usar uma matricial. Seria uma maneira de imprimir sob demanda, sem desperdício de etiquetas e com praticidade.

Nosso sistema é implementado em PHP com visualização pelo browser. Sabidamente o controle de impressão é muito sensível, pois força o desenvolvedor a criar técnicas bem peculiares específicas pra cada situação - visando uma impressão correta, inevitavelmente engessando a solução. Precisávamos de precisão, independente de navegador ou ambiente.

Quando PHP executa sob plataforma Windows, existem funções para envio de comandos diretamente para a impressora: http://www.php.net/printer/. Nosso sistema rodava na Web em servidor Linux. Isso nos obrigaria migrar o sistema para Windows, rodando numa máquina local. O PHP sob Windows oferece funções que comunicam na porta LPT1 ou numa impressora compartilhada em rede Microsoft. Para habilitar esse recurso, adicione as seguintes linhas no php.ini:
extension=php_printer.dll
printer.default_printer = “Epson LX-300″

Essa última é opcional: no exemplo coloquei a Epson, pois foi esse modelo que trabalhamos.

Na etapa seguinte, quando submetíamos o documento, não conseguíamos fazê-la parar de passar o papel. Ela realizava a impressão corretamente mas avançava demais a folha, pulando várias etiquetas.

1a tentativa) Acessar as propriedades da impressora, “Preferências de impressão…”, aba “Papel/qualidade”, botão “Avançado”, item “Papel/saída”. O driver não oferecia muitas opções. Certamente a impressora continuaria correndo a página. A versão do driver pra Windows XP disponibilizada pela Epson não contempla um tamanho específico de folha.

2a tentativa) Definir um tamanho personalizado: Iniciar -> Configurações -> Impressoras e aparelhos de fax Menu Arquivo -> Propriedades do servidor -> Marcar “Criar um novo formulário”, especifique as dimensões, defina um nome e pressione “Salvar formulário”.

3a tentativa) Experimentar drivers alternativos como Epson LX-300+ e Epson LX-300II+.
Sem êxito.

4a tentativa) Foi preciso hackear o driver.
Alterando o arquivo C:\WINDOWS\system32\spool\drivers\w32×86\3\EPLX300.GPD. Dessa forma abre-se uma lista bem mais completa de tamanho de página nas configurações.
Foi um avanço porém, mesmo estipulando o tamanho exato e usando os comandos apropriados, a Epson continuava avançando a folha…

5a tentativa) Era preciso alterar as configurações internas da impressora, pois via software ela definitivamente não respeitava. No caso da Lx-300 o procedimento consistia em ligá-la mantendo a tecla FONT pressionada e executar uma combinação de luzes para cada opção.

Esse procedimento é explicado detalhadamente na página 52 do manual. Alteramos a propriedade “Page length” para 3 polegadas (altura mínima oferecida). Também a opção “Auto tear off” em off. Significa que o cabeçote pára exatamente onde terminou a impressão, sem deslocamento para a próxima folha.

Quando o PDF era enviado para a impressora, ele deslocava as 3 polegadas referente a altura estipulada na configuração. O “Auto tear off” funcionava apenas quando enviávamos em texto puro, através das funções de impressão do PHP. Nesse caso a qualidade era precária e não satisfazia mais, além do trantorno em migrar o sistema para uso local em Windows - a saída é direto na paralela do computador onde o servidor web está inslalado ou num compartilhamento da rede. Ex.: \\Servidor\lx300.

Gostaríamos de dar um acabamento melhor a etiqueta (fonte, tamanho, estilos).

Optamos por gerar um PDF “on-the-fly” através da FPDF ou Pear::File_PDF.

São bibliotecas que não necessitam da PDFLib instalada no PHP para funcionarem.

No caso da FPDF basta copiar os arquivos no filesystem, realizar o include, instanciar a classe e utilizar os diversos métodos disponíveis. Já a instalação do pacote File_PDF depende do repositório Pear. Leia esse artigo para mais detalhes.

Outra vantagem em utilizar essa técnica é de podermos continuar usando o sistema via Web. A intenção seria apenas instalar a impressora na estação e obter um PDF Reader. Ele se encarrega de enviar o documento para o spool de impressão local, no lado cliente. Nesse contexto a página avançava as 3 polegadas. Menos do que antes mas ainda deixava a desejar. Precisávamos parar o formulário na posição inicial, ou seja, que ela avance o suficiente para recomeçar na próxima etiqueta.

Em síntese:
* formatar o conteúdo da etiqueta em PDF consistia em aceitar a limitação da impressora matricial (quanto a altura), mas viabilizaria a manutenção do sistema no servidor remoto.

* enviar em modo caracter exigiria a instalação local do servidor web (Apache + PHP e bibliotecas + MySQL) e configuração do sistema. Perde portabilidade pois requer a configuração braçal do espaçamento e posicionamento (através de comandos chr) para aquele modelo de impressora, naquele tamanho específico de etiquetas.

Estéticamente a qualidade é péssima.

A solução ocorreu quando substituimos a matricial pela impressora térmica - modelo DYMO LabelWriter 310.

Pudemos então enviar o PDF da etiqueta (no tamanho adequado), sendo que a própria impressora controla o posicionamento na etiqueta seguinte. Até que enfim uma solução decente. Nossa prentensão nesse artigo foi transmitir a experiência de impressão via PHP, em documentos com tamanhos diferenciados como notas-fiscais, formulários e etiquetas. A influência do navegador impede um controle minucioso dos recursos de impressão. A linguagem ainda precisa amadurecer essa questão. Muitos depoimenos coletados na Internet sugerem o desenvolvimento de um cliente em Delphi ou Java que serve de interface para impressão. Nos recusamos a adotar essa solução pois acreditamos no PHP e nas possibilidades.

Instalando o repositório PEAR no WampServer

Abril 20th, 2007

Habilitando o PEAR nos serviços WAMP

Execute o arquivo C:\wamp\php\go-pear.bat
Obs.: na release 2.x do WampServer esse arquivo encontra-se na pasta:
c:\wamp\bin\php\php5.x.x\go-pear.bat
Responda as perguntas solicitadas pelo sistema. Em geral basta aceitar as sugestões padrão.
Dois cliques em C:\wamp\php\PEAR_ENV.reg para inserir informações ao registro do Windows.
Ajuste a diretiva include_path no php.ini adicionando o caminho C:\wamp\php\PEAR
Ex.: include_path = “.;C:\wamp\php\PEAR”
Reinicialize o Apache.

Pacotes da PEAR
Abra um prompt (Iniciar -> Executar -> Digite “cmd”)
cd c:\wamp\php\
Atualize a lista de pacotes disponíveis
pear remote-list

Para instalar utilize o parâmetro install:
pear install File_PDF

A release atual de alguns pacotes ainda estão na versão Beta ou Alpha, portando é preciso especificar:
pear install -f File_PDF
ou
pear install File_PDF-beta
ou
pear install channel://pear.php.net/File_PDF-0.2.0

Alguns casos o pacote necessita de dependências.
pear install –alldeps HTTP_Download

Mais informações você pode obter em:
http://pear.php.net/manual/en/installation.cli.php