segunda-feira, 24 de dezembro de 2012

Por que eu realmente não gosto do MATLAB

Acredito que todos que me conhecem saibam que eu realmente não gosto do MATLAB e já tenham me ouvido expressar meu desprezo por ele. Não deveria (afinal, ele é o ganha-pão da área onde eu trabalho), mas deixo isso bem claro toda vez que eu falo sobre ele. Vamos a alguns motivos:

Primeiro: a linguagem dele é péssima, tanto é que surgiram infinitos 'hacks' em cima. Impossibilita código limpo, por não ter coisas como uma boa implementação de argumentos nomeados, namespaces e uma orientação a objetos de verdade.

E por sinal, uma das maiores (na minha opinião) abominações é que o arquivo de código (.m) precisa mandatoriamente ter o mesmo nome da primeira função neste presente. Porque aparentemente includes são luxo: imaginem uma linguagem C onde em vez de stdio.h tivéssemos printf.h, scanf.h, etc...? Legal, só que não.

Segundo:
ambiente proprietário, bugado, com pouca integração com o resto do sistema, lento (quem foi o jênio que teve a ideia de que Java era uma boa ideia? Qual o problema com C/GTK ou C++/Qt?) e limitadíssimo. Várias vezes ele simplesmente acusou um fatal error no meio do trabalho e depois fechou.

Terceiro: limitações imbecis. Outro dia eu implementei um algoritmo que beneficiaria extremamente de processamento paralelo (tenho um i7, e não é justo que eu só consiga ocupar um dos núcleos). Para isso existe a toolbox de processamento paralelo do MATLAB, mas adivinhem a limitação completamente burra que existe: um "for" paralelizado só funciona quando o iterador é inteiro.

Tirando da própria documentação dele:

parfor loopvar = initval:endval, statements, end allows you to write a loops for a statement or block of code that executes in parallel  [....] initval and endval must evaluate to finite integer values [...].

Em tradução livre: parfor var_loop = val_inicial:val_fim, comandos, end" permitem você escrever um loop para um conjunto de comandos que executa em paralelo [....] val_inicial e val_fim precisam ser números inteiros [...] (grifo meu)

Sim, é isso mesmo: ou o loop só itera sobre números inteiros ou eu subutilizo minha CPU. Uma limitação totalmente arbitrária. Claro que vão aparecer gambiarras diversas para contornar a limitação: sinal de um sistema mal-projetado.

E principalmente: a maioria das pessoas usa ele por não ter que comprar a licença (afinal, tem no Pirate Bay ou é só pedir o DVD pra um dos colegas). Se tivessem que pagar por cada toolbox  - não, ele não vem com esse monte de toolboxes (eu queria ver o custo de cada uma, mas preciso preencher um cadastro que realmente não estou animado a fazer) - queria ver se existiria tanta babação de ovo em cima dele. Queria ver se professores iriam montar cursos inteiros em cima dele, ou se haveria tanta gente usando ele para mestrados e doutorados.

Aliás, queria ver se o pessoal ia defender software proprietário tão descaradamente e ia ficar nessa preguiça de procurar alternativas se não fosse fácil assim piratear. Mas isso é assunto para outro post. Lembrem, enquanto isso, das discussões sobre a necessidade de fazer ciência com software livre e formatos abertos.

Existe a versão para estudante? Sim, que é uma piada de mau gosto: limitadíssima. Só 32-bit (quase em 2013, quando qualquer computador atual já vem com SO 64-bit) e com recursos desativados. Comparar com a versão para estudante do Mathematica: nenhuma limitação técnica - apenas restrições contratuais de uso (não pode explorar comercialmente, precisa fornecer comprovante de que é estudante etc...).

Quanto à questão das licenças, podem me perguntar: e o Octave? e o Scilab?. Ambos imitações que copiam os vícios da linguagem de inspiração. Imitar uma coisa ruim torna a imitação igualmente ruim - se não pior.

Enquanto isso, fico com o Python e a comunidade fantástica que existe ao redor dele. Se eu tiver que usar um software científico proprietário, fico com o Mathematica - que, apesar da estranheza da linguagem, entrega muito mais valor pelo mesmo preço (várias das toolboxes que são opcionais no MATLAB estão incluídas por padrão nele). Minha 'loja' de toolboxes é o PyPI, o GitHub etc...  Considere o Python para seu próximo projeto, não dói nada (principalmente para quem vem do MATLAB: a NumPy, SciPy etc... são projetadas para fornecerem um ambiente de fácil adaptação).

PS: no quarto parágrafo, a escrita errada de jênio foi intencional.

domingo, 9 de dezembro de 2012

Como ser sem-noção ou mal-intencionado mesmo: o caso Tecnomania

Todo mundo já conhece a Tecnomania, da gloriosa Tekpix, a excelente câmera que ninguém tem, ninguém nunca viu e que tem lentes de diamante, processador de imagens com tecnologia da NASA e cartão de memória quântico de 216.5 TB, podendo fotografar o invisível e ser tão ou mais poderosa que o Hubble e um microscópio de elétrons ao mesmo tempo  - isso justifica o preço de mais de R$ 3500.


Mas eles não se restringem a isso: já pensou em comprar um tablet Android genérico pelo preço de 2 iPads? Eles vendem. Um tablet de 7", com recursos tão avançados quanto os de 'relógio' e 'configurações'.

  
Para comparação, o preço do iPad mais caro disponível no Brasil, na mesma data era de R$ 1999:





Acho que eles tomaram umas lições com a unidade brasileira da Apple, com a diferença que o produto deles não pode nem ser chamado de Héppow. Provavelmente é um tablet genérico, desses que se encontra às pencas na China e que custa US$ 40~60 no atacado:



Ainda não está satisfeito? Você pode comprar um cartão SD de 2 GB por R$ 299. Excelente compra, não? Vendo os cartões de 2 GB que eu tenho aqui na gaveta por R$ 100, cobrindo o preço da concorrência!

Sem falar nos outros produtos disponíveis na loja, todos com um preço que passa longe de ser minimamente coerente. Como exemplo, temos esse forno elétrico, que custa US$ 170 na Amazon e R$ 1600 na Tecnomania. Não sabia que R$ 10 = US$ 1 (chamaram a hiperinflação de volta pro poder?).

Fico pensando onde eles querem chegar com isso. Como não é ideal atribuir à malícia aquilo que pode ser explicado pela ignorância (a navalha de Hanlon), prefiro acreditar que eles querem fisgar o babaca que lê em 12 vezes sem juros e sai correndo comprar, ou que simplesmente são pseudo-vendedores burros esperando a ignorância de alguém?

Realmente existem otários a dar com pau (nos múltiplos sentidos) por aí; de outra forma, o que justificaria tudo isso?



Já que eu falei em Tekpix, aprenda a usar a sua com esse vídeo da Rede 2112 de Colaboradores:


E eles que se atrevam a deletar os produtos do site... tenho ibagens de todas essas páginas guardadas aqui e vou fazer questão de publicar elas em todas as formas.

domingo, 2 de dezembro de 2012

IPython: notebook e Qt Console

O IPython já é velho conhecido de quem desenvolve em Python, dispensa introduções etc... Mas outro recurso interessante, e que ainda não é muito explorado, é o recurso de notebook: um caderno onde se pode desenvolver de forma interativa.

Ele é igual a ideia dos notebooks, worksheets etc... para quem já usou o Mathematica, o Sage ou outros softwares matemáticos: um documento que concentra todo o código-fonte, junto (ou não) com a descrição e/ou a documentação dele.

Para usá-lo? Simples: digite ipython notebook --pylab inline no terminal, e pronto, vai abrir uma janela do seu browser. Daí é só criar um novo notebook.

Todos os recursos do IPython estão disponíveis (exceto o %debug, que requer uma interatividade que o 'notebook' ainda não suporta). E inclusive é possível embutir vídeos, imagens etc... dentro do documento! Excelente para a geração de aulas, tutoriais, e outras coisas que não são tão práticas de fazer com outros softwares (inclusive certos softwares proprietários :)

Ele também se demonstra um ótimo ambiente para trabalhar com Octave, R, etc... ou (para quem gosta - acho que todos sabem que eu não faço parte dessa estatística) com o MATLAB, através das extensões do IPython.

Outra vantagem, que eu não explorei, é a execução dele num servidor dedicado ou na nuvem: tchau à necessidade de instalar uma cópia do ambiente em cada máquina, basta ter um browser razoavelmente atual e pronto.

Uma possibilidade final que o IPython fornece é executar em um 'terminal gráfico' em Qt, usando o comando ipython2 qtconsole --pylab inline. Essa é mais interessante para scripts que executem e forneçam seus resultados de forma visual.