git vs. svn - atduskgreg - Creative Commons

comecei a usar o Git no final do ano passado. durante todo o ano de 2008 vi muita gente migrando de svn pra Git e quis aprender o que essa ferramenta tinha de tão boa. realmente ela é muito interessante e sua característica principal é ser um sistema de controle de versões distribuído. diferente do svn, não existe dar commit no repositório remoto, todo commit é feito no repositório local e, caso o usuário queira, os vários commits são enviados para o repositório remoto.

ainda sou bem iniciante no Git e nada melhor pra aprender do que a prática. por isso resolvi colocar o dx7lab no Git pra de fato começar a trabalhar com ele. então, se eu fizer tudo errado e o blog sair do ar, conto com a compreensão de todos :P

como uso a dreamhost, quis colocar um repositório lá pra já começar a trabalhar. como disse, sou iniciante no Git, não sei se fiz da melhor forma, mas estou tendo os resultados esperados.

configurando o repositório remoto na dreamhost

na dreamhost já tem o git instalado, então é só configurar o repositório remoto. pra isso executei, na minha pasta home, os comandos abaixo:


$ mkdir <nome_do_repositorio_remoto>
$ cd <nome_do_repositorio_remoto>
$ git --bare init


assim criamos e entramos no diretório que será o repositório remoto. logo depois iniciamos esse repositório com a opção—bare.

criando o repositório local



pra isso é só entrar no diretório do seu projeto e executar:


$ git init


depois disso, dê commit em todo o projeto.

configurando o repositório local para acessar o remoto




$ git remote add <nome_do_repositorio_remoto>
ssh://<usuario>@<endereço_IP_ou_host>/~/home/<usuario>/<diretorio do repositorio remoto>


assim seu repositório local está pronto pra acessar o remoto na dreamhost. caso vc tenha errado esse comando, pode editar diretamente o arquivo .git/config dentro do seu projeto local.

enviar o repositório local para o remoto




$ git push --all <nome_do_repositorio_remoto>


assim vc enviou todo o projeto pro repositório remoto na dreamhost. vc poderá trabalhar normalmente e sempre que quiser enviar o código pra lá:


$ git push <nome_do_repositorio_remoto>


criando um clone do repositório remoto




$ git clone ssh://<usuario>@<endereço_IP_ou_host>/~/home/<usuario>/<diretorio do repositorio remoto>


vc tem todas as facilidades que o git oferece usando os recursos da dreamhost sem nenhum problema. acredito que esse procedimento deve funcionar em qualquer host compartilhado onde há acesso ssh e git instalado. e ainda que não tenha git instalado, vc pode tentar instalá-lo na home do seu usuário.

instalando o git no seu servidor compartilhado



isso só vai funcionar se vc tiver espaço no servidor e tiver o mínimo de privilégios pra executar os comandos necessários na sua /home/<usuario>:


$ wget http://kernel.org/pub/software/scm/git/git-1.6.1.tar.gz
$ tar zxvf git-1.6.1.tar.gz
$ mkdir usr
$ cd git-1.6.1
$ ./configure --prefix=/home/<usuario>/usr
$ make && make install


os binários do Git estarão instalados no seu diretório /home/<usuario>/usr/bin/

divirta-se!


New Years 2009 Fireworks (2)RudlofCreative Commons

com o novo ano, este blog apresenta algumas novidades. desde sua criação nada foi modificado, por pura falta de tempo. agora pretendo retomar meu trabalho por aqui e implementar algumas coisas novas.

os comentários já estão novamente disponíveis nos posts. eu tinha tirado, pois no início poucas pessoas comentavam e os spams faziam a festa. sem querer colocar captcha, pois acho isso muito chato, resolvi desabilitar os comentários naquela época. agora eles estão de volta e todos podem deixar o seu comentário. o problema de spams foi contornado e estou testando pra ver se será de fato eficaz.

outra novidade com os comentários é que estou exibindo um avatar das pessoas que comentam. esse avatar é obtido através do serviço gravatar.com com o e-mail cadastrado no comentário. no site deles tem uma explicação bem simples de como utilizar este serviço. coloquei esse avatar em dois lugares: ao lado do comentário e na página principal, com uma lista das pessoas que já comentaram o post. deixe um comentário aqui e experimente o resultado! :P

até que enfim agora temos paginação! não coloquei no início, pois queria fazer a navegação de outra forma, mas agora resolvi que seria interessante. ter todos os posts abrindo na página principal é que não dava mais.

mais novidades estão por vir. muitas delas nem vou comentar aqui, pois serão puramente pra facilitar a minha vida, como trocar a parte de admin.

estou pensando em disponibilizar o código do blog no github, pois talvez alguém se interesse em ter um blog simples.


The source code for Ctrl-Alt-Del - zippy - Creative Commons

Gostaria imensamente de saber o motivo que leva a todos os livros de PHP a implementar exemplos totalmente horrorosos e mal estruturados.

Eu já fui numa livraria especializada em livros técnicos com o objetivo exclusivo de procurar um livro bom em PHP. Um livro que mostrasse exemplos e abrisse a mente do futuro programador não só pra nova linguagem, mas também pra uma boa prática de programação. Não encontrei nenhum. Pilhas de livros, do básico ao avançado, do mais barato ao mais caro, nacionais, importados, traduzidos. Olhei vários. Não encontrei nenhum que de fato faça com que o estudante tenha de cara uma boa abordagem de maneira simples. Se você conhecer algum, me indique. Do que estou falando? Disto:


<?php
session_start();

if (!empty($_POST)) {
$_SESSION[var_export($_POST['note'], true)] = $_POST['note'];

if ($_POST['Enviar'] == 'Limpar Notas')
$_SESSION = array();
}

echo "<center>";
echo "<h1>Lista de Notas</h1>";
echo "<h2>Exemplo de PHP bem feito</h2>";
echo "<h3>Exemplo de como fazer um site em php bem feito sem usar uma linguagem de template</h3>";
echo "<p>Esse site é apenas um exemplo. Não tenho o compromisso aqui de fazer um html perfeito ou";
echo "uma programação impecável. Quero apenas demonstrar que dá pra fazer PHP direito sem apelação!</p>";
echo "<hr />";
echo "<form method="post" action="index.php">";
echo "Digite uma nota:";
echo "<input type="text" name="note" />";
echo "<input type="submit" name="Enviar" value="Enviar" />";
echo "<input type="submit" name="Enviar" value="Limpar Notas" />";
echo "</form>";
echo "<hr />";

echo "<h4>Notas gravadas</h4>";
echo "<hr width="40%" />";

echo "<ul>";

if (!empty($_SESSION)) {
foreach ($_SESSION as $note) {
echo "<li>" . $note . "</li>";
}
}

echo "</ul>";

echo "<hr width="40%" />";
echo "<small><a href="http://dx7lab.com">Dx7lab</a></small>";
echo "</center>";
?>



Todos concordam que isso é horrível, péssimo e não serve pra fazer nenhum sistema decente, certo? Código PHP misturado com HTML que chega a ser ilegível. LIXO! Livros de mais de 300 páginas com exemplos assim, desse tipo. É quase inacreditável. Vamos imaginar um bom conhecedor de HTML querendo aprender a programar. Ele olharia isso e desistiria imediatamente de PHP. Coisas assim nos levam a concluir que PHP não presta pra escrever código organizado e limpo. Mas isso não é verdade!

Alguns livros de um nível mais intermediário chegam a falar nas famosas linguagens de template. Smarty, TinyButStrong, entre outras. Os mais avançados chegam a criar uma estrutura complexa pra encapsular o HTML e criar uma view mais limpa. Tudo bem, mas isso não é necessário. Os autores que escrevem pra iniciantes podem argumentar dizendo que não querem inserir ainda mais complexidade no início do aprendizado. Concordo! Mas não precisa fazer nem uma coisa nem outra. Sinceramente? Eu não gosto dessas linguagens de template. Já usei algumas mas elas não fazem nada que não dê pra fazer simplesmente usando a linguagem. Dá pra fazer Código em PHP PURO e LIMPO! Por mais inédito que isso possa parecer. Usando coisas básicas da linguagem, que geralmente os livros abordam logo no início.

Abaixo está um exemplo que faz a mesma coisa que o código acima, mas de uma maneira limpa. Teremos 2 arquivos, um para o template – que será chamado template.tpl – e outro para o código PHP puro – chamado index.php.

Vejamos o template.tpl:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Exemplo de PHP bem feito</title>
</head>

<body>
<center>
<h1>Lista de Notas</h1>
<h2>Exemplo de PHP bem feito</h2>
<h3>Exemplo de como fazer um site em php bem feito sem usar uma linguagem de template</h3>
<p>Esse site é apenas um exemplo. Não tenho o compromisso aqui de fazer um html perfeito ou
uma programação impecável. Quero apenas demonstrar que dá pra fazer PHP direito sem apelação!</p>

<hr />

<form method="post" action="index.php">
Digite uma nota:
<input type="text" name="note" />
<input type="submit" name="Enviar" value="Enviar" />
<input type="submit" name="Enviar" value="Limpar Notas" />
</form>

<hr />

<h4>Notas gravadas</h4>
<hr width="40%" />

<ul>
<? if (!empty($_SESSION)): ?>
<? foreach ($_SESSION as $note): ?>
<li><?= $note ?></li>
<? endforeach ?>
<? endif ?>
</ul>

<hr width="40%" />
<small><a href="http://dx7lab.com">Dx7lab</a></small>
</center>

</body>
</html>



Aqui temos um XHTML válido que um designer pode entender com muita facilidade. Diríamos pra ele: “Senhor designer, temos aqui um códido HTML com algum PHP que deixará a página dinâmica. Tudo que estiver entre as tags <? ?> ou <?= ?> é PHP. Qualquer dúvida é só perguntar.”. Por mais incrível que isso possa parecer, um designer consegue entender isso e continuar o seu trabalho naturalmente.

Alguns podem argumentar que mesmo nesse exemplo tem PHP misturado com HTML. Vamos ser pragmáticos! Não tem nem como comparar os exemplos nesse nível. Antes tinhamos PHP cuspindo tags HTML com echo e tudo misturado, fazendo uma verdadeira salada. Agora temos HTML com algumas tags PHP embutidas, assim como teríamos em uma linguagem de templates. Qual a diferença em usar <? if ($a $b): ?&gt; e { if $a $b } do Smarty? É basicamente a mesma coisa sem introduzir complexidade com uma nova ferramenta. O problema não é ter HTML com PHP embutido. O problema é ter PHP cuspindo HTML! Não temos esse problema no template.tpl. Todas as tags PHP são atômicas: fazem apenas uma coisa e são independentes. Isso é o importante. Em um projeto que precisa usar MVC, esse é um bom exemplo de View simples com PHP Puro.

A outra parte seria o PHP propriamente dito.


<?php
session_start();

if (!empty($_POST)) {
$_SESSION[var_export($_POST['note'], true)] = $_POST['note'];

if ($_POST['Enviar'] == 'Limpar Notas')
$_SESSION = array();
}

require_once "./template.tpl";
?>



Temos aqui um PHP bem simples de fácil entendimento que, no final do arquivo, inclui o template.tpl – nossa View – e faz tudo funcionar de forma organizada.

Não é difícil. O problema é pensar fora da caixa. Como todo mundo aprende assim, programa assim e pronto, sem questionamentos. Pra melhorar criaram ferramentas de templates e quem não usá-las será condenado! Besteira! As ferramentas de templates têm o seu valor e a sua aplicação, todavia não estamos amarrados a elas pra poder escrever código limpo. Isso é o que eu queria mostrar. Coloquei o exemplo pra funcionar. Dê uma olhada.


if ($row["status_subtasks"] == 1)
{
list ($ano, $mes, $dia) = split ('[/.-]', $row["estimada_subtask"]);
$data_fim_subtask = $dia."-".$mes."-".$ano;
}
else
{
list ($ano, $mes, $dia) = split ('[/.-]', $row["estimada_subtask"]);
$data_fim_subtask = $dia."-".$mes."-".$ano;
}



if é martelo e qualquer linha é prego! rs


while ( $date < $end ) {
if ($date > $end)
break;
else {
$dateArray[$weekNum] = $date;
$date = $date + self::ONE_WEEK;
}
$weekNum++;
}



pena que ele não colocou comentários! rs