Volta para Casa

Depois de uma semana em Florianópolis, estou novamente em Itajaí. Voltei anteontem no final da tarde e o motivo de não ter postado nada é que eu tinha que acabar um trabalho, o site da BEMFAM: tableless, padrões web, cross-browser, PHP/MySql, totalmente administrável. Esse foi o segundo serviço que eu fiz para a Meetweb, depois da Coalizão Antituberculose. Esse ano estou deixando de trabalhar fora (no Colégio) para pegar esses sites de fora que me rendem um pouco mais e são bem mais legais de se fazer (principalmente quando trabalho com designers).

Na semana em Floripa, além de ir à práia, li três livros que merecem ser sugeridos: o best-seller O Código da Vinci, de Dan Brown; Fortaleza Digital, também de Dan Brown; e Harry Potter e o Enigma do Príncipe, o sexto livro de J. K. Rowling. O estilo do Dan Brown é muito legal. Além de ser um cara extremamente inteligente, criando enigmas muito interessantes durante o livro, ele consegue prender a atenção do leitor de forma incrível. Gostei bastante… Agora estou querendo comprar o seu outro livro, Anjos e Demônios. Ou se alguém quiser me presentear, ficarei grato. :D

Passei o ano novo em um lugar de Laguna chamado “Mato Alto”, uma região que, segundo meus cálculos, está no mínimo uns 10 anos atrasada no tempo. :) O bom é que num lugar desses, não se tem nada pra fazer e então eu aproveitei pra ficar lendo sem stress o livro Algoritmos: Teoria e Prática e; aliás, fiz alguns testes inúteis, como descobrir o custo dos algoritmos de ordenação se forem executados por pessoas. Os resultados são bem interessantes. Por exemplo, o Insertion Sort é MUUUITO mais rápido que o Merge Sort, já que você põe todas as cartas que já foram empilhadas na sua mão e com a outra simplesmente coloca uma carta no meio do bolo. O Merge Sort já é bem mais difícil porque você precisa fazer pilhinhas na mesa… :)

Nessa semana, vou tentar pegar o PhotoX, mas não muito intensamente, porque estou agora mais tranquilo lendo e estudando de leve.

Ah… Finalmente o desktop de minha casa tem um novo HD. Foi uma troca boa… Um HD corrompido de 20gb por um de 80gb… :D Agora tenho um bom lugar pra backups! Já tá particionado pra Linux e pra Windows.

Vou começar a postar alguns artigos explicativos, pequenos tutoriais, sobre coisas simples para quem está iniciando em algoritmos computacionais, PHP, tableless, Linux, etc. Tenho recebido vários e-mails pedindo sugestões de apostilas e essas coisas de onde começar e acho que seria legal até pra aumentar as visitas do meu site, meu pagerank, e conseqüentemente, o dinheiro do Google Adsense. :D Aliás, você já acessou meu site usando Internet Explorer? Acho que o negócio que eu fiz foi um dos mais legais pra ganhar uns trocados com o Firefox / Google Toolbar.

PHP: Array de Caracteres != String

Já não é a primeira vez que eu vou fazer uma aplicação em PHP e quero usar uma função de arrays numa string. Como um bom dicípulo da linguagem C, aprendi que uma string é um array de chars. O PHP tenta fazer algo parecido com isso, aceitando que possamos acessar caracteres da string com $string[indice]; porém, não sei por quê, não podemos usar funções de array nas strings e vice-versa.

Vamos supor que eu queira fazer algo simples: usar a função shuffle() numa string (criar um anagrama qualquer de uma string). Aí o PHP me força a fazer isso aqui:

<?php
        $mensagem="anagrama";
        $array=Array();
        for ($i=0; $i<strlen($mensagem); $i++) {
                $array[]=$mensagem[$i];
        }
        shuffle($array);
        $mensagem="";
        for ($i=0; $i<count($array); $i++) {
                $mensagem.=$array[$i];
        }
?>

Pô… É um código muito feio! Quer dizer… Se o C tivesse a função shuffle() (ou o PHP “soubesse” que strings não passam de array de chars), bastaria fazer:

<?php
$mensagem="anagrama";
shuffle($mensagem);
?>

Economia de cérebro, de banda, de código, de dedos… De tudo!

Então, cheguei a conclusão de que eu é que devo estar entendendo algo errado. Alguém conhece uma maneira do PHP tratar strings como arrays? Andei procurando no manual e achei a função settype(), mas ela não faz o que eu quero, porque converte uma string para um array de strings!

Álbum de Fotos

Link para projeto em desenvolvimento…

Meu Flickr tá estourando (depois de 200 fotos, começam a sumir fotos segundo seu FAQ) e por isso resolvi criar um álbum de fotos pessoal. Estou desenvolvendo em PHP, usando um banco de dados MySql e estou criando bastante recursos Ajax para exercitar um pouco e para o negócio ficar bem dinâmico (se estiver ficando muito exagerado, me avisem!). Este projeto que ainda não tem nome, mas que estou pensando em algo como PhotoX (gostou do nome? comente! não gostou? comente também!), deve ter todos os recursos do Flickr (tipo, All Sizes, Notes e Rotate) e o que surgir de idéias legais. Será um software livre, cada um instala em seu servidor (ex.: é um “WordPress“, não um “Blogger“) e por isso ele não tem limites de sets, tags, fotos, tamanhos ou qualquer coisa do tipo. Irá requerer PHP 4.3, está sendo desenvolvido usando classes (estou tentando exercitar programação orientada a objetos), usa a biblioteca GD (para trabalhar com as imagens) e é totalmente Web 2.0 (tableless, padrões HTML 4.01 Strict, Ajax, tagsonomia, simplicidade). Já estou o criando multi-linguagem, ele funciona com alguma coisa parecida com templates e deve sair em no máximo um mês.

Estou convidando programadores sem nada pra fazer pra me dar uma ajuda (claro que gratuita). O Gustavo é uma das pessoas que me deu uma ajuda fazendo um pedaço da classe Foto e da classe Comentario e aqui estendo o convite para qualquer pessoa que lê o meu blog e queira ajudar. O sistema é simples: eu te dou um login e senha no meu FTP e você desenvolve o que você conseguir (postando sempre que você muda uma letra o novo resultado, para que depois outra pessoa pegue e possa continuar).

Atualizado

O Renato deu uma idéia legal aí num comentário que é hospedar o troço em alguns desses sites de projetos de software livre e usar CVS pro desenvolvimento. Acho que realmente faz sentido, eu não tinha pensado nisso… Hehehe… Vou criar algo a respeito e depois eu publico aqui!

Se você for uma dessas pessoas dispostas, gostaria de pedir que você note alguns detalhes na construção dos meus arquivos:

  • Tabulação é feita com “tabs”.
  • As classes não imprimem nada na janela.
  • Mesmo os arquivos não imprimem nada também, eles imprimem para a variável $buf.
  • Não vale mexer nos arquivos config.php, index.php, ajax.php, scripts.js.php e style.css (por favor, deixe toda a parte de client-side, Ajax e configurações globais para mim :D ).
  • Todas as coisas que você passar para a variável bufna~opodemcontertexto.(Sevoce^querescreverqualquercoisaaleˊmdoquefoiretornadodobancodedados,devecriarumavariaˊvelbuf não podem conter texto. (Se você quer escrever qualquer coisa além do que foi retornado do banco de dados, deve criar uma variávelLANG[‘NOMEDAVAR’] no arquivo lang/pt_BR.php e lang/en_US.php
  • Se você não souber programar mas estiver afim de traduzir o projeto para alguma língua, me dê seu nome que quando tiver pronto eu vou querer muito sua ajuda.
  • Se você não quiser traduzir e nem souber programar, colabore com idéias de coisas que você acha legal o projeto ter (o que falta no Flickr que seria legal os programadores colocarem, ou sei lá…)

Espero que todos tenham entendido o espírito. Me mandem e-mail com sugestões e quem puder ajudar, ajude. Quem quiser dar um nome ao projeto, pode me sugerir também! Tenho certeza que um software livre desenvolvido pela comunidade para um fim que ainda não existe algo parecido (alguém conhece algum software livre de álbum de fotos que faça tudo que o Flickr faz?) fará bastante sucesso e será bem aceito ao menos pelos programadores (grande parte deles usa o Flickr mas tem um servidor legal que suporta PHP e GD).


Agora vamos voltar ao blog.

Fiquei um tempo sem postar justamente por causa desse projeto, que estou me esforçando para fazer o mais rápido possível. Também estou lendo “Java – Como Programar”. Tô gostando bastante da didática e gostando também da linguagem Java. No mais, não estou fazendo muita coisa. Estou indo trabalhar todos os dias a tarde, viajei final de semana para Florianópolis e agora que meu primo foi embora, minha casa está bem vazia (o que é ótimo! :) )

Férias!

Hoje foi minha última aula desse ano e abertura da OLIS (olimpíada do meu colégio). Começaram extra-oficialmente as férias. Finalmente vou ter um tempinho pra poder estudar informática, matemática e música; aproveitar a praia, viajar, ler… Demorou, hein?

Como toda pessoa organizada (categoria que eu não me enquadro, mas estou tentando), fiz meu “plano” para aproveitar bem essas férias e também para decidir o que eu vou querer no ano que vem. Aqui embaixo está publicado, e sujeito a mudanças (porque meus objetivos sempre podem mudar). Notem também que eu coloquei algumas coisas como “ganhar olimpíada” que seriam conseqüência das outras ações. Além disso, eu coloquei alguns objetivos que podem parecer “sonhos”, mas acho que sempre é bom traçar objetivos difíceis pra tentar ir o mais longe possível.

Informática

Acho que foi a área em que eu menos evoluí nesse ano. É que é incrível que quanto mais eu aprendo, mais percebo que ainda tenho cada vez mais coisa a aprender. Isso não faz sentido matematicamente falando… A informática é desafiante e a gente sempre tem a impressão de que somos ignorantes. É como o Zeh falou num post em seu blog: “O mais legal de ser programador é olhar pra certas coisas que você fez no passado, que achava uma grande idéia, e perceber que aquilo era algo extremamente fedorento.”

Mas vamos lá…

  • Dominar os algoritmos mais básicos de grafos, programação dinâmica e geometria (saber implementá-los sem consulta em C).
  • Obter medalha de ouro na Olimpíada Brasileira de Informática.
  • Participar da Olimpíada Internacional de Informática.
  • Dominar o básico da linguagem C (saber gerenciar memória, usar bibliotecas como ncurses, usar sockets, etc.)
  • Aprender de vez a programar em C/GTK, para criar interfaces gráficas.
  • Dominar conceitos da orientação a objetos (abstração, encapsulamento, herança, poliformismo) e saber implementá-los em Java, C++ e PHP 4 e 5.
  • Aprender um JavaScript mais avançado (saber criar aqueles marquees por exemplo, ou como o cara pode arrastar um div pela tela) e exercitar essas linguagens client-side e Ajax dentro dos padrões web.
  • Saber diferenciar Unix/Linux/FreeBSD/OpenSolaris. Instalar estes outros sistemas no meu laptop.
  • Exorcizar o laptop. Não usar mais nem Flash, abolir o Windows.
  • Converter o laboratório de informática do Colégio Salesiano pra Linux (Edubuntu, que eu conheci essa semana e achei muito massa!).
  • Programar com frameworks.
  • Aprender Awk.
  • Aprender alguma coisa de hardware e de baixo nível (Assembler).

Matemática

Nesse ano, fui mal nas duas olimpíadas (brasileira e catarinense) e mesmo ganhando medalha de bronze na Olimpíada de Maio, não fiquei muito contente. De qualquer maneira, sinto que estou evoluindo na matemática graças as aulas do Vavá e mesmo as do Fabiano, que são lerdas mas às vezes trazem uma novidade.

  • Obter medalha de ouro na Olimpíada Regional de Matemática.
  • Obter medalha na Olimpíada Brasileira de Matemática.
  • Dominar geometria básica (decorar fórmulas dos volumes dos objetos, por exemplo).
  • Fazer exercícios dos Eureka!s
  • Fazer contas mentalmente mais rápido (exemplo: resolver uma Bháskara mentalmente em menos de 15 segundos)
  • Trabalhar com matrizes.
  • Trabalhar com funções de terceiro grau e superiores.
  • Trabalhar com números complexos.
  • Gabaritar a prova de matemática do vestibular do ITA no final do ano.
  • Prosseguir com treinamento para olimpíadas com o professor Vavá.

Física

Física depois desse ano entrando na minha lista de matérias legais e que eu preciso estudar bastante pra passar no ITA… Vamos à lista…

  • Dominar conceitos básicos e conhecer fórmulas básicas (Newton, Kelpler, Galileu, Einstein).
  • Revisar meu livro de física desse ano (2005).
  • Participar da Olimpíada Brasileira de Física.
  • Participar da Olimpíada Brasileira de Astronomia.
  • Prosseguir com grupo de estudos físicos com o professor Valdir.
  • Acertar 75% da prova de física do vestibular do ITA no final do ano.

Trabalho

Resolvi parar de trabalhar no Colégio, porque o salário era muito baixo (cerca de 200 reais é pouco, mesmo pra trabalhar 10 horas por semana) e o emprego fixo é muito chato (tem dias que eu vou lá e não faço nada, outros dias que tem um monte de coisa pra fazer e eu não consigo acabar nada; fora os alunos que vão lá no Lab. de Informática encher o saco – hehehe). Vou pegar mais freelances e acho que vou lucrar mais me dedicando só a isso e aos estudos, tanto financeiramente quanto nos aprendizados. Mas vou fazer uma proposta ao Colégio que é continuar mantendo o site deles (afinal, eles precisam de alguém pra fazer isso), mas fazer de casa e com isso só perder tempo quando precisar de alguma mudança, em casa!

Compras

Compras prioritárias que estou querendo fazer de livros e acessórios nesse ano… Aceito presentes! :D

Passeios e Cursos

Viagens [sendo] programadas…

  • Campinas – SP: Se tudo der certo, pra visitar meu irmão na UNICAMP e participar do Curso de Programação da OBI
  • Porto Alegre – RS: Fórum Internacional do Software Livre
  • Rio de Janeiro – RJ: Não tem nenhum evento não, mas eu queria conhecer.
  • México: Se tudo der certo, estamos lá na olimpíada internacional!

Música

No ano que vem, quero voltar a fazer aula de piano. Acho que farei com a mãe de uma amiga, que dá aula na ADMITA.


Nesse final de semana fomos pra Curitiba (quem acompanha meu feed viu as fotos no Flickr). Meu irmão Bruno fez vestibular pra música/violão na UNICAMP. Ele não achou a prova muito difícil e falou que acertou uns 80%. Ainda tem mais uma fase de prova de conhecimentos gerais e depois é a prova de aptidão (violão). Acho que ele passa… :)

Alguém tem notícias dos caras da UFSC? Já fizemos a final da Olimpíada Regional Catarinense de Matemática (por que eles não mudam o nome pra quem é de fora saber de onde que é e quem é de dentro não pensar que toda a Região Sul participa da olimpíada?) há dois meses, o ano já vai acabar, e NADA! (nem mesmo o gabarito da prova, mesmo sem o resultado final…)

Sempre que eu escrevo posts grandes, eu me perco no meio. Então se alguma parte ficou difícil de entender ou se tem algum erro de português aí, me avisem! :)

Fotolog.net Feed

[update] O script foi reescrito aqui e está muito mais interessante agora! :-) [/update]

Não sei se isso já não existe; Não sei se ninguém nunca sentiu falta. Afim de valorizar feeds RSS e acompanhar fotos de amigos, resolvi criar um feed para fotologs do Fotolog.net.

Eu disponibilizei o código aqui: ff.phps (infelizmente esse código foi perdido com o tempo) mas o script para uso coloquei no “meu servidor super-poderoso” na UNICAMP: ff.php (infelizmente esse arquivo foi perdido com o tempo), por um motivo óbvio: economia de banda. Só que os caras da UNICAMP devem excluir o meu usuário algum dia, por isso sugiro que você pegue o código e coloque no seu servidor. Só precisa ter fopen_wrappers (quem que já programou em PHP e nunca viu aquela mensagem no manual: Tip: You can use a URL as a filename with this function if the fopen wrappers have been enabled? :D )

Hmmm… Talvez esse código tenha algum bug. Não sei o porquê de nenhum dos meus feeds funcionarem no Google Reader. Quem tiver afim de corrigir, me manda o novo arquivo que arrumarei com enorme satisfação (e aproveita pra me ensinar onde foi que eu errei!). Além disso, tenho dúvidas sobre se a foto pode ser aberta de fora do Fotolog.net. No Bloglines, só consegui visualizar as fotos que eu já tinha no cache do navegador. Pra mim isso não faz muita diferença, já que eu gosto de feeds na barra de favoritos do Firefox.

Coisas legais que vi hoje

© 2005–2020 Tiago Madeira