<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5130220208760250786</id><updated>2011-10-27T10:25:51.280-07:00</updated><title type='text'>Anotações em Programação</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-344702048617299075</id><published>2011-10-27T10:25:00.001-07:00</published><updated>2011-10-27T10:25:51.371-07:00</updated><title type='text'>PHP Cheat Sheet</title><content type='html'>Pra quem fica chateado de esquecer a ordem dos parâmetros das funções do PHP&lt;br /&gt;&lt;br /&gt;http://www.addedbytes.com/download/php-cheat-sheet-v2/png/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-344702048617299075?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/344702048617299075/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2011/10/php-cheat-sheet.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/344702048617299075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/344702048617299075'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2011/10/php-cheat-sheet.html' title='PHP Cheat Sheet'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-1800122498488578619</id><published>2011-08-24T09:32:00.000-07:00</published><updated>2011-08-24T09:45:09.745-07:00</updated><title type='text'>Função "aggregate" para cálcular mediana no PostgreSQL</title><content type='html'>O Postgres não tem uma função que calcule a mediana dos valores de um determinada coluna, ou seja, fazer algo do tipo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;SELECT median(col) FROM tabela;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mas em http://wiki.postgresql.org/wiki/Aggregate_Median está o código necessário para isso. É pequeno e não precisa entender nada dele pra utilizar. Basta copiar e executar no seu console dentro do banco de dados onde você quer que a função funcione. Se essa função tiver que funcionar em diversos bancos, é preciso executar esse código em cada um deles.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;CREATE OR REPLACE FUNCTION _final_median(numeric[])&lt;br /&gt;   RETURNS numeric AS&lt;br /&gt;$$&lt;br /&gt;   SELECT AVG(val)&lt;br /&gt;   FROM (&lt;br /&gt;     SELECT val&lt;br /&gt;     FROM unnest($1) val&lt;br /&gt;     ORDER BY 1&lt;br /&gt;     LIMIT  2 - MOD(array_upper($1, 1), 2)&lt;br /&gt;     OFFSET CEIL(array_upper($1, 1) / 2.0) - 1&lt;br /&gt;   ) sub;&lt;br /&gt;$$&lt;br /&gt;LANGUAGE 'sql' IMMUTABLE;&lt;br /&gt; &lt;br /&gt;CREATE AGGREGATE median(numeric) (&lt;br /&gt;  SFUNC=array_append,&lt;br /&gt;  STYPE=numeric[],&lt;br /&gt;  FINALFUNC=_final_median,&lt;br /&gt;  INITCOND='{}'&lt;br /&gt;);&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-1800122498488578619?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/1800122498488578619/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2011/08/funcao-aggregate-para-calcular-mediana.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1800122498488578619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1800122498488578619'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2011/08/funcao-aggregate-para-calcular-mediana.html' title='Função &quot;aggregate&quot; para cálcular mediana no PostgreSQL'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-4183071696056865814</id><published>2011-08-15T12:38:00.001-07:00</published><updated>2011-08-15T15:26:48.631-07:00</updated><title type='text'>Calculando zoom automático em mapas</title><content type='html'>Como não consegui fazer o Open Layers funcionar passando direto a resolução do mapa, precisei calcular o zoom de maneira dinâmica.&lt;br /&gt;&lt;br /&gt;Queria que meu mapa aparecesse em uma janela de largura 600px e altura 430px, com o zoom que fizesse uma certa feature aproveitar esse espaço da melhor maneira, ficando totalmente visível nessa área.&lt;br /&gt;&lt;br /&gt;Encontrei a seguinte fórmula:&lt;br /&gt; Map resolution = 156543.04 meters/pixel * cos(latitude) / (2 ^ zoomlevel)&lt;br /&gt;&lt;br /&gt;Fui jogando as coisas de um lado pro outro:&lt;br /&gt; (2 ^ zoomlevel) = 156543.04 meters/pixel * cos(latitude)/Map resolution&lt;br /&gt;&lt;br /&gt;E enfim, considerando que se 2^x = a, então x = (ln a/ln 2):&lt;br /&gt; zoomlevel = ln(156543.04 meters/pixel * cos(latitude)/Map resolution)/ln 2&lt;br /&gt;&lt;br /&gt;Como latitude, usei a função st_ymin (no meu caso, seria praticamente igual a usar o st_ymax) do PostGIS, passando a feature como parâmetro. Para calcular a resolução, tive que descobrir se a feição era maior no eixo x ou no eixo y usando a seguinte query:&lt;br /&gt; &lt;blockquote&gt;&lt;span style="font-style:italic;"&gt;select st_distance_sphere(st_makepoint(st_xmax(the_geom), st_ymin(the_geom)), st_makepoint(st_xmin(the_geom), st_ymin(the_geom))) as dist_x,&lt;br /&gt;       st_distance_sphere(st_makepoint(st_xmin(the_geom), st_ymax(the_geom)), st_makepoint(st_xmin(the_geom), st_ymin(the_geom))) as dist_y&lt;br /&gt;   from &amp;lt;tabela&amp;gt; where &amp;lt;cláusula where&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Como já sei o tamanho da janela onde ficará o mapa (600 x 430), então se a feature é maior no eixo x, a resolução é dist_x/600. Se a feature é maior no eixo y, a resolução é dist_y/430.&lt;br /&gt;&lt;br /&gt;Encontrei a fórmula para calcular o zoom em:&lt;br /&gt;http://msdn.microsoft.com/en-us/library/aa940990.aspx&lt;br /&gt;&lt;br /&gt;Obrigado ao Cristiano Pereira da Silva (ardagh) pela ajuda com a matemática.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-4183071696056865814?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/4183071696056865814/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2011/08/calculando-zoom-automatico.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4183071696056865814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4183071696056865814'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2011/08/calculando-zoom-automatico.html' title='Calculando zoom automático em mapas'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-5112210950689442526</id><published>2011-04-06T06:31:00.000-07:00</published><updated>2011-04-06T06:34:57.999-07:00</updated><title type='text'>Correspondência entre zona UTM e SRID</title><content type='html'>Estou com um DVD do IBGE onde os shapes estão na projeção UTM / SAD69. Preciso indicar o SRID ao rodar o programa shp2pgsql pra conseguir transformar em coordenadas posteriormente.&lt;br /&gt;A tabela abaixo tem o SRID (da EPSG) e a zona correspondente. Listei apenas as do Brasil.&lt;br /&gt;&lt;br /&gt;29118 - zone 18N&lt;br /&gt;29119 - zone 19N&lt;br /&gt;29120 - zone 20N&lt;br /&gt;29121 - zone 21N&lt;br /&gt;29122 - zone 22N&lt;br /&gt;29177 - zone 17S&lt;br /&gt;29178 - zone 18S&lt;br /&gt;29179 - zone 19S&lt;br /&gt;29180 - zone 20S&lt;br /&gt;29181 - zone 21S&lt;br /&gt;29182 - zone 22S&lt;br /&gt;29183 - zone 23S&lt;br /&gt;29184 - zone 24S&lt;br /&gt;29185 - zone 25S&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-5112210950689442526?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/5112210950689442526/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2011/04/correspondencia-entre-zona-utm-e-srid.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5112210950689442526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5112210950689442526'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2011/04/correspondencia-entre-zona-utm-e-srid.html' title='Correspondência entre zona UTM e SRID'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6811671755623222179</id><published>2010-12-03T05:22:00.000-08:00</published><updated>2010-12-03T05:27:05.934-08:00</updated><title type='text'>Municípios criados ao longo do tempo</title><content type='html'>De vez em quando aparece alguém com dúvida sobre quais municípios foram criados em 2005 e quando foi criado o município de Nazária/PI.&lt;br /&gt;A navegação no site do IBGE não é fácil.&lt;br /&gt;Felizmente encontrei uma página no site do DataSUS que explica tudo isso:&lt;br /&gt;&lt;a href="http://www2.datasus.gov.br/DATASUS/index.php?area=040206&amp;item=7"&gt;http://www2.datasus.gov.br/DATASUS/index.php?area=040206&amp;item=7&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6811671755623222179?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6811671755623222179/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/12/municipios-criados-ao-longo-do-tempo.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6811671755623222179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6811671755623222179'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/12/municipios-criados-ao-longo-do-tempo.html' title='Municípios criados ao longo do tempo'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6929969142353372015</id><published>2010-10-26T13:26:00.000-07:00</published><updated>2010-10-26T13:31:19.763-07:00</updated><title type='text'></title><content type='html'>Reiniciando uma sequência no PostgreSQL (inclusive para campos do tipo serial):&lt;br /&gt;  &lt;span style="font-style:italic;"&gt;alter sequence schema.nome-da-sequencia restart with 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se eu tentar&lt;br /&gt;  select setval('schema.nome-da-sequencia', 0)&lt;br /&gt;não vai funcionar.&lt;br /&gt;&lt;br /&gt;Se eu tentar&lt;br /&gt;  select setval('schema.nome-da-sequencia', 1)&lt;br /&gt;não funciona também, pois o próximo insert (mesmo com campo serial) vai chamar a função nextval e colocar o valor &lt;span style="font-style:italic;"&gt;2&lt;/span&gt; para o campo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6929969142353372015?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6929969142353372015/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/10/reiniciando-uma-sequencia-no-postgresql.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6929969142353372015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6929969142353372015'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/10/reiniciando-uma-sequencia-no-postgresql.html' title=''/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-7920509849106545090</id><published>2010-10-20T08:53:00.000-07:00</published><updated>2010-10-20T08:54:58.226-07:00</updated><title type='text'>Cabeçalho de páginas com codificação UTF-8</title><content type='html'>&amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;﻿&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-7920509849106545090?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/7920509849106545090/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/10/cabecalho-de-paginas-com-codificacao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/7920509849106545090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/7920509849106545090'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/10/cabecalho-de-paginas-com-codificacao.html' title='Cabeçalho de páginas com codificação UTF-8'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-1119191456644011154</id><published>2010-09-24T11:24:00.000-07:00</published><updated>2010-09-24T11:40:50.502-07:00</updated><title type='text'>Problemas usando o Google Maps</title><content type='html'>Usamos o googlemaps no Censo SUAS 2010. Ele funciona bem na maioria dos casos, mas observamos os seguintes problemas:&lt;br /&gt;&lt;br /&gt;Se eu buscar por "Rua nada a ver, 180 - Três Marias, MG, Brasil", caio em um local dentro de Três Marias, mesmo o não havendo mapeamento das ruas desse município.&lt;br /&gt;Se eu buscar por "Rua das orquideas, 180 - Três Marias, MG, Brasil", caio em Santa Tereza/SE na Rua das orquideas.&lt;br /&gt;&lt;br /&gt;Se eu buscar por "Barro, CE, Brasil", caio em uma área no Ceará, mas distante de Barro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-1119191456644011154?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/1119191456644011154/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/09/problemas-usando-o-google-maps.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1119191456644011154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1119191456644011154'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/09/problemas-usando-o-google-maps.html' title='Problemas usando o Google Maps'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-1541602956228352860</id><published>2010-08-23T09:28:00.000-07:00</published><updated>2010-08-23T09:32:45.490-07:00</updated><title type='text'>Cuidado com o 0 (zero)</title><content type='html'>&lt;span style="font-style:italic;"&gt;print (0=='others');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esse código imprime "1". Mais em &lt;a href="http://php.net/manual/en/types.comparisons.php"&gt;http://php.net/manual/en/types.comparisons.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-1541602956228352860?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/1541602956228352860/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/cuidado-com-o-0-zero.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1541602956228352860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/1541602956228352860'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/cuidado-com-o-0-zero.html' title='Cuidado com o 0 (zero)'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6024782444759820151</id><published>2010-08-21T11:21:00.000-07:00</published><updated>2010-08-21T11:22:51.267-07:00</updated><title type='text'>XML em PHP</title><content type='html'>&lt;span style="font-style:italic;"&gt;function obterArrResposta($pergunta)&lt;br /&gt;{&lt;br /&gt;    $arrOpcoes = $pergunta-&gt;opcoes-&gt;opcao;&lt;br /&gt;    $arrResposta = array();&lt;br /&gt;    if($arrOpcoes)&lt;br /&gt;    {&lt;br /&gt;        foreach($arrOpcoes as $opcao)&lt;br /&gt;        {&lt;br /&gt;            $arrResposta[] = strip_tags($opcao[0]-&gt;asXML());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        $faixa_opcoes = $pergunta-&gt;opcoes-&gt;faixa_opcoes;&lt;br /&gt;        if($faixa_opcoes)&lt;br /&gt;        {&lt;br /&gt;            $faixa_opcoes = strip_tags($faixa_opcoes[0]-&gt;asXML());&lt;br /&gt;            $arrFaixas = explode("-", $faixa_opcoes);&lt;br /&gt;            for($i = $arrFaixas[0] ; $i &lt;= $arrFaixas[1] ; $i++)&lt;br /&gt;            {&lt;br /&gt;                $arrResposta[] = $i;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $arrResposta;&lt;br /&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6024782444759820151?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6024782444759820151/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/xml-em-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6024782444759820151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6024782444759820151'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/xml-em-php.html' title='XML em PHP'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-7064911182838592011</id><published>2010-08-13T14:10:00.001-07:00</published><updated>2010-08-13T14:19:18.959-07:00</updated><title type='text'>doAjaxStuff</title><content type='html'>Pra eu não ter mais que ficar procurando essa função:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;function doAjaxStuff&lt;br /&gt;    (postQueryString, onreadystatechange, action)&lt;br /&gt;{&lt;br /&gt;    try &lt;br /&gt;    {&lt;br /&gt;        // Firefox, Opera 8.0+, Safari&lt;br /&gt;        xmlHttp=new XMLHttpRequest();&lt;br /&gt;    }&lt;br /&gt;    catch (e)&lt;br /&gt;    {&lt;br /&gt;        // Internet Explorer &lt;br /&gt;        try &lt;br /&gt;        { &lt;br /&gt;            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); &lt;br /&gt;        } &lt;br /&gt;        catch (e) &lt;br /&gt;        { &lt;br /&gt;            try &lt;br /&gt;            {&lt;br /&gt;                xmlHttp=new ActiveXObject&lt;br /&gt;                   ("Microsoft.XMLHTTP"); &lt;br /&gt;            }&lt;br /&gt;            catch (e)&lt;br /&gt;            {&lt;br /&gt;                alert("Seu navegador não suporta AJAX!");&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    xmlHttp.onreadystatechange=onreadystatechange;&lt;br /&gt;    xmlHttp.open("POST", action, true);&lt;br /&gt;    xmlHttp.setRequestHeader&lt;br /&gt;        ("Content-type", "application/x-www-form-urlencoded");&lt;br /&gt;    xmlHttp.setRequestHeader&lt;br /&gt;        ("Content-length", postQueryString.length);&lt;br /&gt;    xmlHttp.setRequestHeader("Connection", "close");&lt;br /&gt;    xmlHttp.send(postQueryString);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-7064911182838592011?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/7064911182838592011/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/doajaxstuff.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/7064911182838592011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/7064911182838592011'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/doajaxstuff.html' title='doAjaxStuff'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6824766368489144649</id><published>2010-08-13T12:07:00.000-07:00</published><updated>2010-08-13T14:09:34.286-07:00</updated><title type='text'>Erro de proxy usando ajax</title><content type='html'>Chamava uma página usando http://localhost/dir/prog.php&lt;br /&gt;&lt;br /&gt;O IP da minha máquina era 10.68.10.68&lt;br /&gt;&lt;br /&gt;A página realizava algumas chamadas ajax para http://10.68.10.68/dir/prog2.php&lt;br /&gt;&lt;br /&gt;A requisição ajax não saía. Dava erro 407, pedindo autorização do proxy da rede em que eu, cliente, estava.&lt;br /&gt;&lt;br /&gt;Soluçao simples: passei a chamar a página trocando o localhost pelo IP da máquina :D .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6824766368489144649?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6824766368489144649/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/erro-de-proxy-usando-ajax.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6824766368489144649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6824766368489144649'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/erro-de-proxy-usando-ajax.html' title='Erro de proxy usando ajax'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-5100021237918233389</id><published>2010-08-06T12:08:00.000-07:00</published><updated>2010-08-06T12:24:13.436-07:00</updated><title type='text'></title><content type='html'>Precisei garantir que uma página html teria dois arquivos ".js" carregados. Para isso fiz o código que está abaixo. Não tenho certeza ainda se vale a pena fazer isso. Acredito que a vantagem seja que o usuário desse js não precise lembrar também de carregar o segundo arquivo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;pre&gt;function inc(filename)&lt;br /&gt;{&lt;br /&gt;    var body = document.getElementsByTagName('body').item(0);&lt;br /&gt;    script = document.createElement('script');&lt;br /&gt;    script.src = filename;&lt;br /&gt;    script.type = 'text/javascript';&lt;br /&gt;    body.appendChild(script)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;inc("nome-do-arquivo-no-formato-do-campo-src-da-tag-script");&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;copiado de &lt;a href="http://bytes.com/topic/javascript/answers/149165-import-include-js-file-into-js-file"&gt;http://bytes.com/topic/javascript/answers/149165-import-include-js-file-into-js-file&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Poderia ter feito também como abaixo, é menos elegante, mas é menor e deve funcionar quase sempre:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;pre&gt;&lt;br /&gt;document.write("&amp;lt;script type='text/javascript' src='b.js'&amp;gt;&amp;lt;/script&amp;gt;");&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.jguru.com/faq/view.jsp?EID=1339630"&gt;http://www.jguru.com/faq/view.jsp?EID=1339630&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-5100021237918233389?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/5100021237918233389/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/precisei-garantir-que-uma-pagina-html.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5100021237918233389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5100021237918233389'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/08/precisei-garantir-que-uma-pagina-html.html' title=''/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-4500836912463272615</id><published>2010-07-30T14:29:00.000-07:00</published><updated>2010-07-30T14:32:18.088-07:00</updated><title type='text'>nome de variável javascript no Internet Explorer</title><content type='html'>O seguinte código javascript quebra no Internet Explorer, mas funciona no Firefox:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;trCras = document.getElementById("trCras");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A solução é simples:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;vtrCras = document.getElementById("trCras");&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-4500836912463272615?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/4500836912463272615/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/nome-de-variavel-javascript-no-internet.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4500836912463272615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4500836912463272615'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/nome-de-variavel-javascript-no-internet.html' title='nome de variável javascript no Internet Explorer'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6167664724439753158</id><published>2010-07-16T12:50:00.000-07:00</published><updated>2010-07-30T10:50:32.475-07:00</updated><title type='text'></title><content type='html'>Perdi algum tempo por que não sabia a diferença entre "empty()" e "isset()".&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;$a = "";&lt;br /&gt;$b = 0;&lt;br /&gt;if(empty($a))&lt;br /&gt;    print "true";&lt;br /&gt;if(isset($a))&lt;br /&gt;    print "true";&lt;br /&gt;if(empty($b))&lt;br /&gt;    print "true";&lt;br /&gt;if(isset($b))&lt;br /&gt;    print "true";&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;Esse código imprime "truetruetruetrue".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6167664724439753158?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6167664724439753158/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/perdi-algum-tempo-por-que-nao-sabia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6167664724439753158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6167664724439753158'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/perdi-algum-tempo-por-que-nao-sabia.html' title=''/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-3283488515060228062</id><published>2010-07-14T10:52:00.000-07:00</published><updated>2010-08-16T10:30:32.549-07:00</updated><title type='text'>include ou require em PHP</title><content type='html'>Até onde eu sei a diferença entre um "include" ou um "require" é que o "require" gera um erro fatal quando não encontra o arquivo.&lt;br /&gt;&lt;br /&gt;Mas eu quero falar outra coisa que acontece de vez em quando: uma página "a.php" faz um require_once("dir1/b.php"). E "b.php" precisa fazer require_once de um arquivo que está em "dir2/c.php". E "b.php" pode ser chamada sozinha ou pelo require feito por "a.php".&lt;br /&gt;&lt;br /&gt;Como fazer,&lt;br /&gt;require_once("../dir2/c.php") ou require_once("dir2/c.php") ?&lt;br /&gt;&lt;br /&gt;Resposta:&lt;br /&gt;require_once(dirname(dirname(__FILE__)) . "/dir2/c.php");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-3283488515060228062?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/3283488515060228062/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/include-ou-require-em-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/3283488515060228062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/3283488515060228062'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/07/include-ou-require-em-php.html' title='include ou require em PHP'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-6301672999497080206</id><published>2010-05-25T03:22:00.000-07:00</published><updated>2011-08-30T10:41:05.484-07:00</updated><title type='text'>usando dblink</title><content type='html'>Com o dblink, posso acessar um banco 'b' estando conectado em um banco 'a'. Pra usar o comando abaixo, é necessário que o dblink esteja instalado na máquina onde está o banco de dados 'a'.&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE VIEW cras.cras_tao2009 AS &lt;br /&gt; SELECT t1.qtd_cras, t1.nome_campo, t1.ibge&lt;br /&gt;   FROM dblink('dbname=tao hostaddr=10.68.12.245 user=dbuser password=password port=5432'::text, 'select valor_inteiro, nome_campo, ibge from pbt.opcoes_municipios_valores where (nome_campo = ''cras_aceitos'' and valor_inteiro &gt; 0) order by ibge'::text) t1(qtd_cras numeric, nome_campo character varying, ibge numeric);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-6301672999497080206?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/6301672999497080206/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/05/usando-dblink.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6301672999497080206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/6301672999497080206'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/05/usando-dblink.html' title='usando dblink'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-2310674447941702974</id><published>2010-04-27T13:56:00.000-07:00</published><updated>2010-04-27T13:58:56.421-07:00</updated><title type='text'>Sobre desenvolvimento de software</title><content type='html'>The unique characteristics of the open-source approach distinguish it from existing&lt;br /&gt;commercial software development practices. Participants in open source are globally and virtually distributed, and usually never meet face-to-face. These geographically&lt;br /&gt;distributed participants &lt;span style="font-weight:bold;"&gt;successfully&lt;/span&gt; coordinate software development &lt;span style="font-weight:bold;"&gt;without traditional mechanisms&lt;/span&gt;, such as &lt;span style="font-weight:bold;"&gt;design processes&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;schedules&lt;/span&gt;, etc.&lt;br /&gt;&lt;br /&gt;Yukika Awazu &amp; Kevin C. Desouza - Open Knowledge Management: Lessons From the Open Source Revolution&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-2310674447941702974?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/2310674447941702974/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/sobre-desenvolvimento-de-software.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/2310674447941702974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/2310674447941702974'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/sobre-desenvolvimento-de-software.html' title='Sobre desenvolvimento de software'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-5430865344175300691</id><published>2010-04-23T10:08:00.000-07:00</published><updated>2010-04-23T10:11:07.988-07:00</updated><title type='text'>Obtendo uma página com file_get_contents e stream context</title><content type='html'>Com o código abaixo eu consigo fazer uma requisição GET passando por um proxy. Com stream context fica bem mais simples que montar a string no formato do HTTP.&lt;br /&gt;&lt;div style='font-family:courier new'&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$authProxy = base64_encode($this-&gt;proxyUser . ":" . $this-&gt;proxyPasswd);&lt;br /&gt;// Création des options de la requête&lt;br /&gt;$opts = array(&lt;br /&gt;   'http' =&gt; array (&lt;br /&gt;       'method'=&gt;'GET',&lt;br /&gt;       'proxy'=&gt;'tcp://10.68.15.240:3128',&lt;br /&gt;       'request_fulluri' =&gt; true,&lt;br /&gt;       'header'=&gt;"Proxy-Authorization: Basic $authProxy"&lt;br /&gt;   )&lt;br /&gt;);&lt;br /&gt;// Création du contexte de transaction&lt;br /&gt;$ctx = stream_context_create($opts);&lt;br /&gt;// Récupération des données&lt;br /&gt;$content = file_get_contents($this-&gt;url . "?" . $queryString, false, $ctx);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-5430865344175300691?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/5430865344175300691/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/obtendo-uma-pagina-com-filegetcontents.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5430865344175300691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/5430865344175300691'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/obtendo-uma-pagina-com-filegetcontents.html' title='Obtendo uma página com file_get_contents e stream context'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-4254964021405167150</id><published>2010-04-22T15:58:00.000-07:00</published><updated>2010-04-22T16:01:17.290-07:00</updated><title type='text'>Exemplo de uso do simplexml_load_string</title><content type='html'>&lt;div style='font-family:courier new'&gt;&lt;br /&gt;$objXml = simplexml_load_string($xml);&lt;br /&gt;&lt;br /&gt;$perfis = $objXml-&gt;xpath("/methodResponse/params/param/value/struct/member[name='roles']/value/array/data/value[starts-with(string, 'MU_') || starts-with(string, 'Estado ')]/string");&lt;br /&gt;&lt;br /&gt;foreach($perfis as $perfil)&lt;br /&gt;{&lt;br /&gt;   $nms_perfis[] = strip_tags($perfil[0]-&gt;asXML());&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-4254964021405167150?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/4254964021405167150/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/exemplo-de-uso-do-simplexmlloadstring.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4254964021405167150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/4254964021405167150'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/exemplo-de-uso-do-simplexmlloadstring.html' title='Exemplo de uso do simplexml_load_string'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5130220208760250786.post-2169514938595348199</id><published>2010-04-22T14:38:00.000-07:00</published><updated>2010-04-22T14:44:36.675-07:00</updated><title type='text'>Transformar um XML em um objeto PHP</title><content type='html'>O PHP possui funções para fazer parse de um XML, 'xml_parse' etc. Entretanto uma maneira mais rápida de carregar um XML é usando 'simplexml_load_file' (&lt;a href="http://php.net/manual/pt_BR/function.simplexml-load-file.php"&gt;link pro php.net&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Ou melhor ainda, 'simplexml_load_string'. Ambas retornam um SimpleXMLElement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5130220208760250786-2169514938595348199?l=cadernodokadu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cadernodokadu.blogspot.com/feeds/2169514938595348199/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/transformar-um-xml-em-um-objeto-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/2169514938595348199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5130220208760250786/posts/default/2169514938595348199'/><link rel='alternate' type='text/html' href='http://cadernodokadu.blogspot.com/2010/04/transformar-um-xml-em-um-objeto-php.html' title='Transformar um XML em um objeto PHP'/><author><name>Carlos Eduardo de Andrade Brasileiro</name><uri>http://www.blogger.com/profile/03584715173991280947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_KVvgTHk0igg/S7Cog7bYZbI/AAAAAAAACFk/p-W9bBWAHqc/S220/tweet_bigger.png'/></author><thr:total>0</thr:total></entry></feed>
