sábado, 5 de outubro de 2013

Material Curso PHP Dia 1

Para o primeiro dia do curso temos esse material:

Apresentação (foi feita no Keynote do MacOSX se tiver um pouco desformatada ou com efeitos estranhos depois que exportei desculpe)

Código Fonte digitado na aula Você pode ver online ou fazer o download, ou mesmo clonar o código fonte já com controle de versão em Git. Um detalhe é que os códigos estão em branchs diferentes (use o bitbucket na web para trocar de branch ou clone o código com Git e troque de branch para ver o código em sua máquina, se não conhece Git: http://blog.giovannicandido.com/2013/09/material-para-minicurso-de-git-e.html)

Para instalação, há muitos tutorias na internet. Eu recomendo usarem uma máquina virtual, instalar o ubuntu, instalar o ambiente (um comando, isso está na apresentação) e acessar a url com ip da máquina virtual, ou programarem na máquina virtual se tiverem memória sobrando. Outra alternativa é instalar dual boot com o windows, isso é muito fácil de fazer com o ubuntu e o próprio instalador vai te guiar (cuidado para não formatar sua máquina e me xingar depois, kkkk)

Para aprofundar nos assuntos apresentados temos esses links, se você puder estudá-los vai adiantar nossa vida e posso ir para coisas mais avançadas.

Independente de Qualquer Linguagem que for programar (PHP, Java, .NET, ASP, JSP, Ruby, etc...), para se tornar programador WEB deve aprender essas coisas:

Primeiramente recomendo esse site: http://www.webplatform.org ele é uma iniciativa da W3C (World Wide Web Consortium), para quem não sabe a W3C é como um órgão regulamentador para Web. Ele é uma iniciativa nova, que tem como objetivo reunir documentação em uma plataforma colaborativa entre as empresas e organizações que fazem a web acontecer (Microsoft, IBM, Google, Mozilla, Apple, e muitos outros), o site possui documentação sobre os mais diversos assuntos, como HTML, CSS e Javascript, além de tópicos recentes como WebSockets e outros assuntos sobre programação Web. Esse site era produzido por essa mulher: http://lea.verou.me que além de linda, tem muita documentação mais avançada sobre desenvolvimento Web (ela trabalhava na W3C), recomendo o blog dela também (para quem lê inglês)

HTML

http://www.w3schools.com/html/ Exemplos, explicações e testes (em inglês)
http://www.html5rocks.com/pt/ Excelente, apenas o que há de novo (Iniciativa da Google), possui tutoriais sobre html, css, javascript.

CSS:

http://www.maujor.com esse é o cara, explica muito bem sobre CSS

Javascript (há alternativas  como mencionado na apresentação): http://www.w3schools.com/js/‎ https://developer.mozilla.org/en-US/docs/Web/JavaScript
Para iniciantes: http://www.javascript-tutorial.com.br

Alternativas, se você for uma pessoa extremamente curiosa ou se não liga de brincar com coisas que nem estão prontas, e nem se tem certeza absoluta se vai continuar a existir: Microsoft Typescript e Google Dart . Eu brinco com Google Dart e gostei bastante da proposta. São alternativas para o futuro da Web.
Depois que aprender a sintaxe e estiver programando em Javascript, use o Jquery, vai facilitar muito a sua vida. Veremos como utilizá-lo nas aulas. Uma outra biblioteca javascript que utilizo, mas é mais avançada e voltada para sistemas, não sites, é o ExtJS (Essa é mais Punk de aprender)

Noções de HTTP. Na wikipedia há um bom texto introdutório: http://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol
O conteúdo relevante para quem trabalha com programação Web é os métodos (GET, POST, PUT, DELETE) os códigos de retorno (1xx, 2xx, 3xx, 4xx, 5xx, não é necessário decorar, apenas saber quais são os principais e o que significam: 404, 403, 301, 302, 500, 501). Outra coisa importante é que o HTTP por si só não mantém estado, é um protocolo que chamamos de stateless. Para manter um estado conversacional (carrinho de compras, login, etc...), utiliza-se técnicas específicas da linguagem, que geralmente usam cookies por de baixo dos panos. Veremos como fazer isso em PHP.

FTP: File Transfer Protocol e SSH. O Ftp é muito utilizado em hospedagens para transferir o código de suas máquinas até o servidor onde o site será hospedado. O SSH permite que você conecte no servidor e rode comandos como se fosse um terminal remoto, o SSH também permite transferir arquivos de modo criptografado, sendo fortemente recomendado. No FTP sua senha fica escancarada na rede e qualquer Nerd pode colocar um sniffer na rede e ver sua senha, há também o ftps uma versão do ftp com criptografia, prefira hospedagens que ofereçam ssh ou ftps. Não use o internet explorer ou a pasta o windows ou o navegador (firefox, chrome) para acessar e transferir ftp (ftp://ftp.seusite.com.br) porque é muito ruim, já ví muita gente fazendo isso e reclamando que não consegue transferir o arquivo. Use um programa FTP: Recomendo o Filezilla (tem para todos os sistemas operacionais)

Para debugar sites e sistemas WEB, inspecionar elementos, ver propriedades CSS, analizar o tráfego entre navegador e servidor. Recomendo o complemento do Firefox chamado Firebug. O Chrome e Safari oferecem funcionalidade similar mas acho que o Firebug é o melhor.

Um pouco de redes e servidores, como DNS e TCP também ajudam mas não é requisito.
Recomendo programar usando uma distribuição Linux, você vai perder menos tempo tentando fazer a coisa funcionar e mais tempo programando, a maioria das hospedagem do mundo oferecem linux como opção mais barata e geralmente mais robusta e estável, falo isso por experiência própria pois trabalho com hospedagem. Não é obrigatório e geralmente as hospedagens oferecem um painel de controle que abstrai o uso do sistema.

Recomendo para desktop de programador o Ubuntu, mas várias outras distribuições também são excelentes, desde o ArchLinux para os mais puristas até o Fedora, Linux Mint, Debian, etc. Não recomendo o uso do Debian em desktop já que os programas nele demoram a serem atualizados, considere o uso do Ubuntu que é derivado e com pacotes mais atuais e mais coisa pronta sendo mais produtivo. Para servidores a história é outra, use o Ubuntu Server (é uma versão voltada para servidores e não para uso em casa) se tiver vontade de estudar servidores ou o Debian Netinst (versão light do debian onde o administrador tem que instalar e configurar tudo).

Um assunto que vai ter fazer um melhor programador em qualquer linguagem/tecnologia que utilizar é controle de versão, principalmente se trabalhar em empresas desenvolvendo em equipe, é requisito crucial. Um sistema que vem ganhando popularidade e conquistando espaço entre desenvolvedores e empresas é o GIT, ele foi desenvolvido inicialmente por Linus Torvalds (o mesmo cara que desenvolveu o kernel do Linux). Se você já trabalha com controle de versão usando CVS ou Subversion, ou não trabalha com controle de versão eu recomendo o aprendizado de GIT, se estiver iniciando ou mesmo se já conhecer Git veja minha apresentação sobre o assunto, pode te ajudar: http://blog.giovannicandido.com/2013/09/material-para-minicurso-de-git-e.html

Outro assunto muito interessante é teste unitário, isso existe em diversas linguagens, vamos ver como testar códigos em PHP automáticamente usando PHPUnit nas aulas.

Especificamente sobre PHP, se você estudar a sintaxe básica vai adiantar muito nossas aulas. Um bom material é esse: http://pt.wikibooks.org/wiki/Curso_de_PHP/Sintaxe_básica repare que no final de cada página há um link para outra com mais sintaxe (a próxima página desse é comentários).

Como nosso curso não tem apostila (talvez eu faça uma no futuro mas confesso que não tenho muito tempo para isso, e comecei a dar aulas tem pouco tempo também). Esse material na web vai ajudar muito. Venham para as aulas com as dúvidas e podemos abortar a mão na massa mesmo, ao invés de ficar dias vendo sobre sintaxe podemos já partir para o desenvolvimento de casos mais reais, e daí eu abordo apenas as particularidades nas aulas, coisas que diferem o PHP de outras linguagens que esteja acostumado.

Na próxima aula vou preparar um site simples para programar e incrementar com vocês. Como faltam duas semanas talvez eu poste o código aqui antes para vocês estudarem e virem com as dúvidas. Vou elaborar uma ementa mais formal para seguirmos, como fui chamado para as aulas um pouco em cima da hora eu não elaborei ementa.


Antes que me esqueça, para quem ficou curioso sobre a IDE que utilizo, o site deles é esse aqui. Na minha opnião é a melhor IDE para programação Java e PHP e Web em geral, é paga e eu não posso dizer que tem keygen na net ;-). A mesma empresa faz outras IDEs para Ruby, Python, C++ e outros, o Intellij IDEA é como se fosse todos em um só, pois é extensível por plugins, e de fato as outras IDEs são baseadas em um Intellij IDEA "capado e com os plugins específicos". A Google anunciou que a nova versão da IDE de desenvolvimento para Android vai ser baseada no Intellij IDEA e vai ser gratuito (há uma versão mais simples do IDEA gratuito também). Com relação a IDE o Netbeans é excelente, o Eclipse também, há uma briga entre os dois eu prefiro Netbeans, é mais coeso (O eclipse tem muitos plugins mas os plugins parecem que não foram feitos para trabalhar junto, dá muito problema, mas é gosto). Atualmente eu só programo Java, PHP, Javascript e Dart e uso o Intellij IDEA. Quando tenho que editar um arquivo simples, uso o Sublime Text, quem usa Notepad++ está bem servido, eles são parecidos, se tiver curiosidade experimente o Sublime ele é muito bom mesmo e a versão trial nunca expira (te pergunta se quer comprar mas nunca para de funcionar, igual o winrar, kkkk). Quanto ao Visual Studio, eu sou ignorante nele, quando tentei usar eu desisti nos primeiros 15 minutos, mas deve ser uma ótima alternativa também para programação Web se você souber usar.

No mais espero que tenham gostado da aula inicial,  se tiverem dúvidas ou sugestões comentem aqui.

segunda-feira, 30 de setembro de 2013

Git branch no terminal do linux

Gosto de usar o git no terminal do linux, uma dica muito útil é ter a informação de qual branch se está no momento.
Para isso baixe o script abaixo e salva em algum lugar, use o comando abaixo para baixar e salvar no seu diretório home de uma só vez.

curl https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.git-prompt.sh

Depois edite seu bash profile ou bashrc (~/.bashrc)

Adicione a seguinte linha antes de setar a variável PS1:

source ~/.git-prompt.sh

Depois disso uma variável __git_ps1 estará disponível para utilizar.

Altere seu PS1 para conter esses variável aonde quiser que a informação seja vista, o meu fica assim:

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=true
export PS1="$(tput setaf 1)_________________________________________________________________________\n$(tput setaf 2)|$(tput setaf 4) \w $(tput setaf 2)\u@\h$(tput sgr0) $(tput setaf 3)\$(__git_ps1) $(tput sgr0) [\t]$(tput setaf 2)\n\[\e[32m\]|\[\e[31m\] => \[\e[0m\]"

Reparem no __git_ps1 na variável.
O export GIT_PS1_SHOWDIRTYSTATE=true adiciona um * no branch se ele tem mudanças na stage área e um + se existem mudanças fora da stage área, em outras palavras, mostra se o branch possui alterações não comitadas.

O meu prompt é todo personalizado como podem ver.

Há para fazer mais coisa, leia o código do script baixado.

O resultado final é esse:



segunda-feira, 16 de setembro de 2013

Material para Minicurso de Git e Integração Contínua

Minicurso apresentado na Pontifícia Universidade Católica de Minas Gerais para alunos de Ciência da Computação de diversos períodos.

Apresentações 

Git
Introdução a Integração Contínua

Video aulas relacionadas: 

Git
JUnit
Maven

Código Fonte

https://bitbucket.org/giovanni/demo-junit
https://bitbucket.org/giovanni/simulacao-forms


quinta-feira, 30 de maio de 2013

Setando JAVA_HOME na linha de comando do MACOSX Elegantemente

Dica rápida.
Para fazer o Oracle Java 7 ou qualquer outro java ser o padrão para todas as aplicações no terminal no MACOSX set a variável JAVA_HOME para o seguinte:


JAVA_HOME=$(/usr/libexec/java_home)
Faça isso para todo o sistema editando o arquivo /etc/bashrc
export JAVA_HOME=$(/usr/libexec/java_home)
Agora quando trocar a versão do java no painel de controle de MAC ele será atualizado na linha de comando também.
Dica traduzida e colocada aqui como referencia de: http://stackoverflow.com/questions/10339887/after-installing-java-jdk-7-for-mac-os-x-mvn-version-still-shows-java-version

Importando Dados de Access para Outras Bases SQL


Utilizando o programa MDB Tools é possível extrair informação de bases de dados Access. Ele permite extrair o schema da base e os dados nos formatos SQL e CSV.
O programa possui parâmetros para exportar os dados em SQL compatível com Mysql Server, Oracle, Postgresql e outros. Nos testes que fiz o SQL gerado para Postgresql não está corretamente formatado já que ele coloca aspas duplas nos valores dos inserts o que está incorreto, dificultando a importação.
A estratégia que utilizei foi exportar o schema  em SQL e os dados em CSV então importar os dados CSV dos arquivos, sendo um arquivo para cada tabela, um a um, em uma ordem que respeitasse as foreing keys. Algumas poucas foreing keys foram geradas desnecessariamente no processo de importação impossibilitando a importação de alguns dados, nesses casos a foreing key foi deletada.
O primeiro passo é exportar o schema utilizando o comando abaixo:

mdb-schema base.mdb postgres > schema.sql


Depois seguindo minha estratégia (para exportar diretamente para SQL veja a documentação do comando) utilize o seguinte commando:

for tables in `mdb-tables banco.mdb`; do mdb-export banco.mdb $tables >> tabelas_csv/$tables.csv; done

Agora é possível importar os dados de cada arquivo gerado no Postgresql. Para simplificar a tentativa/erro de ordem de importação crie o script bash com o conteúdo abaixo e execute-o.

psql -c "COPY \"$1\" from '/Users/giovanni/Documents/tabelas_csv/$1.csv' WITH Delimiter ',' CSV HEADER QUOTE AS '\"' ESCAPE AS E'\\\\' ;"

Digamos que o script criado chama-se importa.sh, rode-o assim:


sh importa.sh nometabela


Seus dados estarão importados no final do processo. Como disse algumas foreing keys podem atrapalhar, delete-as conforme for importando com o script acima.
Se a importação via SQL der certo, melhor, o processo será mais rápido, mas a estratégia apresentada aqui funciona muito bem também.

quinta-feira, 23 de maio de 2013

Tutorial sobre GIT




Esse video tutorial aborda aspectos básicos e avançados de GIT. Recomendado para quem está começando com controle de versão, com GIT ou migrando de Subversion para GIT. Ou mesmo quem já utiliza GIT.

O tutorial será dividido em 4 vídeos, a apresentação está disponível em: http://prezi.com/rpf-_xrinrzq/tutorial-git/?kw=view-rpf-_xrinrzq&rc=ref-34836321 e serve como base para os vídeos.

O primeiro vídeo apresenta um overview sobre GIT e seus comandos básicos que todo iniciante deve saber. A segunda parte apresenta como desfazer alterações com os comandos git revert e git reset. O terceiro vídeo apresenta branches e merges, e o quarto vídeo ensina como reescrever o histórico do GIT.

Para quem já utiliza o GIT recomendo ver a apresentação e escolher qual dos vídeos quer ver

Para acessar os vídeos vá em: http://www.youtube.com/playlist?list=PL3NGePwPGuvvnBO4tk---xNABmNVEpD2R

sábado, 20 de abril de 2013

Tutoriais e dicas de desenvolvimento

Alguns tutoriais e dicas de desenvolvimento estão disponíveis no link: https://wiki.atende.info/display/TD/Home

Vale a pena conferir. Pessoalmente eu contribuo nos dois lugares.