<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8093072554885564114</atom:id><lastBuildDate>Mon, 23 Nov 2009 01:16:58 +0000</lastBuildDate><title>Programador Anónimo</title><description>Um blog para o mundo do Software Livre, com especial destaque dado à área da programação. Tudo em plena liberdade.</description><link>http://programadoranonimo.blogspot.com/</link><managingEditor>noreply@blogger.com (libre)</managingEditor><generator>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ProgramadorAnonimo" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ProgramadorAnonimo" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FProgramadorAnonimo" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-3641377904465974015</guid><pubDate>Thu, 22 Jan 2009 14:09:00 +0000</pubDate><atom:updated>2009-01-22T07:52:16.813-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Comunidade</category><category domain="http://www.blogger.com/atom/ns#">Media</category><title>Como não reagir a más exposições</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4uC1Hpy9LQ0l7Z1PlGQVYYPTz8Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4uC1Hpy9LQ0l7Z1PlGQVYYPTz8Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4uC1Hpy9LQ0l7Z1PlGQVYYPTz8Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4uC1Hpy9LQ0l7Z1PlGQVYYPTz8Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Um caso mediático recente:&lt;/span&gt;&lt;br /&gt;Durante a semana passada acompanhei um caso caricato passado num canal de TV do EUA, creio que um canal estatal, em que uma estudante comprou acidentalmente um computador Dell com o Ubuntu para frequentar as aulas à distância. Ela queixava-se que o CD do seu ISP não instalava nem conseguia instalar o msoffice, alegadamente requisitos para aceder ao sistema de e-learning da instituição o que a levou a desistir de um semestre.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;As reportagens do canal:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wkowtv.com/Global/story.asp?S=9667184"&gt;Reportagem original (em texto, com possibilidade de vídeo)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.wkowtv.com/Global/story.asp?S=9682258&amp;amp;nav=menu1362_2"&gt;Reportagem em resposta à reacção da comunidade (em texto e vídeo)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Em relação à reportagem tenho a salientar um ponto:&lt;br /&gt;Tenho a certeza que não tinham qualquer intenção de atacar o Ubuntu. A sua intenção era a típica de um meio de informação baseado no sensacionalismo e populismo, &lt;span style="font-style: italic;"&gt;atacar&lt;/span&gt; uma empresa, a Dell, por esta se recusar a resolver o problema, como se resolvesse o problema. Não vou estar aqui a contar a história toda, pois podem vê-la nos links acima.&lt;br /&gt;Como é óbvio, e infelizmente, a reacção de muita gente foi negativa e mesmo destrutiva. Ataques ao canal e à estudante em questão, que neste caso chegaram mesmo a ser atitudes graves e reprováveis, como ofensas e ameaças pessoais. E como é óbvio o canal aproveitou a situação para vender mais da sua "peixeirada".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pontos a ter em conta:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Relativamente à estudante:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Como conseguiu ela comprar aquele portátil? É mais fácil encontrar a página onde eles estão à venda a partir de um motor de busca que pela página principal do site da Dell. E pesquisar por "laptop Dell" não aparecem resultados relativos ao Ubuntu nas primeiras páginas;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Não tinha qualquer conhecimento sobre o Ubuntu ou OpenOffice.org;&lt;/li&gt;&lt;li&gt;Estava focada em instalar o software de ligação à Internet e o msoffice e acreditava que não era possível frequentar o curso sem isso;&lt;/li&gt;&lt;li&gt;Procurou trocar o computador por um com &lt;span style="font-style: italic;"&gt;bloatware&lt;/span&gt; xp/vista ou obter uma licença deste através da Dell;&lt;/li&gt;&lt;li&gt;Tendo obtido resposta negativa, pois aparentemente o prazo para troca já tinha expirado, apresentou o seu caso ao canal de TV em causa;&lt;/li&gt;&lt;li&gt;Aparentemente não procurou qualquer tipo de ajuda após o contacto com a Dell;&lt;/li&gt;&lt;li&gt;Recebeu montes de ataques e acusações de ignorância, estupidez, etc...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Estamos perante um típico caso de pessoa que vive na total ignorância em relação ao mundo alternativo ao horrível mundo microsoft, mas será razão para atacá-la? Não me parece.&lt;br /&gt;&lt;br /&gt;Relativamente ao programa de TV:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Típico programa do espectador acusa, nós fazemos a reportagem;&lt;/li&gt;&lt;li&gt;Apostou no ataque à Dell, tendo apanhado o Ubuntu no fogo cruzado;&lt;/li&gt;&lt;li&gt;Alegaram estar a fazer tudo para ajudar a estudante, mas não em relação ao que a estudante tinha em mãos, e temos que ter em conta que o poderiam fazer, mas isso venderia a notícia? Nunca;&lt;/li&gt;&lt;li&gt;Juntamente com a estudante receberam montes de ataques;&lt;/li&gt;&lt;li&gt;Lançaram um contra ataque, na minha opinião muito destrutivo.&lt;/li&gt;&lt;/ul&gt;Um formato de programas que todos conhecemos certamente, eu não sou totalmente contra este tipo de programas. Mas temos que ter em conta que o objectivo principal deles é "vender publicidade" ao maior número de espectadores possíveis. Alegam querer ajudar, e neste caso teriam conseguido de uma forma fácil, mas tal não beneficiaria os seus objectivos. Razões para a Comunidade de SL/OS estar chateada? Sem dúvida, mas lembrem-se que ao atacar um canal de TV poderá ter um efeito idêntico ao de tentar lutar de espada e escudo contra um tanque de guerra.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A atitude da comunidade Ubuntu/GNU/Linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Podemos dividir as reacções em duas partes: as positivas e as negativas.&lt;br /&gt;&lt;br /&gt;Às positivas foi dada pouca atenção na segunda reportagem, mas felizmente existiram referências. Muita gente se ofereceu apara ajudar a estudante e para lhe dizer que era possível usar o portátil como estava e até lhe mostrar os pontos favoráveis.&lt;br /&gt;&lt;br /&gt;As negativas foram mais que muitas, e o canal não exitou em usar essa atitude negativa no seu programa. Se a situação estava má, aí é que piorou. Quem assistia ao programa e não conhecia o mundo alternativo ao império de Redmond ficou com uma impressão extremamente negativa em relação a todos nós. E aqui não podemos culpar exclusivamente o canal, podemos criticar o seu formato de programa, mas atacá-lo desta forma pode correr mal. E garantidamente causou estragos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Atitudes a ter em conta neste tipo de casos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A principal atitude a ter em conta é a de nunca atacar utilizadores de informática que desconhecem o mundo do software livre, estarão simplesmente a afastá-los, ou pior ainda, a torná-los defensores do lado oposto. A melhor atitude será certamente a de oferecer ajuda, aconselhar e incentivar as pessoas a mudarem. Mas repito, ao atacá-las estarão simplesmente a perdê-las.&lt;br /&gt;&lt;br /&gt;Outra atitude a ter em conta é a de como lidar com meios mediáticos, criticar defensores do software fechado ou comentar em blogues pró-ms é uma coisa, meter-se com meios mediáticos de comunicação é outra. Mas em ambos os casos é melhor nunca tomar uma atitude negativa, não quer dizer que não possam atacar com fundamentos válidos, mas sim nunca cair no desagradável. Com meios mediáticos o melhor a fazer é fundamentar bem o vosso ponto de vista sem nunca entrar no desagradável, lembrem-se que o seu poder mediático pode ser destrutivo. Usem os argumentos a favor, que já são mais que suficientes.&lt;br /&gt;&lt;br /&gt;Lembrem-se que ser &lt;span style="font-style: italic;"&gt;troll&lt;/span&gt; não é um exclusivo dos nossos adversários, e que no nosso meio também podem existir, muitas vezes dando uma má imagem de todos nós. Existem formas de jogar ao ataque contra os nossos adversários sem por em causa a nossa credibilidade, e nesses casos o meu conselho é: Aproveitem-nas, mas repito, sem ataques pessoais ou insultos gratuitos.&lt;br /&gt;&lt;br /&gt;Emrelação a este caso as coisas não acabaram tão mal quanto isso. Aparentemente a estudante está a frequentar o curso e com o seu Ubuntu. Já sabe como utilizar o OpenOffice.org para criar documentos que podem ser lidos pelo pessoal do curso e obviamente já se liga à Internet do seu próprio portátil. Podem ver essa informação no blogue pessoal de um dos membros desse canal, &lt;a href="http://addins.wkowtv.com/blogs/troubleshooter/?p=24"&gt;aqui&lt;/a&gt;. Dá-nos essa informação positiva, apesar de manterem a posição da sua reportagem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-3641377904465974015?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=VaKhxREQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=jHAJORQV"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=jHAJORQV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/C7GvkRkuEKA/como-no-reagir-ms-exposies.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2009/01/como-no-reagir-ms-exposies.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-7721306984446584543</guid><pubDate>Thu, 04 Dec 2008 14:26:00 +0000</pubDate><atom:updated>2008-12-04T07:05:51.246-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python</category><title>A grande mudança: Python 3000 lançado.</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dN3eUhJWqebwjFxMT6RgxbLvFbQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dN3eUhJWqebwjFxMT6RgxbLvFbQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dN3eUhJWqebwjFxMT6RgxbLvFbQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dN3eUhJWqebwjFxMT6RgxbLvFbQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Foi anunciado hoje o lançamento oficial da versão 3.0 da popular linguagem de script Python, também conhecida por Python 3000.&lt;br /&gt;A lista de novidades é bastante significativa e, com este lançamento, existe uma quebra de compatibilidade com as versões anteriores. Pelo que qualquer código escrito para Python 2.x ou mesmo 1.x poderá ter que ser re-escrito.&lt;br /&gt;&lt;br /&gt;As principais novidades:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;print&lt;/span&gt; passa a ser uma função: &lt;span style="font-weight: bold;"&gt;print()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;As funções &lt;span style="font-weight: bold;"&gt;map()&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;filter()&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;range()&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;zip()&lt;/span&gt; assim como os métodos &lt;span style="font-weight: bold;"&gt;dict.keys()&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;dict.items()&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;dict.values()&lt;/span&gt; passa a retornar iteradores em vez de listas. No caso da função &lt;span style="font-weight: bold;"&gt;range()&lt;/span&gt; o comportamento é similar ao &lt;span style="font-weight: bold;"&gt;xrange()&lt;/span&gt; da versão 2.x que desaparece nesta versão. A função &lt;span style="font-weight: bold;"&gt;list(iterator)&lt;/span&gt; poderá ser usada para retornar uma lista através de um iterador, mas caso não seja necessário deve ser evitado de modo a salvaguardar o uso de memória.&lt;/li&gt;&lt;li&gt;As &lt;span style="font-weight: bold;"&gt;strings&lt;/span&gt; passam a ser todas &lt;span style="font-weight: bold;"&gt;Unicode&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Os &lt;span style="font-weight: bold;"&gt;inteiros&lt;/span&gt; são automáticamento de tipo &lt;span style="font-weight: bold;"&gt;Long&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;O operador diferença &lt;span style="font-weight: bold;"&gt;&amp;lt;&amp;gt;&lt;/span&gt; for removido e substituido pelo operador &lt;span style="font-weight: bold;"&gt;!=&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Desaparece a função &lt;span style="font-weight: bold;"&gt;reduce(function, iterable)&lt;/span&gt;, devendo recorrer-se a implementações iterativas em sua substituição.&lt;/li&gt;&lt;li&gt;etc...&lt;/li&gt;&lt;/ul&gt;Na &lt;a href="http://docs.python.org/dev/3.0/whatsnew/3.0.html"&gt;nota de lançamento oficial&lt;/a&gt; podem ser consultadas todas as modificações mais detalhadamente.&lt;br /&gt;&lt;br /&gt;Esta linguagem é de extrema importância e este lançamento terá algum impacto pois entre utilizadores dela estão o Google, a NASA, é parte fulcral em muitas funcionalidades de distribuições GNU/Linux, como o Ubuntu Red Hat/Fedora, etc... Existem também muitas aplicações web desenvolvidas em Python e a linguagem é usada para criar scripts em muitos videojogos, pelo que o seu conhecimento poderá ser útil para o desenvolvimento de &lt;span style="font-style: italic;"&gt;Mods&lt;/span&gt;. Há mesmo quem defenda que é uma alternetiva viável ao &lt;span style="font-style: italic;"&gt;shell script&lt;/span&gt; para a criação de utilitários de administração de sistemas, pois esta é independente da &lt;span style="font-style: italic;"&gt;shell&lt;/span&gt; que se usa.&lt;br /&gt;&lt;br /&gt;Para quem não conhece é realmente uma linguagem a aprender.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-7721306984446584543?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=5f9IECwy"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=EjqA28nC"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=EjqA28nC" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/6Ap59CUhzvM/grande-mudana-python-3000-lanado.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/12/grande-mudana-python-3000-lanado.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-276270214964708899</guid><pubDate>Thu, 13 Nov 2008 05:00:00 +0000</pubDate><atom:updated>2008-11-12T13:18:02.193-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">patentes</category><category domain="http://www.blogger.com/atom/ns#">monopólio abusivo</category><title>"Porque detesto a Microsoft?"</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rvoB8_hpWU0I2F8R6F-ksB0MBNk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rvoB8_hpWU0I2F8R6F-ksB0MBNk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rvoB8_hpWU0I2F8R6F-ksB0MBNk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rvoB8_hpWU0I2F8R6F-ksB0MBNk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Estas palavras não são propriamente minhas, mas sim de um cibernauta holandês, que publicou um site no ano passado e que recentemente descobri. E dado o teor, extensão e argumentação deste documento decidi que merece ser divulgado.&lt;br /&gt;&lt;br /&gt;Ao ler fico com a sensação que podemos dividir a microsoft em duas categorias.&lt;br /&gt;A primeira é a de uma empresa pouco inovadora, que pouco trás de novo. Basicamente pega na criação dos concorrentes e obtem sucesso com isso. E mesmo naquilo que fazem a qualidade é questionável. Mas no que diz respeito à inovação, pouca existe. Desde o primeiro sucesso em larga escala, o MS-DOS que foi comprado a uma empresa "amiga", até ao primeiro windows, tentativa de copiar o Xerox Alto e combater outra cópia do mesmo chamada MacOS, etc...&lt;br /&gt;A outra categoria é a realmente assustadora. Como pode uma empresa com a descrição acima sobreviver num mundo tão competitivo? Primeiro tiveram a sorte do seu lado, saiu-lhes o euromilhões dos contractos de software, com o contracto da IBM para estes desenvolverem um sistema operativo, que basicamente foi comprado e sofreu umas modificações técnicas, para a sua linha de computadores pessoais. A partir daí conseguiram pôr-se numa posição de poder, e consequentemente segui-se uma série de politicas ferozes de aniquilação de concorrência. Passar acima de tudo e todos, custe o que custar. Numa atitude que faz muito lembrar os métodos que podemos ver retratados em filmes como O Padrinho ou em séries como Os Sopranos. Eliminar a concorrência a todo o custo.&lt;br /&gt;&lt;br /&gt;Deixo aqui o site para quem quiser ler: (em inglês)&lt;br /&gt;&lt;a href="http://www.vanwensveen.nl/rants/microsoft/IhateMS.html"&gt;http://www.vanwensveen.nl/rants/microsoft/IhateMS.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Acredito em grande parte do que está descrito nesse site. Basicamente é uma espécie de compilação de muitas notícias e factos Históricos que quem está atento à indústria TI já deve conhecer. Mas acho que também é uma prova de que uma abordagem livre e aberta ao desenvolvimento de software é a melhor forma de enfrentar este monopólio. Simplesmente o software livre tem um grau de imunidade a tácitas de aniquilação que o software proprietário não terá numa situação similar. Por esse facto também a ms aposta forte nas patentes de software, estas sim podem constituir uma arma poderosa contra toda a concorrência. Sob o pretexto de inovação registam patentes muitas vezes ridículas: duplo click, page up/page down, etc...&lt;br /&gt;&lt;br /&gt;Não quero com isto apelar ao ódio, mas sim apelar a uma abertura de mentes.&lt;br /&gt;Uma boa leitura, a todos os que a decidirem fazer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-276270214964708899?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=R7Ely6ir"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=ei55Q74a"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=ei55Q74a" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/Ly261YoMbpc/porque-detesto-microsoft.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/11/porque-detesto-microsoft.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-7115716642652119805</guid><pubDate>Wed, 12 Nov 2008 23:09:00 +0000</pubDate><atom:updated>2009-01-26T04:28:22.902-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial MVC-CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">tutoriais</category><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><title>Tutorial MVC - 4 Inserir dados, Formulários e Validação</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LtzYtXS0nhnbIGD5vZFmu9NEgXI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LtzYtXS0nhnbIGD5vZFmu9NEgXI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LtzYtXS0nhnbIGD5vZFmu9NEgXI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LtzYtXS0nhnbIGD5vZFmu9NEgXI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Este tutorial é um seguimento directo do anterior. Utilizaremos os mesmos componentes e tabela de dados para criar um sistema de registo de utilizadores. Se não tem acompanhado esta série aconselho-lhe a dar uma olhadela ao &lt;a href="http://programadoranonimo.blogspot.com/2008/10/tutorial-mvc-3-acesso-dados.html"&gt;tutorial anterior&lt;/a&gt;.&lt;br /&gt;No que diz respeito à validação, será usado o novo sistema form_validation introduzido na versão 1.7.0. Dado que este tutorial é orientado para iniciantes não vi razão pela qual não o orientar para a nova versão.&lt;br /&gt;&lt;br /&gt;Em qualquer página web com validação de dados existe o seguinte ciclo de validação:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Pedir os dados ao utilizador&lt;/li&gt;&lt;li&gt;Verificar os dados&lt;/li&gt;&lt;li&gt;Caso os dados não sejam válidos exibir erros e voltar ao ponto 1&lt;/li&gt;&lt;li&gt;Tratar os dados&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Começando pela solicitação de dados, vamos criar uma &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; &lt;span style="font-family:arial;"&gt;user/register.php&lt;/span&gt; com o seguinte conteúdo:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;?php&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; validation_errors() &lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;?php&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;form_open&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/register'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;fieldset&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;label &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"username"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;Utilizador&lt;span style="color: rgb(153, 0, 0);"&gt;:&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;label&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"text"&lt;/span&gt; id&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"username"&lt;/span&gt; value&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;""&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;label &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"password"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;Palavra&lt;span style="color: rgb(153, 0, 0);"&gt;-&lt;/span&gt;Passe&lt;span style="color: rgb(153, 0, 0);"&gt;:&amp;lt;/&lt;/span&gt;label&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"password"&lt;/span&gt; id&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"password"&lt;/span&gt; value&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;""&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;label &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"confirm"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;Confirmar&lt;span style="color: rgb(153, 0, 0);"&gt;:&amp;lt;/&lt;/span&gt;label&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"password"&lt;/span&gt; id&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"confirm"&lt;/span&gt; value&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;""&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;label &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"email"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;E&lt;span style="color: rgb(153, 0, 0);"&gt;-&lt;/span&gt;mail&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;label&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"text"&lt;/span&gt; id&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"email"&lt;/span&gt; value&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;""&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;fieldset&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"submit"&lt;/span&gt; value&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"Enviar"&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;form&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;A view acima é um formulário típico em PHP/HTML. Na primeira linha serão imprimidas as mensagens de erro caso a validação dos dados falhe. Recorre-se também à função form_tag para gerar uma tag form que chamará o controlador responsável por validar e armazenar os dados.&lt;br /&gt;&lt;br /&gt;Agora para armazenar os dados resta-nos criar o controlador para o efeito. Mas antes disso vamos preparar a nossa classe modelo para guardar este tipo de dados. Lembre-se que estamos a criar um formulário para registo de utilizadores e dados sensíveis como a password não serão armazenados no formato em que são inseridos. A palavra passe será transformada antes de ser armazenada recorrendo à função de &lt;span style="font-style: italic;"&gt;hashing&lt;/span&gt; sha1 utilizando uma chave salt para impedir a obtenção da palavra passe através de dicionários com &lt;span style="font-style: italic;"&gt;hashs&lt;/span&gt; conhecidos. Ao modelo user_model.php serão acrescentados os seguintes métodos:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;private &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;hashPassword&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$password&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//gera uma string salt aleatória&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'salt'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sha1&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;rand&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;())&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//gera o hashing da password&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'password'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sha1&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'salt'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;].&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$password&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;register&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'username'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;input&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;post&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'username'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$hash&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;hashPassword&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;input&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;post&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'passwd'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'passwd'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$hash&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'password'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'salt'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$hash&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'salt'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'email'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;input&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;post&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'email'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;db&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;insert&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'users'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;O método &lt;span style="font-family:arial;"&gt;register&lt;/span&gt; guarda os dados, depois de codificar a password. Usando o método &lt;span style="font-family:arial;"&gt;insert&lt;/span&gt; do &lt;span style="font-style: italic;"&gt;Active Record &lt;/span&gt;a inserção de dados não poderia ser mais simples, basta um array associativo em que o indice corresponde ao nome do campo na tabela e depois passá-lo como argumento da função insert. Para obter os dados enviados pelo formulário podem usar o método &lt;span style="font-family:arial;"&gt;$this-&gt;input-&gt;post('nome')&lt;/span&gt; ou aceder directamente ao respectivo elemento no array post: &lt;span style="font-family:arial;"&gt;$_POST['nome']&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;O método &lt;span style="font-family:arial;"&gt;hashPassword&lt;/span&gt; é responsável apenas por gerar um hash e um salt para a password.&lt;br /&gt;&lt;br /&gt;Por fim no controlador &lt;span style="font-family:arial;"&gt;user&lt;/span&gt; vamos criar um método &lt;span style="font-family:arial;"&gt;register&lt;/span&gt; que, neste exemplo, será responsável por criar as regras e executar o ciclo de validação.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;register&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//definição da lista de regras a aplicar&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$config&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'field'&lt;/span&gt;   &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'username'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'label'&lt;/span&gt;   &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Nome de Utilizador'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'rules'&lt;/span&gt;   &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'required|min_length[4]|max_length[20]'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'field'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'passwd'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'label'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Palavra Passe'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'rules'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'required|min_length[6]|matches[confirm]'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'field'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'confirm'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'label'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Confirmação de Palavra Passe'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'rules'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'required'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'field'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'email'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'label'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'E-mail'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;'rules'&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'required|valid_email'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//atribui a lista de regras à próxima execução da validação&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;form_validation&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;set_rules&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$config&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//Teste de validação de dados&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;((&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;form_validation&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;run&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;())==&lt;/span&gt;FALSE&lt;span style="color: rgb(153, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//caso a validação não tenha tido sucesso&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//ou ainda não foi invocada&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/register'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//se a validação teve sucesso&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;user_model&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;register&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//redirecciona para uma página de sucesso&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;redirect&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/success'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Neste exemplo recorremos ao método de criar um array com todas as regras de validação a aplicar. Nesse array cada elemento possui três campos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;field: possui o nome do campo a avaliar, deverá obrigatoriamente corresponder ao id do elemento do formulário que fornecerá esses dados.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;label: contém uma identificação do campo, compreensível pelos utilizadores, a aparecer na mensagem de erro.&lt;/li&gt;&lt;li&gt;rules: aqui são declaradas as regras a ser aplicadas ao campo, as mais comuns são: required, campo obrigatório; min_length/max_length, definem os limites de tamanho em caracteres dos dados inseridos; valid_email, endereço de correio electrónico válido; etc...&lt;/li&gt;&lt;/ul&gt;A estrutura if no exemplo garante a execução do ciclo de validação. Na primeira chamada ao controlador, invocada pelo utilizador, a validação falha sempre sem qualquer erro, por isso é exibida a view com o formulário. O utilizador ao enviar os dados faz com que o controlador seja de novo invocado e a validação executada. Se falhar será re-exibido o formulário com as respectivas mensagens de erro. Caso os dados estejam correctamente inseridos, estes serão guardados na base de dados. Após o armazenamento o controlador redirecciona-nos para uma página de sucesso que não foi listada neste exemplo, dada a sua simplicidade deixo-a ao critério de cada um.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-7115716642652119805?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=tWNTWPpQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=aKuPnABF"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=aKuPnABF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/4Hf9xnwPBK0/tutorial-mvc-4-inserir-de-dados.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/tutorial-mvc-4-inserir-de-dados.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-7335938090423408736</guid><pubDate>Tue, 21 Oct 2008 15:28:00 +0000</pubDate><atom:updated>2008-10-21T09:49:24.012-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><title>Código fonte do Android disponível</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IuNEq9i4pQpdb1rdeNh4j3zpSv4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IuNEq9i4pQpdb1rdeNh4j3zpSv4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IuNEq9i4pQpdb1rdeNh4j3zpSv4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IuNEq9i4pQpdb1rdeNh4j3zpSv4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Foi hoje liberado o código fonte da plataforma móvel Android do Google.&lt;br /&gt;Foi criado também o site &lt;a href="http://source.android.com/"&gt;http://source.android.com&lt;/a&gt; onde se pode obter o código fonte e acompanhar tarefas de desenvolvimento, correcções ou mesmo participar com colaborações próprias. A licença é a Apache2.0, mas certas partes do código podem ser fornecida noutras licenças, como a GPLv2 no kernel Linux.&lt;br /&gt;&lt;br /&gt;É sem dúvida uma excelente noticia para o mundo do software livre e parece que sempre teremos um peso pesado para lutar contra a apple e a microsoft.&lt;br /&gt;&lt;br /&gt;Para obter o código fonte, basta seguir as instruções disponibilizadas &lt;a href="http://source.android.com/download"&gt;aqui.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Outro pormenor curioso é o facto de não estar disponível nenhuma forma de obter o código para a plataforma windows!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-7335938090423408736?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=GL1naCmI"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=ib3Vaeal"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=ib3Vaeal" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/7GaQ0gDQaaU/cdigo-fonte-do-android-disponvel.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/cdigo-fonte-do-android-disponvel.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-9159698847054095682</guid><pubDate>Thu, 16 Oct 2008 16:11:00 +0000</pubDate><atom:updated>2008-10-20T15:52:53.978-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial MVC-CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">tutoriais</category><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><title>Tutorial MVC - 3 Acesso a dados</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qJgsz47MD2n6idZeIWCunSncmvE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qJgsz47MD2n6idZeIWCunSncmvE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qJgsz47MD2n6idZeIWCunSncmvE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qJgsz47MD2n6idZeIWCunSncmvE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Depois de termos dado uma visão global ao padrão MVC e de dar os primeiros passos com a &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt; CodeIgniter vamos abordar uma parte também importante de uma aplicação web: o acesso a bases de dados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Criação da base de dados e configurar o acesso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ao contrário de algumas &lt;span style="font-style: italic;"&gt;frameworks&lt;/span&gt;, p.e.: &lt;span style="font-style: italic;"&gt;Symfony&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Django&lt;/span&gt;, etc... o CodeIgniter não possui nenhum mecanismo próprio para criação de bases de dados, à semelhança do que acontece no &lt;span style="font-style: italic;"&gt;Ruby on Rail&lt;/span&gt;s e &lt;span style="font-style: italic;"&gt;CakePHP&lt;/span&gt;, pelo que esta terá que ser criada com as ferramentas fornecidas pelo seu SGBD. O CodeIgniter segue um padrão de acesso a dados conhecido como Active Record que será demonstrado mais à frente.  Para este capítulo apenas iremos utilizar a seguinte tabela utilizando o MySQL:&lt;pre&gt;&lt;tt&gt;&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;CREATE&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;TABLE&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`users`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`id`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;int&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;11&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NOT&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NULL&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;auto_increment&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`username`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;varchar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;20&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt; character &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;/b&gt; latin1 &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NOT&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NULL&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`passwd`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;varchar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;40&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt; character &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;/b&gt; latin1 &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NOT&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NULL&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`salt`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;varchar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;40&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt; character &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;/b&gt; latin1 &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NOT&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NULL&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`email`&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;varchar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;100&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt; character &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;/b&gt; latin1 &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NOT&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;NULL&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;PRIMARY&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;KEY&lt;/span&gt;&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;`id`&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;Agora vamos configurar o acesso à base de dados no CodeIgniter, dentro do directório application/config editem o ficheiro database.php:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$active_group&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"default"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$active_record&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; TRUE&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'hostname'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"localhost"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'username'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"o_meu_nick"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'password'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"a_minha_pass"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'database'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"nome_da_bd"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'dbdriver'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"mysql"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'dbprefix'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;""&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'pconnect'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; TRUE&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'db_debug'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; TRUE&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'cache_on'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; FALSE&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'cachedir'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;""&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'char_set'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"utf8"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'default'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;][&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'dbcollat'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;"utf8_general_ci"&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;O ficheiro em sí não tem muito que saber, basta alterar o valor de cada elemento com os dados respectivos. Para seguir este tutorial será necessário ter a variável $active_record a TRUE. O passo seguinte será configurar o acesso à classe de base de dados. Isto pode ser feito de dois modos: activar o carregamento automático da classe ou carregá-la no construtor de cada &lt;span style="font-style: italic;"&gt;Controller&lt;/span&gt; ou &lt;span style="font-style: italic;"&gt;Model&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;&lt;/span&gt;&lt;/i&gt;&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//---Carregamento "Manual"---&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//em cada controlador ou modelo invocar&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//$this-&amp;gt;load-&amp;gt;database()&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; User &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;{&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;  //em PHP4: function Nome()&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;__construct&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;   parent&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;::&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;    $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;database&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;}&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//---Carregamento automático&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//para carregamento automático editar config/autoload.php&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//e adicionar 'database' ao array $autoload['libraries']&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$autoload&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'libraries'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'database'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Para verificar se a conexão à base de dados está a funcionar basta correr o seu browser e abrir o url da sua aplicação. Se não foi informado de algum erro, então está tudo a funcionar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nota:&lt;/span&gt; A escolha de utilização de carregamento automático ou não classes está dependente do tipo de projecto. Se for uma classe utilizada por todos os controladores recomenda-se o carregamento automático de modo a poupar algum esforço. Se essa classe apenas for utilizada por algumas funcionalidades então recomendo que se faça o carregamento apenas quando necessárias para evitar sobrecarregar os controladores com material desnecessário.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ler registos da base de dados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A exibição de dados é certamente a tarefa mais comum em aplicações web. Para demonstrar como realizar este tipo de tarefas  vamos criar duas actividades num controlador &lt;span style="font-family:arial;"&gt;User&lt;/span&gt; em &lt;span style="font-family:arial;"&gt;controllers/user.php&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;user/all&lt;/li&gt;&lt;li&gt;user/show/$id&lt;/li&gt;&lt;/ul&gt;Para testar este exemplo recomendo que introduzam alguns dados na tabela users.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; User &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;{&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;__construct&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;   parent&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;::&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;    $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;helper&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'url'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;all&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    //selecciona todos os registos de users&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;    $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'list'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]=&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;get&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'users'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    //envia a lista de dados para a view&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;    $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'user/all'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    //vai buscar o id ao url, 3º elemento&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    //se não for escrito retorna 0&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;    $username&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;uri&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;segment&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;3&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;0&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    if&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$username&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;==&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);font-size:130%;" &gt;0&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;    {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;     //se o id não foi fornecido redireciona&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;     &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;redirect&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'user/all'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;    }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    else&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;    {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;     $result&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;get_where&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;     'users'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;     array&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'username'&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;));&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;     //selecciona a única linha do resultado&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;     $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'user'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$result&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;row&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;     $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'user/show'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;    }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;}&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;E agora as duas &lt;span style="font-family:arial;"&gt;user/all&lt;/span&gt; e &lt;span style="font-family:arial;"&gt;user/show&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;font-family:arial;" &gt;user/all:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;h1&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Lista de utilizadores&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;h1&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;table&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;tr&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Email&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;th&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;tr&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$list&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;result&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;):&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;tr&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;username &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;email &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;anchor&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'user/show/'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;td&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;tr&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;endforeach&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;table&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;font-family:arial;" &gt;user/show:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;b&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;:&amp;lt;/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;b&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:100%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;username &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;b&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;E&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;-&lt;/span&gt;&lt;span style="font-size:100%;"&gt;mail&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;:&amp;lt;/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;b&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:100%;" &gt;$user&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;email &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Os metodos mais importantes para este exempo são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;$this-&gt;db-&gt;get('tabela'):&lt;/span&gt; Devolve todos os dados da tabela (SELECT * FROM tabela)&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;$this-&gt;db-&gt;get_where('tabela', critérios):&lt;/span&gt; selecciona todos os registo que correspondam a um critério.&lt;/li&gt;&lt;/ul&gt;Os registos devolvidos são armazenados numa estrutura em memória da qual se pode extrair cada um deles como instância de um objecto Active Record, como neste exemplo, ou alternativamente num array associativo.&lt;br /&gt;Neste exemplo foram usados dois métodos: result() e row(). O método result, usado na view user/all gera uma lista de objectos row, cada um deles representa um registo. O método row extrai directamente uma linha, o que é muito útil para casos como este em que a consulta à base de dados devolve uma única linha, caso devolva mais que uma linha o método row devolverá apenas a primeira linha.&lt;br /&gt;&lt;br /&gt;Neste exemplo utilizamos o helper url, este fornece, entre outras, a função anchor que nos permite criar hyperlinks de forma dinâmica para outras funcionalidades da nossa aplicação. No exemlo acima podemos ver que esta é utilizada para criar ligações para a página show de cada registo.&lt;br /&gt;&lt;br /&gt;Outra função a destacar que utilizamos é a função uri-&gt;segment que extrai elementos da nossa url, neste caso o username. O segundo parâmetro é opcional e indica o valor por omissão caso se invoque esa funcionalidade sem fornecer o username.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modelos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como foi explicado no primeiro tutorial, no padrão MVC o Model é responsável pela abstracção do acesso a dados. O que se passa no CodeIgniter é que o padrão Active Record já faz isso de uma forma mais geral. Pelo que é possível criar um projecto sem ter que implementar classes modelo, mas para casos mais especificos como consultas mais complexas é recomendado implementar essas funções numa classe Model.&lt;br /&gt;&lt;br /&gt;Podemos reestruturar o exemplo anterior tendo em conta os seguintes aspectos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Estamos a pedir à tabela todos os campos de um registo quando apenas utilizamos dois deles&lt;/li&gt;&lt;li&gt;Podemos criar métodos para obter os dados prontos a ser exibidos, encurtando o tamanho dos nossos controladores&lt;/li&gt;&lt;/ul&gt;Para isso vamos criar uma classe user_model.php no directório models:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; User_model &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Model&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;{&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;getDisplayableByUsername&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;)&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    //indica os campos&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;select&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'username, email'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$result&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;get_where&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'users'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'username'&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;));&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$result&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;row&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;getAllDisplayable&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;select&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'username, email'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$result&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;db&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;get&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'users'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$result&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;result&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;();&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Neste exemplo criamos duas funções que retornam os resultados apenas com os dados que desejamos exibir. O método &lt;span style="font-family:arial;"&gt;select&lt;/span&gt; da classe &lt;span style="font-family:arial;"&gt;db&lt;/span&gt; encarrega-se de definir os campos a retornar pela próxima consulta à base de dados.&lt;br /&gt;Agora falta-nos alterar o controlador para utilizar o model.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; User &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;__construct&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;parent&lt;span style="color: rgb(153, 0, 0);"&gt;::&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;helper&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'url'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;model&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user_model'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;all&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//selecciona todos os registos de users&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//a ser exibidos&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'list'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;user_model&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;getAllDisplayable&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/all'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;show&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//vai buscar o id ao url, 3º elemento&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;//se não for escrito retorna 0&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$username&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;uri&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;segment&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$username&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;==&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;     &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;redirect&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/all'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;     &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;=&lt;/span&gt;&lt;br /&gt; &lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;user_model&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;GetDisplayableByUsername&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$username&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;     &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'user/show'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;tt&gt;&lt;span&gt;&lt;i&gt;&lt;span&gt;&lt;tt&gt;&lt;span style="font-size:130%;"&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;    &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-size:130%;"&gt;&lt;tt&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Para completar, como o método &lt;span style="font-family:arial;"&gt;GetAllDisplayable&lt;/span&gt; já retorna uma lista result devemos ir ao código da view &lt;span style="font-family:arial;"&gt;user/all&lt;/span&gt; e remover a chamada ao método &lt;span style="font-family:arial;"&gt;result()&lt;/span&gt; no ciclo &lt;span style="font-family:arial;"&gt;foreach&lt;/span&gt; para que tudo funcione devidamente.&lt;br /&gt;&lt;br /&gt;Este capítulo fica por aqui, no próximo serão abordados os temas de adição e edição de registos, assim como a validação dos dados introduzidos pelos utilizadores.&lt;br /&gt;Até à próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-9159698847054095682?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=WuJpfpPu"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=1bVYuR0J"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=1bVYuR0J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/wUMAXkFlC6w/tutorial-mvc-3-acesso-dados.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/tutorial-mvc-3-acesso-dados.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-4447350110958706960</guid><pubDate>Mon, 13 Oct 2008 16:19:00 +0000</pubDate><atom:updated>2008-10-17T15:24:44.491-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial MVC-CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">tutoriais</category><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><title>Tutorial MVC - 2 CodeIgniter, Primeiros Passos</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3yGRuVPGzlZEgjh4tqGc_jd4pps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3yGRuVPGzlZEgjh4tqGc_jd4pps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3yGRuVPGzlZEgjh4tqGc_jd4pps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3yGRuVPGzlZEgjh4tqGc_jd4pps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Primeiros passos&lt;/span&gt;&lt;br /&gt;Para utilizar esta &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt; basta qualquer servidor HTTP com suporte a PHP. É extremamente provável que a aplicação que deseja desenvolver necessite de uma base de dados, estão disponíveis os motores livres PostgreSQL, MySQL e SQLite juntamente com outros proprietários.&lt;br /&gt;&lt;br /&gt;O primeiro passo é a instalação da &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt;. Nada mais simples.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fazer o &lt;span style="font-style: italic;"&gt;download&lt;/span&gt; da &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt; &lt;a href="http://codeigniter.com/download.php"&gt;aqui&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Descomprimir o ficheiro.&lt;/li&gt;&lt;li&gt;E copiar o conteúdo o conteúdo do directório CodeIgniter_x.x.xx para o seu directório web.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Nota:&lt;/span&gt; Evite desenvolver a partir do seu servidor de alojamento. Se desejar trabalhar num ambiente semelhante a um ambiente real, será boa ideia recorrer a máquinas virtuais.&lt;br /&gt;&lt;br /&gt;Depois no &lt;span style="font-style: italic;"&gt;web browser&lt;/span&gt; abrir: http://localhost/index.php, se tudo correu bem então está pronto a começar a trabalhar.&lt;br /&gt;&lt;br /&gt;Como ambiente de desenvolvimento recomendo a IDE Eclipse com o plugin PHP Edit (ou mesmo o PDT). É uma ferramenta bastante robusta, mas de fácil utilização e a de completação automática de código funciona bem com esta framework.&lt;br /&gt;&lt;br /&gt;Podem fazer &lt;span style="font-style: italic;"&gt;download&lt;/span&gt; a partir do &lt;a href="http://www.eclipse.org/"&gt;site oficial&lt;/a&gt; e instalar o plugin PHP posteriormente, ou fazer o &lt;span style="font-style: italic;"&gt;download &lt;/span&gt;personalizado com as funcionalidades que desejar no site &lt;a href="http://www.yoxos.com/ondemand/"&gt;yoxos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Estrutura de directórios&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A framework é constituída por um conjunto de directórios por onde estão espalhados os diversos componentes que a compõem.  Ao instalar verá que existe um directório de documentação na raiz, poderá mantê-lo ou apagá-lo, poderá mantê-lo durante o desenvolvimento da aplicação, mas deverá apagá-lo quando disponibilizar a aplicação online, a não ser que queira disponibilizar essa documentação online.&lt;br /&gt;Existe também um ficheiro &lt;span style="font-style: italic;"&gt;index.php&lt;/span&gt;, este tem obrigatoriamente que existir pois todos os pedidos à aplicação arrancam a partir dele.&lt;br /&gt;Por fim temos o directório &lt;span style="font-style: italic;"&gt;system&lt;/span&gt; onde existem os seguintes directórios:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;application:&lt;/span&gt;  este será o directório onde fará o desenvolvimento da sua aplicação. Em condições normais será o único a sofrer alterações durante o desenvolvimento.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;cache:&lt;/span&gt; a cache do sistema, onde são criados ficheiros temporários que permitem o aumento da performance da aplicação.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;codeigniter:&lt;/span&gt; o "motor" da framework.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;database: &lt;/span&gt;controladores de base de dados.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;fonts:&lt;/span&gt; tipos de letra.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;helpers:&lt;/span&gt; colecções de funções de auxilio ao desenvolvimento que, por exemplo, poderão ajudar a criar elementos de uma página de uma forma mais simples.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;language:&lt;/span&gt; ficheiros com termos usados pela framework numa determinada língua.  &lt;a href="http://programadoranonimo.blogspot.com/2008/10/pacote-de-portugs-standard-para.html"&gt;Instalação do Português padrão.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;library:&lt;/span&gt; biblioteca com as classes de referência que podem ser utilizadas no desenvolvimento da aplicação.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;logs:&lt;/span&gt; logs de sistema&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;plugins: &lt;/span&gt;similar aos helpers, só que em vez de uma colecção de funções os plugins apenas disponibilizam uma função.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;scaffolding:&lt;/span&gt; motor de scaffolding. Permite a gerar automaticamente páginas de visualização, criação, edição e eliminação de dados a partir de tabelas da base de dados. Esta ferramenta apenas deve ser utilizada durante o desenvolvimento pois não oferece qualquer garantia de segurança. Este modelo de scaffolding deixou de ser oficialmente suportado e será substituido, pelo que não deverá ser abordado para já nesta série de tutoriais.&lt;/li&gt;&lt;/ul&gt;Dentro da pasta application temos um conjunto de directórios orientado para o desenvolvimento da aplicação. Os directórios &lt;span style="font-style: italic;"&gt;helpers, languages &lt;/span&gt;e&lt;span style="font-style: italic;"&gt; libraries &lt;/span&gt;são equivalentes aos que encontramos na directoria &lt;span style="font-style: italic;"&gt;system&lt;/span&gt;, mas neste caso destinam-se a componentes criados especificamente para o seu projecto. Os restantes directórios são os seguintes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;config: &lt;/span&gt;ficheiros de configuração.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;controllers:&lt;/span&gt; local onde criará os seus &lt;span style="font-style: italic;"&gt;controllers&lt;/span&gt;.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;errors:&lt;/span&gt; páginas de erro personalizadas, como por exemplo o famoso 404-Not Found&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;hooks:&lt;/span&gt; extensões ao CodeIgniter, onde poderá criar funções ou classes que serão executadas em determinados momentos do fluxo de processamento da aplicação.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;models:&lt;/span&gt; local onde criará os seus &lt;span style="font-style: italic;"&gt;models&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;views:&lt;/span&gt; local onde criará as suas &lt;span style="font-style: italic;"&gt;views&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Olá mundo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para variar vamos começar com a criação de um programa Olá Mundo.&lt;br /&gt;&lt;br /&gt;A maneira mais simples de o fazer é a utilizar apenas um controlador, vá à pasta &lt;span style="font-style: italic;"&gt;controllers  &lt;/span&gt;e crie um ficheiro chamado &lt;span style="color: rgb(0, 0, 102);"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;primeiro.php&lt;/span&gt; e edite-o. Nele escreva o seguinte código:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;tt&gt;&amp;lt;?php&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; Primeiro &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;  //em PHP4: function Primeiro()&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;__construct&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;/span&gt;     parent&lt;span style="color: rgb(153, 0, 0);"&gt;::&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;index&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;     echo&lt;/span&gt;&lt;/b&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Olá Mundo'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Se digitar no seu &lt;span style="font-style: italic;"&gt;web &lt;/span&gt;browser o endereço &lt;span style="font-family:courier new;"&gt;http://localhost/index.php/primeiro&lt;/span&gt; obterá uma página com o texto Olá Mundo.&lt;br /&gt;&lt;br /&gt;O exemplo começa pela declaração de uma classe que herda as características de classe do CodeIgniter &lt;span style="font-style: italic;"&gt;Controller&lt;/span&gt;, todos os &lt;span style="font-style: italic;"&gt;controllers&lt;/span&gt; são subclasses de &lt;span style="font-style: italic;"&gt;Controller, &lt;/span&gt;o nome da classe e do ficheiro são iguais, a única diferença é que o nome da classe deve começar sempre com maiúscula. Depois temos duas funções: a função &lt;span style="font-family:courier new;"&gt;Primeiro()&lt;/span&gt; é o construtor da classe, que neste caso apenas chama o construtor da sua superclasse, este pode ser usado para carregar qualquer tipo de componente do sistema; a segunda função é uma actividade do controlador&lt;span style="font-style: italic;"&gt;&lt;/span&gt;, normalmente todos os controladores têm uma função index que é chamada sempre que esse controlador é invocado sem que seja invocada qualquer função.&lt;br /&gt;&lt;br /&gt;Vamos acrescentar mais uma função ao nosso controlador:&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; Primeiro &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;{&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;  (...)&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;opiniao&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  {&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'Estou a gostar muito desta ferramenta'&lt;/span&gt;&lt;span style="font-size:130%;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;  }&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;}&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;br /&gt;Esta função é similar à anterior, apenas serve para demonstrar o funcionamento dos endereços. Neste caso, para invocar esta actividade do controlador deverá digitar o endereço: &lt;span style="font-family:courier new;"&gt;http://localhost/index.php/primeiro/opiniao&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A estrutura padrão dos endereços é:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...index.php/Nome do Controlador/Actividade/Informação Complementar&lt;/span&gt;&lt;br /&gt;Caso não seja especificada nenhuma actividade será sempre executada a função &lt;span style="font-family:courier new;"&gt;index&lt;/span&gt;, como no primeiro exemplo, pelo que deverá existir sempre um &lt;span style="font-family:courier new;"&gt;index&lt;/span&gt; em cada controlador.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Views&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As views são ficheiros PHP que contêm código HTML e chamadas PHP responsáveis pela apresentação dos dados. No exemplo anterior eram os controladores que apresentavam qualquer conteúdo na página, o que não é prático nem segue a norma MVC, pelo que vamos fazer algumas alterações.&lt;br /&gt;&lt;br /&gt;Primeiro vamos acrescentar uma nova view, no directório views crie o ficheiro mensagem.php com o seguinte conteúdo:&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;html&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;head&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;title&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$title&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;title&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;head&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;body&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;h1&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$message&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;h1&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;body&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;html&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Esta &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; será invocada por ambos os controladores e como podemos observar serão passadas duas variáveis: &lt;span style="font-family:courier new;"&gt;title&lt;/span&gt; que definirá o titulo a aparecer na janela do &lt;span style="font-style: italic;"&gt;browser&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;message&lt;/span&gt; que terá a mensagem que aparecerá na página web.&lt;br /&gt;Para utilizar a view vamos alterar ambas as acções do controlador.&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&amp;lt;?php&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;/b&gt; Primeiro &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extends&lt;/span&gt;&lt;/b&gt; Controller&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="color: rgb(154, 25, 0);"&gt;  //em PHP4: function Primeiro()&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;__construct&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; {&lt;/span&gt;&lt;br /&gt;    parent&lt;span style="color: rgb(153, 0, 0);"&gt;::&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Controller&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;index&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'title'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'Primeiro Exemplo'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'message'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'Olá Mundo!'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'mensagem'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;opiniao&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'title'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'A minha opinião'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'message'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;]=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'Estou a gostar muito desta ferramenta'&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;tt&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;load&lt;span style="color: rgb(153, 0, 0);"&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'mensagem'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Agora o funcionamento ficou ligeiramente alterado. Para passar dados a uma view é necessário criar um vector associativo em que o índice terá correspondência a uma variável com o mesmo nome na &lt;span style="font-style: italic;"&gt;view.&lt;/span&gt; A última linha de cada actividade é uma chamada à &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; onde o primeiro parâmetro corresponde ao nome do ficheiro da &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; (a extensão PHP pode ser omitida), e o segundo corresponde à estrutura com os dados a ser passados. Não há qualquer obrigação de passar dados para uma view, pelo que nestes casos deverá apenas invocar a &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; apenas com o primeiro parâmetro.&lt;br /&gt;&lt;br /&gt;Para uma &lt;span style="font-style: italic;"&gt;view&lt;/span&gt; podem ser passados dados de qualquer tipo, sejam eles numéricos, texto, objectos ou outras estruturas de dados. O próximo exemplo demonstra como passar um vector para a view e como este normalmente é tratado.&lt;br /&gt;Crie uma nova view chamada topics.php com o seguinte conteúdo:&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;html&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;head&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;title&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Uma lista de tópicos&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;title&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;head&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;body&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;ul&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$topics&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$topic&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;):&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;li&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$topic&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;li&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;?php&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;endforeach&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;?&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;ul&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;body&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:130%;"&gt;html&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Aqui a única diferença é que é usado um ciclo foreach para escrever cada um dos elementos na página.&lt;br /&gt;&lt;br /&gt;Para pôr esta view a funcionar necessitamos de criar uma actividade no nosso controlador que o invoque, por isso vamos adicionar a função topics():&lt;tt&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;tt&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;/span&gt;&lt;/b&gt;&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;topics&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;()&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;{&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;  $data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'topics'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;]&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;=&lt;/span&gt;&lt;span style="font-size:130%;"&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;array&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'Model'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'View'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'Controller'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;  $this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'topics'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$data&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;tt&gt;&lt;br /&gt;&lt;/tt&gt;Nada mais simples.&lt;br /&gt;&lt;br /&gt;No directório &lt;span style="font-style: italic;"&gt;views&lt;/span&gt; é possível criar subdirectórios para as organizar. Para invocar essas &lt;span style="font-style: italic;"&gt;views&lt;/span&gt; deverá incluir o nome do directório na sua chamada:&lt;tt&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:130%;" &gt;$this&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;load&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;view&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;'directory/topics'&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;/span&gt;&lt;/tt&gt;&lt;span style="font-family:monospace;"&gt;&lt;span style="font-family:Georgia,serif;"&gt;E &lt;/span&gt;&lt;/span&gt;assim terminamos este capítulo, no próximo serão abordados o uso de bases de dados e os modelos.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-4447350110958706960?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=aHbrMDC0"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=2isYzJN0"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=2isYzJN0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/csGL0b4bFxg/tutorial-mvc-2-codeigniter-primeiros.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/tutorial-mvc-2-codeigniter-primeiros.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-6986795181287191511</guid><pubDate>Mon, 13 Oct 2008 12:46:00 +0000</pubDate><atom:updated>2008-10-13T06:31:29.366-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><title>Pacote de Portugês standard para CodeIgniter</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rZ81s6EkTlX1uxGZ6IuPcOkG52k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rZ81s6EkTlX1uxGZ6IuPcOkG52k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rZ81s6EkTlX1uxGZ6IuPcOkG52k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rZ81s6EkTlX1uxGZ6IuPcOkG52k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Criei um pacote de língua portuguesa standard para o CodeIgniter 1.6.3, a partir do pacote pt-BR criado por &lt;a href="http://rapidshare.com/files/100611516/ci_pt-br_1.6.1.zip.html"&gt;Matheus Bombonato&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Os pacotes de línguas são constituidos por diversos termos e mensagens utilizados nas aplicações desenvolvidas com o CodeIgniter como por exemplo: mensagens de erro, nomes dos meses, dias da semana, etc...&lt;br /&gt;&lt;br /&gt;Para o instalar faça o &lt;span style="font-style: italic;"&gt;download&lt;/span&gt; e extraia-o para o directório &lt;span style="font-style: italic;"&gt;wwwroot/system/application/languages.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://codeigniter.com/wiki/65cd617a760992fce592e8e6190a0f7c/"&gt;Download pt-PT&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Depois edite o ficheiro &lt;span style="font-style: italic;"&gt;wwwroot/system/application/config/config.php&lt;/span&gt;&lt;span&gt; e substitua a seguinte linha:&lt;br /&gt;&lt;blockquote&gt;$config['language']    = "english";&lt;/blockquote&gt;Por esta:&lt;br /&gt;&lt;blockquote&gt;$config['language']    = "pt-pt";&lt;/blockquote&gt;&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/8093072554885564114-6986795181287191511?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=kh70UXj8"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=vOMK35Q6"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=vOMK35Q6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/MdHDBIbhQ7A/pacote-de-portugs-standard-para.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/pacote-de-portugs-standard-para.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-4689518806710272948</guid><pubDate>Fri, 10 Oct 2008 00:49:00 +0000</pubDate><atom:updated>2008-10-09T19:16:50.089-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial MVC-CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">tutoriais</category><title>Tutorial MVC - 1 Introdução</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/POYbdg0mi6Tetf5JM3fzprMk_Mc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/POYbdg0mi6Tetf5JM3fzprMk_Mc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/POYbdg0mi6Tetf5JM3fzprMk_Mc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/POYbdg0mi6Tetf5JM3fzprMk_Mc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Este tutorial tem como objectivo abordar o desenvolvimento de aplicações web seguindo uma arquitectura MVC. Será criada uma série de tutorias com uma sequência idêntica à do desenvolvimento de um projecto. Não será focada qualquer questão relativa ao webdesign a não ser que seja estritamente necessário. A ferramenta utilizada neste tutorial será a framework &lt;a href="http://codeigniter.com/"&gt;codeigniter&lt;/a&gt; por razões que serão descritas à frente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que é o MVC?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O MVC, Model View Controller, é um padrão de desenvolvimento de aplicações, normalmente, mas não forçosamente, web. A implementação de aplicações usando este padrão são feitas com recurso a frameworks, apesar de não ser obrigatória a utilização de uma para seguir o padrão.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Camadas e respectivas funções&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Model:&lt;/span&gt; Nesta camada são definidas as regras de acesso e manipulação dos dados, que normalmente são armazenados em bases de dados ou ficheiros, mas nada indica que sirva só para alojamento persistente dos dados. Pode ser usado para dados em memória volátil, p.e.: memória RAM, apesar não se verificar tal utilização com muita frequência. Todas as regras relacionadas com tratamento, obtenção e validação dos dados devem ser implementados nesta camada.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;View: &lt;/span&gt;Esta camada é responsável por gerar a forma como a resposta será apresentada, página web, formulário, relatório, etc...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Controller: &lt;/span&gt;É a camada responsável por responder aos pedidos por parte do utilizador. Sempre que um utilizador faz um pedido ao servidor esta camada é a primeira a ser executada.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Cadeia de Funcionamento&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta é a cadeia normal de funcionamento deste padrão, em que todas as camadas são usadas, o que nem sempre acontece:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;O utilizador efectua um pedido ao servidor&lt;/li&gt;&lt;li&gt;O &lt;span style="font-style: italic;"&gt;controller&lt;/span&gt; processa o pedido do utilizador.&lt;/li&gt;&lt;li&gt;O &lt;span style="font-style: italic;"&gt;controller&lt;/span&gt; efectua uma chamada ao &lt;span style="font-style: italic;"&gt;model&lt;/span&gt;, para obter ou manipular dados.&lt;/li&gt;&lt;li&gt;O &lt;span style="font-style: italic;"&gt;model&lt;/span&gt; devolve os dados pedidos que serão passados ao &lt;span style="font-style: italic;"&gt;view.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;A view&lt;/span&gt; gera a apresentação dos dados, p.e.: uma página HTML.&lt;/li&gt;&lt;/ol&gt;Existe a possibilidade, bastante frequente, de um pedido não precisar de invocar o &lt;span style="font-style: italic;"&gt;model&lt;/span&gt;. Basta querer gerar conteúdo que não necessite de qualquer tipo de dados. Neste caso o &lt;span style="font-style: italic;"&gt;controller&lt;/span&gt; chamará directamente ao &lt;span style="font-style: italic;"&gt;view&lt;/span&gt;. Existe também a possibilidade de não ser gerada uma &lt;span style="font-style: italic;"&gt;view&lt;/span&gt;, p.e.: o pedido ser uma actualização de dados. Apesar de não ser necessário é recomendado fazê-lo, as regras de interacção obrigam a que se notifique o utilizador do sucesso de uma operação, ou seja, a utilização de uma &lt;span style="font-style: italic;"&gt;view&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Frameworks Existentes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Existem diversas frameworks que cobrem inúmeras linguagens,algumas só para web e outras mais genéricas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;PHP:  &lt;/span&gt;CodeIgniter, CakePHP, Symfony, Zend Framework,...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ruby:&lt;/span&gt; Ruby on Rails, ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Python: &lt;/span&gt;Django, Zope, TuboGears,...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Java:&lt;/span&gt; J2EE, Spring Framework, ...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mono/.NET:&lt;/span&gt; Monorail, ...&lt;/li&gt;&lt;/ul&gt;Nota: Estas são as frameworks mais populares tendo em conta que são Software Livre, existem outras proprietárias, que obviamente não recomendo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Porquê o CodeIgniter?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;A resposta curta: porque simplesmente estou a utilizá-la de momento.&lt;br /&gt;A resposta comprida: os critérios para o tutorial foram os mesmos que para o meu projecto. A questão da linguagem caiu obviamente para o php, quer pela sua popularidade em aplicações web, quer pelo facto de ser bastante fácil obter serviços de alojamento que o suportem. Quanto à framework já utilizei o Symfony e já brinquei com o CakePHP e estou agora a utilizar o CodeIgniter. A escolha desta frameowork recaiu sobre os seguintes critérios: é simples e com um desempenho bastante bom e a sua abordagem é bastante mais directa que o CakePHP e o Symfony. Esta última é mais complexa, apesar de não ser de todo uma desvantagem. Escolhi o CodeIgniter por ter a "melhor relação custo/qualidade".&lt;br /&gt;&lt;br /&gt;No próximo tutorial metemos mão à obra. Até breve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-4689518806710272948?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=QQLynEnR"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=9hYfaHTL"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=9hYfaHTL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/btFJ9ABWIaI/tutorial-mvc-1-introduo.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/tutorial-mvc-1-introduo.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-6623422534637675985</guid><pubDate>Tue, 07 Oct 2008 22:31:00 +0000</pubDate><atom:updated>2008-10-07T16:03:41.213-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mono</category><title>Mono 2.0 lançado</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CLI0yJO0N6usCpRxYuU3uJzj6Js/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CLI0yJO0N6usCpRxYuU3uJzj6Js/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CLI0yJO0N6usCpRxYuU3uJzj6Js/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CLI0yJO0N6usCpRxYuU3uJzj6Js/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Foi lançada a versão 2.0 da polémica implementação do .net mono. Uma das criticas ao mono é estar sempre alguns passos atrás da implementação da microsoft, que neste caso foi bastante encurtada. As novidades são o compilador C# 3.0, compilador de VB.Net 8, Asp.net 2.0, Linq, etc... Fica também prometido que uma enorme quantidade de aplicações desenvolvidas com o ms.Net irão correr em qualquer sistema com o mono, e que a maior parte das que não correm, por usar API's especificas de sistemas windows, serão facilmente adaptáveis. Apenas uma pequena parte das aplicações é que necessitarão de modificações profundas para funcionar.&lt;br /&gt;Esta lançamento deu-se na mesma semana em que a Free Software Foundation anunciou o fim do projecto dotGNU, outra implementação do .net, como projecto prioritário. Uma das razões foi a da existência do mono e de aproveitarem o facto para aplicar os recursos noutros projectos também essenciais.&lt;br /&gt;&lt;br /&gt;O maior senão continua a ser a sombra que paira no ar na questão da possível ameaça de patentes. Apesar de baseado num standard ECMA muitas das API's podem estar "contaminadas" com "invenções" dos suspeitos do costume.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.0"&gt;Nota de lançamento oficial&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-6623422534637675985?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=evHAyf0V"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=hBBKiVvF"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=hBBKiVvF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/zk1_JGS6DCk/mono-20-lanado.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/mono-20-lanado.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-4023184352961052502</guid><pubDate>Thu, 02 Oct 2008 12:27:00 +0000</pubDate><atom:updated>2008-10-02T06:39:19.886-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python</category><category domain="http://www.blogger.com/atom/ns#">linguagens</category><title>Python atinge a versão 2.6</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GN9mKu-OldfH9zYOhMqx7rdDb-A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GN9mKu-OldfH9zYOhMqx7rdDb-A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GN9mKu-OldfH9zYOhMqx7rdDb-A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GN9mKu-OldfH9zYOhMqx7rdDb-A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Foi lançada mais uma versão de uma das mais populares linguagens de scripting existentes.&lt;br /&gt;Esta versão é já uma preparação para a versão 3.0, também conhecida por 3000, mas mantendo a compatibilidade com as versões anteriores, facto que não se verificará na versão 3.0. A grande vantagem é a possibilidade de adaptação à versão 3.0, que deverá ser lançada ainda em 2008, e a de se poder escrever código que será reutilizável com a essa nova. Relembro que a versão 3.0 será uma reestruturação que será incompatível com a versão 2.x.&lt;br /&gt;&lt;br /&gt;A destacar temos a integração de um módulo &lt;a href="http://pt.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; na biblioteca padrão da linguagem. Isto poderá ser mais um trunfo para a sua utilização em aplicações web.&lt;br /&gt;Outro grande destaque é o modulo multiporcessing. Um módulo muito semelhante ao modulo de threading que permite construir aplicações concorrentes utilizando processos em vez de threads.&lt;br /&gt;&lt;br /&gt;Esta será certamente a última versão 2.x tendo em conta que a versão 3.0 será lançada ainda em 2008, muito provavelmente numa questão de semanas. Isto não significa a morte da versão 2.x, ainda demorará algum tempo até que o código escrito em Python 2.x seja totalmente substituido por Python 3.x.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.python.org/download/releases/2.6/"&gt;Python 2.6&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para quem estiver interessado em exprimentar a versão 3.0 já está disponível o primeiro &lt;span style="font-style: italic;"&gt;Release Candidate&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://www.python.org/download/releases/3.0/"&gt;Python 3000&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-4023184352961052502?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=PgvHKWUO"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=Bjev4EQ9"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=Bjev4EQ9" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/wJG9f9mpAyk/python-atinge-verso-26.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/10/python-atinge-verso-26.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-6109829135966109400</guid><pubDate>Mon, 29 Sep 2008 13:24:00 +0000</pubDate><atom:updated>2008-09-29T08:09:16.986-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Livre</category><category domain="http://www.blogger.com/atom/ns#">Dicas</category><title>Dicas para projectos de Software Livre de sucesso</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LyJO6GsJjvUsT7TNLLJAq0R702w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyJO6GsJjvUsT7TNLLJAq0R702w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LyJO6GsJjvUsT7TNLLJAq0R702w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyJO6GsJjvUsT7TNLLJAq0R702w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Criar uma aplicação de sucesso não é fácil por isso convém pensar bem antes de avançar. O objectivo deste artigo é dar umas dicas que podem garantir esse sucesso. Para quem queira entrar no mundo do Software Livre talvez seja melhor integrar-se primeiro num projecto já existente de modo a ganhar experiência. Mas se sente que tem aquela ideia que vai ter sucesso então certifique-se que ela realmente tem os requisitos para tal. A seguinte lista pretende ajudá-lo nessa tarefa:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ser inovador:&lt;/span&gt;  Isto é o ponto essencial em qualquer projecto de Software Livre. Criar algo que alguém queira mas não exista é o caminho para o sucesso, independentemente de se tratar de um tipo de aplicações novo ou de uma alternativa a uma ferramenta já existente. Por exemplo, apesar de existirem várias aplicações CMS e de grande qualidade não quer dizer que seja uma área fora de questão, se se oferecer algo novo é provável que se tenha sucesso.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Preencher lacunas:&lt;/span&gt; Este ponto é muito similar ao anterior, mas a inovação não é propriamente um requisito, pois criar uma alternativa a uma solução proprietária preenche este requisito se ser propriamente uma inovação. Ter em conta também as necessidades dos utilizadores, converter algo que ninguém quer poderá ser o caminho para o insucesso.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Partilhe o seu trabalho o mais cedo possível:&lt;/span&gt; Dar a conhecer o que se está a fazer no mundo do Software Livre é uma boa forma de adquirir colaboração e ajuda. Por isso é boa ideia promover o seu projecto logo que possa oferecer algumas funcionalidades básicas. Quanto mais cedo lhe der visibilidade mais depressa poderá atingir a popularidade desejada. E ao ser popular o seu projecto vai chamar de certeza colaboradores mais dotados contribuindo para um ciclo vicioso de qualidade.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Divulgue:&lt;/span&gt; Mesmo que não tenha possibilidades de pagar para ter anúncios não quer dizer que seja uma missão impossível publicitar a sua aplicação.  Esteja atento a fóruns, &lt;span style="font-style: italic;"&gt;blogs&lt;/span&gt;, salas de conversa, etc... pois podem surgir oportunidades para recomendar a sua aplicação. Se vir alguém que tenha interesse em alguma ferramenta que se enquadre com a sua aplicação não terá grandes dificuldades para o convencer. E se ele ficar satisfeito com a sua aplicação, será certamente o próximo a recomendá-la a alguém. Outra boa hipótese é a de sugerir a publicações especializadas e/ou bloggers/comunidades de referência a avaliarem a sua aplicação. Neste caso lembre-se de tirar proveito quer das criticas positivas, quer das negativas. Não deixe o seu projecto morrer por causa de uma avaliação menos boa, pois esta pode dar indicações valiosas acerca daquilo que é preciso melhorar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mantenha-se um passo à frente do todos:&lt;/span&gt; Sempre que a sua aplicação oferecer mais que as restantes terá a garantia de a sua ferramenta ser a/uma referência nessa área. É possível que alguém pegue no seu trabalho e inicie um novo ramo de desenvolvimento, fork, o que não é necessariamente mau, pois o que se aplica a si também se aplicará a ele pois só terá sucesso se criar algo de novo. Pode até ser ultrapassado, mas não que dizer que seja arrumado. Basta ver os exemplo dos CMS &lt;span style="font-style: italic;"&gt;Mambo&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;Joomla&lt;/span&gt;, o segundo é um &lt;span style="font-style: italic;"&gt;fork&lt;/span&gt; do primeiro e é talvez a maior referência actual nessa categoria de aplicações, mas apesar disso o &lt;span style="font-style: italic;"&gt;Mambo&lt;/span&gt; continua de boa saúde e recomenda-se. Um &lt;span style="font-style: italic;"&gt;fork&lt;/span&gt; não é uma coisa má desde que o seu projecto continue a dar frutos, antes pelo contrário, se alguém pegou nele para dar asas a um novo trabalho, é porque ele oferece garantias de qualidade.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Não reinvente, apenas invente:&lt;/span&gt; Tentar criar algo que já existe pode ser uma perda de tempo. Reutilize código já existente se possível, recorra a API's ou Frameworks para evitar perder tempo a repetir código ou a recriar funcionalidades já existentes. Outro conceito importantíssimo é recorrer a padrões de desenvolvimento. Ao seguir um modelo baseado em padrões fará com que potenciais colaboradores compreendam mais facilmente aquilo que está a fazer, o que facilitará a sua colaboração futura. O mesmo se passa no sentido inverso, se os seus colaboradores seguirem padrões pré-definidos e conhecidos será mais fácil para si gerir as novas colaborações ao seu projecto.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Os utilizadores são nossos amigos:&lt;/span&gt; Esteja sempre atento aos utilizadores da sua aplicação. Eles poderão ser uma pedra chave para a detecção de problemas e uma excelente fonte de novas ideias. Facilite ao máximo a sua participação e incentive-os a ser críticos em relação ao projecto. Lembre-se que fornecer o que eles querem é garantir que eles terão aquilo que desejam usar. Depois de obter e avaliar as ideias dos utilizadores implemente primeiro ideias de âmbito geral e pondere as ideias de carácter mais particular, pois podem pôr em causa uma utilização mais massiva da sua aplicação. Sempre que se justificar, e se tiver hipótese para tal, crie versões personalizadas, baseadas nessas ideias mais particulares. Se não puder alguém o poderá fazer, e como foi dito atrás, um &lt;span style="font-style: italic;"&gt;fork&lt;/span&gt; não é nenhum pesadelo para si.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Incentive os seus colaboradores:&lt;/span&gt; Primeiro ponto, saber quem são os seus principais colaboradores e manter uma relação próxima com eles para garantir a fidelidade destes ao seu projecto. Se o seu projecto lhe der rendimentos monetários, não seja &lt;span style="font-style: italic;"&gt;Tio Patinhas&lt;/span&gt;, partilhe parte desses rendimentos com eles, ou faculte a possibilidade de eles obterem algum rendimento também. Se tiver condições para tal, contrate-os.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Interoperar pode ser um ás de trunfo:&lt;/span&gt; Se a sua aplicação tiver como alvo o mundo empresarial, lembre-se que cada empresa tem o seu modo de trabalhar, por isso a sua aplicação deve ser o mais adaptável possível. Uma arquitectura orientada a serviços é sempre bem vinda. Mesmo com a vantagem de o Software Livre permitir a adaptação da aplicação às necessidades do utilizador, este processo poderá ser um bocado caro. Uma arquitectura orientada a serviços reduzirá os custos de integração da sua aplicação tornando-a mais atractiva.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Não ter medo das empresas:&lt;/span&gt; Existem várias empresas especializadas em soluções de Software Livre que podem ser benéficas para o seu projecto. Se estiverem interessadas em fornecer serviços recorrendo à sua aplicação então é quase garantido que estarão abertos a patrocinar o seu projecto ou mesmo a contratá-lo para desenvolver o seu projecto sob a sua alçada. Outros potenciais patrocinadores poderão ser empresas que usufruem da sua aplicação e querem garantir a continuidade do seu desenvolvimento. E se vir que compensa porque não criar uma empresa de suporte?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-6109829135966109400?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=WEMqa2eo"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=acNOs2nY"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=acNOs2nY" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/t_QhHn9Wot0/dicas-para-projectos-de-software-livre.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/09/dicas-para-projectos-de-software-livre.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-5621939917594819105</guid><pubDate>Fri, 19 Sep 2008 15:44:00 +0000</pubDate><atom:updated>2008-09-19T11:59:31.524-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Livre</category><category domain="http://www.blogger.com/atom/ns#">OpenGL</category><title>Nova Licença Livre para OpenGL e GLX</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T8M_eSRrcdTU6pl9QXkhiYHswcg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T8M_eSRrcdTU6pl9QXkhiYHswcg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T8M_eSRrcdTU6pl9QXkhiYHswcg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T8M_eSRrcdTU6pl9QXkhiYHswcg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;As licenças do OpenGL e do GLX, SGI Free License B e GPX Public License, foram reescritas e esses componentes essenciais para a utilização de gráficos avançados nos sistemas GNU/Linux passam a ser Software Livre. As versões anteriores dessas licenças tinham clausulas que não eram aceites pela Free Software Foundation nem pela Open Source Initiative. A nova versão é uma versão das já famosas licenças MIT e X11&lt;br /&gt;&lt;br /&gt;Uma óptima noticia que acredito que vá impulsionar o desenvolvimento de software gráfico para sistemas operativos livres. Seria bom que para além deste passo a SGI se tornasse um aliado para ajudar a colmatar um grande problema dos sistemas GNU/Linux: a pouca quantidade de jogos disponiveis que &lt;span style="font-style: italic;"&gt;impedem&lt;/span&gt; a adopção deste sistema por parte de muitos jogadores. Vamos esperar e ver.&lt;br /&gt;&lt;br /&gt;Deixo aqui as declarações oficiais de ambas as partes envolvidas:&lt;br /&gt;&lt;a href="http://www.fsf.org/news/thank-you-sgi"&gt;FSF&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sgi.com/company_info/newsroom/press_releases/2008/september/opengl.html"&gt;SGI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-5621939917594819105?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=NaNJixWr"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=XMKb1Qec"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=XMKb1Qec" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/5gRByIOA4J8/nova-licensa-livre-para-opengl-e-glx.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/09/nova-licensa-livre-para-opengl-e-glx.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-4406619524157812219</guid><pubDate>Thu, 18 Sep 2008 10:34:00 +0000</pubDate><atom:updated>2008-09-18T04:53:28.176-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Livre</category><category domain="http://www.blogger.com/atom/ns#">Distribuição</category><title>Código Fonte ou Binário</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9eJHTmqlqr9FGrV3T-7DYtNtnlw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9eJHTmqlqr9FGrV3T-7DYtNtnlw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9eJHTmqlqr9FGrV3T-7DYtNtnlw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9eJHTmqlqr9FGrV3T-7DYtNtnlw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Uma das principais questões relacionadas com projectos de software livre é o seu modelo de distribuição. As possibilidades são a distribuição em código fonte, que é compilado no acto de instalação, e a distribuição em pacotes binários (deb, RMP, ...), já compilados e prontos a instalar.&lt;br /&gt;&lt;br /&gt;Qual destes modelos é o melhor? Posso dizer que todos.&lt;br /&gt;&lt;br /&gt;A distribuição binária  é sem dúvida uma mais valia, torna rápido e acessível o processo de instalação. A instalação através de código fonte pode ser complicada ou assustadora para muitos utilizadores e o processo de instalação é mais demorado. Compilar leva o seu tempo. Outra vantagem são as dependências, a aplicação poderá necessitar de se ligar bibliotecas de funções ou utilizar outras ferramentas para funcionar, com um bom sistema de instalação binário estas são instaladas automaticamente, ou então são fáceis de identificar.&lt;br /&gt;&lt;br /&gt;Então quais as vantagens de distribuir em código fonte?&lt;br /&gt;A principal vantagem é a de ter um modelo de instalação que pode ser aplicado a qualquer distribuição do sistema operativo. Poderá ser necessário salvaguardar algumas diferenças durante o desenvolvimento, o que tem mais a ver com uma boa abordagem ao desenvolvimento que com a distribuição. Esse tipo de salvaguarda também é essencial para criar pacotes binários.&lt;br /&gt;&lt;br /&gt;Outra vantagem do código fonte tem a ver com o tamanho da instalação, que poderá ser menor, e com a performance, que regra geral será melhorada. Mas não pensem que transformarão um camião num desportivo GT.&lt;br /&gt;&lt;br /&gt;Por fim outra vantagem da instalação através de código fonte é a de permitir personalizar a instalação, podendo definir-se antes da compilação que funcionalidades poderão ou não ser incluídas.&lt;br /&gt;&lt;br /&gt;Um exemplo de vantagens e desvantagens dos dois modelos de instalação é o famoso servidor web Apache. Pode-se proceder a uma instalação binária e adicionar funcionalidades, como por exemplo o PHP, através de ligação a módulos dinámicos, também eles binários, obtendo assim uma instalação fácil rápida e de fácil reconfiguração através da instalação ao remoção de módulos.&lt;br /&gt;A outra opção é compilar o servidor junto com as funcionalidades pretendidas, botendo assim uma instalção monolítica e mais demorada, mas com vantagens significativas em termos de performance e segurança. Neste tipo de instalação a alteração de funcionalidades não é tão simples pois obriga a recompilar tudo de novo.&lt;br /&gt;&lt;br /&gt;No que diz respeito a actualização de software os pacotes binários podem ser também vantajosos caso tenham sido obtidos através de repositórios online, pois ao lançar uma nova versão no repositório o sistema de actualização do sistema notificará o utilizador e permitirá uma instalação fácil e rápida dessa actualização. Mas tal já não acontece se o pacote binário for obtido por download e instalado manualmente.&lt;br /&gt;&lt;br /&gt;No mundo de software livre a distribuição de pacotes de código fonte é "obrigatória", mesmo que se tenham criado pacotes binários para todas as distribuições possíveis. Não confundir com o acesso ao código fonte necessário para garantir as liberdades inerentes ao software livre, trata-se de fornecer o código já pronto para ser instalado com scripts de instalação, makefiles, ... preparados para o efeito. É necessário ter em conta que um utilizador pode querer personalizar a aplicação antes de a instalar, e tal só é possível com a distribuição do código.  Lembre-se que essa personalização poderá ser uma mais valia futura para a sua aplicação.&lt;br /&gt;&lt;br /&gt;Quanto às distribuições binárias, é recomendável fornecer pacotes para as principais distribuições. Existe um leque vasto de distribuições alvo, mas se o seu projecto ganhar notabilidade suficiente poderão ser os próprios criadores de uma distribuição a disponibilizar pacotes da sua aplicação para ela, ou então estes serem criados pela comunidade afecta a ela. Uma boa forma de ganahr notabilidade é a de facilitar o acesso à vossa aplicação, e ter um modelo de instalação fácil é uma excelente ajuda para o efeito. O Software Live no seu melhor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-4406619524157812219?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=1aUV6vbq"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=p05zZEWJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=p05zZEWJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/nukWz5YLbQw/cdigo-fonte-ou-binrio.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/09/cdigo-fonte-ou-binrio.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8093072554885564114.post-3586615146859073783</guid><pubDate>Wed, 17 Sep 2008 22:27:00 +0000</pubDate><atom:updated>2008-09-24T08:50:22.041-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">patentes</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">mono</category><category domain="http://www.blogger.com/atom/ns#">monopólio abusivo</category><title>Mono: Amigo ou Inimigo?</title><description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fRUbyP0XX0A4KEXsyPdHP3aqmjQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fRUbyP0XX0A4KEXsyPdHP3aqmjQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fRUbyP0XX0A4KEXsyPdHP3aqmjQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fRUbyP0XX0A4KEXsyPdHP3aqmjQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Antes de tudo o que é o mono?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Mono é uma implementação em código aberto da plataforma .NET criada pela microsoft, daí a polémica em seu torno. Esta plataforma foi desenvolvida no final dos anos 90 como alternativa à plataforma Java da Sun Microsystems.&lt;br /&gt;&lt;br /&gt;O mono é uma implementação de código aberto da plataforma .NET que pode ser executado em diversos sistemas: Linux, Unix, BSD, Solaris, windows e Mac OSX. O projecto foi desenvolvido pela Ximian que posteriormente foi adquirido pelo gigante Novell.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Quais as vantagens de o usar?  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Mono, essencialmente, não traz nada de muito novo, pois o que é possível fazer com ele já o era com outras ferramentas, nomeadamente o Java, mas isso não é a razão para o pôr já de parte.&lt;br /&gt;&lt;br /&gt;A sua principal vantagem é a de oferecer a possibilidade de executar aplicações desenvolvidas em .NET para Windows noutros sistemas, ou pelo menos em teoria, visto que está dependente da implementação ou não das funcionalidades usadas por essa aplicação no Mono. A versão mais recente da plataforma .NET é a 3.5 enquanto que a versão mais recente do mono é uma implementação que se encontra entre a versão 2.0 e a 3.5 da implementação da microsoft.&lt;br /&gt;&lt;br /&gt;Outra vantagem clara é o facto de programadores do universo windows poderem facilmente se adaptarem ao mundo *nix devido a terem uma ferramenta familiar.  Outro facto a ter em conta é que esta plataforma pode facilitar o desenvolvimento de aplicações. As suas API's são bastante acessíveis e de fácil aprendizagem. E temos também a confortável vantagem de poder desenvolver aplicações com ferramentas web e desktop utilizando a mesma linguagem, de forma similar ao que acontece com o Java.  Visto que o alvo do desenvolvimento de uma aplicação é uma framework e não um sistema operativo faz com que a portabilidade da aplicação para outro sistema seja extremamente simples.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Pontos Fracos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Um dos problemas principais do mono é o seu atraso em relação à implementação da microsoft o que põe a vantagem da portabilidade em causa. Outro entrave à portabilidade é o simples facto de certas APIs serem exclusivas do windows como por exemplo o directx o que anula qualquer vantagem em relação a uma aplicação nativa.&lt;br /&gt;&lt;br /&gt;Outro ponto fraco é a falta de funcionalidades importantes na sua principal IDE, o monodevelop. Ainda lhe falta uma ferramenta de depuração integrada, coisa que pode dificultar bastante a vida aos programadores. Outra questão é a inexistência de um bom editor de HTML/ASPX, coisa que dificulta o desenvolvimento web. Ambos esses pontos estão em desenvolvimento para a próxima versão, mas a sua chegada já é um pouco tardia dada a maturidade do projecto mono.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O lado negro da força&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para quem está a ler este artigo a utilização desta ferramenta parece ser algo de bastante positivo, mas dado o título de amigo ou inimigo levanta-se a questão relacionada com os potenciais problemas desta plataforma. Uma das principais questões é a de se tratar de uma implementação de uma tecnologia da microsoft, que é tudo menos amiga do software livre/código aberto e este é um dos principais factos que leva à desconfiança por parte de muitos membros da comunidade livre.&lt;br /&gt;&lt;br /&gt;O principal ponto contra é a possibilidade de aplicações desenvolvidas com o mono se puderem transformar em alvos das famosas ameaças de patentes já típicas da microsoft. Mesmo que não passem à acção, ficam com mais um argumento a favor num mundo que infelizmente continua a aceitar as patentes de software. Existem mesmo rumores que a microsoft anda a recolher fundos de empresas que utilizam software livre sob a ameaça de processos por violação de patentes, empresas estas que acabam por aceitar o pagamento de compensações pra evitar processos em tribunal caros e morosos. Os custos compensam, o que se torna obviamente em mais um argumento conta as patentes de software, pois as patentes foram criadas como forma de incentivar o desenvolvimento de novas tecnologias e não o seu entrave, como acontece com as patentes de software. Outras opiniões sugerem que a microsoft apoia o mono porque os projectos desenvolvidos para Linux com este podem facilmente ser adoptados pelo mundo windows.&lt;br /&gt;&lt;br /&gt;Outros pontos relevantes são os de o projecto mono ser apadrinhado pela Novell, empresa que aceitou um "acordo de não agressão" a nível de patentes com a microsoft, o que irritou muita gente na comunidade do software livre pois é visto como uma aceitação das acusações de violações de patentes por parte da microsoft, acusações estas que nunca foram fundamentadas com provas concretas. E por fim o mentor do projecto, Miguel de Icaza. Programador que deu um grande contributo ao software livre com projectos como o Gnome, Gnumeric, ... e actualmente o mono. Muito criticado pela sua relação com a microsoft. Primeiro porque imigoru para os EUA para se candidatar a um cargo na microsoft, cargo rejeitado dada a falta de graduação académica que lhe impediu a obtenção de um visto de trabalho necessário para exercer aquele cargo. E por fim por constantes elogios a certas atitudes da microsoft, em especial o apoio dado ao polémico formato de documentos OOXML. Muitas pessoas viram esse apoio como um acto de traição. O contacto profissional que mantém com a microsoft também não ajudam nada na sua reputação.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusão&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O único senão na utilização do mono é a ameaça das patentes de software. Trata-se sem dúvida de uma boa ferramenta e em termos de licenciamento não há quase nada a apontar. GPLv2, LGPLv2 e MIT são licenças que não causam qualquer objecção em termos de software livre, apenas a salientar a possibilidade de licenciamento proprietário.&lt;br /&gt;&lt;br /&gt;A possibilidade de processos de patentes existe mas acredito que seja pouco provável. As patentes de software têm um efeito dissuasor muito idêntico ao que as armas nucleares tiveram no desenrolar da guerra fria. Podem gerar um conflito em que todos poderão sair a perder. Apesar da comunidade de software livre/código aberto ser, regra geral, contra as patentes existem muitas empresas que apoiam este tipo de software que possuem vastos portefólios de patentes.&lt;br /&gt;Por cá temos a vantagem de não serem permitidas patentes de software na União Europeia, mas não é uma garantia de segurança pois a ambiguidade no processo de registo de patentes e definição do que é ou não patente de software, para além de o organismo responsável pela aprovação de patentes é uma organização privada com fins lucrativos, leva a que muitas dessas patentes sejam aprovadas,&lt;br /&gt;A questão resume-se em dar ou não mais um argumento à microsoft para levar a cabo as suas ameaças.&lt;br /&gt;&lt;br /&gt;Do meu ponto de vista, &lt;span style="font-style: italic;"&gt;a prudência é sempre boa conselheira&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8093072554885564114-3586615146859073783?l=programadoranonimo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=GlGX1UTt"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ProgramadorAnonimo?a=tnOfufRZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ProgramadorAnonimo?i=tnOfufRZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ProgramadorAnonimo/~3/M2357iI31MI/mono-amigo-ou-inimigo.html</link><author>noreply@blogger.com (libre)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://programadoranonimo.blogspot.com/2008/09/mono-amigo-ou-inimigo.html</feedburner:origLink></item></channel></rss>
