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.