tag:blogger.com,1999:blog-48709848474636517192024-03-05T19:22:10.982-08:00BitStationTecnologia e inovaçãoFernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-4870984847463651719.post-59236332067392357562012-10-24T04:59:00.000-07:002012-10-30T18:08:05.375-07:00Instalação do RVM no Ubuntu 12.10Primeiro vamos instalar os pacotes build-essential e git-core:<br />
<br />
<span style="color: blue;">$ sudo apt-get install build-essential git-core </span><br />
<br />
A instalação do RVM é feita utilizando CURL. Se você ainda não tem ele instalado instale-o:<br />
<br />
<span style="color: blue;">$ sudo apt-get install curl</span><br />
<br />
Para instalar a RVM use o comando abaixo:<br />
<br />
<span style="color: blue;">$</span><span style="color: blue;"> bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)</span><br />
<br />
Agora precisamos adicionar uma linha ao arquivo bashrc para que o bash saiba aonde encontrar a RVM. Para isso execute o comando abaixo, mas certifique-se de substituir ‘fernando’ pelo seu nome de usuário.<br />
<br />
<span style="color: blue;">$ <span><span class="func">echo</span><span> </span><span class="string">'[[ -s "/home/andre/.rvm/scripts/rvm" ]] && source "/home/andre/.rvm/scripts/rvm"'</span><span> >> ~/.bashrc</span></span></span><br />
<br />
Agora execute:<br />
<br />
<span style="color: blue;">$ source ~/.bashrc</span><br />
<br />
Podemos ver se a RVM está corretamente instalada através do comando:<br />
<br />
<span style="color: blue;">$ type rvm | head -1 </span><br />
<br />
Agora precisamos ver os requisitos necessários para a instalação do Ruby. Para isso execute o comando:<br />
<br />
<span style="color: blue;">$ rvm requirements</span><br />
<br />
E vá até a parte onde tem as dependências do Ruby e instale o que for necessário. No meu caso foi preciso:<br />
<br />
<span style="color: blue;">$ sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config</span><br />
<br />
<br />
Depois disso já podemos instalar o Ruby:<br />
<br />
<span style="color: blue;">$ rvm install 1.9.3</span><br />
<br />
Agora executamos o comando abaixo para escolher a versão do ruby que vamos usar e definí-la como padrão:<br />
<br />
<span style="color: blue;">$ rvm use --default 1.9.3</span><br />
<br />
Agora execute:<br />
<br />
<span style="color: blue;">$ ruby -v</span><br />
<br />
<br />
<span style="color: blue;"><span style="color: black;">Você verá que versão está sendo usada. Se tudo correu bem, seu Ruby já está configurado e pronto pra usar.</span></span>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-16694431955280656562011-12-15T04:39:00.000-08:002011-12-15T04:49:00.265-08:00Traits. Novo mecanismo para reuso de código inserido no PHP 5.4.<br />
Traits é um mecanismo para o reuso de código em linguagens que não trabalham com herança multipla, como o PHP. Foram criadas para reduzir alguma limitações da "herança simples" possibilitando o desenvolvedor a reusar conjuntos de métodos livremente em suas classes independentemente da hirarquia a qual ela pertence.<br />
<br />
Uma Trait é similar a uma classe, mas possui apenas um grupo métodos e propriedades que serão usados pelas nossas classes. Não é possível instanciar uma Trait diretamente. ela é uma adição a herança tradicional e possibilita a "composição horizontal de comportamento", que é a aplicação de membros a uma classe sem o uso de herança.<br />
<br />
Vamos a um exemplo de uso:<br />
<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><?</span>php</b><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>trait HelloWorld {</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> public function sayHello() {</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> echo 'Hello World!';</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> }</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>}</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>class TheWorldIsNotEnough {</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> use HelloWorld; // Aqui estou dizendo que minha classe usará os métodos da Trait HelloWorld</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>}</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>$o = new TheWorldIsNotEnough();</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>$o->sayHello();</b></span></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>?></b></span></span><br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>Saída:</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: inherit;">Hello World!</span><br />
<br />
<span class="Apple-style-span" style="font-family: inherit;">O grande lance das Traits é que podemos usar várias em uma mesma classe e dessa forma prover conjuntos de funcionalidades diferentes sem que seja necessário o uso da herança.</span><br />
<br />
<span class="Apple-style-span" style="font-family: inherit;">A intenção aqui foi apenas apresentar o novo recurso, caso queiram conhecer mais sobre o assunto acessem <a href="http://www.php.net/manual/en/language.oop5.traits.php">http://www.php.net/manual/en/language.oop5.traits.php</a></span>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-33997429846528317512011-10-27T10:47:00.000-07:002011-10-27T10:47:53.653-07:00Configurando Senha inicial do PostgreSQL no Ubuntu<br />
Por padrão o PostgreSQL possui um banco de dados chamado template1 e um usuário administrativo chamado postgres com privilégios de manutenção do banco. Normalmente, o usuário postgres inicialmente não possue nenhuma senha. Vamos ver como criar uma senha para ele ou apagar a senha criada pelo sistema.<br />
<br />
<b>Deve-se entrar como usuário root para alterar ou criar a senha do postgres:</b><br />
<br />
$ su root<br />
Informe a senha de root<br />
$ passwd postgres<br />
Informe a nova senha do postgres<br />
<br />
<b>Logaremos com o usuário postgres para ligar o usuário a nova senha:</b><br />
<br />
$ su postgres<br />
Informe a senha para trocar para o usuário postgres<br />
<br />
<b>Para PostgreSQL 7 ou superior:</b><br />
$ psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'" -d<br />
template1<br />
<br />
<b>Para o PostgreSQL 6:</b><br />
$ psql -c "ALTER USER postgres WITH PASSWORD novasenha" -d<br />
template1<br />
<br />
<b>Fonte: </b><br />
<br />
<a href="http://sqlrelay.sourceforge.net/sqlrelay/gettingstarted/postgresql.html">http://sqlrelay.sourceforge.net/sqlrelay/gettingstarted/postgresql.html</a><br />
<div>
<br /></div>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-84432320424560955912011-10-18T12:53:00.000-07:002011-10-18T12:58:05.015-07:00Gnome clássico no Ubuntu 11.10<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;">Para quem instalou o Ubuntu 11.10, e como eu, não gosta do Unity vai uma dica para instalação do gnome-clássico. </span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;">Apenas abra o seu terminal e execute o comando:</span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"><br /></span><br />
<span class="Apple-style-span" style="color: red; font-family: 'Trebuchet MS', sans-serif;">$ sudo apt-get install gnome-session-fallback</span><br />
<span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', sans-serif;"><br /></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;">Faça o logout, e na tela de login, clique no ícone de 'engrenagem' ao lado do seu nome e selecione Gnome Classic.</span><br />
<span class="Apple-style-span" style="color: #444444; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-16400670741741204752011-06-28T17:28:00.000-07:002011-06-28T17:28:25.362-07:00Google +. Nova rede social do GoogleA google anúnciou seu mais novo projeto. Uma nova rede social, chamada Google +. A mesma tem a pretensão de derrubar, nada mais nada menos que o Facebook. O projeto ainda está em fase de desenvolvimento e não está aberta a todos, porém algumas novidades já podem ser conferidas no link abaixo.<br />
<br />
http://www.google.com/intl/pt-BR/+/learnmore/index.html#circles<br />
<br />
Confiram! <br />
<br />
<br />
<br />
<br />Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-58502314490106062902011-05-29T18:03:00.000-07:002011-05-29T18:03:52.588-07:00Coisas que todos precisam saber sobre o cara da informática..<div class="im">
1) O <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>dorme. Pode parecer mentira, mas o <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>precisa dormir como qualquer outra pessoa. Esqueça que ele tem celular e telefone em casa, ligue só para o escritório;<br />
<br />
2) O <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>come. Parece inacreditável, mas é verdade. O <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>também precisa se alimentar e tem hora para isso;<br />
<br />
3) O <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>pode ter família. Essa é a mais incrível de todas: Mesmo sendo um <b style="font-weight: normal;">CARA DA INFORMÁTICA</b>,
a pessoa precisa descansar no final de semana para poder dar atenção à
família, aos amigos e a si próprio, sem pensar ou falar em informática,
impostos, formulários, consertos e demonstrações, manutenção, vírus e
etc.;<br />
<br />
4) <b style="font-weight: normal;">O CARA DA INFORMÁTICA</b>, como qualquer cidadão, precisa de dinheiro. Por essa você não esperava, né? É surpreendente, mas o <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>também
paga impostos, compra comida, precisa de combustível, roupas e sapatos,
e ainda consome Lexotan para conseguir relaxar... Não peça aquilo pelo
que não pode pagar ao <b style="font-weight: normal;">CARA DA INFORMÁTICA</b>;<br />
<br />
5) Ler, estudar também é trabalho. E trabalho sério. Pode parar de rir. Não é piada. Quando um <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>está concentrado num livro ou publicação especializada ele está se aprimorando como profissional, logo trabalhando;<br />
<br />
6) De uma vez por todas, vale reforçar: O <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>não é
vidente, não joga tarô e nem tem bola de cristal, pois se você
achou isto demita-o e contrate um PARANORMAL OU DETETIVE. Ele
precisa planejar, se organizar e assim ter condições de fazer um bom
trabalho, seja de que tamanho for. Prazos são essenciais e não um
luxo... Se você quer um milagre, ore bastante, faça jejum, e deixe o
pobre do <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>em paz;<br />
<br />
7) Em reuniões de amigos ou festas de família, o <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>deixa de ser o <b style="font-weight: normal;">CARA DA INFORMÁTICA </b>e
reassume seu posto de amigo ou parente, exatamente como era antes dele
ingressar nesta profissão. Não peça conselhos, dicas... ele tem direito
de se divertir;<br />
<br />
8) Não existe apenas um 'levantamentozinho' , uma 'pesquisazinha' , nem
um 'resuminho', um 'programinha pra controlar minha loja',
um 'probleminha que a maquina não liga', um 'sisteminha' , uma
'passadinha rápida(ALIAS CONTA-SE DE ONDE SAIMOS E ATÉ CHEGARMOS)', pois
esqueça os 'inha e os inho (programinha, sisteminha, olhadinha, )' pois
OS <b style="font-weight: normal;">CARAS DA<br />
INFORMATICA </b>não resolvem este tipo de problema. Levantamentos,
pesquisas e resumos são frutos de análises cuidadosas e requerem
atenção, dedicação. Esses tópicos podem parecer inconcebíveis a uma boa
parte da população, mas servem para tornar a vida do <b style="font-weight: normal;">CARA DA INFORMATICA </b>mais suportável;<br />
<br />
9) Quanto ao uso do celular: celular é ferramenta de trabalho. Por favor, ligue, apenas, quando necessário. Fora do horário de<br />
expediente, mesmo que você ainda duvide, o <b style="font-weight: normal;">CARA DA INFORMATICA </b>pode estar fazendo algumas coisas que você nem pensou que ele fazia, como dormir ou namorar, por exemplo;<br />
<br />
10) Pedir a mesma coisa várias vezes não faz o <b style="font-weight: normal;">CARA DA INFORMATICA </b>trabalhar mais rápido. Solicite, depois aguarde o prazo dado pelo <b style="font-weight: normal;">CARA DA INFORMATICA</b>;<br />
<br />
11) Quando o horário de trabalho do período da manhã vai até 12h, não
significa que você pode ligar às 11:58 horas. Se você pretendia cometer
essa gafe, vá e ligue após o horário do almoço (relembre o item 2). O
mesmo vale para a parte da tarde: ligue no dia seguinte;<br />
<br />
12) Quando <b style="font-weight: normal;">CARA DA INFORMATICA </b>estiver
apresentando um projeto, por favor, não fique bombardeando com milhares
de perguntas durante o atendimento. Isso tira a concentração, além de
torrar a paciência. ATENÇÃO: Evite perguntas que não tenham relação com o
projeto, tipo como.... vocês entendem é claro....;<br />
<br />
13) O <b style="font-weight: normal;">CARA DA INFORMATICA </b>não
inventa problemas, não muda versão de WINDOWS, não tem relação com
vírus, NÃO É CULPADO PELO MAL USO DE EQUIPAMENTOS, INTERNET E AFINS. Não
reclame! O <b style="font-weight: normal;">CARA DA INFORMATICA </b>com certeza fez o possível para você pagar menos. Se quer EMENDAR, EMENDE, mas antes demita o <b style="font-weight: normal;">CARA DA INFORMATICA </b>e contrate um QUEBRA GALHO;<br />
<br />
14) Os <b style="font-weight: normal;">CARAS DA INFORMATICA </b>não são os criadores dos ditados 'o barato sai caro' e 'quem paga mal paga em dobro'. Mas eles concordam... .;<br />
<br />
15) E, finalmente, o <b style="font-weight: normal;">CARA DA INFORMATICA </b>também é filho de DEUS e não filho disso que você pensou...<br />
<br />
16) Agora, depois de aprender sobre O <b style="font-weight: normal;">CARA DA INFORMATICA</b>, repasse aos seus amigos, afinal, essas verdades precisam chegar a todos. O <b style="font-weight: normal;">CARA DA INFORMATICA</b> agradece.<br />
</div>
17) Vamos parar de chamar os profissionais da Tecnologia da Informação, de "<b style="font-weight: normal;">CARA DA INFORMÁTICA</b>", "<b style="font-weight: normal;">CARA QUE CONSERTA COMPUTADOR</b>", ou mesmo ainda pior: “<b style="font-weight: normal;">CARA QUE MEXE COM COMPUTADOR</b>”.
Por incrível que pareça as profissões tem nomes, como Engenheiro de
Projetos, Analista de Suporte, Engenheiro de Sistemas, Programador.
Ninguém chama o Engenheiro Civil de "<b style="font-weight: normal;">CARA DA BETONEIRA</b>", ou médico de "<b style="font-weight: normal;">CARA DO AÇOUGUE</b>", dentista de "<b style="font-weight: normal;">CARA DO DENTE PODRE</b>"...<br />
<br />
<br />
Não sei quem é o autor... mas recebi um email com esse texto e achei legal compartilhar... uahsuhahuUAHsauUSFernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com1tag:blogger.com,1999:blog-4870984847463651719.post-21657349692667334222011-01-16T14:37:00.000-08:002011-01-16T14:40:30.840-08:00Dicas para quem quer aprender JAVANeste post vou compartilhar com vocês alguns materiais que encontrei na internet durante algum tempo que venho estudando JAVA. São todos disponibilizado de forma gratuita.<br />
<br />
Por diversos fatores, o JAVA se tornou a linguagem preferida pela maior parte dos programadores e empresas de desenvolvimento. Esse fato contribuiu bastante também para o crescimento de documentação a respeito da linguagem. A própria Sun, e agora a Oracle, disponibiliza um material de ótima qualidade (Na minha opinião e de muitos outros programadores, o melhor material sobre JAVA disponível na internet).<br />
<br />
Vamos as dicas de material para quem está aprendendo essa linguagem, e alguns, até mesmo podem servir de referência para programadores mais experientes.<br />
<br />
<b>1 - The Java Tutorials</b><br />
<br />
O Java Tutorials, são guias práticos disponibilizados pela Oracle, para programdores que queiram usar a linguagem de programação JAVA. Eles possuem centenas de exemplos e exercícios que ajudarão bastante na fixaxão do aprendizado.<br />
<br />
Acredito que esse seja o melhor material disponível na internet para quem quer entender Java a fundo. O único problema, para alguns, é que ele é todo em inglês.<br />
<br />
Link: <a href="http://download.oracle.com/javase/tutorial/">http://download.oracle.com/javase/tutorial/</a><br />
<br />
<b>2 - Apostilas Caelum</b><br />
<br />
<br />
A Caelum é uma empresa bastante conceituada no ramo de desenvolvimento de softwares e aplicação de treinamentos, principalmente na plataforma Java. No site da empresa, estão disponíveis gratuitamente para download algumas apostilas que falam sobre os principais tópicos de Java, dentre elas:<br />
<br />
<ul>
<li>Java e Orientação a Objetos</li>
<li>Java para Desenvolvimento WEB</li>
<li>Algoritmos e Estruturas de Dados em Java</li>
</ul>
Para conferir e baixar todas as apostilas acesse: <a href="http://www.caelum.com.br/apostilas/">http://www.caelum.com.br/apostilas/</a> <br />
<br />
<b>3 - Iniciativa JEDI (<span style="font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small;"><span style="font-weight: bold;">JEDI</span> (Java Education and Development Initiative)</span>)</b><br />
<br />
É um curso oferido gratuitamente na WEB. Além das apostilas, ficam disponíveis, vídeo-aulas, slides e o fórum onde é possível tirar dúvidas com os tutores.<br />
Além dos tópicos de Java, a Iniciativa Jedi aborda temas como: Engenharia de Software, Bancos de Dados e Sistemas Operacionais.<br />
<br />
Link: <a href="http://jedi.wv.com.br/">http://jedi.wv.com.br/</a><br />
<br />
<b>4 - Fórum GUJ</b><br />
<br />
Existem vários forúns que falam sobre o Java, mas o mais conhecido e com uma ampla gama de profissionais participantes é o GUJ. É um forum vinculado a Caelum e com um número considerável de participantes o que facilita bastante a troca de informações.<br />
<br />
Link: <a href="http://www.guj.com.br/">http://www.guj.com.br</a><br />
<br />
<br />
Acabo por aqui, ficam essas dicas e assim que encontrar mais material de qualidade estarei compartilhando com todos. Peço também que quem souber de outras fontes compartilhe conosco.<br />
<br />
Até a próxima!Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-54960348748561697002010-12-02T09:37:00.000-08:002010-12-02T09:42:19.939-08:00Escola Virtual Bradesco. Cursos em vários níveis, gratuítos e com certificado.A Escola Virtual é considerada a 41ª escola da Fundação Bradesco.<br />
<br />
Trata-se de um ambiente virtual que oferece mais de 200 cursos nas modalidades on-line e semipresencial, com arquitetura projetada para até 150 mil alunos a distância, os cursos oferecidos são totalmente gratuitos. <br />
<br />
Ao realizar a matrícula, o aluno tem 30 dias para concluir o curso. Caso este tempo não seja cumprido, o sistema atribui como "concluído sem êxito" e é necessário iniciá-lo novamente. Por este motivo, os alunos são instruídos a se matricularem em um curso por vez, pois este tempo não é cumulativo. <br />
<br />
Vale lembrar que os 30 dias são contados a partir da data de matrícula do curso. <br />
<br />
Após a conclusão com êxito do curso, é liberado um certificado que é impresso pelo próprio aluno. Este certificado pode ser aceito como comprovante de atividade complementar em algumas universidades.<br />
<br /><br />
Para mais informações acesse <a href="http://www.ev.org.br/">http://www.ev.org.br/</a>. Para fazer o seu cadastro e já começar algum dos cursos disponíveis basta fazer o cadastro no mesmo site.<br />
<br />
<strong>FONTE: <a href="http://www.ev.org.br/">http://www.ev.org.br/</a></strong>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-59389729036395890782010-09-22T19:30:00.000-07:002010-09-22T19:37:24.602-07:00Caracteres de nova linha no PHP<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;">Como sabemos, todos os caracteres que estão fora das TAGS de abertura e fechamento do PHP “<?php ?>” são copiados pelo interpretador e enviados para a saída padrão diretamente. Incluindo caracteres de nova linha. Por padrão a maioria dos navegadores ignora esses caracteres, pois eles não fazem parte da semântica do HTML. Porém, devemos lembrar que esse caractere também é utilizado na resposta de requisições HTTP geradas pelo WebServer e serve para separar o header do restante dos dados. Portanto a saída de um caractere de nova linha antes de todos os cabeçalhos terem sido escritos poderá causar problemas.<br />
<br />
Como quando precisamos alterar o header por exemplo, sabemos que isso deve ser feito antes de qualquer saída ter sido enviada ao browser. Caso contrário ele irá gerar um erro como esse:<br />
</span><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;"><span style="font-size: x-small;"><span style="background-color: #eeeeee;">Cannot send session cookie - headers already sent by (output started a....</span></span><br />
<br />
Pois os cabeçalhos já haviam sido escritos.<br />
<br />
Caracteres de nova linha após a tag de fechamento "?>" de arquivos incluídos com os comandos include ou require também podem gerar esse problema. Para ajudar a amenizar o problema, o parser elimina automaticamente o primeiro caractere de nova linha após a tag "?>". Essa regra também ajuda a lidar com alguns editores que acrescentam automaticamente uma nova linha no final do arquivo.</span><br />
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;">Uma maneira fácil de prevenir outputs indesejados é omitir a tag the fechamento do final do arquivo php, que o analisador (parser) considera isto perfeitamente legal.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;"><br />
</span><br />
<b><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;">Referências:</span></b><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: small;">php|architect’s Zend PHP 5 Certification Guide. David Shafik and Ben Ramsey. </span>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-31404653266378644152010-07-09T18:57:00.000-07:002010-11-28T07:17:32.006-08:00Listar valores possiveis de um campo tipo "enum" com PHP<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Para quem não sabe o que é "tipo enum", ele é um dos tipos de dados existentes no MySQL onde você pré-define quais são os valores que poderão ser armazenados. Como exemplo poderíamos ter uma tabela chamada "disciplina" que contém um campo chamado "status" onde esse campo só aceita os valores 'aprovado' ou 'reprovado'. Para isso esse campo seria criado assim:</span><br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><br />
</span><br />
<div style="background-color: #cccccc;"><span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">status enum('aprovado', 'reprovado');</span></div><span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><br />
</span><br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Dessa forma ele aceitaria apenas um dos dois valores.</span><br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><br />
</span><br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Em algumas situações é necessário saber, a partir do PHP, quais são esses valores possíveis para o campo, como por exemplo, para a criação de um formulário dinâmico. Para isso criei a função abaixo que recebe o nome da tabela e o campo enum e retorna um array com todos os valores possíveis para esse campo.</span><br />
<br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Veja:</span><br />
<span id="internal-source-marker_0.652458966755718" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span><br />
<br />
<div style="background-color: #cccccc;"><span id="internal-source-marker_0.652458966755718" style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">//RECEBE O NOME DA TABELA E DO CAMPO ENUM E RETORNA SEUS VALORES POSSIVEIS</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><?php</span><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">function get_valores_enum($tabela, $campo){</span><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span></div><div style="background-color: #cccccc;"><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $query = "describe $tabela;";</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);<br />
<br />
<br />
<br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $result = $conn->query($query);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $campos = array();</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $i = 0;</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> while($registro = $result->fetch(PDO::FETCH_ASSOC)){</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $campos[$i]["campo"] = $registro['Field'];</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $campos[$i]["tipo"] = $registro['Type'];</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $i++;</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> }</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores_explode = array();</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> //Percorre os nomes e tipo de array até achar o campo passado e se ele for do tipo enum</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> foreach($campos as $chave){</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $tipo = substr($chave["tipo"], 0, 4);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> if($chave["campo"] == $campo && $tipo == "enum"){</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores = substr($chave["tipo"], 5, -1);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores_explode = explode(",", $valores);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $i = 0;</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores_possiveis = array();</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> while(!is_null($valores_explode[$i])){</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores_possiveis[] = substr($valores_explode[$i], 1, -1);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $i++; </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> }</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> return $valores_possiveis; </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> }elseif($chave["campo"] == $campo && $tipo != "enum"){</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> echo "O campo informado não é do tipo enum!";</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> return(0);</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> }</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> }</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> echo "Campo não encontrado!";</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">}</span><br />
<span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">?></span><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> </span></div><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Um exemplo de uso da função poderia ser:</span><br />
<br />
<div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><?php</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> $valores_possiveis = get_valores_enum("disciplina", "status");</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> //pegaria os valores possíveis para o campo "status" na tabela "disciplina"</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"><br />
</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> //Para ver o conteudo do array podemos usar</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"> print_r($valores_possiveis);</span></div><div style="background-color: #cccccc;"><span style="color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">?></span></div><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">É isso ae, qualquer dúvida deixe o seu comentário que assim que eu responderei assim que vê-lo!</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Até a próxima!</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"></span>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-43034536776808769932010-05-06T16:20:00.000-07:002010-05-06T16:24:11.940-07:00PHP - Funções para Manipulação de StringsNeste texto procuro mostrar de forma clara algumas funções para manipulação de Strings já existentes no PHP e como estas funcionam.<br />
<br />
Existem inúmeras funções para manipulação de String no PHP, abordarei aqui apenas a que são mais comumente utilizadas. São elas:<br />
<br />
<br />
<b>strtoupper </b>- Transforma os caracteres de uma String para caixa alta (letras maiúsculas)<br />
<br />
Ex.:<br />
<code><br />
<span style="background-color: #cccccc;"> <?php</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo strtoupper("passando String Para maiúsculo");</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?></span></code><br />
<code><br />
</code><br />
A saída será:<br />
<br />
PASSANDO STRING PARA MAIÚSCULO<br />
<br />
<b>strtolower</b> - Faz o inverso de strtoupper, ele converte toda a string para letras minúsculas.<br />
<br />
Ex.:<br />
<code><br />
<span style="background-color: #cccccc;"> <?php</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo strtolower("PASSANDO STRING PARA MINÚSCULO");</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?></span><br style="background-color: #cccccc;" /> </code><br />
<code><br />
</code><br />
A saída será:<br />
<br />
passando string para minúsculo<br />
<br />
<br />
<b> substr</b> - retorna parte do conteúdo de uma String.<br />
<br />
Sintaxe -> substr(string conteudo, int inicio [,int comprimento]);<br />
<br />
Onde:<br />
<br />
conteúdo = o conteúdo da string a ser percorrida.<br />
inicio = posição do primeiro caractere a ser lido.<br />
comprimento = quantidade de caracteres que serão lidos. Esse parâmetro é opcional. <br />
<br />
Ex.:<br />
<code><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> <?php</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $resto = substr("BitStation", 0, 3);</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo $resto."</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ";</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $resto = substr("BitStation",3);</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo $resto."</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ";</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $resto = substr("BitStation, 3, -1"); </span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo $resto."</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ";</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?></span><br />
</code><br />
<br />
Saída:<br />
<br />
Bit<br />
Station<br />
Statio<br />
<br />
<b>str_repeat</b> - Repete um String uma determinada quantidade de vezes.<br />
<br />
Sintaxe -> str_repeat( string entrada, int quantidade);<br />
<br />
Onde:<br />
entrada = String que será repetida.<br />
quantidade = Quantidade de vezes que essa String deverá ser repetida.<br />
<br />
Ex.:<br />
<code><br />
<span style="background-color: #cccccc;"> <?php</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $string = ".::.";</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo str_repeat($string, 5);</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?></span><br />
</code><br />
<br />
Saída:<br />
<br />
.::..::..::..::..::.<br />
<br />
<b>strlen</b> - Retorna o a quantidade de caracteres de uma String.<br />
<br />
Ex.:<br />
<code><br />
<span style="background-color: #cccccc;"><?php</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $string = "BitStation";</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $quantCaracteres = strlen($string);</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo "A palavra ".$string." possui ".$quantCaracteres." caracteres!";</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?></span><br style="background-color: #cccccc;" /> </code><br />
<br />
Saída:<br />
<br />
A palavra BitStation possui 10 caracteres!<br />
<br />
<b>str_replace</b> - Substitui uma String por outra.<br />
<br />
Sintaxe -> str_replace(mixed procura, mixed substitui, mixed contexto);<br />
<br />
Onde:<br />
<br />
procura = String a ser substituída.<br />
substitui = String substituta.<br />
contexto = String inicial onde será feita a substituicão.<br />
<br />
Ex.:<br />
<code><br />
<span style="background-color: #cccccc;"> <?php</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $frase = "O peito do pé do pedro é preto";</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> //o código abaixo está dizendo para procurar a string "pedro" em $frase e substituir pela string "Fernando"</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> $stringResultante = str_replace("pedro", "Fernando", "$frase");</span><br style="background-color: #cccccc;" /> <br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> echo $stringResultante;</span><br style="background-color: #cccccc;" /><span style="background-color: #cccccc;"> ?> </span><br style="background-color: #cccccc;" /> </code><br />
<br />
Saída:<br />
<br />
O peito do pé do Fernando é preto<br />
<br />
Bem pessoal, por enquanto é isso. Não falei de muitas funções mas coloquei aí as mais usadas (pelo menos por mim), essas funções, quando usadas da forma correta ajudam bastante a ganhar tempo. Por isso é bom sempre estar relembrando essas funções que podem parecer simples, mas muitas vezes acabam nos livrando de perder tempo tendo que "reinventar a roda".<br />
<br />
Até a próxima!Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-9255780591376820462010-04-25T17:23:00.000-07:002010-04-25T17:26:10.771-07:00PHP - Iteração de Arrays com foreachNeste post estou falando um pouco do laço foreach. Tem um funcionamento bem simples, mas tenho percebido que algumas pessoas tem dificuldade para entendê-lo.<br />
<br />
Com o foreach os arrays podem ser iterados, percorrendo cada uma de suas posições.<br />
<br />
Vamos a um exemplo. Primeiro vamos criar um array, chamado chamado computador conteudo algumas de suas características:<br />
<code><br />
$computador['processador'] = 'dual core';<br />
$computador['cor'] = 'preta';<br />
$computador['so'] = 'Ubuntu Linux';</code><br />
<br />
Agora vamos usar o operador foreach para percorrer todos os elementos do array e imprimí-los:<br />
<br />
<code><br />
foreach($computador as $indice => $caracteristica){<br />
<br />
echo "$indice -> $caracteristica \n";<br />
<br />
}</code><br />
<br />
O código acima irá repetir as instruções dentro do bloco até que tenha passado por todos os elementos do array. Perceba que as variáveis $indice e $caracteristicas não existiam e servem dentro do forech para referenciar respectivamente a posição do array e o conteúdo desta posição. Os nomes destas variáveis também não precisam ser exatamente estes, você deverá escolher o que for mais conveniente. <br />
<br />
Esse código produzirá a seguinte saída na tela:<br />
<br />
processador -> dual core<br />
cor -> preta<br />
so -> Ubuntu Linux<br />
<br />
<br />
O foreach também poderia ser usado sem a variável que irá representar os valores de cada posição ficando apenas com o nome do array e a posição. Poderiamos obter o mesmo resultado acima da seguinte forma:<br />
<br />
<code><br />
foreach($computador as $indice){<br />
<br />
echo "$indice -> $computador[$indice] \n";<br />
<br />
}</code>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-89648679779196025182010-04-13T20:45:00.000-07:002010-12-02T09:50:23.153-08:00Gerando Planilha xls com o PHPNeste post falo sobre este recurso que pode ser bastante útil dentro de um ambiente corporativo, onde é necessário estar gerando determinados relatários. Bem, ontem tive um probleminha, me vi diante da necessidade de gerar uma planilha do excel e não fazia idéia de como poderia fazer isso. Depois de muito estudar e pesquisar percebi que, apesar de ser algo bem simples de implementar, muita gente tem dificuldade em aprender e muitos posts que encontrei por aí simplesmente não funciona.<br />
<br />
Existem algumas formas de gerar uma planilha usando PHP. Se você procurar na internet irá encontrar várias classes já prontinhas com várias funções para auxiliar na geração da planilha. O método que vou abordar aqui é o método mais simples, vamo criar tudo na "munheca".<br />
<br />
Por incrível que parecer o código é bastante simples, veja:<br />
<br />
<?php<br />
//primeiro precisamos acrescentar alguns cabeçalhos para que o arquivo que iremos exportar um arquivo xls<br />
header("Content-type: application/vnd.ms-excel");<br />
//cabecalho para forçar o download<br />
header("Content-type: application/force-download");<br />
//Aqui você pode definir qual o nome da planilha que será gerada<br />
header("Content-Disposition: attachment; filename=relatorio.xls");<br />
header("Pragma: no-cache");<br />
<br />
//Aqui começamos a posicionar os campos da nossa tbela<br />
//Veja que para mudar para a celular do lado coloca uma tabulacao (\t) w para ir para a linha de baixo (\n)<br />
$texto = "NOME\tTEEFONE\tENDEREÇO\n";<br />
$texto .= "Zé da Silva\t3333-4455\tAvenida dos brejos\n";<br />
<br />
$texto .= "Osfredo pirinosc\t4455-6654\tRua dos perdidos\n";<br />
<br />
//imprime a tabela<br />
<br />
echo $texto;<br />
<br />
?> <br />
<br />
<br />
Esse pequeno código mostra como podemos exportar uma pequena agenda digitando as entradas uma por uma, mas o conteúdo que será colocado na planilha também pode vir diretamente de um banco de dados. <br />
Espero ter ajudado, dúvidas postem ae!Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com5tag:blogger.com,1999:blog-4870984847463651719.post-27737363636910705452010-04-11T18:00:00.000-07:002010-04-11T18:00:28.964-07:00Introdução ao aptO apt é um sistema de gerenciamento de pacotes que te possibilita instalar, atualizar, remover pacotes de programas de forma bem mais simplificada do que se tinha quando era necessário baixar o pacote, descompactar, compilar, etc... etc...<br />
<br />
O apt te permite instalar pacotes sem se preocupar com as suas dependências pois ele mesmo vai buscar e as instala automaticamente. Existem também algumas ferramentas gráficas para gerenciar o apt, como o synaptic e o aptitude, mas no momento falarei apenas de como usá-lo em CLI.<br />
<br />
Além das funções citadas o apt tem também algumas outras funções, porém só abordarei os comandos básicos e mais usados.<br />
<br />
O apt é próprio da distribuição Debian, dessa forma só é usado nela e nas distribuições que a tem como base.<br />
<br />
O primeiro comando que quero mostrar é o "apt-get" e suas principais opções. O "apt-get", usado em conjunto com outra opção, pode atualizar, instalar, reinstalar ou excluir pacotes.<br />
<br />
Para instalar pacotes é usado a opção install. Quando queremos instalar um pacote qualquer, digitamos no terminal o seguinte comando:<br />
<br />
<div style="background-color: #cccccc;"># apt-get install [nome do pacote]</div><br />
Um dos principais arquivos do apt é o arquivo sources.list. Ele está localizado no diretório /etc/apt/ e é nele onde estão listados os repositórios aonde podemos encontrar os pacotes específicos para a sua distribuição. Usando a opção update com o apt-get, o apt faz uma verificação em cada um desses repositórios a procura de pacotes disponíveis e alimenta o seu banco de dados local.<br />
<br />
Para atualizar a lista de pacotes disponíveis use o comando:<br />
<br />
<div style="background-color: #cccccc;">#apt-get update</div><br />
Para atualizar um determinado pacote, podemos usar o comando:<br />
<br />
<div style="background-color: #cccccc;">#apt-get update </div><br />
E logo em seguida:<br />
<br />
<div style="background-color: #cccccc;">#apt-get install [nome do pacote]</div><br />
Dessa forma o apt-get se limitará a atualizar o pacote, pois ele sabe que o pacote já está instalado. Outro fato é que quando a versão do pacote que você quer atualizar já é a mais nova ele mostrará uma mensagem informando isso.<br />
<br />
Outra opção interessante é o "apt-get upgrade". Com ela é possível atualizar de uma só vez todos os pacotes do sistemas, para isso basta digitar no terminal os comandos:<br />
<br />
<div style="background-color: #cccccc;">#apt-get update</div><div style="background-color: #cccccc;">#apt-get upgrade</div><br />
Outra opção importante é usada para remover pacotes. Quando queremos remover um pacote e junto com ele todas as suas partes, exceto os arquivos de configuração, usamos o comando:<br />
<br />
<div style="background-color: #cccccc;">#apt-get remove [nome do pacote]</div><br />
Quando você usa a opção remove os arquivos de configuração são preservados no sistema para situações em que você venha a querer instalar novamente o pacote. Para remover o pacote por completo, junto com seus arquivos de configuração, acrescentamos a opção --purge ao nosso comando:<br />
<br />
<div style="background-color: #cccccc;">#apt-get remove --purge [nome do pacote]</div><br />
Agora imagine que você quer instalar um programa mas não sabe o nome completo do mesmo, ou nem mesmo sabe qual programa ao certo quer instalar, mas sabe que tipo de programa é. Como descobrir um programa dentro da lista do apt? Simples! Basta usar um outro comando. O apt-cache seguido da opção search irá fazer uma busca no banco de dados do apt procurando por programas que tenham em seu nome ou descrição a palavra que você digitar como filtro. Ele deve ser usado da seguinte forma:<br />
<br />
<div style="background-color: #cccccc;">#apt-cache search [palavra que servirá como filtro]</div><br />
Como exemplo imaginemos que queremos instalar um navegador mas não sabemos como se chamam os navegadores disponíveis para linux. Para procurar os navegadores e pacotes relacionados na lista do apt, poderiamos usar o comando dessa forma:<br />
<br />
<div style="background-color: #cccccc;">#apt-cache search browser</div><br />
Então será mostrada uma lista de todos os pacotes na lista do apt que tenham alguma relação com a palavra passada.<br />
<br />
Bem pessoal. É isso ae! Esses são os principais comando do apt e os mais usados também. Até a próxima.Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-61432964436887988262010-04-11T16:48:00.000-07:002010-04-11T16:50:34.401-07:00Propriedade Overflow do CSSAbordarei nesse tutorial como e quando usar a propriedade overflow do CSS. Esta é uma propriedade simples mas que pode ser bastante útil em algumas situações.<br />
<br />
A propriedade overflow é utilizada quando há um transbordamento de conteúdo dentro de uma div. O que eu quero dizer com isso? Quando por exemplo temos um texto que ocupa mais espaço do que a div suporta é a propriedade overflow que vai dizer o que fazer com esse conteúdo. Vamos ver isso na prática.<br />
<br />
<div style="text-align: left;">Primeiro crie um novo arquivo html simples para usar como exemplo:</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7TKkU32BWqzrhH5so9kCa4hbvushAClGVkvAYuBBZ8wKLZS6fauT7xNvQQriRtg2Amvtnp0IJllf5OqoXkPPAy2RrgBY6QPPhoQetmpC_W79S79yCTSFLAvEdpWThoZHmvI5NBearfP9s/s1600/img1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7TKkU32BWqzrhH5so9kCa4hbvushAClGVkvAYuBBZ8wKLZS6fauT7xNvQQriRtg2Amvtnp0IJllf5OqoXkPPAy2RrgBY6QPPhoQetmpC_W79S79yCTSFLAvEdpWThoZHmvI5NBearfP9s/s400/img1.png" width="400" /></a></div><br />
Agora criaremos um novo arquivo css. Dei a ele o nome css.css e salvei no mesmo diretório do arquivo html:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEili_KMcGkGck6ifvypqYyGLeF-Q7bIWw4MWVTH41hsKSQ3Ee-vOLV5ZICT91Yg-1EMhXzBL1otG7YLWGmPqWzkIRk2s9yn-aHYnmqBZQ1x6VVHMyhztgxWY2fXfpLdgEQ4ch_Sl_k7Qzpb/s1600/img2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEili_KMcGkGck6ifvypqYyGLeF-Q7bIWw4MWVTH41hsKSQ3Ee-vOLV5ZICT91Yg-1EMhXzBL1otG7YLWGmPqWzkIRk2s9yn-aHYnmqBZQ1x6VVHMyhztgxWY2fXfpLdgEQ4ch_Sl_k7Qzpb/s320/img2.png" width="320" /></a></div><br />
<br />
Nesse arquivo vamos definir as propriedades da nossa div. Colocaremos uma largura(width), uma altura(heigth) e uma borda para podermos vizualizar bem o espaço ocupado pela div:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigI4qn0j8PQy3x40YpZ7Q93GDdzMoGdjkhCzCoxIqwbKyFbrH7OlvmAi6oK-a_5faPLtIHPJnFhIrIy29Z-jdXqmL4g5FX9iWHGtEGN1TGviaJgPB9rlqLNRuZkwmm-UbVA610WdtMQjOr/s1600/img3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigI4qn0j8PQy3x40YpZ7Q93GDdzMoGdjkhCzCoxIqwbKyFbrH7OlvmAi6oK-a_5faPLtIHPJnFhIrIy29Z-jdXqmL4g5FX9iWHGtEGN1TGviaJgPB9rlqLNRuZkwmm-UbVA610WdtMQjOr/s320/img3.png" /></a></div><br />
Agora voltamos ao html e colocaremos um texto qualquer dentro da div para que ele ultrapasse o tamanho da div. Também adicionaremos no cabeçalho um link para o arquivo css que criamos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf_YEx1AGq03YYYb8H4kxL8CO694kqhJuZmUGBRG5iu0IFNrAjupB-zRCEtvPmMdG4YOTCVEAyxZpvSSR-UvmVBJmH5j-D4pE1CSa_V4MqbNiPMsPxeaYF0bxl_eJQqvJCLbfHdlWgrXx5/s1600/img4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf_YEx1AGq03YYYb8H4kxL8CO694kqhJuZmUGBRG5iu0IFNrAjupB-zRCEtvPmMdG4YOTCVEAyxZpvSSR-UvmVBJmH5j-D4pE1CSa_V4MqbNiPMsPxeaYF0bxl_eJQqvJCLbfHdlWgrXx5/s640/img4.png" width="640" /></a></div><br />
Vejamos no browser como vai ficar. Observe que o tamanho da div não é suficiente para comportar todo o seu conteúdo, fazendo com ele ultrapasse os limites da div:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7fYBTUje0FoE-WrkrRqfg5DKrAHbsiem_Y__CsAMpFmD_F4PrX8sbbD60QFRiXxNx0eDl5mY35K-obSx-nD2BVkFqRYYZRE1pXgoWKbI-yNyPwrQGTT7qjCmPLAt_r68IKdBYY214Gtrf/s1600/img5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7fYBTUje0FoE-WrkrRqfg5DKrAHbsiem_Y__CsAMpFmD_F4PrX8sbbD60QFRiXxNx0eDl5mY35K-obSx-nD2BVkFqRYYZRE1pXgoWKbI-yNyPwrQGTT7qjCmPLAt_r68IKdBYY214Gtrf/s400/img5.png" width="400" /></a></div><br />
Podemos resolver esse problema com a propriedade overflow usando um dos três valores possíveis. O primeiro deles é o hidden. Com ele o conteúdo que sobrar será escondido atrás da div. Para tanto, acrescentaremos a propriedade overflow com valor hidden no nosso CSS:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidbent2pUfEj7BIOPe00OGCU6FUwMXKPad2VSViuGWPQHAukxbSbVMDEEDKNLhpz9kt3uHRhuN9hBpgktiz8DvzOIMPb5QcvXI2z0DZFeGmzsWQkfL5Qxzq85Nr-KyOfAJPhwTpAfuaDc3/s1600/img6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidbent2pUfEj7BIOPe00OGCU6FUwMXKPad2VSViuGWPQHAukxbSbVMDEEDKNLhpz9kt3uHRhuN9hBpgktiz8DvzOIMPb5QcvXI2z0DZFeGmzsWQkfL5Qxzq85Nr-KyOfAJPhwTpAfuaDc3/s320/img6.png" /></a></div><br />
Veja o resultado:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjdeza2ipXLbEuI4C7Bw4xQA0EvFLTVYoG7ZeurFEPEFSIac-DP6ZPndEUkBTEvApZPYor5ATqFPYRQiVtqpst9QqslNQYCzQbZFTwqHTjapq68wZjKNiPCeT_jVlkagt88wzKyNpX1qTf/s1600/img7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjdeza2ipXLbEuI4C7Bw4xQA0EvFLTVYoG7ZeurFEPEFSIac-DP6ZPndEUkBTEvApZPYor5ATqFPYRQiVtqpst9QqslNQYCzQbZFTwqHTjapq68wZjKNiPCeT_jVlkagt88wzKyNpX1qTf/s400/img7.png" width="400" /></a></div><br />
O segundo valor que podemos usar é o "scroll". O scroll irá simular um iframe colocando uma barra de rolagem vertical e uma horizontal para que possamos ver o conteúdo escondido, vamos alterar o nosso CSS e ver como fica:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigEuW3mWik6WCKePZbWH8jdjn1mwgA6BKSfhp2YD_3gJikBjYGm1AZUJ1r-iGMYIGd1S6C3kWZiCeXYNuzCWtV_yKFLTh9Q4gn5Lns1p2vlid3CnkoVg07lxcNloWTcc5_F3vO1_eknDiH/s1600/img8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigEuW3mWik6WCKePZbWH8jdjn1mwgA6BKSfhp2YD_3gJikBjYGm1AZUJ1r-iGMYIGd1S6C3kWZiCeXYNuzCWtV_yKFLTh9Q4gn5Lns1p2vlid3CnkoVg07lxcNloWTcc5_F3vO1_eknDiH/s320/img8.png" /></a></div>No browser:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy0ggtMccM6Z3iE54fDnq93fRKbt7fWYCLtmwRIBqP4ENNd4ZAiD0GpLpL1qGI8_GX-EZ7EQlolMAMeQoVC-bYZDytF5QxRaJNvr9syImhbpcCwLLkE8BtYjl3Rm9ujClQuOltnYl2_cUo/s1600/img9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy0ggtMccM6Z3iE54fDnq93fRKbt7fWYCLtmwRIBqP4ENNd4ZAiD0GpLpL1qGI8_GX-EZ7EQlolMAMeQoVC-bYZDytF5QxRaJNvr9syImhbpcCwLLkE8BtYjl3Rm9ujClQuOltnYl2_cUo/s400/img9.png" width="400" /></a></div><br />
Usando scroll você verá que é possível subir e descer dentro da div para vizualizar todo o seu conteúdo, mas ainda temos algo que em algumas ocasiões pode ser desagradável. Estou falando dessa barra de rolagem inferior que aparece mesmo quando ela não é necessária. Para tirá-la daí e fazer com que apareça somento quando for preciso usaremos o terceiro valor, que é o "auto":<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGCeNNaTgF8csP7vIyXW10QbvB3uAAP90IxGaz1TXEDCQyA6k7s0cftNoeVyhwrS0B75f4cyS-IiZBkGD-al8HOSC4R2ikHUJ19q854wDErp-NRReeimD6fY6Mh4IbADNzWgttxgxQHWvq/s1600/img10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGCeNNaTgF8csP7vIyXW10QbvB3uAAP90IxGaz1TXEDCQyA6k7s0cftNoeVyhwrS0B75f4cyS-IiZBkGD-al8HOSC4R2ikHUJ19q854wDErp-NRReeimD6fY6Mh4IbADNzWgttxgxQHWvq/s320/img10.png" /></a></div>Veja o resultado:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit9AFpuRFuASO1ZmMkSJo_xRiWv3djfa9GWDHld6PnoHd662LkzJVrKs9-hmi_eM0kiyi0sDNypHhgs-b5tYr2RsNiRniKY2hS2TBCQ1unDaD7Wwfzdm613vG7Ze8BhU0y5VKmbu-q4DCQ/s1600/img11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit9AFpuRFuASO1ZmMkSJo_xRiWv3djfa9GWDHld6PnoHd662LkzJVrKs9-hmi_eM0kiyi0sDNypHhgs-b5tYr2RsNiRniKY2hS2TBCQ1unDaD7Wwfzdm613vG7Ze8BhU0y5VKmbu-q4DCQ/s400/img11.png" width="400" /></a></div><br />
Como pode ver, a barra inferior sumiu e só aparecerá novamente quando for realmente necessário.<br />
<br />
Espero ter conseguido passar de forma clara como funciona essa propriedade. Durante essa semana estarei publicando mais sobre CSS, espero que aproveitem. Qualquer dúvida ou sugestões, deixem comentários.<br />
<br />
Fernando OliveiraFernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-35112641595734523272010-04-03T11:28:00.000-07:002010-04-03T11:30:57.418-07:00Alagoas Digital e ERBASE "Ótimos eventos mas péssima escolha de horários"Neste mês de Abril estarão ocorrendo dois dos maiores eventos de TI do estado. O Alagoas Digital, que vai do dia 21 a 23, e o ERBASE (Escola Regional de Computação Bahia Alagoas Sergipe), que ocorrerá entre o dia 26 e o dia 30 de abril. <br />
<br />
Ambos contam com uma ótima programação e organização exceto pelo fato dos dias escolhidos para o evento serem dias úteis. Venho me planejando desde o ano passado para participar desses eventos, porém, ao ver as datas, meu planejamento foi por água a baixo. <br />
<br />
As datas ecolhidas são ótimas para quem apenas estuda e para quem tem o seu próprio negócio e pode fazer seu próprio horário, mas pessoas como eu que trabalham em horário comercial e estudam no período da noite essas datas não são interessantes. Não sei se há algum impedimento mas seria muito mais interessante que esses eventos ocorressem nos finais de semana, ou no período da noite. Desta forma todos poderiam participar, os que trabalham e os que não trabalham, beneficiando assim até mesmo a organização do evento pois teriam bem mais inscrições.<br />
<br />
Deixo ae a dica e meu protesto.<br />
<br />
Para quem poderá ir, aconselho que não percam os eventos a programação está ótima e bastante atual.<br />
<br />
Para mais informações acessem:<br />
<br />
<a href="http://www.alagoasdigital.com.br/">Alagoas Digital</a><br />
<br />
<a href="http://www.cesmac.com.br/erbase2010/">ERBASE 2010</a>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-4256309189583302822010-03-24T09:17:00.000-07:002010-03-24T09:17:48.146-07:00Primeiro curso UCP em Alagoas<div style="text-align: justify;">Está sendo anunciado no site da Oficina Livre vagas para o primeiro curso de formação UCP (Ubuntu Certified Professional), que vai acontecer em Maceió.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"> A <strong>Oficina Livre</strong>, uma empresa voltada para tecnologias livres e parceira oficial Ubuntu realizará, no final de março, o primeiro Curso Oficial de Certificação Profissional em Ubuntu (UCP) do estado de Alagoas.</div><div> </div><div style="text-align: justify;">Os participantes deste curso serão os primeiros profissionais certificados pela Canonical no estado. Aos cinco melhores alunos dessa turma será oferecida uma oportunidade para participar de um segundo treinamento para escolha de talentos que farão parte do quadro de profissionais certificados Ubuntu, onde ele poderá ministrar aulas e prestar serviços/consultoria nas soluções Ubuntu.<br />
Todos os aprovados na certificação farão parte de uma seleta lista de profissionais certificados da Canonical no mundo todo e estarão qualificados a realizar serviços junto a Oficina Livre em todo o estado.<br />
Para participar desse primeiro curso o interessado terá que preencher uma pré-inscrição e ficará aguardando o contato da Oficina Livre para uma entrevista. Essa primeira etapa tem a finalidade de selecionar os participantes dessa primeira turma, já que ela se destina a selecionar e formar os profissionais que farão parte do quadro de profissionais da Oficina Livre.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>O Ubuntu</b> </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">O Ubuntu é uma distribuição GNU/Linux baseada em Debian e tem se tornado uma distribuição cada vez mais popular. A distribuição é feita somente com software opensource e sem nenhum custo, inclusive existe a possiblidade de fazer o pedido dos cds de instalação diretamente no site da Canonical e eles te mandam pelos correios. A proposta do Ubuntu é disponibilizar um SO de fácil operação, porém sem perder o poder e estabilidade do Linux, tanto para usuários comuns como para administradores.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Saiba mais no site da <a href="http://www.oficinalivre.com.br/index.php?option=com_content&view=article&id=90:primeiro-curso-ucp-em-alagoas&catid=49:proximas-turmas&Itemid=93">Oficina Livre </a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><span style="color: red;">Obs.:</span> Parte do texto foi tirado do site <a href="http://www.oficinalivre.com.br/">Oficina Livre</a>.</div>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-19106626043534062402010-03-21T19:08:00.000-07:002010-03-21T19:13:39.100-07:00Virtualizando Mikrotik Com VirtualBox<div style="text-align: justify;">Este texto mostra um passo-a-passo para instalar o mikrotik em uma máquina virtual do VirtualBox, seja somente para testes ou para montar realmente um servidor para a rede.</div><div style="text-align: justify;">Antes de iniciarmos nossa aventura é interessante visitar o site do Mikrotik e baixar uma imagem ISO que é disponibilizada no site com uma licensa full durante 24h. Iremos utilizá-la para instalar o Mikrotik. </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Para tanto, vá até a página de download do Mikrotik (http://www.mikrotik.com/download.html), em “select system type” escolha a opção “Other X86 platform” e em “Select Software Type” escolha "stable". Depois basta clicar em “ISO image” e baixar o arquivo.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">1 – Abra o Virtual Box e clique em “Novo” para que possamos criar uma nova máquina Virtual onde será instalado o mikrotik. </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSwoBDjw3HxbOkTtA1r4WvGQ8ZmxUeAGHoQ2tR9w6LIr-GKKvp2WCERcygjG6Ji8CyJOfHHZCUAxpmeJuK4ht_hTCiYSvNzpu3d52f927tNLymAWP_DZlq7mvRiXLH2UOSvW4irgyjeqD7/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSwoBDjw3HxbOkTtA1r4WvGQ8ZmxUeAGHoQ2tR9w6LIr-GKKvp2WCERcygjG6Ji8CyJOfHHZCUAxpmeJuK4ht_hTCiYSvNzpu3d52f927tNLymAWP_DZlq7mvRiXLH2UOSvW4irgyjeqD7/s400/1.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">2 – Irá aparecer uma tela de boas vindas, basta clicar em próximo para ir à próxima fase: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi90EsEuRHi4nnxRAv85IVNUecyRxtK4UKm7iwtHtbeKtbps8nfLSKdMakrqpgR5HYFaQrAF3RSpSzQtv3hazVSZXMwhmt2mx1O-ewW3TO6AZ7J7r6RoAiw2cbiwYzw555nrx9Dg8tZiM6a/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi90EsEuRHi4nnxRAv85IVNUecyRxtK4UKm7iwtHtbeKtbps8nfLSKdMakrqpgR5HYFaQrAF3RSpSzQtv3hazVSZXMwhmt2mx1O-ewW3TO6AZ7J7r6RoAiw2cbiwYzw555nrx9Dg8tZiM6a/s400/2.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">3 – Na próxima tela é dada a opção de escolher o nome da máquina virtual, o S.O. e sua respectiva versão. No campo "nome" digite "Mikrotik" (ou o nome que achar melhor), no campo "Sistema Operacional" escolha “Linux” e na "versão" escolha “Other Linux” como segue: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifN3kVDIS0Hx-hjXAzGg3c3VhkBwCtR4PoenDXcIAHoy-3w90_yw-vOvtAeOs7IH8M5zKlxC0TKjLBTHBxAw6UM6m4wMD3OODLRS_Cvz0ZmunDvV7WDc7olD_-eP9GIUchcJgUjGlQvkQs/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifN3kVDIS0Hx-hjXAzGg3c3VhkBwCtR4PoenDXcIAHoy-3w90_yw-vOvtAeOs7IH8M5zKlxC0TKjLBTHBxAw6UM6m4wMD3OODLRS_Cvz0ZmunDvV7WDc7olD_-eP9GIUchcJgUjGlQvkQs/s400/3.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">4 – Na próxima etapa iremos definir quanto de memória RAM ficará disponível para a máquina virtual. Como estou instalando o Mikrotik apenas para estudo 64MB para mim foi o suficiente. Você deve regular de acordo com a sua necessidade: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpPMoJvli_t1FBpQXeJcjw8GULuXxsKYWjfYfsFZW7LW6uvi8LHRWsyJjd3woApEW0y5dqP9zsnuW0lX2WFeBEFvE_dWplZgfz00TCnG9RonsQ5gAJaR28AQyHIFyww5wGFaUXcFqWmws2/s1600-h/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpPMoJvli_t1FBpQXeJcjw8GULuXxsKYWjfYfsFZW7LW6uvi8LHRWsyJjd3woApEW0y5dqP9zsnuW0lX2WFeBEFvE_dWplZgfz00TCnG9RonsQ5gAJaR28AQyHIFyww5wGFaUXcFqWmws2/s400/4.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">5 – Na próxima tela o Virtual Box te dá a opção de criar um novo disco rígido virtual ou usar um pré-existente. No meu caso criarei um novo: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIKK3FlAy0hcM3Lj7jW8fTe3PORmcXYspYwmLViWRrHq1ng0mkRm2-1DG5hY_dGM97VQYUE6EO7xWFd9LBskTsA1YLYgLTQj6KpZe6C0bUkIW6bpfLlAssFXa7OMhynDWuaPbXLf4vrI8H/s1600-h/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIKK3FlAy0hcM3Lj7jW8fTe3PORmcXYspYwmLViWRrHq1ng0mkRm2-1DG5hY_dGM97VQYUE6EO7xWFd9LBskTsA1YLYgLTQj6KpZe6C0bUkIW6bpfLlAssFXa7OMhynDWuaPbXLf4vrI8H/s400/5.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">6 – Novamente é mostrada uma tela de boas-vindas, só que desta vez é do assistente de criação de HDs virtuais. Apenas clique em próximo: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5IDgq6tXc-Q253-U3BSo6mYkTr61gTIZFpsSP3ytuYKLIMyEQGpFbVYATY3Lyyb3bXt0eosPqSOt52qtXHz-pIT3cgedc9h-Zfol9UpiDSX87EtnqzlJTXaNybi8R-T6Gk4SGBlEmMBmE/s1600-h/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5IDgq6tXc-Q253-U3BSo6mYkTr61gTIZFpsSP3ytuYKLIMyEQGpFbVYATY3Lyyb3bXt0eosPqSOt52qtXHz-pIT3cgedc9h-Zfol9UpiDSX87EtnqzlJTXaNybi8R-T6Gk4SGBlEmMBmE/s400/6.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">7 – Na próxima tela será perguntado a forma de armazenamento do HD que será criado. No armazenamento dinamicamente expansível o HD inicialmente terá um tamanho bem pequeno e irá crescendo conforme for necessário até chegar ao tamanho que for especificado. No caso de armazenamento de tamanho fixo o HD já terá inicialmente o tamanho que você escolher e não crescerá dinamicamente. Prefiro usar o armazenamento dinâmico: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeKGulpUd_RQgJe5SiJKR9AO2SQ4Amf-hIw3R0juo6tINKUSRIiRiDGiUk3zD2ByTrjzCkuHV0nWX4EQZw7xWafYUhOZHv9TJtid2mmFpLzDRPECK9elOERjr5urOEMl9DP-RZqoJlixCn/s1600-h/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeKGulpUd_RQgJe5SiJKR9AO2SQ4Amf-hIw3R0juo6tINKUSRIiRiDGiUk3zD2ByTrjzCkuHV0nWX4EQZw7xWafYUhOZHv9TJtid2mmFpLzDRPECK9elOERjr5urOEMl9DP-RZqoJlixCn/s400/7.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">8 – Na próxima tela você terá a opção de escolher o local onde o HD será salvo e o tamanho do mesmo. Deixei o local como estava, desta forma será armazenado do diretório padrão do virtual box. Configurei o tamanho do HD para 1GB: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlRyHtQ2VbSlsgQzEqEKjXmp6XQRGH_KaUTcXuJjqovSUG34TsZcaGjMaQCG7o3szxdLE07UZUUNGE47tX1R3rpuhyphenhyphenuFORr_B8nJdMl-eRnc51vetj7PvuUz6rgoWipWLoO9ty0FwsNLOi/s1600-h/8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlRyHtQ2VbSlsgQzEqEKjXmp6XQRGH_KaUTcXuJjqovSUG34TsZcaGjMaQCG7o3szxdLE07UZUUNGE47tX1R3rpuhyphenhyphenuFORr_B8nJdMl-eRnc51vetj7PvuUz6rgoWipWLoO9ty0FwsNLOi/s400/8.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">9 – A próxima etapa é a última da criação do HD. São mostradas as especificações do HD e pede-se uma confirmação. Caso esteja tudo certo clique em finalizar: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqibHFMHpKYH_jXHbJtGwxYQJFqZaepXq3i1g3KXbBja9E1DVM8Ad5cv2ICJLhd4XW9ivas_yyykpsdihddwPBgovD_4U__4kdAZrjV74IPdS9rGNl57qHSQ7yZr2LfI84OfLRfTxa7KHB/s1600-h/9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqibHFMHpKYH_jXHbJtGwxYQJFqZaepXq3i1g3KXbBja9E1DVM8Ad5cv2ICJLhd4XW9ivas_yyykpsdihddwPBgovD_4U__4kdAZrjV74IPdS9rGNl57qHSQ7yZr2LfI84OfLRfTxa7KHB/s400/9.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">10 – Agora vamos fazer umas configurações básicas da máquina virtual para instalar o Mikrotik. Vá à tela inicial do VirtualBox, selecione a máquina virtual "Mikrotik" e clique em armazenamento, como segue: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAXRZqDiOkCq6UOOMGpGwz1M-CBQfWrtzCH9EUn9_cQQJBMJfsM_b75GUI2rn9z3g4Z2MLBKt2toSPaAlAeAlLtgxAYeV6tQw7HIpuzSL5u9RgdPOO8Yiv87Dsn-xUxv21vNUzTNLkiZTB/s1600-h/10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAXRZqDiOkCq6UOOMGpGwz1M-CBQfWrtzCH9EUn9_cQQJBMJfsM_b75GUI2rn9z3g4Z2MLBKt2toSPaAlAeAlLtgxAYeV6tQw7HIpuzSL5u9RgdPOO8Yiv87Dsn-xUxv21vNUzTNLkiZTB/s400/10.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">11 – Abaixo da controladora IDE tem o drive de CD que está com status "vazio". Clique em “Vazio”, e depois clique na pastinha do lado direito para escolher a imagem do mikrotik que será montada no drive de CD. </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWQ3y3_ZShKIgLxSC9nRvpdmYD_jb5ryrCjo6MuM02hi7CXlRk9b-me7ufp2hNiEU6ksOVV2gSWl-WV2e9N-P1DZuz2wqpKWnyAqcyP2NTFTy2f6n6YEOX6fHNGnh_nX540Wwg0_TalaT3/s1600-h/11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWQ3y3_ZShKIgLxSC9nRvpdmYD_jb5ryrCjo6MuM02hi7CXlRk9b-me7ufp2hNiEU6ksOVV2gSWl-WV2e9N-P1DZuz2wqpKWnyAqcyP2NTFTy2f6n6YEOX6fHNGnh_nX540Wwg0_TalaT3/s400/11.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">12 – Na próxima tela clique em “Acrescentar”: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW6Uyxg-UG4WaxxgHlzbGJtDm9z4qPxFoHpz-RSbJMhgAyznIGHjnrouHbmVl_oYZJPcAShjbeLH4HtrP2U6SK0HSnYg6n8g4RPFfreiYc_tAjLPhMKEFHlTZGGw28OSusU2YiLcCG69nX/s1600-h/12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW6Uyxg-UG4WaxxgHlzbGJtDm9z4qPxFoHpz-RSbJMhgAyznIGHjnrouHbmVl_oYZJPcAShjbeLH4HtrP2U6SK0HSnYg6n8g4RPFfreiYc_tAjLPhMKEFHlTZGGw28OSusU2YiLcCG69nX/s400/12.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">13 – Ache a imagem ISO que baixamos no início, selecione-a e clique em abrir: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR_7tEMtx9cUkYOibR88FBsi9sucCaWW6e-KWq5FoBLuMOYVnTpjQ9laZK70oioYGaZXTwE7j_OG4Ik3xoO3mJcMzRU3UfkinC7uUtFePucEfd1nCN9XCVT4ofWdAYQxLPnJO3gP__nDFx/s1600-h/13.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR_7tEMtx9cUkYOibR88FBsi9sucCaWW6e-KWq5FoBLuMOYVnTpjQ9laZK70oioYGaZXTwE7j_OG4Ik3xoO3mJcMzRU3UfkinC7uUtFePucEfd1nCN9XCVT4ofWdAYQxLPnJO3gP__nDFx/s400/13.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">14 – Na próxima tela clique sobre a imagem do Mikrotik e clique em selecionar. Com isso, a imagem será montada no driver de CD da máquina virtual: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHFtTUa5OjSg5jsf7FHglPE0MUMDsztIJCEIN-u6Z9H5cBncHThH6zOSCB3VrAKwXvFiuiErrcCSYztMq5xsisAiq_UxzTQNePOruw9DJDiWDcw1U3opEqeKRR8-HnePmGL1ojfm9302Ai/s1600-h/14.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHFtTUa5OjSg5jsf7FHglPE0MUMDsztIJCEIN-u6Z9H5cBncHThH6zOSCB3VrAKwXvFiuiErrcCSYztMq5xsisAiq_UxzTQNePOruw9DJDiWDcw1U3opEqeKRR8-HnePmGL1ojfm9302Ai/s400/14.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">15 – Agora clique na aba “Rede” do lado esquerdo. Aqui não vou fazer alteração nenhuma. Estou mostrando apenas para que vejam que é possível criar várias placas de rede virtuais e até mesmo interligar máquinas virtuais com um artifício do Virtual Box que abordarei em outra ocasião. Esse mecanismo permite criar algo como se fosse um switch virtual: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0dWr7uiXu5zpnR9zpTxvV5xe5gtMZhjXZ1vQKPuHaJbvycDsYVVUpPrbrqUn3VjGfwtWcPiKPaPuXkA5ow6vVtk4eB5igEI5urPa-EihFSPCRTdo0-BQpxZD_ow-x371sqnp43bidhsQr/s1600-h/15.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0dWr7uiXu5zpnR9zpTxvV5xe5gtMZhjXZ1vQKPuHaJbvycDsYVVUpPrbrqUn3VjGfwtWcPiKPaPuXkA5ow6vVtk4eB5igEI5urPa-EihFSPCRTdo0-BQpxZD_ow-x371sqnp43bidhsQr/s400/15.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">16 – Após clicar em OK na tela anterior. Volte à tela inicial do Virtual Box, selecione a máquina virtual “Mikrotik” e clique em “Iniciar”. A máquina será executada e a tela abaixo será mostrada. Esta é a tela inicial de instalação do Mikrotik. Nela temos as opções de escolher os pacotes que iremos utilizar. Para isso basta usar as teclas de direção para posicionar o cursor em cima do pacote que queremos instalar e clicar na tecla de espaço para selecioná-lo. Além desta opção temos algumas outras, são elas:</div><br />
a – Selecionar todos (para selecionar todos os pacote);<br />
<br />
m – Com mínimo (instalará apenas o pacotes estritamente necessários para o funcionamento do sistema;<br />
<br />
i – Iniciar a instalação;<br />
<br />
q – Cancelar e reiniciar a máquina.<br />
<br />
<br />
<div style="text-align: justify;">No meu caso selecionei todos os pacotes. Após selecionar os pacotes digite i para começar a instalar:</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVuJIR5BJThWZg4aJMu10kVx4DU2eSmwZIhE-voCGuQy28mAWLJmb-1zJ2avN9TZbSifIy9Dy7jMQKZvmLsNZqQLira9Pb1pZZ_3QUwsmEWG8YNCqD0DFx_6jOuY45YcpPLFZp1Qms9k6n/s1600-h/16.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVuJIR5BJThWZg4aJMu10kVx4DU2eSmwZIhE-voCGuQy28mAWLJmb-1zJ2avN9TZbSifIy9Dy7jMQKZvmLsNZqQLira9Pb1pZZ_3QUwsmEWG8YNCqD0DFx_6jOuY45YcpPLFZp1Qms9k6n/s400/16.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">17 – Ele vai perguntar se quer manter a configuração antiga, digite “n”. Feito isso você será informado que os dados existentes no HD serão perdidos e será pedida uma confirmação digite "y". Feito isso, aguarde que o processo de instalação fará o resto: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL317ZUWR4PTRf0tg7FQ0uVEAr_3L0OXCzhkqCzZaxGcy-mnK55muB9AEJxqSe5k3I7bd91uEsKkefo3RBjRSGiQu-h5atmcG4Bvm7HHbd617LOvNIhwg6a7_G8eQF0qCnIAUGCMoglm05/s1600-h/17.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL317ZUWR4PTRf0tg7FQ0uVEAr_3L0OXCzhkqCzZaxGcy-mnK55muB9AEJxqSe5k3I7bd91uEsKkefo3RBjRSGiQu-h5atmcG4Bvm7HHbd617LOvNIhwg6a7_G8eQF0qCnIAUGCMoglm05/s400/17.JPG" vt="true" width="400" /></a></div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimYb3Bt2Awi-BRdHdAOkdjYKjYzf6p1PXgL8wUI0l4chG2yhKP3mMs7-3nGrlGPWpO7CdV0N9w1X8LQ_8vou1K91lmSRbs3HGkyM2Wu2ya_y8o17G-vBrIyEIAkH8QZi8hmdmArZC_Dehu/s1600-h/18.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimYb3Bt2Awi-BRdHdAOkdjYKjYzf6p1PXgL8wUI0l4chG2yhKP3mMs7-3nGrlGPWpO7CdV0N9w1X8LQ_8vou1K91lmSRbs3HGkyM2Wu2ya_y8o17G-vBrIyEIAkH8QZi8hmdmArZC_Dehu/s400/18.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">18 – Ao terminar o sistema irá informar que o processo de instalação foi concluído e pedirá que você tecle "enter" para reiniciar o sistema: </div> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-yy1vErF09jhLan9m7HPqU9Rd1yumvy7U99PpK1m0wHoZbpMvH1VccJu9WovDMpZIkDkGSzvJu3OUii39StfAfyF2W4hun7vF_N7UZlrULNu6cX56rwSSDTjmlyrvOsgNODNgFW0nEIh/s1600-h/19.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-yy1vErF09jhLan9m7HPqU9Rd1yumvy7U99PpK1m0wHoZbpMvH1VccJu9WovDMpZIkDkGSzvJu3OUii39StfAfyF2W4hun7vF_N7UZlrULNu6cX56rwSSDTjmlyrvOsgNODNgFW0nEIh/s400/19.JPG" vt="true" width="400" /></a></div> <br />
<div style="text-align: justify;">19 – Antes de reiniciar o sistema é necessário desmontar a imagem do Mikrotik do drive de CD da máquina virtual. Para isso, clique em “Dispositivos” - > “Dispositivos de CD/DVD” - > "Desmontar Dispositivo de CD/DVD”. Feito isso tecle "enter" e o sistema irá iniciar e estará pronto para ser usado: </div><div style="text-align: justify;"></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjUKeEzsUZUQj-Bft1GouTUYFe15Cy6EoMCfRyFzEByBKWvzNXXmx6ZPCm0mx4Q9YAcs0Ii5FiYlAt1wD6lvo_3BDrIN6jJrp2EuGWhYEvyoj0cjuUtbY-5KK_1EEKXsE4FQoRJepnVot/s1600-h/20.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjUKeEzsUZUQj-Bft1GouTUYFe15Cy6EoMCfRyFzEByBKWvzNXXmx6ZPCm0mx4Q9YAcs0Ii5FiYlAt1wD6lvo_3BDrIN6jJrp2EuGWhYEvyoj0cjuUtbY-5KK_1EEKXsE4FQoRJepnVot/s400/20.JPG" vt="true" width="400" /></a></div> <br />
O usuário inicial do Mikrotik é admin e não tem senha. Entre e conheça o sistema ou aproveite este ambiente para estudos. Em breve estarei postando mais textos sobre mikrotik. <br />
<br />
<br />
<strong>AMBIENTE USADO</strong> <br />
Notebook positivo com processador Celeron e 512 MB de memória RAM rodando o Windows XP com sp3; <br />
Versão do VirtualBox: 3.1.2Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com6tag:blogger.com,1999:blog-4870984847463651719.post-10014716473731000302010-03-21T15:56:00.000-07:002010-03-21T16:33:22.815-07:00Cursos gratuitos na área de TIO Governo federal oferece desde 2004, cursos gratuitos na área de TI, tanto em nível básico como em nível técnico. <br />
Os cursos são oferecidos através do portal <a href="http://www.cdtc.org.br/" target="_blank">CDTC</a> (centro de difusão de tecnologia e conhecimento). Esses cursos tem o objetivo de disponibilizar conhecimento técnico e básico com o uso de tecnologias de código aberto, facilitando assim o processo de inclusão digital e aperfeiçoamento técnico além de divulgar as tecnologias open source. É possível fazer cursos em diversas áreas da informática como: Programação em algumas linguagens, como JAVA, PHP e Python; Redes de computadores, configuração de servidores; Gimp; Web Design entre outros.<br />
<br />
Acesse e confira. <a href="http://www.cdtc.org.br/" target="_blank">http://www.cdtc.org.br/</a>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-46955438311557581662010-03-21T09:43:00.000-07:002010-03-21T16:29:35.828-07:00Por que usar o comando SUDO?!Quem usa o ubuntu e outras distros baseadas em Debian já devem estar habituados a usar o comando "sudo". Embora a intenção do comando sudo seja implementar um maior nível de segurança na administração do sistema, ainda encontramos algumas pessoas que vêem o comando como desnecessário.<br />
<br />
"sudo" vem de SuperUserDO, ou seja, fazer como super usuário. Ele é usado principalmente em distribuições derivadas do Debiam como Ubuntu, Kurumin etc... e é usado quando se quer executar um comando como se fosse o usuário root.<br />
<br />
O sudo implementa um nível a mais de segurança. Visto que no dia-a-dia não estaremos usando o usuário root para tarefas mais corriqueiras, não há necessidadde de usar o usuário root constantemente. O sudo nos impede assim de executar algum comando por engano ou erro de digitação que poderiam comprometer todo o sistema.<br />
<br />
Por exemplo:<br />
<br />
Você vai excluir algum diretório e acaba esquecendo de escrever o path completo do mesmo e digita no teminal o seguinte comando:<br />
<br />
<div style="background-color: #cccccc;"><code>$ rm -r /</code></div><br />
O linux foi feito para profissionais, então, ele não faria como o Windows que ao executar um comando correspondente perguntaria se temos certeza que queremos executar esse comando, estando logado como root ele simplesmente iria excluir todo sistema de arquivos. O uso do sudo nos previne desse tipo de problema, estariamos logados com um usuário comum e como não usamos "sudo" teriamos uma mensagem de "permission denied" porque aquele diretório não nos dá permissão. Caso tivessemos colocado o diretório correto como exemplo:<br />
<br />
<div style="background-color: #cccccc;"><code>$ rm -r /home/fernando/Documentos/teste/</code></div><br />
O diretório seria excluído sem problemas pois ele nos dá permissão para isso.<br />
<br />
Esse é apenas um exemplo mas que mostra bem as vantagens do comando sudo ao invés de ficar logado como root.<br />
<br />
Espero ter ajudado!<br />
<br />
Em breve estarei falando mais sobre linux aqui no blog e estarei falando de alguns tópicos mais avançados, aguardem. Estou com planos de tirar um certificação e isso vai me ajudar bastante a memorizar e treinar alguns conteúdos.Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-92209241062845931012010-03-17T10:57:00.001-07:002010-03-21T10:01:30.470-07:00Como dar privilegios a um usuário sobre apenas um determinado Banco de Dados no MySQL<div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Neste tutorial será mostrado como criar um usuário em um servidor MySql e dar permissão para que ele tenha acesso apenas a um determinado banco de dados.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Primeiro criaremos um banco como exemplo para dar acesso a um usuário.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Para logar no mysql-server com a conta de root usando o mysql-client digite no terminal:<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code># mysql -h [hostname] -u root -p</code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
O parâmetro <b>-h</b> é usado para especificar o host em que está instalado o mysql server. [hostname] deve ser substituído pelo IP ou o endereço da máquina aonde está o banco. Caso você esteja na máquina aonde ele está instalado essa opção não precisa ser colocada.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Após digitar o comando aperte [Enter] e ele pedirá a senha de root do mysql, digite a senha e você estará logado no servidor.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Para criar o banco de dados que será usado como teste use o seguinte comando:<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>create database teste; </code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
Iremos criar uma tabela para deixar como teste, para é primeiro necessário selecionar o banco que será usado e depois criar a tabela, para isso digite:<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>use teste;</code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>create table tableteste </code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>(</code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>id int unsigned not null auto_increment primary key, </code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>nome varchar(20), </code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>telefone varchar(20)</code></div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>);</code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Tendo criado o banco e a tabela podemos passar aos privilégios. Para dar privilégios a um usuário no mysql usamos o comando grant ou revoque para tirar.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Vamos criar um usuário chamado “teste” e dar todos os privilégios a ele somente sobre o banco “teste”. Para isso é utilizado o seguinte comando:<br />
</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><div style="background-color: #cccccc;"><code>grant all privileges on teste.* to teste identified by '123456';</code></div></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
O comando acima dá todos os privilégios no banco de dados teste para um usuário chamado teste. O parâmetro identified especifica a senha desse novo usuário. O “teste.*” está dizendo que os privilégios serão dados sobre o banco “teste” em todas as tabelas, o “*” está sendo usado como um coringa que pode representar qualquer coisa.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Também poderia ser acrestado ao final dessa linha os comandos:<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>with grant option;</code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
Isso daria ao usuário “teste” o direito de dar os mesmos privilégios que ele possui a outros usuários. O comando completo ficaria assim:<br />
</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><div style="background-color: #cccccc;"><code>grant all privileges on teste.* to teste identified by '123456' with grant option;</code></div></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
Se tudo correr bem o mysql retornará a seguinte mensagem (ou algo pareceido):<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>Query OK, 0 rows affected (0.04 sec)</code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
Agora para testar faça logoff do usuário root usando o comando “quit” e entre novamente usando o usuário “teste”. Para isso digite:<br />
</div><div align="justify" class="western" style="background-color: #cccccc; font-weight: normal; margin-bottom: 0cm;"><code>mysql -h [hostname] -u teste -p</code></div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
Quando pedir a senha digite “123456” (sem as aspas). Digite o comando “show databases” para mostrar os bancos de dados a que você tem acesso. Você verá que só irá aparecer o banco teste e outro banco com informações do sistema. Daí você pode fazer outros testes criando novas tabelas e inserindo linhas nas tabelas para perceber que o usuário “teste” tem total liberdade apenas com o banco “teste”.</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;"><br />
</div><div align="justify" class="western" style="font-weight: normal; margin-bottom: 0cm;">Essa é apenas um pequena amostra do que pode ser trabalhado com privilégios no MySQL. Em outros tutoriais abordarei mais sobre o assunto.</div>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-16271923195162362572010-03-17T10:51:00.001-07:002010-03-21T16:52:40.446-07:00Apache, PHP e MySQL no UBUNTUEsse tutorial foi escrito como uma forma de ajuda aos programdores PHP que estão pensando em migrar para o linux, mas ainda não tem experiência com o linux. Aqui estou mostrando como instalar o Apache, o PHP e o MySQL no Ubuntu ou em qualquer distribuição baseada em Debian .<br />
<br />
<div class="western"><strong>Vamos começar instalando o Apache e o PH<strong>P</strong></strong></div><div class="western">Digite no terminal o seguinte comando:</div><div class="western"><code><span style="background-color: #cccccc;">$ sudo apt-get install apache2 php5</span></code></div><div class="western">Com esse comando foram instalados o servidor WEB Apache e o PHP5.</div><div class="western">Durante a instalação, o programa de instalação do php5 perguntará qual o servidor http vc está usando, marque apache2 e siga com a instalação.</div><div class="western"><strong>Agora vamos instalar o Mysql:</strong><br />
<strong></strong><strong><br />
</strong><code><span style="background-color: #cccccc;">$ sudo apt-get install mysql-server-5.0 php5-mysql</span></code></div><div class="western"><br />
Assim, instalamos o servidor MySQL 5.0 e a biblioteca de comunição entre o PHP e MySQL. No final da instalação, o programa pedirá que defina uma senha para o usuário root. Uma alternativa de programa com interface gráfica para o Mysql é o MySQL Query Browser, para isso também precisamos ter instalado o MySQL Administrator, podemos instalá-los com<br />
o seguinte comando:</div><div class="western"><code><span style="background-color: #cccccc;">$ sudo apt-get -y install mysql-query-browser mysql-admin</span></code></div><div class="western"><br />
Você também pode instalar o phpmyadmin que é um programa de administração do mysql, feito em php com o seguinte comando (eu particularmente prefiro o mysql-query-browser):</div><div class="western"><code><span style="background-color: #cccccc;">$ sudo apt-get install phpmyadmin</span></code></div><div class="western"><br />
para acessá-lo basta digitar no browser o seguinte endereço:</div><div class="western"><strong>http://localhost/phpmyadmin</strong></div><div class="western"><br />
</div><div class="western"><strong>Para testar o php:</strong></div><div class="western">Crie um arquivo no diretório /var/www/ chamado info.php e coloque a seguinte função:<br />
<br />
<span style="background-color: #cccccc;"><code>phpinfo();</code></span><br />
<br />
<code></code></div><div class="western"><strong></strong></div><div class="western">Obs.: você pode ter problemas ao criar arquivos nessa pasta. <br />
Caso o tenha, mude as permissões de acesso e escrita.</div><div class="western">Digite no Browser</div><div class="western"><strong>http://localhost/info.php</strong></div>se a página tiver as informações de configuração do php, a instalação foi um sucesso!<br />
<strong><br />
É isso! Até a Próxima!</strong>Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0tag:blogger.com,1999:blog-4870984847463651719.post-23877906371308915072010-03-17T10:46:00.000-07:002010-03-17T10:46:55.599-07:00Mostrando a data por extenso em PHPNeste tutorial estou mostrando um código simples, para mostrar a data em seu site usando o PHP. Apesar de não ter complexidade o código pode ser útil para quem está iniciando em PHP e ainda não está habituado a trabalhar com formatação de datas.<br />
<br />
// pegando a data atual<br />
<br />
$dia = date('d');<br />
$mes = date('m');<br />
$ano = date('Y');<br />
$semana = date('w');<br />
<br />
<br />
//formatando o mês para exibição por extenso<br />
<br />
switch ($mes){<br />
<br />
case 1: $mes = "JANEIRO"; break;<br />
case 2: $mes = "FEVEREIRO"; break;<br />
case 3: $mes = "MARÇO"; break;<br />
case 4: $mes = "ABRIL"; break;<br />
case 5: $mes = "MAIO"; break;<br />
case 6: $mes = "JUNHO"; break;<br />
case 7: $mes = "JULHO"; break;<br />
case 8: $mes = "AGOSTO"; break;<br />
case 9: $mes = "SETEMBRO"; break;<br />
case 10: $mes = "OUTUBRO"; break;<br />
case 11: $mes = "NOVEMBRO"; break;<br />
case 12: $mes = "DEZEMBRO"; break;<br />
<br />
}<br />
<br />
<br />
//formatando o dia da semana para exibição por extenso<br />
<br />
switch ($semana) {<br />
<br />
case 0: $semana = "DOMINGO"; break;<br />
case 1: $semana = "SEGUNDA FEIRA"; break;<br />
case 2: $semana = "TERÇA-FEIRA"; break;<br />
case 3: $semana = "QUARTA-FEIRA"; break;<br />
case 4: $semana = "QUINTA-FEIRA"; break;<br />
case 5: $semana = "SEXTA-FEIRA"; break;<br />
case 6: $semana = "SÁBADO"; break;<br />
<br />
}<br />
//imprimindo a data<br />
echo "$semana, $dia DE $mes DE $ano";<br />
<br />
Código bastante simples mas que pode ser útil aos que estão iniciando em PHP.Fernando Oliveirahttp://www.blogger.com/profile/12189968039386018763noreply@blogger.com0