sábado, 22 de dezembro de 2012
Brasil/China - Patentes concedidas
WSO2 - Governance Registry - Parte 1
Olá! Faz tempo que não escrevo nada. Pois bem, vamos lá.
Recentemente estava pesquisando sobre uma ferramenta opensource
para governança de serviços. Por que opensource? Porque as
ferramentas pagas são caríssimas!
Durante a pesquisa me deparei com o
Governance Registry da WSO2, que é opensource. Eu poderia citar
outras ferramentas e fazer um tratado da governança de serviços,
mas é o seguinte, essa é a melhor ferramenta opensource para
governança. Se não acredita, faça a pesquisa e você verá que
estou certo ao afirmar isso.
Instalei a aplicação onde trabalho e ela funcionou sem maiores
problemas, dentro dos padrões de aporrinhação das aplicações
opensource java. Existem as questões de classpath, variáveis de
ambiente e etc... . Mas siga o manual
de instalaçao que você chega lá.
Se você estiver utilizando windows e os seus serviços forem WCF,
que é o meu caso, a ferramenta funciona muito bem.
Apesar do processo de instalação utilizar como exemplo o MySQL,
você pode usar o SQLServer como persistência. Problema, o drive,
com.microsoft.sqlserver.jdbc.SQLServerDriver, que a gente baixa do
site da Microsoft não funciona (dá na trave). Ao invés desse drive
use net.sourceforge.jtds.jdbc.Driver.
Depois de instalada e rodando sem problemas (tem alguns bugs, mas
são suportáveis) você vai notar que a ferramenta tem mais coisas
do que precisamos. Porque digo isso? Em resumo o que queremos da
ferramenta é que através de um endereço WSDL ela consiga extrair
todas as informações do serviço. Depois disso a gente complementa
com as informações de negócio. A ferramenta faz isso, mas há os
desdobramentos de ciclo de vida, namespace, repositório, esquemas,
API, URI, Services e versões. O preenchimento e a administração
dessas coisas toma um tempo razoável. O que não significa que a
ferramenta está errada.
Depois de algumas semanas trabalhando com o WSO2 - Governance
Registry, cheguei a conclusão de que, se você quer implementar esta
ferramenta na sua empresa, será necessário um recurso só para
administrar os serviços cadastrados nela.
Pois é. Governança de serviços não é trivial. E além disso é
dificílimo explicar para a alta gestão (pelo menos aqui no Brasil)
de que é algo importante para a organização. O produto da
governança de serviços é o reaproveitamento dos mesmos. O problema
é que esse reaproveitamento não é fácil de medir, e pode demorar
até dois anos.
Minha dica, se sua organização não tem dinheiro para comprar
uma hiper-mega-máster ferramenta de governança, baixe essa free,
mas não fique dizendo por aí que você descobriu a pólvora. Baixe,
use e fim de papo. Os benefícios virão no longo prazo, e ninguém
vai ficar cobrando payback de nada.
Em breve escreverei mais sobre o Governance Registry.
Dúvidas é só entrar em contato.
Obrigado.
quarta-feira, 7 de novembro de 2012
sábado, 8 de setembro de 2012
quarta-feira, 15 de agosto de 2012
terça-feira, 14 de agosto de 2012
Cena antológica - Blade Runner - TEARS IN RAIN [Hi-Res Video]
Quite an experience to live in fear, isn't it? That's what it is to be a slave...
domingo, 12 de agosto de 2012
segunda-feira, 6 de agosto de 2012
quinta-feira, 2 de agosto de 2012
GoogleMaps - Um problema extremely annoying!
Veja bem,
Estava eu trablahando com uma googlemaps API e o mapa não aparecia de jeito nenhum.
400 linhas de script e nada.
Testei fora do framework Yii o qual uso, e funcionava, dentro do Yii não funcionava.
3 horas depois, descobri que é necessário colocar esta linha.
"google.maps.event.addDomListener(window, 'load', initialize);";
Mas que pertubação!
Et c'est tout!
A bientôt.
Estava eu trablahando com uma googlemaps API e o mapa não aparecia de jeito nenhum.
400 linhas de script e nada.
Testei fora do framework Yii o qual uso, e funcionava, dentro do Yii não funcionava.
3 horas depois, descobri que é necessário colocar esta linha.
"google.maps.event.addDomListener(window, 'load', initialize);";
Mas que pertubação!
Et c'est tout!
A bientôt.
quarta-feira, 1 de agosto de 2012
CSharp - Pra que serve esse tipo de Enum?
Hoje respondi uma pergunta e achei interessante colocar aqui.
Para que serve enums binários?
Exemplo:
[Flags]
public enum EnumGrimoire
{
MorganaLefey = 0,
Merlin = 1,
Teserac = 1 << 1,
Nostradamus = 1 << 2,
Merovingio = 1 << 3,
AzraMahai = 1 << 4,
Taliesin = 1 << 5
}
Veja bem. O que tem acima pode ser traduzido como:
MorganaLefey = 0,
Merlin = 1,
Teserac = 2,
Nostradamus = 4,
Merovingio = 8,
AzraMahai = 32,
Taliesin = 64
É bem esquisito né? Pois é, mas é útil para fazer o seguinte tipo de construção abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationParaTestarEnumsMisticos
{
class Program
{
static void Main(string[] args)
{
greatWizards(EnumGrimoire.MorganaLefey | EnumGrimoire.Merlin | EnumGrimoire.Nostradamus);
}
static void greatWizards(PropostaWorkflowAcoes penmWizardry)
{
if (penmWizardry == (EnumGrimoire.MorganaLefey | EnumGrimoire.Merlin))
{
Console.Write("Você escolheu dois arqui inimigos. Cuidado!");
}
Console.ReadLine();
}
}
[Flags]
public enum EnumGrimoire
{
MorganaLefey = 0,
Merlin = 1,
Teserac = 1 << 1,
Nostradamus = 1 << 2,
Merovingio = 1 << 3,
AzraMahai = 1 << 4,
Taliesin = 1 << 5
}
}
Para que serve enums binários?
Exemplo:
[Flags]
public enum EnumGrimoire
{
MorganaLefey = 0,
Merlin = 1,
Teserac = 1 << 1,
Nostradamus = 1 << 2,
Merovingio = 1 << 3,
AzraMahai = 1 << 4,
Taliesin = 1 << 5
}
Veja bem. O que tem acima pode ser traduzido como:
MorganaLefey = 0,
Merlin = 1,
Teserac = 2,
Nostradamus = 4,
Merovingio = 8,
AzraMahai = 32,
Taliesin = 64
É bem esquisito né? Pois é, mas é útil para fazer o seguinte tipo de construção abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationParaTestarEnumsMisticos
{
class Program
{
static void Main(string[] args)
{
greatWizards(EnumGrimoire.MorganaLefey | EnumGrimoire.Merlin | EnumGrimoire.Nostradamus);
}
static void greatWizards(PropostaWorkflowAcoes penmWizardry)
{
if (penmWizardry == (EnumGrimoire.MorganaLefey | EnumGrimoire.Merlin))
{
Console.Write("Você escolheu dois arqui inimigos. Cuidado!");
}
Console.ReadLine();
}
}
[Flags]
public enum EnumGrimoire
{
MorganaLefey = 0,
Merlin = 1,
Teserac = 1 << 1,
Nostradamus = 1 << 2,
Merovingio = 1 << 3,
AzraMahai = 1 << 4,
Taliesin = 1 << 5
}
}
terça-feira, 31 de julho de 2012
Forgive me if I speak bluntly - The Day Earth Stood Still
The Day Earth Stood Still
Klaatu: I am leaving soon, and you will forgive me if I speak bluntly. The universe grows smaller every day, and the threat of aggression by any group, anywhere, can no longer be tolerated. There must be security for all — or no one is secure... This does not mean giving up any freedom except the freedom to act irresponsibly.
Klaatu: I am leaving soon, and you will forgive me if I speak bluntly. The universe grows smaller every day, and the threat of aggression by any group, anywhere, can no longer be tolerated. There must be security for all — or no one is secure... This does not mean giving up any freedom except the freedom to act irresponsibly.
Your ancestors knew this when they made laws to govern themselves — and hired policemen to enforce them. We of the other planets have long accepted this principle. We have an organization for the mutual protection of all planets — and for the complete elimination of aggression. A sort of United Nations on the Planetary level... The test of any such higher authority, of course, is the police force that supports it. For our policemen, we created a race of robots — Their function is to patrol the planets — in space ships like this one — and preserve the peace. In matters of aggression we have given them absolute power over us. This power can not be revoked. At the first sign of violence they act automatically against the aggressor. And the penalty for provoking their action is too terrible to risk.
The result is that we live in peace, without arms or armies, secure in the knowledge that we are free from aggression and war — free to pursue more profitable enterprises. Now, we do not pretend to have achieved perfection, but we do have a system, and it works. I came here to give you these facts. It is no concern of ours how you run your own planet, but if you threaten to extend your violence, this Earth of yours will be reduced to a burned-out cinder. Your choice is simple: join us and live in peace, or pursue your present course and face obliteration. We shall be waiting for your answer. The decision rests with you.
domingo, 15 de julho de 2012
INDCEP - Melhorias
Veja bem,
fiz melhorias interessantes no site http://www.indcep.com.br
Agora é possível avaliar qualquer endereço do planeta.
Antes só era possível votar em endereços do Brasil.
Creio que agora ficou bem melhor.
That's all folks!
fiz melhorias interessantes no site http://www.indcep.com.br
Agora é possível avaliar qualquer endereço do planeta.
Antes só era possível votar em endereços do Brasil.
Creio que agora ficou bem melhor.
That's all folks!
sábado, 14 de julho de 2012
PHP - Exemplo do uso de classe e array
Veja bem,
Este é um exemplo muito simples de como trabalhar com classes no PHP.
Olho no lance.
<?php
$arrEstadoString = explode("|", "AM|SP|RJ|");
$arrEstadoObetos = array();
//Criação do array de objetos.............................................
for ($i=0;$i<count($ arrEstadoString ) ;$i++)
{
$EstadoObjeto = new Estado();
$EstadoObjeto->sigla = $arrEstadoSring[$i];
$arrEstadoObjetos[$i] = $EstadoObjeto;
}
// Fim.
class Estado
{
public $sigla;
}
?>
Et voilà!
Este é um exemplo muito simples de como trabalhar com classes no PHP.
Olho no lance.
<?php
$arrEstadoString = explode("|", "AM|SP|RJ|");
$arrEstadoObetos = array();
//Criação do array de objetos.............................................
for ($i=0;$i<count($ arrEstadoString ) ;$i++)
{
$EstadoObjeto = new Estado();
$EstadoObjeto->sigla = $arrEstadoSring[$i];
$arrEstadoObjetos[$i] = $EstadoObjeto;
}
//Imprimindo o conteúdo do array.....................................
for ($i=0;$i<count($ arrEstadoObjetos ) ;$i++)
{
echo $arrEstadoObjetos[$i]->sigla;
}
// Fim.
class Estado
{
public $sigla;
}
?>
Et voilà!
quarta-feira, 4 de julho de 2012
Editor PHP
Veja bem,
Você está procurando um editor PHP?
Minha sugestão: phpDesigner8.
Preço: U$39 (Personal Use)
http://www.mpsoftware.dk/buy.php
That's all folks.
Você está procurando um editor PHP?
Minha sugestão: phpDesigner8.
Preço: U$39 (Personal Use)
http://www.mpsoftware.dk/buy.php
That's all folks.
terça-feira, 3 de julho de 2012
Integration Services - Sincronização entre duas tabelas de diferentes bancos de dados.
Veja bem,
Se você está tarado para usar o replicatedo SQLServer para sincronizar duas tabelas de bancos diferentes, controle-se!
Ao invés disso, utilize o integration service, é bem mais elegante. Usar replicate para sincronizar tabelas de bases diferentes é o mesmo que assassinar uma mosca usando um asteróide.
Ao invés disso, veja este exemplo
http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration-services-ssis-part-i-of-ii.aspx
That's folks!
Se você está tarado para usar o replicatedo SQLServer para sincronizar duas tabelas de bancos diferentes, controle-se!
Ao invés disso, utilize o integration service, é bem mais elegante. Usar replicate para sincronizar tabelas de bases diferentes é o mesmo que assassinar uma mosca usando um asteróide.
Ao invés disso, veja este exemplo
There are situations where a SQL Server DBA needs to keep two different tables in sync. Usually, the DBA needs to keep a copy of a table in a in a data warehouse repository that is used as a solution for archiving and/or reporting.
SQL Server provides a robust method for keeping data synchronized across databases using Replication but there are situations when all we need is just to keep an online copy of a single table for archiving or reporting purposes and we would prefer to do not tinker into SQL Server replication.
This post is divided into two parts: Part I explains how to update a destination table with the information that is added into a source table while Part II explains how to replicate any change that happens in existing records in the source table into destination. Please, take into account this is just another way of doing this, there are many other possibilities but the one listed here is probably one of the fastest to implement and modify on-demand.
This procedure is based on the following scenario: A “table A” on “database A” is periodically replicated using SSIS into “table B” on “database B”. “Table A” is updated with new records and we need to copy those records into “table B” too. Our final implementation will look like this in SQL Server Business Intelligence Development Studio:
http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration-services-ssis-part-i-of-ii.aspx
That's folks!
segunda-feira, 2 de julho de 2012
JQuery - Como capturar o ENTER
Veja bem,
Este código funciona perfeitamente:
$('input').keydown( function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
if(key == 13) {
e.preventDefault();
var inputs = $(this).closest('form').find(':input:visible');
inputs.eq( inputs.index(this)+ 1 ).focus();
}
});
Este código funciona perfeitamente:
$('input').keydown( function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
if(key == 13) {
e.preventDefault();
var inputs = $(this).closest('form').find(':input:visible');
inputs.eq( inputs.index(this)+ 1 ).focus();
}
});
* Informação retirada do site stackoverflow
http://stackoverflow.com/a/6128623
And that's all folks.
sábado, 30 de junho de 2012
http://www.indcep.com.br - Projeto pessoal
"Hi, inhabitants of narnia, how are you?"
Veja bem, os posts deste website referem-se aos problemas que encontrei durante a construção deste website http://www.indcep.com.br .
Construí este site para aprender a trabalhar com coordenadas geodésicas o que, aliás, não é trivial.
Tecnologias envolvidas:
PHP
MySQL
Apache
JQuery
JSON
Yii
Toda semana implemento uma coisa nova.
Caso tenha alguma questão ou sugestão, entre em contato pelo formulário contato presente no website.
That's all folks.
Veja bem, os posts deste website referem-se aos problemas que encontrei durante a construção deste website http://www.indcep.com.br .
Construí este site para aprender a trabalhar com coordenadas geodésicas o que, aliás, não é trivial.
Tecnologias envolvidas:
PHP
MySQL
Apache
JQuery
JSON
Yii
Toda semana implemento uma coisa nova.
Caso tenha alguma questão ou sugestão, entre em contato pelo formulário contato presente no website.
That's all folks.
terça-feira, 26 de junho de 2012
domingo, 24 de junho de 2012
Yii - Acessando parâmetros
Veja bem,
crie parâmetros e acesse.
Forma de acesso
Yii::app()->params->[seu parâmetro]
Onde os parâmetros são definidos
config\main.php
'params' => array( // this is used in contact page
'seuparametro' => 'valor do seu parâmetro',
);
And that's it.
crie parâmetros e acesse.
Forma de acesso
Yii::app()->params->[seu parâmetro]
Onde os parâmetros são definidos
config\main.php
'params' => array( // this is used in contact page
'seuparametro' => 'valor do seu parâmetro',
);
And that's it.
Yii - Redirecionamento de páginas.
Veja bem,
este é um exemplo de redirecionamento de páginas:
$url = Yii::app()->createUrl('targetVote/create');
$this->redirect($url);
este é um exemplo de redirecionamento de páginas:
$url = Yii::app()->createUrl('targetVote/create');
$this->redirect($url);
* Utilizei esta construção para redirecionar a primeira tela do site. Como e um site de votação, a primeira tela já vai direto para action create da entidade targetVote.
domingo, 17 de junho de 2012
sábado, 16 de junho de 2012
CDbConnection failed to open the DB connection: SQLSTATE[42000] [1044] Access denied
CDbConnection failed to open the DB connection: SQLSTATE[42000] [1044] Access denied for user 'indcepco_user'@'localhost' to database 'indcepco_indcep'
Veja bem,
O SQLSTATE está relacionado com os direitos do seu usuário no banco de dados.
Veja bem,
O SQLSTATE está relacionado com os direitos do seu usuário no banco de dados.
Cannot modify header information - headers already sent by (output started at /home/indcepco/public_html/home/index.php:2)
Veja bem, esse erro é uma M!!!!!!!!!
Cannot modify header information - headers already sent by (output started at /home/indcepco/public_html/home/index.php:2)
Como resolvi.
Descobri um arquivo php, que tinha um espaço em branco no início.
Ou seja,
antes da cláusula <?php, tinha um enter.
E o tempo que demorei para descobir isso?
Cannot modify header information - headers already sent by (output started at /home/indcepco/public_html/home/index.php:2)
Como resolvi.
Descobri um arquivo php, que tinha um espaço em branco no início.
Ou seja,
antes da cláusula <?php, tinha um enter.
E o tempo que demorei para descobir isso?
Google Maps - This site needs a different api key
Veja bem,
A api funciona corretamente quando você está utilizando o localhost, mas não funciona quando você coloca no servidor. E você recebe esta mensagem
This site needs a different api key
É simples, troque
<script src="http://maps.google.com/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>
por
<script src="http://maps.google.com/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>
O problema é o &
Et voilà.
A api funciona corretamente quando você está utilizando o localhost, mas não funciona quando você coloca no servidor. E você recebe esta mensagem
This site needs a different api key
É simples, troque
<script src="http://maps.google.com/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>
por
<script src="http://maps.google.com/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
type="text/javascript"></script>
O problema é o &
Et voilà.
domingo, 10 de junho de 2012
Athene's Theory of Everything
quinta-feira, 7 de junho de 2012
Yii - Captcha não funciona
Veja bem,
o captcha do yii está com "pobrema na popriedade".
Assim, não perca seu tempo (como eu) querendo fazer o captcha funcionar. Ao invés disso, useo recaptcha do google.
Para maiores informações acesse
http://www.yiiframework.com/forum/index.php/topic/6508-cwebapplication-xxxxx-not-defined/
That's it.
o captcha do yii está com "pobrema na popriedade".
Assim, não perca seu tempo (como eu) querendo fazer o captcha funcionar. Ao invés disso, useo recaptcha do google.
Para maiores informações acesse
http://www.yiiframework.com/forum/index.php/topic/6508-cwebapplication-xxxxx-not-defined/
That's it.
segunda-feira, 4 de junho de 2012
GoogleMaps - Encontrar coordenadas através do CEP
Veja bem,
você pode fazer pesquisas de coordenadas geodésicas através do CEP mas o resultado é às vezes um tanto esquisito
http://maps.google.com.br/maps/geo?q=cep:01311000&output=xml&key=sua chave aqui.
O resultado
http://maps.google.com.br/maps/geo?q=cep:Avenida Paulista São Paulo SP&output=xml&key=sua chave aqui.
você pode fazer pesquisas de coordenadas geodésicas através do CEP mas o resultado é às vezes um tanto esquisito
http://maps.google.com.br/maps/geo?q=cep:01311000&output=xml&key=sua chave aqui.
O resultado
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>cep:01311000</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>
Paraiso Brazil, Sao Paulo - São Paulo, 01311-000, Brazil
</address>
<AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" Accuracy="5">
<Country>
<CountryNameCode>BR</CountryNameCode>
<CountryName>Brasil</CountryName>
<PostalCode>
<PostalCodeNumber>01311-000</PostalCodeNumber>
</PostalCode>
</Country>
</AddressDetails>
<ExtendedData>
<LatLonBox north="-23.5666752" south="-23.5713333" east="-46.6442383" west="-46.6500176"/>
</ExtendedData>
<Point>
<coordinates>-46.6500176,-23.5666752,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
O problema é que esse CEP é da Av. Paulista. e a coordenada vem do bairro do Paraíso.
É bom para ver se o CEP existe, mas só para isso mesmo. O resultado é muito impreciso para usar como uma fonte confiável.
O melhor é utilizar o endereço todo. Assim a coordenada vem precisa.
http://maps.google.com.br/maps/geo?q=cep:Avenida Paulista São Paulo SP&output=xml&key=sua chave aqui.
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>Avenida Paulista São paulo SP</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>Av. Paulista - Sao Paulo - São Paulo, Brazil</address>
<AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" Accuracy="6">
<Country>
<CountryNameCode>BR</CountryNameCode>
<CountryName>Brasil</CountryName>
<AdministrativeArea>
<AdministrativeAreaName>São Paulo</AdministrativeAreaName>
<Locality>
<LocalityName>São Paulo</LocalityName>
<Thoroughfare>
<ThoroughfareName>Av. Paulista</ThoroughfareName>
</Thoroughfare>
</Locality>
</AdministrativeArea>
</Country>
</AddressDetails>
<ExtendedData>
<LatLonBox north="-23.5555632" south="-23.5713333" east="-46.6441383" west="-46.6634284"/>
</ExtendedData>
<Point>
<coordinates>-46.6538854,-23.5635963,0</coordinates>
</Point>
</Placemark>
<Placemark id="p2">
<address>
Av. Paulista - Consolação, Sao Paulo - São Paulo, Brazil
</address>
<AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" Accuracy="6">
<Country>
<CountryNameCode>BR</CountryNameCode>
<CountryName>Brasil</CountryName>
<AdministrativeArea>
<AdministrativeAreaName>São Paulo</AdministrativeAreaName>
<Locality>
<LocalityName>São Paulo</LocalityName>
<DependentLocality>
<DependentLocalityName>Consolação</DependentLocalityName>
<Thoroughfare>
<ThoroughfareName>Av. Paulista</ThoroughfareName>
</Thoroughfare>
</DependentLocality>
</Locality>
</AdministrativeArea>
</Country>
</AddressDetails>
<ExtendedData>
<LatLonBox north="-23.5536427" south="-23.5563407" east="-46.6620804" west="-46.6647784"/>
</ExtendedData>
<Point>
<coordinates>-46.6634684,-23.5549332,0</coordinates>
</Point>
</Placemark>
<Placemark id="p3">
<address>
Parada Av. Paulista - Jardim Paulista, Sao Paulo - São Paulo, Brazil
</address>
<AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" Accuracy="9">
<AddressLine>Parada Av. Paulista</AddressLine>
</AddressDetails>
<ExtendedData>
<LatLonBox north="-23.5670090" south="-23.5697070" east="-46.6482500" west="-46.6509480"/>
</ExtendedData>
<Point>
<coordinates>-46.6495990,-23.5683580,0</coordinates>
</Point>
</Placemark>
<Placemark id="p4">
<address>
Av. Paulista - Paraiso Brazil, Sao Paulo - São Paulo, Brazil
</address>
<AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" Accuracy="9">
<AddressLine>Av. Paulista</AddressLine>
</AddressDetails>
<ExtendedData>
<LatLonBox north="-23.5600977" south="-23.5627957" east="-46.6552843" west="-46.6579823"/>
</ExtendedData>
<Point>
<coordinates>-46.6566333,-23.5614467,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
Com o endereço o resultado e bem melhor.
That's it.
JQUERY - Conteúdo do label não aparece
Veja bem,
Os labels da sua página exibiração vazio se você tentar acessar seus conteúdos através do método val
alert($("yourlabel").val()) ... resultado = "vácuo"
Para acessar a propriedade use o html()
alert($("yourlabel").html())
And that's it.
Os labels da sua página exibiração vazio se você tentar acessar seus conteúdos através do método val
alert($("yourlabel").val()) ... resultado = "vácuo"
Para acessar a propriedade use o html()
alert($("yourlabel").html())
And that's it.
domingo, 3 de junho de 2012
Highcharts - Ao invés do mês atual o gráfico mostra o próximo mês
Veja bem,
Esse é um daqueles erros que vai derreter seu cérebro.
Estava eu tranquilamente usando o highcharts (http://www.highcharts.com), quando notei que o mês não etava aparecendo corretamente.
Ou seja, eu colocava a data no eixo X, 20/06/2012, o ponto marcava 20/07/2012.
Daí pensei, é o relógio do máquina, é uma configuração do PHP, é uma configuração do APACHE?
Depois de 4horas descobri algo que talvez você não saiba:
series: [{
name: 'Winter 2007-2008',
// Define the data points. All series have a dummy year
// of 1970/71 in order to be compared on the same x axis. Note
// that in JavaScript, months start at 0 for January, 1 for February etc.
data: [
[Date.UTC(1970, 9, 27), 0 ],
[Date.UTC(1970, 10, 10), 0.6 ],
[Date.UTC(1970, 10, 18), 0.7 ],
[Date.UTC(1970, 11, 2), 0.8 ],
É ou não é de deixar qualquer um doido?
Como é que eu vou adivinhar que alguém teve a brilhante ideia de definir 0 para início da sequencia dos meses e não 1?
PS: E nisso vão horas... E tome!
Esse é um daqueles erros que vai derreter seu cérebro.
Estava eu tranquilamente usando o highcharts (http://www.highcharts.com), quando notei que o mês não etava aparecendo corretamente.
Ou seja, eu colocava a data no eixo X, 20/06/2012, o ponto marcava 20/07/2012.
Daí pensei, é o relógio do máquina, é uma configuração do PHP, é uma configuração do APACHE?
Depois de 4horas descobri algo que talvez você não saiba:
series: [{
name: 'Winter 2007-2008',
// Define the data points. All series have a dummy year
// of 1970/71 in order to be compared on the same x axis. Note
// that in JavaScript, months start at 0 for January, 1 for February etc.
data: [
[Date.UTC(1970, 9, 27), 0 ],
[Date.UTC(1970, 10, 10), 0.6 ],
[Date.UTC(1970, 10, 18), 0.7 ],
[Date.UTC(1970, 11, 2), 0.8 ],
É ou não é de deixar qualquer um doido?
Como é que eu vou adivinhar que alguém teve a brilhante ideia de definir 0 para início da sequencia dos meses e não 1?
PS: E nisso vão horas... E tome!
Marcadores:
Apache,
Erro,
Highcharts,
Javascript,
PHP
sábado, 2 de junho de 2012
Yii - Bug que vai derreter seu cérebro - Trying to get property of non-object
Veja bem,
Se você define no MySql um campo como decimal (9,7) o gii do yii gera a seguinte regra
array('latitude, longitude', 'length', 'max'=>9).
Quando você executa o método save do model você receberá este erro
2012/06/03 01:59:58 [error] [php] Trying to get property of non-object (C:\xampp\htdocs\indcep\protected\models\TargetVote.php:182)
Stack trace:
#0 C:\xampp\htdocs\indcep\protected\controllers\TargetVoteController.php(163): TargetVote->save()
#1 C:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(50): TargetVoteController->actionCreate()
#2 C:\xampp\htdocs\yii\framework\web\CController.php(309): CInlineAction->runWithParams()
#3 C:\xampp\htdocs\yii\framework\web\filters\CFilterChain.php(134): TargetVoteController->runAction()
#4 C:\xampp\htdocs\yii\framework\web\filters\CFilter.php(41): CFilterChain->run()
#5 C:\xampp\htdocs\yii\framework\web\CController.php(1146): CAccessControlFilter->filter()
#6 C:\xampp\htdocs\yii\framework\web\filters\CInlineFilter.php(59): TargetVoteController->filterAccessControl()
#7 C:\xampp\htdocs\yii\framework\web\filters\CFilterChain.php(131): CInlineFilter->filter()
#8 C:\xampp\htdocs\yii\framework\web\CController.php(292): CFilterChain->run()
#9 C:\xampp\htdocs\yii\framework\web\CController.php(266): TargetVoteController->runActionWithFilters()
#10 C:\xampp\htdocs\yii\framework\web\CWebApplication.php(276): TargetVoteController->run()
#11 C:\xampp\htdocs\yii\framework\web\CWebApplication.php(135): CWebApplication->runController()
#12 C:\xampp\htdocs\yii\framework\base\CApplication.php(162): CWebApplication->processRequest()
#13 C:\xampp\htdocs\indcep\index.php(15): CWebApplication->run()
REQUEST_URI=/indcep/index.php?r=targetVote/create
in C:\xampp\htdocs\indcep\protected\models\TargetVote.php (182)
in C:\xampp\htdocs\indcep\protected\controllers\TargetVoteController.php (163)
in C:\xampp\htdocs\indcep\index.php (15)
Se você define no MySql um campo como decimal (9,7) o gii do yii gera a seguinte regra
array('latitude, longitude', 'length', 'max'=>9).
Quando você executa o método save do model você receberá este erro
2012/06/03 01:59:58 [error] [php] Trying to get property of non-object (C:\xampp\htdocs\indcep\protected\models\TargetVote.php:182)
Stack trace:
#0 C:\xampp\htdocs\indcep\protected\controllers\TargetVoteController.php(163): TargetVote->save()
#1 C:\xampp\htdocs\yii\framework\web\actions\CInlineAction.php(50): TargetVoteController->actionCreate()
#2 C:\xampp\htdocs\yii\framework\web\CController.php(309): CInlineAction->runWithParams()
#3 C:\xampp\htdocs\yii\framework\web\filters\CFilterChain.php(134): TargetVoteController->runAction()
#4 C:\xampp\htdocs\yii\framework\web\filters\CFilter.php(41): CFilterChain->run()
#5 C:\xampp\htdocs\yii\framework\web\CController.php(1146): CAccessControlFilter->filter()
#6 C:\xampp\htdocs\yii\framework\web\filters\CInlineFilter.php(59): TargetVoteController->filterAccessControl()
#7 C:\xampp\htdocs\yii\framework\web\filters\CFilterChain.php(131): CInlineFilter->filter()
#8 C:\xampp\htdocs\yii\framework\web\CController.php(292): CFilterChain->run()
#9 C:\xampp\htdocs\yii\framework\web\CController.php(266): TargetVoteController->runActionWithFilters()
#10 C:\xampp\htdocs\yii\framework\web\CWebApplication.php(276): TargetVoteController->run()
#11 C:\xampp\htdocs\yii\framework\web\CWebApplication.php(135): CWebApplication->runController()
#12 C:\xampp\htdocs\yii\framework\base\CApplication.php(162): CWebApplication->processRequest()
#13 C:\xampp\htdocs\indcep\index.php(15): CWebApplication->run()
REQUEST_URI=/indcep/index.php?r=targetVote/create
in C:\xampp\htdocs\indcep\protected\models\TargetVote.php (182)
in C:\xampp\htdocs\indcep\protected\controllers\TargetVoteController.php (163)
in C:\xampp\htdocs\indcep\index.php (15)
decimal (9,7) significa 9 casas decimais no total com 7 casas decimais possíveis a direita.
Ou seja
'max'=>9 faz sentido.
Porém o yii não leva em conta o ponto decimal e o sinal para dizer se é positivo ou negativo.
Ou seja, o correto é
'max'=>11
Ain't that a bitch?
sexta-feira, 1 de junho de 2012
GoogleMaps - Excelente exemplo
Veja bem,
o javascript mágico jquery.gmap.js você encontra neste site http://gmap.nurtext.de/
No site tem um lugar para fazer doação. Sugestão, faça a doação. Sei que muitos estão acostumados a baixar códigos e não doar nada. Aliás, estatísticas dizem que os brasileiros são campeões de não doação de sites de tecnologia.
As pessoas que fizeram esse javascript fizeram um trabalho excelente. Eles realmente merecem doações. OK?
Dito isto, veja o exemplo.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;
charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&key=[sua chave aqui]"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.gmap.js"></script>
<script>
$(document).ready(function () {
$("#map1").gMap({ markers: [{ latitude: 47.660937,
longitude: 9.569803 }] });
});
</script>
</head>
<body>
<p>Oi</p>
<div id="map1" style="height: 400px;"></div>
</body>
</html>
PS: Sim, eu doei dinheiro para o site.
GoogleMaps - Falha nossa
Veja bem,
eu não conseguia fazer o googlemaps funcionar de jeito nenhum, daí descobri que o problema é que não havia habilitado o Google Maps API v2 para a minha chave.
Isso me deu uma canseira não trivial.
quinta-feira, 31 de maio de 2012
GoogleMaps - Este código não funciona (me enganei, funciona sim)
Veja bem,
este código funciona sim. Eu é que estava comendo esferas....
Sorry folks.
Veja bem,
estava pesquisando e encontrei este código
http://minimizr.com/blog/2006/10/minimal-how-to-use-google-maps-api-with-php/
Testei mas não vem nada. Dá o vácuo total. Este é um código I.V.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;
charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?
file=api&v=2&key=ABCDEFGH..."
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(
document.getElementById("map"));
map.setCenter(
new GLatLng(37.4419, -122.1419), 13);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map"
style="width: 500px; height: 300px"></div>
</body>
</html>
este código funciona sim. Eu é que estava comendo esferas....
Sorry folks.
Veja bem,
estava pesquisando e encontrei este código
http://minimizr.com/blog/2006/10/minimal-how-to-use-google-maps-api-with-php/
Testei mas não vem nada. Dá o vácuo total. Este é um código I.V.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;
charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?
file=api&v=2&key=ABCDEFGH..."
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(
document.getElementById("map"));
map.setCenter(
new GLatLng(37.4419, -122.1419), 13);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map"
style="width: 500px; height: 300px"></div>
</body>
</html>
Famous quote of Kill Bill
Veja bem,
se você traalha no mundo corporativo como eu, já deve ter se deparada com uma situação, principalmente reuniões, onde você quis fazer o que O-Ren Ishii fez, em Kill Bill 1, durante a reunião com os chefes da Yakuza.
"As your leader, I encourage you from time to time, and always in a respectful manner, to question my logic. If you're unconvinced that a particular plan of action I've decided is the wisest, tell me so, but allow me to convince you and I promise you right here and now, no subject will ever be taboo. Except, of course, the subject that was just under discussion. The price you pay for bringing up either my Chinese or American heritage as a negative is... I collect your fucking head. Just like this fucker here. Now, if any of you sons of bitches got anything else to say, NOW'S THE FUCKING TIME!"
-O-Ren Ishii
quarta-feira, 30 de maio de 2012
Google Maps - Exemplo de múltiplos markers
Veja bem, a demo é esta:
https://google-developers.appspot.com/maps/documentation/javascript/v2/examples/marker-simple
Quando você exibe o código fonte aparece o código abaixo:
https://google-developers.appspot.com/maps/documentation/javascript/v2/examples/marker-simple
Quando você exibe o código fonte aparece o código abaixo:
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8" /> | |
<title>Google Maps JavaScript API Example: Simple Markers</title> | |
<script src="//maps.google.com/maps?file=api&v=2&key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI" | |
type="text/javascript"></script> | |
<script type="text/javascript"> | |
function initialize() { | |
if (GBrowserIsCompatible()) { | |
var map = new GMap2(document.getElementById("map_canvas")); | |
map.setCenter(new GLatLng(37.4419, -122.1419), 13); | |
// Add 10 markers to the map at random locations | |
var bounds = map.getBounds(); | |
var southWest = bounds.getSouthWest(); | |
var northEast = bounds.getNorthEast(); | |
var lngSpan = northEast.lng() - southWest.lng(); | |
var latSpan = northEast.lat() - southWest.lat(); | |
for (var i = 0; i < 10; i++) { | |
var latlng = new GLatLng(southWest.lat() + latSpan * Math.random(), | |
southWest.lng() + lngSpan * Math.random()); | |
map.addOverlay(new GMarker(latlng)); | |
} | |
} | |
} | |
</script> | |
</head> | |
<body onload="initialize()" onunload="GUnload()"> | |
<div id="map_canvas" style="width: 500px; height: 300px"></div> | |
</body> | |
</html> Testarei hoje às 21:00 horas. Parece promissor. PS: Trabalhar com mapas é cansativo, mas o resultado compensa. |
Happy Birthday to me
Life is amazing!
Happy birthday to me!
terça-feira, 29 de maio de 2012
Utilização do CURL do PHP
Veja bem,
Este é um exemplo de utilização do CURL.
$ch = curl_init();
$url = "http://" . $_SERVER['SERVER_NAME'] . "/cliente/utilitario/lerrg.php?rg=" . $rg;
$timeout = 20;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false); // remove body
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
Coloquei em vermelho dois parâmetros "traiçoeiros". Apesar de estar escrito Header e Body, eles não se referem ao Header ou Body da página que você está chamando.
Utilize esta configuração para acessar o conteúdo da página sem problemas.
That's it!
Este é um exemplo de utilização do CURL.
$ch = curl_init();
$url = "http://" . $_SERVER['SERVER_NAME'] . "/cliente/utilitario/lerrg.php?rg=" . $rg;
$timeout = 20;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false); // remove body
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
Coloquei em vermelho dois parâmetros "traiçoeiros". Apesar de estar escrito Header e Body, eles não se referem ao Header ou Body da página que você está chamando.
Utilize esta configuração para acessar o conteúdo da página sem problemas.
That's it!
Criar um índice no MySQL
Veja bem,
Exemplo de criação de índice:
CREATE INDEX indx_cliente ON Cliente (descricao);
indx_cliene = nome do índice.
Cliente = nome da tabela.
descricao = nome da coluna.
That's it.
Exemplo de criação de índice:
CREATE INDEX indx_cliente ON Cliente (descricao);
indx_cliene = nome do índice.
Cliente = nome da tabela.
descricao = nome da coluna.
That's it.
Alien Planet - Documentário
segunda-feira, 28 de maio de 2012
API Google
Veja bem,
Você também está querendo usar as API's do Google? Em especial o GoogleMaps com Geocoding? Faça o seguinte
Acesse
https://code.google.com/apis/console
Nesse endereço você consegue a Key, sem a qual você não consegue fazer nada.
Referência:
Você também está querendo usar as API's do Google? Em especial o GoogleMaps com Geocoding? Faça o seguinte
Acesse
https://code.google.com/apis/console
Nesse endereço você consegue a Key, sem a qual você não consegue fazer nada.
Referência:
Obtaining an API Key
All Maps API applications* should load the Maps API using an API key. Using an API key enables you to monitor your application's Maps API usage, and ensures that Google can contact you about your application if necessary. If your application's Maps API usage by exceeds the Usage Limits, you must load the Maps API using an API key in order to purchase additional quota.
* Google Maps API for Business developers must not include a key in their requests. Please refer to Loading the Google Maps JavaScript API for Business-specific instructions.
To create your API key:
- Visit the APIs Console at https://code.google.com/apis/console and log in with your Google Account.
- Click the Services link from the left-hand menu.
- Activate the Google Maps API v3 service.
- Click the API Access link from the left-hand menu. Your API key is available from the API Access page, in the Simple API Access section. Maps API applications use the Key for browser apps.
Mudar o domínio localhost - Windows
Às vezes você precisa mudar o domínio da sua máquina, ou acrescentar outro além do localhost que você já tem.
Know-how:
C:\Windows\System32\drivers\etc\host
Abaixo acrescentei o domínio netdaniels.com.
Depois disso é só reiniciar a máquina e testar.
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.1 netdaniels.com
Know-how:
C:\Windows\System32\drivers\etc\host
Abaixo acrescentei o domínio netdaniels.com.
Depois disso é só reiniciar a máquina e testar.
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.1 netdaniels.com
Vocabulário de Francês - 01
Estou lendo um livro em francês chamado Le Monde de Sophie. Eu vou lendo e anotando as palavras que não conheço para depois procurar no dicionário. Eis mais uma lista:
Algumas traduções me parecem esquisitas, se você perceber alguma coisa errada, comente. Obrigado.
le potage | a sopa |
couette | edredão |
sommeil | dormir |
placard | armário |
l'étagère | a prateleira |
mi-bas | Elevações de Joelho |
la haie | o hedge |
remonta | subiu |
demeures | casas |
atteignirent | alcançado |
lovée | coiled |
canapé | sofá |
plumes d'oie | ganso |
tapissé | forrado |
songe | sonho |
facteur | fator |
lézarda | lézarda |
déterrer | desenterrar |
arpenter | vistoria |
fusil | rifle |
incunable | incunábulo |
berceau | berço |
la poudre | pó |
à tour de bras | um braço de cada vez |
Algumas traduções me parecem esquisitas, se você perceber alguma coisa errada, comente. Obrigado.
domingo, 27 de maio de 2012
Classe de validação : CValidator
Veja bem,
Se você está que nem eu, desenvolvendo com yii já deve ter chegado a questão das classes de validação. Se não chegou, vai chegar.
No meu caso construí uma classe de validação para CEP.
Primeiro passo:
Na classe Model
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('code',
'required'),
array(
'code','cep'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(
'id, code, noise, accessibility, neighborhood, afforestation, violence',
'safe',
'on' => 'search'),
);
}
//Segundo passo criar a classe de validação..........
class cep extends CValidator
{ //início da Classe
public function validateAttribute($object, $attribute)
{
$message = utf8_encode("não é válido ou não existe.");
if (!$this->validaCEP($object->$attribute)) {
$message = $this->message !== null ? $this->message : Yii::t('cep',
'{attribute} ' . $message);
$this->addError($object, $attribute, $message);
}
}
public function clientValidateAttribute($object, $attribute)
{
return "";
}
private function validaCEP($cep)
{
$cep = trim($cep);
if (!is_numeric($cep)) {
return false;
}
if (strlen($cep) != 8) {
return false;
}
$content = $this->get_data("utilitario/lercep.php?cep=$cep");
$content = trim($content);
if (strlen($content) == 0)
{
return false;
}
return true;
}
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
} //fim da Classe
Para mais detalhes acesse este link
http://abelcorreadias.blogspot.com.br/2012/01/criando-um-validator-para-o-campo-cpf.html
PS: utilitario/lercep.php não é um php mágico que acesse o cep de algum site como república virtual ou mesmo o site do correio. Estou acessando minha própria base de CEP. Atenção: a base de CEP do correio é gigantesca.
Se você está que nem eu, desenvolvendo com yii já deve ter chegado a questão das classes de validação. Se não chegou, vai chegar.
No meu caso construí uma classe de validação para CEP.
Primeiro passo:
Na classe Model
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('code',
'required'),
array(
'code','cep'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(
'id, code, noise, accessibility, neighborhood, afforestation, violence',
'safe',
'on' => 'search'),
);
}
//Segundo passo criar a classe de validação..........
class cep extends CValidator
{ //início da Classe
public function validateAttribute($object, $attribute)
{
$message = utf8_encode("não é válido ou não existe.");
if (!$this->validaCEP($object->$attribute)) {
$message = $this->message !== null ? $this->message : Yii::t('cep',
'{attribute} ' . $message);
$this->addError($object, $attribute, $message);
}
}
public function clientValidateAttribute($object, $attribute)
{
return "";
}
private function validaCEP($cep)
{
$cep = trim($cep);
if (!is_numeric($cep)) {
return false;
}
if (strlen($cep) != 8) {
return false;
}
$content = $this->get_data("utilitario/lercep.php?cep=$cep");
$content = trim($content);
if (strlen($content) == 0)
{
return false;
}
return true;
}
function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
} //fim da Classe
Para mais detalhes acesse este link
http://abelcorreadias.blogspot.com.br/2012/01/criando-um-validator-para-o-campo-cpf.html
PS: utilitario/lercep.php não é um php mágico que acesse o cep de algum site como república virtual ou mesmo o site do correio. Estou acessando minha própria base de CEP. Atenção: a base de CEP do correio é gigantesca.
Assinar:
Postagens (Atom)