Inaugurando a estação de posts

Oficialmente estarei agora postando pra caralho neste blog. Tenho muitas idéias já prontinhas e quase todas no papel e só estava preso naquela protelação infinita e estranhamente proveitosa que é o período de descanso da gente!

Que venham os posts!

PS.: Gostei de ver também que as visitas continuaram chegando neste período de silêncio, sintam-se abraçadas pessoas que me visitam sem eu dar nenhum conteúdo novo :)

O dojo desta tarde foi o melhor de todos!

…seria o que eu diria se eu fosse algum tipo de astro do rock da programação. ÉÉÉÉ amigos foi um coding dojo como todos os outros, mas sempre temos algo para contar. Além disso, como o Gabriel que é o postador oficial não compareceu, as histórias ficam por minha conta hoje.

Tivemos a presença de um número pequeno de pessoas (seis) o que, embora meio chato, se mostra proveitoso no quesito entrosamento entre o pessoal. A curiosidade fica por conta do número de problemas da do dia, programamos dois e meio… eu explico.

O primeiro sorteio nos sugeriu o Morse Code, logo pegamos a linguagem do dia que era C/C++ e partimos para a briga. Logo descobrimos que era um problema meio repetitivo, meio demorado e certamente não muito adequado para nossa linguagem com seu suporte fraco para manipulação de strings. Como estávamos em pequeno número e ficando entediados, decidimos trapacear e trocar de problema.

Seguiu-se a solução do Tea Party, mas… Hah! Este era fácil demais e acabou em algumas poucas rodadas. Então mais uma vez nos tocamos para a lista de problemas e realizamos o sorteio: Magneto. Este também bastante simples (mas nem tanto), foi impiedosamente resolvido por nós, com algum desrespeito aos baby-steps porque a fome começava a bater e o céu começava a escurecer.

remotest

Este dojo também marca a estréia de uma coisinha que eu andava trabalhando nas horas vagas, o remotest. Um pequenno app para capturar o output dos nossos testes e jogar ele numa página bonitinha html. Fiz isso porque nem todos linguagens tem um jUnit bonitão e colorido para lembrar que os testes não só passaram, como deixaram a barrinha verde da esperança™ na tela. Claro que na hora floresceram alguns bugs e o visual dele não é dos melhores…

Manja dos Rubís, CSSs e Javascripts? Não quer passar no github e me dar uma ajudinha a deixar esse cara mais ajeitado?

Retrospecto

No mais tenho aqui a retrospectiva:

The Bad

  • remotest mostrou seus bugs
  • Primeiro problema muito chato
  • Segundo problema muito fácil
  • Alguns prefeririam uma linguagem mais alto nível
  • Pouca gente

The Good

  • Motivação do pessoal
  • remotest fez um trabalho legal
  • Linguagem próxima do que todos sabiam, mas mesmo assim nos ensinou coisas novas (C++ sempre surpreendendo…)
  • Pouca gente == entrosamento++

Vejo vocês nos próximos dojos!

I’m Late

I’m Late é uma composição assistida por computador que eu entreguei como meu trabalho da cadeira de Computação e Música. Eu também gravei uma versão estendida (a versão original tinha que ter 30 segundos) e com a síntese de um instrumento diferente. Ambas podem ser ouvidas a baixo:

Versão Original

Versão Estendida

 

A idéia inicial era usar alguma biblioteca que conseguisse gerar eventos MIDI baseados numa entrada textual e obter daí uma melodia. Mais ainda, eu pretendia reconhecer palavras, extrair sua intonação característica e construir melodias de maneira pseudo-aleatória. Tudo isto deveria ser passado para um sintetizador bonitão.

No final das contas eu acabei não conseguindo um trabalho tão sofisticado por limitações de tempo e o resultado final não teve nada a ver com o planejado inicialmente. O que acabei fazendo foi uma brincadeira bem simples com threads e atrasos entre notas (daí o nome da composição).

Idéia

A idéia foi pegar uma sequência de arpegios simples (Bm Bm C Em F# F#) e criar várias threads tocando esta mesma sequência, porém começando em tempos diferentes e com pequenos atrasos relativos entre si. O resultado é bem interessante, se confrontado com a facilidade com que isto pode ser feito.

Ferramentas

Gravar esta composição foi um processo bem interessante, pois consegui entender bastante de como o som no ambiente Linux funciona (principalmente o Alsa). Os eventos MIDI foram gerados usando a linguagem Ruby e a biblioteca Midiator e foram sintetizados pelo ZynAddSubFX. A troca de eventos se deu com a ajuda do servidor de som Jack.

Código

Pode ser encontrado aqui juntamente com alguns outros experimentos interessantes

Disclaimer

Mais posts sobre computação e música a caminho. (talvez)

No LARC e um pouco ao norte do Sul

Long time no see! Coitadinho do meu blog, abandonado de maneira cruel e inesperada. Peço perdão a ele e aos leitores que ainda o visitavam neste período de escassas atualizações. Vocês podem ter certeza que eu tenho milhões de desculpas para dar, mas eu não posso ter certeza de que vocês gostariam de ouví-las (lê-las) e então não tenho certeza de que as escreverei.

Ok, não.

Sup?

Poisé galera, eu não fiquei parado durante esta ausência. Muito além de me ocupar com tarefas tediosas da faculdade e/ou provas maléficas e/ou pressões da vida real eu também fiz bastantes coisas interessantes.

Lua

Entre elas conduzi, juntamente com o excelêntíssimo colega Luca Barreto (vulgo Apus), um mini-curso introdutório da linguagem Lua durante a Semana Acadêmica da Informática da UFRGS. O material usado pode ser encontrado em http://lua-semac.heroku.com. Qualquer dúvida ou comentário pode ser deixada aqui mesmo

Dojo e Lightning Talks

Ainda no embalo da semana acadêmica do Instituto de Informática, eu aproveitei para emendar o dojo de programação (do qual sou uma espécie de organizador) com as Lightning Talks que eu também estava meio que organizando e isto resultou numa tarde bem agradável, divertida e informativa. Parece que eu fiz muita coisa, mas na realidade foi moleza. Nestas duas atividades era chave a participação de todos os presentes e nisso eles deram um show, fiquei muito satisfeito.

Aproveite para passar neste link e pegar os slides das palestras e neste outro para saber o que anda rolando nos dojos (da ufrgs e de poa).

Um pouco ao norte do Sul

Uma toalha roxa

EDIT: tenho fotos agora :)

Fato curioso: neste momento estou em São Bernardo do Campo – SP, mais precisamente na FEI. Tenho uma bolsa no Grupo PETComputação e acontece que nós temos um projeto de um time de futebol de robôs para a RoboCUP SSL F-180 e estamos aqui jogando contra outros times no LARC (Latin American Robotics Competition). Em suma estou num ginásio lotado de gente, vinda de diversos países da americana latina. Em volta de mim existem trilhares de componentes eletrônicos, milhares de computadores, bilhares de fios e algumas pessoas dormindo no chão (e outras nos pcs).

Quanto à nossa participação… está deixando a desejar por problemas fatais de hardware e eu mesmo sendo cientista da computação fiquei mandando bytes pra cá e pra lá o dia inteiro. Espero que consigamos nos recuperar até o fim da competição, mas mesmo assim já tiramos de positivo os contatos que fizemos aqui. Gente finíssima.

Atuação marcada por bugs…

No mais, estou escrevendo isso às 05:50 da manhã e queria postar algumas das fotos totalmente excelentes que tirei de meus colegas dormindo aqui no meio dos PCs, todos encolhidos e com as caras amassadas. Infelizmente, pelo fato do meu celular estar impossibilitado de se comunicar com os computadores aqui em volta, fica pra próxima.

Organização

Eleições

Sim, vocês já leram este texto algumas vezes… por que alguém o escreveria de novo? Porque os jovens são umas antas e eles precisam refletir um pouco.

É chegado novamente o tempo. Tempo de digitar numa urna eletrônica nossas esperanças de um futuro melhor e enviá-las para algum lugar onde serão contadas. Logo depois, ansiosamente esperar pela contagem de votos e acompanhar os resultados da eleição tomando forma na tensão de domingo à noite. Tudo isto porque queremos representantes dos nossos direitos. Estas são as eleições.

lol

O que faz um deputado federal?

Hahahaha que engraçado certo? Esse monte de candidatos que estão usando a fama e reputação adquirida em outras áreas (com pouca ou nenhuma relação com política) para serem eleitos hahahaha hilário. Poisé, mas o nosso querido deputado federal comediante autor da pérola e título desse parágrafo toca num ponto importante. Será que nós sabemos o que faz um deputado federal?

Só para desencargo de consciência vou colar aqui um trechinho da Wikipedia:

Compete ao deputado federal o ato de legislar e manter-se como guardião fiel das leis e dogmas constitucionais nacionais, inclusive podendo propor, emendar, alterar, revogar, derrogar leis, leis complementares, emenda à Constituição federal e propor emenda para a constituição de um novo Congresso Constituinte (para confecção de nova Constituição).

Entretanto, talvez seja mais importante procurar a resposta de uma outra pergunta: Será que nós sabemos o que pretende um cidadão quando ele se candidata a um cargo político?

O que quer um candidato?

Coloquem-se no papel de um candidato para um cargo público com algum poder de decisão. O que te atrai?

  • A influência que você vai obter?
  • A possibilidade de ajudar outras pessoas com as decisões que você toma?
  • Ajudar a construir um(a) cidade/país/mundo melhor?
  • O emprego garantido e bem pago por um longo período de tempo?
  • O emprego garantido e bem pago por um longo período de tempo e para um empregador (o povo) que parece constantemente fazer vista grossa para os seus deslizes?
  • O emprego garantido e bem pago por um longo período de tempo e com diversas chances para lucrar um pouquinho “por fora”?

Todos são motivos “possíveis” para alguma pessoa se candidatar a um cargo público e com certeza existem políticos que se encaixam em cada uma dessas categorias. Não pretendo inculcar nenhuma opnião sobre quem deve ou não receber votos aqui, mas gostaria que tentássemos perceber para cada candidato quais dessas áreas incluem seu “plano de mandato”.

Sobre as propagandas eleitorais

fuck

Ah! Propaganda eleitoral… a maior sujeira já inventada na política. Todos sabem disso, porém talvez não se incomodem tanto quanto eu. O algoritmo é simples:

  1. Arrecade muito dinheiro de alguma forma
  2. Gaste esse dinheiro em cartazes, folhetos, bandeiras, broches e tempo na televisão
  3. Fale em 90% das propagandas como o candidato é demais, não é preciso motivos… talvez algumas fotos dele sorrindo acompanhado de um grupo de pessoas satisfeitas, cada uma contemplando uma etnia do país
  4. Os 10% que sobram servem para apresentar propostas reais
  5. Faça jingles grudentos
  6. Seja eleito
  7. Espere 4 anos
  8. Volte para 1

Simples, porém nem tanto. À partir do primeiro passo o contador de dinheiro para a campanha do político apenas será decrementado e com sorte no passo número 6 o candidato já está eleito. Existe uma relação interessante entre esta receita e o comentado anteriormente, o capital inicial para propaganda.

Por que diabos alguém iria querer investir milhares de reais só para arriscar não ser eleito? Com certeza porque esse alguém tem ótimos motivos para querer o cargo. Será que todos os candidatos com campanhas milionárias tiraram esse dinheiro do próprio bolso? Hah veio do partido! Hmmm … sério? Toda a grana? Hmmm provavelmente não… talvez eles tenham alguma ajuda de empresas ou instituições?

Eu só sei de uma coisa: se eu tivesse uma grande quantia de capital eu só faria algum empréstimo se tivesse garantia de algum retorno. Uns favores de vez em quando, talvez? Uma lei aqui e outra ali. Coisas básicas assim.

Sobre pesquisas eleitorais

Eu me enganei, enquanto as propagandas espalham a sujeira pelas ruas, as pesquisas eleitorais são a maior sujeira inventada na história da política™. Tipo uma safadeza oculta. Eu realmente gostaria de ficar dissertando sobre como eu odeio elas e tal, porém não é necessário. Todos vocês com certeza conhecem aquela pessoa que nem cogita que o seu voto possa ir para um dos candidatos fora do TOP 2…

Sinceramente eu entendo este grupo de eleitores. Ele valoriza o seu voto, ele nunca anularia seu voto, ela nunca votaria num candidato que tem 1% de representação numa pesquisa, isso seria como anular o voto. SERIA… se este grupo somado não representasse uma grande parte do número total de eleitores.

Enfim, não estou aqui para cansar vocês. A conclusão óbvia é que as pesquisas tem muito poder sobre o desfecho da votação, o que nos leva a perguntar quem é que fez a pesquisa. Quem vigia os vigilantes?

Informe-se

Que tal nos educarmos um pouco sobre o processo eleitoral? A votação tá aí rapaziada. O google lançou um serviço unificador de notícias e algumas ferramentas que podem te ajudar nesse processo, confira aqui. Sugiro também ficar atento às notícias sobre escândalos e criminalidade nos jornais (se bem que os queridos estão mais calmos agora), além de marcar o número daquele filhadaputa que botou mais de nove mil cartazes, todos agora caídos no meio da pista, na sua avenida movimentada favorita.

Dica extra

Jornada Musical – Uma banda

Eu falo de várias músicas aqui que vou acabar fazendo um post no last.fm colocando links pra todas elas… eventualmente :)

No último post eu contei para vocês como eu comecei a me enamorar pelas guitarras distorcidas e riffs espertos do rock, o mais apaixonante estilo musical do universo. Minhas aventuras juvenis continuam a partir do ponto em que eu descobri aquele conjunto de músicas famosas das bandas e comecei a curtir pesadamente o som(sacas). Você sabe: The Trooper, The Number of The Beast, Symphony of Destruction, Enter Sandman, Back in Black, Paranoid, entre outras…

Chego até a ter pena das bandas que tem hits tão idolatrados, porque nós sabemos o quanto é difícil convencer os fãs (um número substancial deles) de que alguma outra canção produzida pela banda é maior do que aquela. Entretanto pode ser que seja muito melhor do que não ter nenhuma canção de sucesso… estou divergindo, vamos ao álbum marcante desta postagem?

Uma coletânia

Eeeewww uma coletânia? Digo eu hoje, não sou muito fã delas. Porém na época um dos primeiros CDs de verdade que eu decidi pegar foi uma coletânea e de uma banda muito aclamada, copiada, amada e odiada; MAS principalmente amada. O Iron Maiden.

Edward The Great: Greatest Hits

Nem tem muito o que falar sobre este som. O grosso do álbum é composto por tantos clássicos da era Bruce Dickinson que fica até meio chato ficar tentando argumentar alguma coisa, mas afinal de contas era de se esperar… é uma coletânea. Ele foi uma introdução sólida à banda, principalmente para um jovem n00b como eu. É por essas e outras que existe tanta camiseta baratinha do Iron Mainden rodando por aí.

Efeitos

Iron Maiden é uma banda interessante. Tenho algumas teorias sobre o efeito que eles causam nas pessoas, mas só tenho certezas sobre o efeito que causaram sobre mim. Me tornei em pouco tempo um fã da pegada rápida e melódica das composições, sem falar nos refrões contagiantes e na imagem da banda que era o estereótipo da “galerinha do mal” do metal. De repente me via cantando estes clássicos para multidões imaginárias no meu banheiro e correndo de um lado para o outro como o Bruce. Nesta época começava a deixar o cabelo crescer e tinha fortes anseios de montar uma banda…

Uma banda

… e a banda veio! Eu não lembro como foi que começou toda a história, mas provavelmente eu discutia com algum amigo meu sobre os cavalheiros do parágrafo anterior. Este amigo já um pouco versado na arte da guitarra elétrica falava em tocar algumas músicas e eu me ofereci para cantar, porque afinal deveria ser fácil neh?

Não, cantar não é fácil. No final das contas a banda com esse cara não deu certo, mas um belo dia por algum motivo um outro grupo de amigos se juntou e ficou formada uma banda épica da qual gozei do privilégio de ser o vocalista, a excelentíssima Lontras From Hell (nem me fale do nome :). Eram cinco garotos, de condinomes Coelho, Fialho, Fuji, Orelha e Yugi tocando diversos covers dos gigantes da música.

banda

Poisé, como se não bastasse a banda original tocando essas músicas toda noite, tem que chegar esses desconhecidos e fazer covers! Mas o pessoal gostava e nós éramos bons até! A coisa era toda era muito divertida. Fizemos uns três shows no total e tocamos desde de Highway To Hell até Symphony of Destruction…

Depressão pós-Maiden

Eu não sei se isto aconteceu com todo mundo, mas depois de alguns meses de exposição à banda você começa a criar anticorpos, o som já não é mais tão interessante. Para completar eu percebi que estava virando um poser irremediável e senti a necessidade de cavar mais fundo nas bandas e estilos adjacentes para tentar encontrar uma identidade musical, coisas da vida… estava na hora de me redescobrir.

Hoje o Iron Maiden é uma das minhas bandas favoritas, eu acho esses caras geniais. Eles serão sempre lembrados por causa da mulhara de clássicos que eles construíram nos anos 80 e por terem revigorado o metal, porém pra mim eles são mais importantes mesmo por terem servido como o entroncamento das minhas influências musicais. É como se fosse o elo perdido do que viria a ser o meu gosto musical dali em diante.

eddie

Unit test em C com simplectest

Realizar testes automáticos de diversas partes do seu software é uma prática que vem ganhando bastante reconhecimento últimamente juntamente com o paradigma da programação orientada a teste (Test Driven Development). A técnica do TDD “formalizada” no excelente livro de Kent Beck (recomendadíssimo) deu seus primeiros passos no Java com o framework JUnit e rapidamente foi sendo incorporada em outras linguagens.

O que me leva a um ponto importante. Eu faço muitos poucos testes nos meus softwares e embora isto se deva em parte pela preguiça e pela falta de prática eu gosto de creditar isto também a não conhecer nenhum bom framework de testes para C/C++ que acabam sendo minhas linguagens escolhidas para fazer diversos projetos.

Ok, shame on me.

Existem vários e eu resolvi tentar pegar um e usar. À primeira vista eu tentei o Cutest mas achei ele meio complicado demais e muito cheio de firulas, tinha que suar muito só pra começar a escrever algumas coisinhas simples. Depois de dar uma fuçada e conversar com algum pessoal que também estava interessado no assunto eu cheguei num chamado simplectest e gostei bastante.

Simplicidade no talo

Um programador, um editor de texto e um arquivo header. É tudo que você precisa para começar a fazer seus testes com o simplectest. Um exemplo de um programa simples seria

//arquivo hello.c
#include "tests.h"

START_TESTS()

  //nosso hello world
  START_TEST("Testa 1 == 1")
    ASSERT(1 == 1)
  END_TEST()

END_TESTS()

E rodando este teste temos o seguinte output

> Testa 1 == 1...

--- Results ---
Tests run:    1
Passes:       1
Failures:     0

Uma explicação rápida

Esta biblioteca é baseada fortemente sobre a construção de alguns macros do pré-processador, coisa que alguns mais experientes em C poderiam achar meio tensa. Entretanto eu simpatizei, porque afinal de contas este código não vai estar misturado com a sua aplição, seus testes rodam num mundinho separado.

Algumas instruções rápidas para começar.

  • Colocamos os nossos testes entre as chamadas START_TESTS() e END_TESTS().
  • Cada teste deve ser declarado com START_TEST( "string descrevendo o que o teste faz" ) (note que este está no singular) e deve ser fechado com END_TEST().
  • Escreva dentro a lógica do teste . Temos à disposição uma gama bem variada de ASSERTs, porém na maior parte das vezes dá pra ficar com o clássico ASSERT(exp) que irá falhar caso exp avalie para falso.
  • Para descobrir os asserts disponíveis dê uma lida no .h, não tem treta pessoal

Exemplo completo de FizzBuzz e mais instruções

Fiquei com preguiça de copiar tudo pra cá então vocês podem encontrar nesta página aqui que é a minha wiki.

Salve seus textos

Tem algumas coisas que você inevitavelmente vai ter que passar na vida. Rejeição, tristeza, raiva, perder o texto que você estava digitando no browser por causa de alguma tragédia fatal. Ouch… o último é especialmente cruel certo? Porém existe uma cura para esta situação! As outras infelizmente não são tão simples e sugiro que procure um psiquiatra.

Apresento-lhes este add-on do Firefox. O nome Textarea Cache deve deixar bem claro que se trata do bálsamo sagrado das raposas. Basicamente o Firefox agora vai manter cópias (que sobrevivem entre uma sessão e outra do browser) dos conteúdos que você digitar em todas as caixas de texto dessa internet a fora. Todos os textos podem ser visualizados clicando no ícone que ele vai criar no canto inferior direito do seu Firefox. Isto quer dizer, que desde que seus dados não sejam pulverizados de alguma maneira épica, eles estarão seguros quando você voltar. Nada mais de perdê-los com timeouts, quedas de conexão, travadas do browser e afins.

Legal, né? Espera aí… talvez a privacidade seja um problema. Pensando nisso existem algumas opções interessantes. No mesmo menu em que se visualizam os textos salvos você pode escolher por esvaziar a cache (aparentemente eles persistem lá por tanto tempo quanto se queira), além de poder criar uma whitelist de sites que não devem ter seus textos salvos.

linesocode += blag

Hoje é um dia especial para este blog. Hoje eu dei um merge do conteúdo dele com o conteúdo do meu outro blag e eles se tornam oficialmente UM único e provavelmente mais confuso blog (ou blaog, sei lá). Você pode ler mais ou menos os detalhes se for lá e der uma espiadinha no último post.

Um depoimento

Gostaria só de deixar uma coisa bem clara aqui. O exportar/importar de blogs do WordPress funciona muito direitinho. A menos que eu encontro algum bug maldito escondido nas profundezas desse meu renovado blog, entretanto eu duvido que isto aconteça. É só ir em ferramentas Exportar/Importar e pronto. É tão satisfatório quando você precisa fazer alguma coisa e descobre que ela já existe e resolve seu problema perfeitamente. Um baita ponto positivo para você WordPress.

Agora…

Este blog oficialmente falará sobre:

  • Programação
  • Tecnologia
  • Matemática (nah mentira)
  • Filosofias baratas
  • Meus Devaneios
  • Meus xingamentos à coisas que merecem ser xingadas

Continuaremos com a nossa programação normal neste blog, mas antes me digam: a mudança foi proveitosa? Gostaram? Odiaram? Plasmolizaram?

dojo-ufrgs

Um dojo de programação na UFRGS!

Isto é algo que eu estava querendo fazer há muito tempo e graças à iniciativa do gpaoliveira finalmente dia 08/09 realizamos o primeiro dojo na UFRGS.

O primeiro encontro foi uma implementação do FizzBuzz que no final se tornou um FizzBuzzBatata, uma marca que pretendemos patentear depois do extremo sucesso do seu uso. Contamos com um número modesto de pessoas (sete D:) e nos atrapalhamos um pouco na hora de começar a programar, mas sinceramente me diverti muito.

Os básicos de um dojo

Os objetivos básicos de um dojo são ajudar o programador a aperfeiçõar as práticas de programação em pares e TDD(Test Driven Development). Duas coisas com as quais eu já era familiarizado, porém na realidade não exercia. Falar sobre TDD daria (e por que não, dará?) um outro post bem maior então não vou me focar nisso. Na realidade tudo que ficamos fazendo lá é:

  1. Escolher um problema trivial para resolver
  2. Colocar dois programadores (piloto e co-piloto) para programar à frente do resto (a plateia)
  3. Escrever alguns testes para o problema
  4. Fazer os testes passarem, geralmente de uma maneira burra
  5. Pedir para a platéia opinar sobre a solução até o momento e fazer refatorações
  6. De tempos em tempos, trocar o piloto pelo co-piloto e pegar um novo co-piloto da platéia
  7. Se estamos satisfeitos com a solução ACABOU senão volta para 3

Isto pode até ser uma corruptela do que deveria ser feito em um dojo, na realidade eu não sei mesmo porque participei de poucos, mas foi divertido e muito proveitoso. É um sentimento semelhante à começar jogando GuitarHero no hard, sacas?

Mais encontros

Pretendemos fazer mais encontros, de fato os encontros já estão marcados para toda quarta-feira às 17:30 no Campus do Vale, lab 104. Quem estiver interessado ou curioso, apareça!

Dojo-poa

Oh yeah!

Está surgindo agora também o projeto Dojo-POA! Passe por lá por favor.

Código

Pode ser encontrado aqui: http://github.com/gpaOliveira/dojo-ufrgs

css.php