Então... Comprei uma impressora 3D

O título já diz tudo. Faz algum tempo que eu comprei, e já chegaram quase todas as peças. Não vou anotar o processo de montagem não (já tem instruções muito boas em outros sites), só tem uns detalhes que vale a pena dizer.

  • Fica bem mais barato comprar as partes feitas no Brasil de lojas brasileiras, e trazer as partes importadas de fora. A divizão fica mais ou menos assim:
    • Peças plásticas + ferragem (ou kit estrutural) - made in Brasil
    • Arduino + ramps + 4 drivers de motores + placa aquecida (ou kit de ramps) - importados
    • 5 motores de passo - importados
    • Hotend - varia, pesquise no Brasil e fora

    Não estão listados aí em cima os conectores elétricos para os motores, conectores para a fonte, termistores, molas, conectores (mecânicos) de motor, correias, parafuso trator, parafusos porcas e arruelas em geral, fios, a fonte (que pode ser de computador), fita de poliamida (importei um rolo muito bom de 30cm de altura), ventoinhas, filamento e vidro. São muitas coisas relativamente baratas, que somam uma boa quantia. Alguns kits trazem algumas destas coisas, outros não - lembre-se de verificar.

  • A impressão não é muito precisa. E, como algumas peças da impressora são impressas, você vai ter que corrigi-las na mão. Não pense que é só comprar e montar, você tem que furar, lixar, limar, aquecer e até arrancar algumas sobras.
  • As impressoras vem em diversos modelos, com diversas revisões, nem sempre oficiais. Ao pegar algumas instruções de montagem, antes de montar qualquer coisa, verifique se elas se aplicam às peças que você tem. Provavelmente elas vão se aplicar a algumas partes da impressora, mas não a outras - você provavelmente vai precisar de vários manuais (e um pouco de engenharia reversa) para montar uma impressora, até quando ela vem em um kit único.
  • Bom, por hora é só. Ainda estou montando a minha, então devem aparecer mais coisas aqui.

Transporte público de graça faz sentido

Com toda essa confusão em torno do Movimento Passe Livre (e a demonstração de que ainda tem um tanto da Ditadura no nosso governo), esse assunto finalmente entrou em debate. Isso é bom, porque o transporte público municipal gratuito faz muito sentido nas grandes cidades, e já faz muita falta. Mas é certo que muita gente discorda, logo, eu tenho que me explicar...

O ponto de vista de quem usa o transporte público

Ou quem pretende usar se ele for gratuito... Bom, não tem muito o que explicar. Você prefere pagar por um serviço todo ou ter ele subsidiado?

Acompanhando o Comemcasa - Junho de 2012

Ou, em outras palavras: Eu devia estar programando - versão de junho de 2012.

Decidi criar esta série porque bom, vai ver alguém quer saber o que ando fazendo... (LOL) Mas, sério, vai ser legal, no futuro ter um registro do que eu fiz para que o Comemcasa se torne um sucesso... ou o que é mais provável, fracasse.

No momento, eu estou adicionando um cardápio para os restaurantes. Quando estiver pronto, eu vou adicionar os links para a página de cada restaurante (que já existem), e começar a fazer um sistema que receba e acompanhe pedidos. Isso vai abrir a possibilidade do site ganhar dinheiro (uhu!), mas uma possibilidade que eu certamente não vou usar por um tempo, porque não quero toda a complicação que vem junto com dinheiro ainda não. Bom, este é meu roadmap, agora vamos ao histórico.

O site começou em setembro de 2011. Como todos os nomes que eu pensei estavam registrados, eu peguei o nome "kafome", e deixei para escolher algo melhor depois. Como já disse em outro post, em uma semana eu fiz o básico e procurei um serviço de hosting para colocar ele no ar. Contratei a kinghost, que suportava Django, tinha servidor Postgres, um preço bacana e um SLA que fazia sentido. O serviço deles é bom (eu só vi eles caírem uma vez, e metade do Brasil caiu junto), mas logo vi que webhosting, de forma geral, não ajuda o site a crescer, o modelo de negócio não é adequado (nota: lembrar de escrever um post sobre isso). Então decidi gastar um pouco mais e contratar um VPS da linode. O Comemcasa roda lá (junto com este site e outros que não servem web), no plano mais barato deles. O Comemcasa já está ficando grande (ele é muito pesado), de forma que estou pensando em criar outro VPS para colocar o Postgres...

Ah sim, mais ou menos ao mesmo tempo que eu mudei para o VPS (fico devendo um post sobre como configuro meu node), eu peguei o domínio comemcasa.com.br. O .com tem dono, mas eu peguei também algumas variações dele, migrei o site e listei no Google. Para meu espanto, algumas pessoas começaram a usar! Verdade, apareceram quase 20 visitantes no primeiro mês. Do nada, o número de pessoas que chegava sem ser pelo Google passou para 30, 50, e foi indo. Enquanto isso, o Google mandava mais umas 10 ou 20 pessoas por mês constantemente. Tudo indica que as pessoas que usavam o site estavam contando para outras, e estas outras estavam voltando depois. (Ah, sim, estes dados recolhidos com o AWStats.) É muito legal ver isso acontecer. Estas primeiras estatísticas eu não tenho mais, eu mudei de formato e os logs ficaram incompatíveis, mas o crescimento mais recente é o seguinte:

Mês Visitantes Visitas
Dez 2011 74 83
Jan 2012 88 108
Fev 2012 106 133
Mar 2012 286 388
Abr 2012 713 1028
Mai 2012 1290 1594

Em fevereiro eu acabei uma funcionalidade que mudou a forma como o Google lista minhas páginas. Assim, os visitantes diretos passaram de uma maioria esmagadora para minoria, embora o número deles esteja sempre crescendo:

Mês Diretos Google
Dez 2011 80 15
Jan 2012 121 46
Fev 2012 159 44
Mar 2012 255 250
Abr 2012 578 806
Mai 2012 680 1415

Vale notar que a soma das visitas aqui é maior do que o total de visitas da tabela de cima, o AWStats faz alguma coisa muito errada. Assim, é bom guardar qualquer conclusão para quando as estatísticas forem mais confiáveis... E para que elas fiquem mais confiáveis e para recolher algumas informações que o AWStats simplesmente não gera, no fim do mês passado eu instalei um programa de analytics. Minhas condições eram que o programa rodasse do meu servidor (não quero "vender" os dados dos meus usuários para o Google em troca de uma ferramenta, obrigado), e fosse software livre (também não quero ficar refém de uma empresa para dizer que dados eu posso recolher). Acabei ficando com o Open Web Analytics, apesar dele só rodar no MySQL, basicamente porque ele gera um hitmap de clics bem interessante. Eu tenho pouco mais de uma semana de dados dele, mas já dá para adiantar que os números são bem menores por alguma razão, e a especificação da origem dos visitantes é mais confiável.

Não estou muito confiante de que uma ferramenta genérica de analytics é a melhor solução. Ainda vou pesar ela contra pegar estes mesmos dados pelo sistema, sem ferramenta. Mas eu ainda não explorei ela direito, existem funcionalidades que eu nem ainda olhei, então não sei dizer nada no momento, a não ser que não estou confiante.

Bom, eu acho que é isso. Saio com o "dever de casa" de escrever dois posts, e não me lembro de mais nada para adicionar aqui. O que quer que tenha faltado, fica para outro mês.

Você já se sentiu burro?

Já faz bem uns dois meses que eu estou burro, e não é a primeira vez que isso acontece. Queria saber a causa...

Há quem diga que se você não se sente burro de tempos em tempos é porque deveria se dedicar a algo mais desafiador. Não é meu caso. Estou burro até quando me dedico a colocar um cardápio no comemcasa. Um cardápio! Vai achar desafio nisso.

Bom, por enquanto eu fico com posts pequenos, sem adicionar funcionalidades no site, mal no trabalho... Espero que isso passe logo.

Vale a pena repetir

Não adianta, eu tenho que acabar sempre falando de política... Vale a pena repetir isso fora de contexo:

Por que você tem o direito de contratar um representante, mas não o de demitir ele? Aliás, por que você não tem o direito de demitir qualquer uma das pessoas que trabalha no governo? Eles... Tá bom, nós trabalhamos para você, é você que paga o salário e tudo mais. Por que você não pode discordar de alguma lei que o Congresso crie, e derrubar ela? Afinal, todo o poder não emana do Povo e bla bla bla? Tudo isso já pode (tecnicamente) ser feito. Não precisa de nenhuma grande invenção ou descoberta.

Idéias Ambiciosas

De alguma forma que não me lembro, caí nesta pagina: Frighteningly Ambitious Startup Ideas, em que o Paul Graham relaciona algumas idéias que, segundo ele são tão ambiciosas que acabam por assustar e repelir as pessoas que poderiam trabalha nelas. Bom, sendo o autor ele mesmo, ele sugere que as pessoas não fujam das idéias, mas criem startups com elas; se forem capazes. Vale à pena ler, as idéias são muito interessantes; um pouco óbvias, mas este é justamente o objetivo do artigo, expor idéias óbvias em que ninguém está trabalhando. Só discordo da razão pela qual as pessoas fogem delas. Se elas são tão assustadoras, por que eu tenho que me esforçar para não pensar nelas?

Vamos às idéias:

  1. Uma nova máquina de busca
    Essa até que é viável...
    Ele reclama de várias coisas, a principal é que a qualidade do Google está deixando a desejar recentemente, e piorou muito depois do Google+. O problema é que uma máquina de busca serve para encontrar informações, e grande parte das vezes que uma pessoa procura uma informação, ela nunca teve contato prévio com esta informação. Assim, usar as informações com as quais uma pessoa se relaciona como contexto para uma busca pode não ser uma boa idéia1. Agora se o problema fosse somente este, seria uma péssima idéia tentar competir com o Google. Assim que você comprovasse que menos contexto melhora o resultado, bastaria o Google reverter para o algoritmo que ele usava até recentemente e pronto; seu mercado sumiu.
    A razão pela qual esta idéia é viável é que este não é o único problema do Google. É pouco provável que hoje, uma década depois, não dê para criar algo radicalmente melhor que o PageRank. Por exemplo, ao invés de simplesmente contar os termos de uma página pode-se descobrir o contexto em que eles são usados. Para isso estes termos teriam que ser correlacionados e clusterizados, coisa que nenhum computador conseguiria fazer no fim da década de 90, mas hoje é possível. Se você quiser radicalizar, pode fazer o computador literalmente interpretar o texto das páginas e fazer consultas em uma memória associativa. Isso exige bastante processamento, e não vai ser infalível, mas nenhuma máquina de busca é infalível mesmo.
    De qualquer forma, se você pensa em competir com o Google, o primeiro passo é levantar dinheiro. Você vai precisar de muito, e com tantas idéias por aí a fora que precisam de pouco dinheiro, não sei por que alguém começaria com esta.
  2. Substituir o Email
    Quer dizer, de uma forma que o Facebook ainda não fez. Dá para fazer. Mais difícil é ganhar dinheiro com isso.
    Você vai criar mais um substituto que não vai acabar com o original, mas além de não poder dizer que você "substituiu o email", não tem nenhum problema nisso. Nessa o Graham descreve como ele usa email (como listas de por-fazer), mas as pessoas usam email para os mais diversos fins, e estão abertas a substitutos para eles. Basta identificar e escrever (ou então começar escrevendo e ter sorte). Por exemplo, hoje não há nada que transfira mensagens, voz e arquivos instantaneamente e off-line. Existem vários programas (ou serviços) que transferem uma parte destes, ou não transferem off-line, ou não tem uma boa interface instantânea... Alguns pontos de bônus se não tiver limites de transferência de arquivos, e descobrir mais algumas coisas que as pessoas desejem comunicar (git e mercurial, edição conjunta de arquivos, calendários...) Só não pense que basta fazer e os usuários virão; marketing e projeto de interação são extremamente importantes aqui.
    No final, a resposta de "por que ninguém trabalha nisso" é "um monte de gente está trabalhando nisso".
  3. Substituir as universidades
    Ele toca no problema: hoje nós confundimos formação com credenciamento. Você não vai mudar isso com uma empresa.
    Ainda assim, existe algum espaço para inovar no ensino. Se você é um professor universitário, pode fazer um curso de extensão inovador. Se você não é, não tem nada que o proíba de ensinar, só de credenciar; e existe demanda para o ensino mesmo sem a parte do credenciamento, os cursinhos pré-vestibulares e para concurso estão aí como evidência. A TI pode deixar o ensino muito mais barato, e existem uma ou duas iniciativas por aí para isso... Esse barateamento pode aumentar muito o mercado. Acho que as pessoas só precisam de tempo para se acostumar com a idéia.
  4. Filmes pela internet
    Existem dois problemas. O primeiro é o mesmo que impede os filmes independentes de crescer, este não é novo e é menos importante. O principal problema é que a demarcação do assunto está errada. Não é "filmes pela internet", é "entretenimento pela internet" e os jogos estão ganhando.
  5. O próximo Steve Jobs. Ou seja, criar uma empresa como a Apple era até recentemente.
    Precisa de um Steve Jobs para isso, se você achar algum, pode sugerir isso para ele.
  6. Trazer de volta a lei de Moore Ou pelo menos a interpretação errada dela que dizia que os computadores ficariam 2 vezes mais rápidos a cada 18 meses.
    Ou, em outras palavras, criar um método de paralelizar software automaticamente - sim é disso que precisa, e isso basta. Por incrível que pareça, eu duvido que dê para ganhar dinheiro com isso.
    O problema é tão legal que dá para passar dias pensando nele, e esse é o problema. É mais fácil em máquinas de memória uniforme, e fica mais difícil quanto menos uniforme for a memória. Existem linguagens que foram escritas de forma a simplificar o problema, em Haskel por exemplo, ele é tão simples que para memória uniforme já foi resolvido (e se houvesse uma forma fácil de gerar e transmitir bytecode de Haskel eu estaria trabalhando nele para memória não uniforme nas horas vagas, ainda bem que não tem). De qualquer forma, tem um monte de gente trabalhando nisso, mas sem expectativa de ganhar muito dinheiro.
  7. Diagnóstico contínuo
    Você já viu como as coisas funcionam em medicina? Que startup já é criada com bilhões em caixa?

Tem mais uma idéia óbvia, extremamente importante e na qual parece que ninguém está trabalhando: Democracia direta moderna, pode abreviar como "Democracia 3.0" :) Essa idéia não está na lista certamente pela razão óbvia de que nem mesmo o Graham conseguiria imaginar que dá para ganhar dinheiro com ela.

Pensando bem, a expressão "democracia indireta" poderia ser colocada na gramática como exemplo de antítese. A democracia nasceu direta, e a aberração que temos hoje só foi criada porque era impossível dar palavra a todos os cidadãos sobre todos os assuntos; os estados tinham gente demais. Depois disso os estados ganharam mais responsabilidades, e começaram a tomar mais decisões do que uma pessoa pode acompanhar2.

Bom, hoje é fácil resolver o primeiro problema. Uma forma de todos os milhões de cidadãos de um país se organizarem para fazerem votações seguras3 e simples o bastante para serem frequentes está perfeitamente dentro das nossas capacidades técnicas. O que não tem solução ainda é como permitir que o cidadão acompanhe todas as decisões dos estados monstruosos que temos hoje. Isso poderia ser resolvido de duas formas, reduzindo o Estado até um ser humano poder acompanhá-lo, ou tornando o cidadão mais produtivo nessa tarefa. Reduzir o Estado é difícil porque o mundo de hoje é mesmo mais complexo do que era a poucas décadas atrás, e precisa mesmo de mais normas; já aumentar a produtividade do cidadão é um ótimo problema para se atacar com uma solução técnica. E provavelmente tem até dinheiro nisso (com outras aplicações que não a democracia direta).

De qualquer forma, mesmo sem uma solução para o problema da produtividade, já dá para caminhar no sentido certo. Por exemplo, por que você tem o direito de contratar um representante, mas não o de demitir ele? Aliás, por que você não tem o direito de demitir qualquer uma das pessoas que trabalha no governo? Eles... Tá bom, nós trabalhamos para você, é você que paga o salário e tudo mais. Por que você não pode discordar de alguma lei que o Congresso crie, e derrubar ela? Afinal, todo o poder não emana do Povo e bla bla bla? Tudo isso já pode (tecnicamente) ser feito. Não precisa de nenhuma grande invenção ou descoberta.

Notas:

1 - Isso deve valer também para publicidade. Uma máquina de busca já tem a informação mais relevante que existe para escolher que anúncio vai te mostrar: o que você está pensando. Para que ela quer correlacionar isto com buscas anteriores e seu nome?

2 - É interessante que a idéia de que ninguém pode alegar desconhecimento da Lei permanece desde a Roma Antiga, mas hoje há pessoas que estudam a vida inteira para conhecer a Lei, e mesmo assim se especializam em parte dela. E se você fizer uma pergunta específica para essas pessoas, a resposta que vai ouvir quase sempre é: "isso não é claro".

3 - Por "segura" entenda que é segura em todos os sentidos, exceto pela garantia de anonimato. Infelizmente, uma forma de votação que garanta que todos os votos são contados, somente os votos são contados (sem nenhum "fantasma"), os votos são contados da forma correta e os votos são anônimos não existe. Não sei nem se é matematicamente possível. Retire o anonimato, e ela já pode ser criada.

Quão difícil pode ser isso?

Por bastante tempo eu pensei que os erros de estimativa de desenvolvimento de software fossem um sintoma de inexperiência. Eu não conseguia acertar nenhuma, mas achava sinceramente que estudando meus erros eu fosse ter estimativas cada vez melhores...

Hoje eu já cometi vários erros de estimativa e bem, já posso concluir que eu estava errado. Por exemplo, durante meu mestrado, pouco depois de sair da faculdade, eu desenvolvi uma biblioteca de correspondência estéreo de imagens. Lá pela terceira semana de desenvolvimento, eu fui falar com meu orientador, que me sugeriu reescrever a biblioteca em C++ (ela estava escrita em C). Eu saí de lá pronto a ignorar essa sugestão, afinal, eu já estava escrevendo em C a mais de duas semanas, quanto tempo eu ia gastar para passar tudo para C++? Bom, por causa desta sugestão me ocorreu que eu poderia usar o namespace extra que eu ganharia colocando meu código dentro de uma classe para fazer com que ele seja recursivo e muito mais fácil de entender. Eu certamente ia perder um pouco de performance, mas com este namespace extra eu podia minimizar esta perda e ainda ter um código organizado. Isso iria economizar mais do que algumas semanas de tempo no futuro, então comecei a traduzir o programa. Tempo total para a tradução? Em torno de 1 hora e meia! Depois foram mais umas 4 horas medindo a performance do novo programa, que diminuiu em 8%, mas o computador fez essa parte sozinho. Pouco depois eu encontrei um bug na função mais central do programa... Ela era uma função pequena, menos de 30 linhas, representava uma função matemática bem conhecida; não pode ser que eu demorasse muito para corrigir. Demorei uma semana.

Bom, isso foi naquela época. Eu não tinha muita experiência. Agora, é claro, as coisas são bem diferentes. Por exemplo, estou fazendo este site, o comemcasa, onde eu quero relacionar restaurantes que entregam em domicílio por local de entrega. É simples, não tenha dúvida, mas quão simples? Quando decidi fazer o site, eu comecei a olhar formas de colocar ele no ar, mas sem muita pressa. Afinal não pretendia passar uma parcela grande do meu tempo fazendo ele, então ia demorar até ter alguma coisa pronta. Mais ainda porque resolvi fazer o site em uma linguagem em que nunca tinha feito nada grande (Python), com um framework de web que eu nem sabia que existia (Django). Esperava demorar uns três meses antes de colocar qualquer coisa no ar. Realmente, demorei... três dias. Finalmente, eu comecei a criar a toda a estrutura necessária para cadastrar restaurantes. Comecei em um dia em que eu tinha um compromisso em que teria que passar duas horas sem fazer nada; então levei o laptop. Não pretendia fazer tudo nestas duas horas, mas esperava fazer a maior parte do trabalho. Isso foi em outubro, estou escrevendo este post porque agora, em fevereiro, eu acabei! Ainda não está no ar, estou fazendo QA ainda :)

Mas então a experiência é inútil? Não, claro que não. A experiência não faz com que os erros desapareçam, mas reduz eles tendendo a um certo mínimo que aparentemente é maior do que zero. Mas esse não parece ser o seu efeito mais importante; se você além do tempo tentar também estimar a confiabilidade da estimativa de tempo, esta segunda estimativa melhora muito mais rápido do que a primeira com a experiência. Bom, essa frase ficou um pouco complicada, então vamos aos exemplos:

Nos dois primeiros erros acima (de quando eu estava no mestrado), eu nem pensei no caso quando fiz minhas estimativas, mas se alguém ouvisse estas estimativas e me perguntasse "Você tem certeza deste tempo?" eu provavelmente diria que sim, eu tinha certeza. Ou seja, eu estimava que o tempo que eu encontrei fosse confiável, quando ele não era. Minha estimativa da confiabilidade estava errada. Nos dois últimos erros (do comemcasa) se alguém me fizesse a mesma pergunta (e neste caso eu me fiz esta pergunta) as respostas seriam respectivamente "Eu não faço a menor idéia" e "Não estou muito confiante". Ou seja, eu estimava que o tempo pudesse estar errado, e estava mesmo.

Postgresql pg_xlog muito grande!

Parece que todo mundo já postou perguntas em todos os lugares sobre este problema, mas ninguém tem uma resposta que valha a pena.

O caso é o seguinte o Postgres guarda o write ahead log (WAL) em um diretório chamado pg_xlog. Normalmente ele guarda um arquivo de log até pouco tempo depois de gravar as mudanças que estão nele no banco de dados, e renomeia ele para usar depois. Tudo funciona muito bem, e o diretório fica com um tamanho constante e razoavelmente pequeno.

Daí, como você gosta de segurança, você cria uma rotina de backup. A melhor forma de fazer backups do Postgres é arquivando os WALs e copiando de tempos em tempos o conteúdo do banco de dados. Então você muda o arquivo postgres.config para arquivar os wals, e cria um script que faz o arquivamento, além deste você cria um script que copia /var/lib/postgres para um lugar seguro. Por exemplo, neste servidor sempre que o Postgres acaba de usar um WAL ele roda um script que copia o arquivo para um computador na minha casa, e todas as noites o cron roda um script que sincroniza o banco de dados.

Tudo funciona muito bem, e o pg_xlog continua com um tamanho estável. Daí o marceneiro me liga e diz que a mesa o os armários do quarto onde ficam os computadores ficaram prontos, e ele está vindo montar. Meus computadores passam uma semana desligados, e o pg_xlog explode! Como o Postgres não consegue arquivar os WALs, ele não apaga nenhum. (Para ajudar, eu estava rodando uns updates beeem grandes nesta semana...) O espaço em disco acaba, e o administrador do banco fica desesperado...

Como na internet não tem muita coisa que funcione, vai aqui como resolver o problema. Se o seu servidor ainda estiver rodando, tente primeiro fazer o arquivamento voltar a funcionar. Assim que ele voltar o tamanho do diretório vai começar a diminuir. Se você não puder fazer o arquivamento funcionar (seu marceneiro é mais enrolado do que o meu, por exemplo), você pode "trapacear"; coloque /bin/true como o script de arquivamento. Você vai perder os WALs, mais não vai perder o servidor.

Agora, se o servidor não estiver mais funcionando você vai ter que fazer umas coisas bem "feias". No diretório pg_xlog tem um diretório chamado archive_status. Lá dentro tem uns arquivos com o nome dos WALs, acabando em ".ready". Se existir o arquivo XXXX.ready, isso significa que você pode apagar o arquivo XXXX no pg_xlog, então:

for i in $(ls archive_status); do echo "$i" | sed -e 's/.ready$//' | xargs rm; done

Pronto, você já tem espaço para rodar o Postgres de novo. Mude o script de arquivamento para /bin/true e ative o Postgres por algum tempo. Quando ele achar que arquivou todos os WALs, mude o script para o seu script normal, e reinicie o Postgres. Verifique se o arquivamento está funcionando normalmente.

Se o arquivamento não se comportar direito, faça um dump completo do seu banco de dados, porque a coisa vai ser feia mesmo. Encerre o Postgres pelo pg_ctl (verifique se ele encerrou sem erro, NÃO USE SIGINT ou SIGKILL), mova todos os arquivos do pg_xlog e archive_status para outro lugar, e rode pg_resetxlog. Inicie o Postgres, ele deve funcionar normalmente. Se não funcionar, bem você agora tem um backup...

Ei, um blog.

Parece que eu não vou conseguir escrever práticamente nada nesse site se as idéias não sairem de um blog. Pois então, estou mudando a estrutura do site, ele começa no meu blog e, se tiver mais conteúdos longos, vou linkar para ele de posts. Hoje só tem Free Software and Code Reuse.
Subscribe to marcosdumay.com RSS