sábado, 22 de dezembro de 2012

Brasil/China - Patentes concedidas




Brasil/China - Engenheiros Plenos e Tecnólogs


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.

terça-feira, 14 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.

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
    }
}



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.
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!

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;
}

//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.

terça-feira, 3 de julho de 2012

The Pyramid Code - EP5- A New Chronology.

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


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();
        }
    });

* 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.

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.

Yii - Redirecionamento de páginas.

Veja bem,
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.

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.

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?

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&amp;v=2&amp;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 &amp;
Et voilà.

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.

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


<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.

domingo, 3 de junho de 2012

THC - O Universo Episódio 02 - Os Segredos do Sol [Dublado]

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!


sábado, 2 de junho de 2012

THC - O Universo Episódio 01 - Além do Big Bang [Dublado]

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)

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?

Cosmic Love (The Stars, the moon, the twilight)

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/examples.html

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&amp;v=2&amp;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&amp;v=2&amp;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:

<!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&amp;v=2&amp;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!

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.

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:

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:
  1. Visit the APIs Console at https://code.google.com/apis/console and log in with your Google Account.
  2. Click the Services link from the left-hand menu.
  3. Activate the Google Maps API v3 service.
  4. 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


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:


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 
à 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.