# Loucas pra Casar

Caloni, 2016-01-04 movies [up] [copy]

Dirigido e escrito como uma telenovela, Loucas Pra Casar tem uma boa ideia para uma peça de teatro (talvez até seja) e tenta esticá-la em um filme inteiro usando uma estrutura baseada em episódios descartáveis e bobos, tornando toda a experiência um exercício de futilidade com nenhuma tensão e zero carisma.

Sua protagonista, Malu (Ingrid Guimarães), passou a juventude adulta pegando buquês e vendo suas amigas se casarem. Dedicada e metódica, profissionalmente é bem-sucedida e independente. No entanto, isso não evita que ela se sinta incompleta, já que não tem marido (que pecado para uma mulher em pleno século 21!). Sendo secretária do seu pretendente para esse "cargo", a única coisa que a atrapalha são as amantes de seu namorado. Ou seja, é o velho argumento machista das comédias românticas de Hollywood reciclada em um modelo brasileiro onde a putaria teoricamente é mais liberada.

Teoricamente. Mesmo sendo brasileiro, o filme é surpreendentemente conservador, frio e distante, pois se concentra em gags televisivas inocentes que quase nunca movem a história para frente. Sem mover a história, nunca se cria tensão ou empatia de seus personagens, que se dividem em mulheres histéricas e um homem perfeito cujo único possível defeito é ter duas amantes: uma dançarina de boate e uma jovenzinha metida a crentelha.

Pior que isso é reparar lá pela metade do filme para onde o roteiro desagradável de Marcelo Saback está nos levando, em uma reviravolta completamente sem sentido, onde até piadas como a de Malu falando com um porteiro só irão fazer sentido -- e, portanto, supostamente se tornar engraçada -- depois da reviravolta em si, quando tivermos entendido toda essa complexa "trama", criada pelo jeito por uma mente feminina construída como alimento para machos-alfa ávidos por três mulheres dispostas a disputá-lo a tapas.

Loucas Pra Casar é um universo limitado demais para virar sequer um filme que acreditemos em seus personagens, pois os atores saíram de programas estilo Zorra Total, onde as mulheres fazem sexo impossível, de lingerie e calcinha, e onde o único objetivo da vida de uma mulher é conseguir um homem para casar. É curioso que para uma comédia, mesmo se fosse lançada trinta anos atrás, ainda poderia ser acusada de retrógrada.


# O Mentiroso

Caloni, 2016-01-04 movies [up] [copy]

Jim Carrey é um comediante tão talentoso que, se inserido no projeto certo, pode render um filme que sem ele seria apenas um passatempo da sessão da tarde, mas com ele ganha contornos cartunescos que remetem o significado da história que acompanhamos para algo além do trivial.

É assim com O Mentiroso, a fábula que envolve um pai separado que não consegue parar de mentir no emprego de advogado e para seu filho, o desapontando frequentemente, até que um pedido mágico do garoto faz com que ele não consiga mais mentir por um dia inteiro, o que vira um desastre por ser justo no dia em que, colocado à prova para entrar em sociedade no escritório onde trabalha, ele irá defender uma cliente baseado em mentiras.

Dirigido por um improvável Tom Shadyac (Todo Poderoso? Patch Adams??), o filme é um quê de grandiosidade, como podemos perceber pelas tomadas criativas de Shadyac, que usa uma sequência hilária de tomadas na cena mais engraçada da trama -- em que Jim Carrey tenta dizer que uma caneta azul é vermelha -- além de uma trilha sonora (John Debney) que remete diretamente a comédias épicas como Esqueceram de Mim.

O pior é que com as caretas de Jim Carrey toda essa grandiosidade funciona, e na maior parte do tempo nos convence de que esta é uma história de proporções épicas, pois o que está em jogo é a felicidade de uma criança e um sucesso de um pai em sua tentativa de ser honesto com seu filho. Percebemos isso nos momentos mais sóbrios e tocantes, quando o vemos surpreso por dizer que quer o melhor para seu filho e constata que essa é uma verdade fácil de ser dita.

Apelando sempre para o emocional, porém, o filme tem seus defeitos também no exagero, e tentar nos manipular com uma criança não parece ser a melhor maneira de ganhar a empatia do público. Felizmente, o resultado é mais pastelão do que lenços de papel.


# S.O.S.: Mulheres ao Mar

Caloni, 2016-01-04 movies [up] [copy]

Este filme é um longo comercial de uma empresa de cruzeiros. A história poderia muito bem acontecer em uma cidade qualquer, já que não há nenhuma cena que justifique a presença dos personagens em um navio. Salvo, claro, as patéticas "homenagens" a Titanic, tornando-o, por comparação, como se Plano 9 do Espaço Sideral, considerado o pior filme de todos os tempos, homenageasse Cidadão Kane, considerado um dos melhores.

Pautado pelo já conhecido argumento das "globochanchadas" para mulheres inseguras, a história é que ela (Giovanna Antonelli) perde o marido para a amante e tenta resgatá-lo em uma viagem pelo mar para a Itália. Junto vão a melhor amiga, viciada em homens lindos e musculosos, e a sua secretária, essas empregadas que fazem sucesso nos programas de TV da emissora por serem simples e "humildes". A diversão da classe média brasileira sempre foi pautada no ridículo da plebe, até quando a audiência é formada pela própria plebe. E o amor sempre foi pautado na busca incessante de um macho-alfa, sem o qual as mulheres não são ninguém.

Até porque, para rivalizar com o marido, surge um outro macho-alfa, mais alto e gentil. Da mesma forma, suas duas companheiras também saem à caça dos homens que irão provê-las. O que seria dessas mulheres burras e desastradas se não fossem os homens que possuem um peitoral definido?

Dirigido como uma comédia estilo europeu, recheada de trilhas italianas e piadas com um teor típico das comédias desse país, S.O.S. diverte moderadamente em doses homeopáticas, até por ter um trio de atrizes carismáticas e talentosas. Triste, portanto, que ao vestir esse estereótipo de donzela histéricas elas sejam sabotadas por essa necessidade patológica de precisarem de homens.

Concluindo com um terceiro ato filosófico de botequim -- para mulheres que leem Sabrina -- S.O.S. passa a se tornar ridículo e hipócrita ao defender que não existe fórmula para a felicidade, pois logo em seguida o final reverte justamente para o mais formulaico possível. Talvez não haja fórmula para a felicidade, mas para o lucro há: use suas atrizes famosas em filmes com a moral dos livros Sabrina e venda isso como uma comédia inconsequente. Talvez a Globo tenha achado a sua fórmula de felicidade, direto para seus bolsos.


# White Rabbit

Caloni, 2016-01-04 movies [up] [copy]

O que esse filme quer dizer? Que é assim que se forma um psicopata que mata jovens em uma escola? Ou que é assim que se salva uma das vítimas? Qual a lição apresentada por um filme que já revela seu desfecho nos primeiros 30 segundos?

A história em White Rabbit nunca consegue se tornar empolgante ou significar algo mais do que um jovem sensível com uma infância problemática, algo até que normal considerando os pais despreparados que ele tem. Quando atinge uma idade de nove anos, o pai vai a uma loja de armas e compra para ele e o irmão mais velho duas espingardas. Treinam numa área de tiros e vão caçar. O pai obriga o caçula a matar um coelho branco. Isso marca o menino para sempre. De que forma, não se sabe. Toda interação que vemos com seu melhor amigo ou sua namorada são inúteis para definir sua personalidade.

A única coisa que acontece em determinado momento é que todos em volta dele de repente se arrependem de suas vidas passadas e se entregam à religião. No entanto, o culto à morte já havia possuído a alma do jovem Harlon (Nick Krause) no formato de revistas cujos personagens ele conversa.

Um Donnie Darko menos fabuloso, um retrato incompleto da adolescência problemática de algumas crianças americanas, White Rabbit é um trabalho não-terminado, que não se conclui mesmo quando a última peça do tabuleiro é removida.


# Morangos Silvestres

Caloni, 2016-01-05 movies [up] [copy]

Os filmes de Ingmar Bergman tem um efeito hipnótico que é difícil se desvencilhar. Pelo menos para mim. Todo filme que assisto dele, quase morro de sono.

Embalando sua história em um ritmo acalentador, nesse caso nostálgico e dramático, Bergman em Morangos Silvestres mostra que é possível fazer Grande Cinema sem se importar muito com o público. Aqui ele conta a história de Dr. Isak Borg e seus pensamentos a respeito de um dia incomum em sua vida, quando irá receber um prêmio no final dela, mas se questiona se suas decisões pessoais até hoje não foram egoístas. Sua mulher já está morta, sua mãe não. A conversa que tem com sua nora no mínimo revela um caráter desagradável de Isak, mas apenas se você conhecer melhor esse distinto senhor. Como sua governanta já aprendeu, é melhor não dar intimidade ou confiança para essa pessoa.

Tentando buscar inspiração no conflito bíblico de Isaque, filho único de Abraão com sua esposa Sara. Não o sacrifício de Abraão de seu filho ao deus Javé, mas sua vida familiar. Ele e sua esposa Rebeca tiveram gêmeos, apesar que Isaque acreditava que sua esposa era estéril. Uma questão inversa se coloca entre o filho de Isak e sua nora, que não desejam filhos. Até ela se questionar a respeito do suposto egoísmo por trás dessa decisão.

Viajando facilmente no tempo, quando vemos a adolescência de Isak e uma versão controversa de uma família naquela época, Morangos Silvestres possui seus melhores momentos em suas questões filosóficas, apesar de pecar pontualmente em como estabelece a dinâmica de seus personagens, sempre simbólicos. Quando eles encontram um triângulo amoroso pela estrada, a analogia com a decisão quando jovem de Isak é óbvia demais. Da mesma forma, as discussões eternas entre um outro casal, esse mais velho, quando quase bate de frente com o carro do Dr.

Seja para morrer de sono pelo ritmo de Bergman, ou ficar fascinado pelas questões religiosas e filosóficas do diretor, o fato é que Morangos Silvestres é um filme que deve ser visto pelo menos uma vez em cada fase da vida. Com certeza ele irá resgatar memórias que merecem ser revistas cada vez que damos um passo em direção à inevitável morte.


# Eterno Amor

Caloni, 2016-01-06 movies [up] [copy]

Um misto de remorso pelas agruras da guerra com a energia de uma investigação guiada unicamente pela fé (ou pelo amor). A beleza da fotografia fria e triste do front se contrapõe aos horizontes oníricos do presente nostálgico, que clama pela elucidação completa de um passado nebuloso que separou um casal apaixonado prestes a se casar. Eterno Amor é pura poesia na forma de criatividade narrativa. Um Pierre Jeunet que retrabalha sua Amélie Poulain em traços mais cruéis e menos esperançosos, e que tenta soar como um romance épico em torno de personagens com pouca alma e muita persistência.

Utilizando novamente Audrey Tautou, a namoradinha da França, o diretor Jean-Pierre Jeunet mais uma vez aplica a belíssima fotografia de seu colaborador Bruno Delbonnel (Harry Potter e o Enigma do Príncipe, Inside Llewyn Davis: Balada de um Homem Comum, Amélie Poulain) e a dinâmica e inventiva montagem de seu editor Hervé Schneid (Micmacs - Um Plano Complicado) para contar uma história cheia de poder criativo, mas que encontra em seu núcleo um drama intransponível para o estilo do diretor.

Sua busca incessante, no entanto, em tentar juntar todas as pistas que a bela mas manca Mathilde (Tatou) vai acumulando, testemunho após testemunho, em busca da verdade definitiva a respeito do paradeiro de seu amor, Manech (Gaspard Ulliel), é tão contagiante que o mundo que se cria em torno acaba compensando a total falta de realismo nesse conto quase-surrealista.

Com aspectos técnicos impressionantes a cada cena -- exceto talvez pela música de Angelo Badalamenti, repetitiva e monótona, mas ainda assim condizente com a proposta do filme -- e com um ritmo que vai se formando pela repetição (a insistência do carteiro em espalhar o cascalho da entrada da casa de Mathilde, só pelo bem da "entrada triunfal"), o roteiro da dupla Guillaume Laurant e do próprio Pierre Jeunet, baseados no romance de Sébastien Japrisot, não consegue se desvencilhar da sua complexidade em utilizar diferentes personagens que se parecem em situações que se embaralham, o que se por um lado acaba contribuindo para a atmosfera de desorientação de Mathilde, vai aos poucos se tornando uma distração incômoda para o espectador, que já não espera encontrar qualquer conexão memorável entre as pistas.

Até mesmo a dualidade de cores frias da guerra com as cores sempre aquecidas do presente da protagonista, fascinante no começo, também vai se esvaecendo com a cada vez mais distante capacidade de atribuir significado naquele emaranhado de símbolos. Jeunet se deixa sabotar pela sua própria obsessão de detalhes, e assim como seu mais recente trabalho, Uma Viagem Extraordinária, se esquece das emoções primárias de seus personagens para focar unicamente nas idiossincrasias de sua complexa história.

O que acaba por fim em tornar tudo aquilo uma imensa espiral de eventos que revela uma estrutura tal qual as escadas do farol onde o casal se encontrava: aparentemente infinita, mas se encarada com dedicação e empenho, alcançável até por uma manca que deseja enxergar além de suas limitações físicas. É o metafísico celebrado em vida. A mágica de usar o cinema como cornucópia de simbolismos visuais.


# Café dos Reis

Caloni, 2016-01-07 food [up] [copy]

Bem caseiro, um pouco doce demais, ainda avaliando. É bem ruinzinho, mesmo; um gostinho de merda.


# O Dragão Chinês

Caloni, 2016-01-07 movies [up] [copy]

The Big Boss, ou O Dragão Chinês (??), é um dos primeiros filmes de Bruce Lee no estilo Hollywoodiano, mas que mantém uma estrutura típica dos filmes de artes marciais: subir em escala até atingir o chefão.

Com uma trilha sonora embaraçosa e um ritmo de cena nem sempre adequado, O Dragão Chinês consegue oferecer uma lição de moral sem se esforçar muito: como o poder muda a visão das pessoas. No começo o jovem Cheng Chao-an (Lee) vem com seu tio que o traz a seus primos para que trabalhe com eles em uma fábrica de gelo. Um deles, o sempre solícito Hsiu Chien (James Tien) é gentil e justo com todas as pessoas, além de lutar muito bem. A vida na casa de seus primos é muito agradável, mas o problema parece rondar a fábrica.

Cheng prometeu ao tio que não lutaria para não entrar mais em encrenca, mas quando perde o amuleto, a fera está solta. A história dá uma guinada sensacional depois dali. Cheng, depois de se mostrar um exímio lutador, é promovido a capataz, e logo todo o grupo se esquece do desaparecimento de Hsiu Chien. Essa é a lição que é facilmente aprendida. As expressões nos rostos dos atores é manjada, inclusive de Bruce Lee, mas independente da estrutura, a história e as cenas de ação compensam em muito, pois tirando as montagens com facas, são reais, e editadas com uma energia inebriante.

Note, por exemplo, a luta final. Conhecemos o poder de ambos os oponentes, e mesmo que um carro ou um ônibus passe na estrada logo atrás nos distraindo, a concentração dos lutadores é imensa, tornando difícil não se interessar pelo desfecho da história.

Sem colocar meios-termos no filme, temos nudez feminina e a morte de uma criança. Isso só acrescenta ao realismo do trabalho do diretor Wei Lo (ajudado por Chia-Hsiang Wu, embora não apareça nos créditos). E realismo é o que falta hoje em dia, no mundo do digital. Que belo trabalho de coreografia disposta em uma história clichê, mas que se torna poderosa naturalmente.


# A Vida Marinha com Steve Zissou

Caloni, 2016-01-09 movies [up] [copy]

A Vida Marinha e Terrestre por Wes Anderson. Esse é o diretor que brinca com cenários paralelos e movimentos geométricos de câmera e revela sem nenhum pudor a excentricidade de seus personagens. Do ponto de vista da narrativa, ele brinca também com eles -- seus personagens -- como curiosidades dignas de serem abertas e analisadas através da inteligência de seus idealizadores -- os atores -- e como a interação entre eles revela isso é o mais interessante em sua cinematografia.

Dito isto, o fato desse roteiro ter sido escrito em conjunto com Noah Baumbach, um exímio manipulador de personagens com crises existenciais e pouca emoção (Frances Ha), bate de frente com a trama principal: seu protagonista, o oceanógrafo Steve Zissou (Bill Murray), vive uma crise de identidade ao descobrir que tem um filho de 30 anos (Owen Wilson) e que sempre foi em sua vida um mesquinho egoísta, levando toda sua equipe marítima por um caminho desenhado para projetar seu gigantesco ego por todas as partes do seu barco, seus filmes e sua própria filosofia. A maneira com que ele vai se dando conta de seu comportamento reprovável é através da perda de seu companheiro, Esteban (Seymour Cassel), comido por um tubarão raro. Planejando sua vingança contra o tubarão -- independente deste pertencer a uma espécie em extinção -- diferentes pessoas, cada um com seu grau de incompetência, organizará uma missão com duplo significado: desvendar uma farsa externa, a história da morte de seu amigo (que é visto com desconfiança pelo público e críticos de seu trabalho, sempre ansiosos pelo momento em que ele será desmascarado por seus filmes fajutos) e uma farsa interna, pois Zissou, e isso graças a Murray, acredita piamente ser tudo o que diz ser: um líder nato com uma equipe que o venera. Faz questão de filmar todos os momentos -- geralmente na segunda tentativa -- para demonstrar ao mundo como ele é, ou deveria ser.

A participação de Owen Wilson como seu filho bastardo é detalhista em sua origem simples. A maneira como ele larga (ainda que temporariamente) sua carreira de piloto para se dedicar com o pretenso pai embaixo do mar é tão significativa que seria desnecessário observarmos seus trejeitos interioranos, mas isso o torna um personagem completo.

Outro personagem de destaque é o braço-direito de Zissou, Klaus Daimler (Willem Dafoe), igualmente incompetente, e que sente-se ameaçado perante a presença do filho de seu mestre. As expressões de pânico de Dafoe também constroem um personagem singular, mesmo que caricato.

Mas o que dizer de caricato quando o próprio Bill Murray usa e abusa de suas expressões características. Elas, porém, veem acompanhadas de um ar arrogante impenetrável em sua personalidade, conseguindo entregar todo o lado Murray de ser para seu Steve Zissou.

De quebra e de brinde, temos Seu Jorge (sim!) tocando e cantando palhinhas de músicas adaptadas para o português. E ele é um personagem da equipe e seu nome é Pelé (provavelmente um nome que o próprio Zissou colocou, como mais tarde ele tenta com o pretenso filho).

O filme se torna ainda mais interessante com essa dualidade com que Anderson argumenta até o fim, sempre apresentando criaturas do mar obviamente inventadas e estilizadas, como um cavalo-marinho que lembra um origami, mas levando a sério cada passo da equipe em sua missão. Parece que a farsa que testemunhamos existe na realidade do filme, mas parece impenetrável pelas pessoas que nela habitam. Resta apenas ao espectador dar risada dessa situação cômica, e a maneira sóbria com que cada detalhe é tratado o torna hilário sem forçar um só momento. Apenas a existência dos personagens é o suficiente.

Como sempre com uma fotografia, direção de arte e efeitos invejáveis nas produções do diretor, A Vida Marinha com Steve Zissou parece até uma grande crítica ao modelo National Geographic de ser, sempre inventando uma história que parece real em um cenário, diálogos e pessoas que mais parecem atores. Algo muito propício nos dias de hoje, onde até E.T.s são encarados como uma realidade em nossa volta. Em um canal de ciência.


# Alvin e os Esquilos: Na Estrada

Caloni, 2016-01-10 movies [up] [copy]

Como sempre uma boa ideia desperdiçada, a série dos esquilos cantores vai de mal a pior, restando quase apenas seus protagonistas encantadores e coreografias vazias, o que não basta para tornar um filme bom. Consegue no máximo defesas do tipo "mas eles são tão fofinhos" e "as cenas deles cantando são tão boas".

O fato é que Alvin e os Esquilos: Na Estrada repete todos os clichês anteriores em uma versão irregular. Temos o velho medo que os esquilos sejam abandonados pelo seu pai adotivo, o receio de um novo relacionamento (na figura do seu filho folgado que teve uma infância com pai ausente) e até um vilão que brota do nada, um ex-fã que vira hater porque sua ex achava sua fixação pela banda de esquilos infantil demais (não dá para culpá-la, né). Até a recorrente piada das "esquiletes" serem agora mais famosas que os próprios esquilos (e estarem ocupadas com suas vidas e precisarem no último momento voltar e salvar o dia). Tudo está lá, reciclado da pior maneira possível.

Nada faz sentido no filme. O vilão é ridículo além do limite, causando embaraço em quase cada cena em que aparece (onde o ápice é uma briga de bar que vira um duelo estilo faroeste que por sua vez vira uma luta que no final acaba virando sei-lá-mais-o-que). O conflito dos esquilos com seu possível futuro-meio-irmão é artificial logo no começo, e durante o filme se torna inexistente (só esqueceram de avisá-los), sem contar que a reviravolta envolvendo um anel de noivado é desonesto com o espectador, já que deixa a entender com todas as palavras o que deve acontecer para no final desfazer as expectativas que o próprio filme confirmou. (Chega uma altura na história que fica difícil apontar o que não é desonesto.)

Por fim, é triste constatar que, apesar de tantas falhas, os esquilos continuam sendo uma ótima ideia. Desperdiçada em histórias ridículas, mas ainda o que mantém o projeto "Alvin e a Próxima Aventura de Sempre".


# Classe, objeto, contexto

Caloni, 2016-01-10 coding ccpp [up] [copy]

Para entender conceitos simples em C++, como métodos de uma classe, ajuda muito seguir o raciocínio dos programadores C e como eles lidavam com o tipo de problema que C++ resolve elegantemente implementando um novo compilador com uma nova linguagem.

Tomemos, por exemplo, métodos. Um método é uma função chamada dentro de um contexto. Qual o contexto? O objeto. Ou seja, uma instância específica de uma classe, que é um molde para se fazer alguma coisa.

int main()
{
   MinhaClasse obj;
   obj.MeuMetodo(); // o contexto é obj, uma instância de MinhaClasse
}

Para obter esse contexto, existe uma palavra-chave reservada dentro dos métodos que é o __this__, que está tão incrustado na linguagem que não precisa ser usado explicitamente: quando referenciamos alguma propriedade (ou um outro método) da classe, só pelo fato de estarmos dentro de um método o compilador já entende que se trata do mesmo objeto, ou mesmo contexto.

class MinhaClasse
{
public:
   void MeuMetodo();
   void MeuOutroMetodo();
   int MinhaPropriedade;
};
void MinhaClasse::MeuMetodo()
{
   MinhaPropriedade = 42; // ou seja: this->MinhaPropriedade = 42;
   MeuOutroMetodo(); // ou seja: this->MeuOutroMetodo();
}

E contexto nesse sentido nada mais é que um endereço na memória para alguma coisa que nos interessa. Tal qual uma função API do Windows -- tal qual FindFirstFile -- que recebe ou retorna uma __struct__ com o que precisamos, esse geralmente é o contexto procurado.

WIN32_FIND_DATA findData;
HANDLE findH = FindFirstFile("*.txt", &findData);
if( findH != INVALID_HANDLE_VALUE )
{
   if( findData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED )
   {
//...

No caso de nós, que escrevemos uma "classe", o contexto é recebido "de fora":

HANDLE MyFindFirstFile(const char* pattern, LPWIN32_FIND_DATA findData)
{
   //...
   findData->dwFileAttributes = FILE_ATTRIBUTE_ENCRYPTED;
   //...

Tal como uma __struct__ que definimos, ela vira o contexto. Da mesma forma, um objeto de uma classe em C++ é esse contexto. Podemos fazer a mesma coisa em C, com o trabalho adicional de especificar o "this" (isto é, o ponteiro para o contexto/struct):

struct MinhaClasse
{
    int MinhaPropriedade;
};
void MinhaClasse_MeuMetodo(MinhaClasse* pThis)
{
   pThis->MinhaPropriedade = 42;
   ///@todo Chamar pThis->MeuOutroMetodo();
}

Em um próximo post vamos ver como fazer para chamar MeuOutroMetodo a partir de uma estrutura em C.


# Melitta Tradicional

Caloni, 2016-01-10 food [up] [copy]

Custo benefício interessante; o pó parece cheio de detritos, mas gera um gostinho de café gostoso, ainda que pouco encorpado, mas aromático o suficiente para ser bom.


# Classe, objeto, contexto, método

Caloni, 2016-01-11 coding ccpp [up] [copy]

No post anterior falamos como a passagem de um endereço de uma struct consegue nos passar o contexto de um "objeto", seja em C (manualmente) ou em C++ (automagicamente pelo operador implícito __this__). Trocamos uma propriedade desse "objeto" em C, mas ainda não chamamos um método.

Hoje faremos isso.

Isso é relativamente simples quando se conhece ponteiros de função, existentes tanto em C quanto em C++. Ponteiros de função são tipos que contém endereço de uma função com assinatura específica (tipo de retorno e de argumentos). Através de um ponteiro de função é possível chamar uma função e passar alguns argumentos. Como o contexto nada mais é que um argumento, será só passá-lo como parâmetro.

bool MinhaFuncao(int x, int y)
{
    return x == y;
}
int main()
{
    bool (*PMinhaFuncao)(int, int) = MinhaFuncao;
    PMinhaFuncao(2, 3);
}

No exemplo anterior não sabíamos como chamar um método de nosso "objeto" em C:

struct MinhaClasse
{
    int MinhaPropriedade;
};
void MinhaClasse_MeuMetodo(MinhaClasse* pThis)
{
   pThis->MinhaPropriedade = 42;
   ///@todo Chamar pThis->MeuOutroMetodo();
}

Isso se torna fácil se tivermos uma nova "propriedade" na nossa struct que é um ponteiro para a função que queremos chamar.

#include <stdio.h>
struct MinhaClasse
{
    int MinhaPropriedade;
    void (*MeuMetodo)(MinhaClasse*);
    void (*MeuOutroMetodo)(MinhaClasse*);
};
void MinhaClasse_MeuMetodo(MinhaClasse* pThis)
{
    pThis->MeuOutroMetodo(pThis);
}
void MinhaClasse_MeuOutroMetodo(MinhaClasse* pThis)
{
    pThis->MinhaPropriedade = 42;
}
int main()
{
    MinhaClasse obj;
    obj.MinhaPropriedade = 0;
    // precisamos iniciar os "métodos" em C; em C++ é automágico
    obj.MeuMetodo = MinhaClasse_MeuMetodo; 
    obj.MeuOutroMetodo = MinhaClasse_MeuOutroMetodo;
    obj.MeuMetodo(&obj);
    printf("MinhaPropriedade = %d", obj.MinhaPropriedade);
}

Parece muito trabalho para algo que é feito "automagicamente" em C++, certo? Certo. Porém, agora sabemos o que acontece por baixo dos panos em C++ e que pode ser feito em C (ainda que "na mão"). Você provavelmente nunca fará esse tipo de código em C para emular C++, mas o objetivo desse código é entender como funciona, por exemplo, a _vtable_ do C++, que permite polimorfismo.

Mas esse é assunto para outro post.


# O Terceiro Homem

Caloni, 2016-01-11 movies [up] [copy]

Um filme com uma trilha sonora leve e temática, e enquadramentos tortos que lembram que algo está errado. E está, mesmo: Viena está tomada por quatros povos diferentes, cada um fala um idioma, e o povo local fala alemão. Escambos perigosos no mercado negro estão por toda a parte. A atmosfera de O Terceiro Homem é densa, e seus acontecimentos precisos, cirúrgicos. É daqueles raros filmes que não se pode arriscar remover um momento ou expressão sequer. E muito menos uma das inúmeras câmeras tombadas.

O diretor Carol Reed (Oliver!) desafia a gravidade e o senso estético da época com quadros colocados na diagonal que imprimem um ar expressionista em torno da destruída Viena. Seus pontos turísticos e suas ruínas de edifícios ganham outros contornos no filme. Isso sem contar nas sombras, tão ativas quantos seus personagens e cenários, e que o fotógrafo Robert Krasker (que lhe rendeu um Oscar) consegue captar com uma poesia intensa a cada quadro. A maioria pode ser emoldurada na parede.

Seu herói é o escritor de livros de ficção de crimes fantasiosos Holly Martins (Joseph Cotten), mas ele passeia em torno de personagens muito mais pitorescos. Investigando a morte repentina de seu amigo, que lhe prometera um emprego quando chegasse à cidade, conhece uma mulher misteriosa e apaixonada (Alida Valli), com um visto falso que ganhou de presente, um investigador/major de polícia perspicaz (Trevor Howard), um porteiro que quase não fala inglês, uma senhora que também não fala e não se importa em ser entendida. Enfim, um mar de pessoas que povoam a imaginação de Martins enquanto este tenta achar lógica nos acontecimentos que culminaram no enterro de seu melhor amigo.

Os créditos iniciais já denunciam a presença de Orson Welles, também, e é difícil não aguardar a aparição do diretor de Cidadão Kane. Harry Lime é o personagem-chave que ele encarna, e como nunca. Poucas expressões, falas e movimentos de corpo são necessários para identificá-lo como um criminoso da pior espécie. Seu diálogo mais famoso, que termina falando da invenção do relógio-cuco pelos suíços, é dito de cima de uma montanha-russa, onde sutilmente ameaça seu melhor amigo. No entanto, o filme não é só Welles. Antes e depois dele o filme tem tons distintos, e o terceiro ato é um dos mais tensos já produzidos, graças às construções de alianças e desconfianças no primeiro e segundo.

Concluindo com uma sequência fabulosa debaixo das ruas de Viena, O Terceiro Homem pode fazer passar despercebido sua maestria. No entanto, note como a história voa, como todas as cenas são necessárias e se encaixam para revelar seus personagens sem quase nada gratuito. Poético, engraçado sem fazer rir, dramático sem fazer chorar. Um filme técnico irrepreensível. Um filme para pensar no Cinema sem ser uma história sobre o Cinema.


# Classe, objeto, contexto, método, polimorfismo

Caloni, 2016-01-12 coding ccpp [up] [copy]

No post anterior implementamos "métodos" em C usando ponteiros de função dentro de structs que eram passadas como parâmetro. Tudo isso embutido por um compilador que gera o que chamamos de instância de uma classe, ou objeto, em C++. Isso é possível graças ao contexto que é passado para uma função (que no caso de C++ é o operador implícito __this__, que sempre existe dentro de um método não-estático).

ClasseCpp obj;
obj.Metodo(); // passando this implicitamente
ClasseC obj;
obj.Metodo = ClasseC_Metodo;
obj.Metodo(&obj); // passando this explicitamente

Para objetos não-polimórficos, o C++ não precisa mudar essa tabela de funções que os objetos de uma classe contém. No entanto, quando há pelo menos um método virtual, surge a necessidade de se criar a famigerada __vtable__, ou seja, justamente uma tabela de ponteiros de função, que dependem da classe instanciada (base ou algumas das derivadas). Se uma classe derivada sobrescreve um método de alguma classe base, é o endereço desse método que irá existir na _vtable_. Já vimos isso há muito tempo atrás escovando os bits da vtable direto no assembly e na pilha.

#include <iostream>
class MinhaClasse
{
    public:
        void MeuMetodo()
        {
            MeuOutroMetodo();
        }
        virtual void MeuOutroMetodo()
        {
            MinhaPropriedade = 42;
        }
        int MinhaPropriedade;
};
class MinhaClasseVersao75 : public MinhaClasse
{
    public:
        virtual void MeuOutroMetodo()
        {
            MinhaPropriedade = 75;
        }
};
int main()
{
    MinhaClasse obj;
    MinhaClasseVersao75 obj2;
    obj.MeuMetodo();
    obj2.MeuMetodo();
    std::cout << "MinhaPropriedade (obj) = " << obj.MinhaPropriedade << std::endl;
    std::cout << "MinhaPropriedade (obj2) = " << obj2.MinhaPropriedade << std::endl;
}

Como você deve imaginar, é possível também fazer isso em C. Basta mudar os endereços das variáveis do tipo ponteiro de função que estão na struct usada como contexto. Para ficar o mais próximo possível do "modo C++" de fazer polimorfirmo, podemos escrever _hardcoded_ a tal _vtable_ para os diferentes tipos de "classe":

#include <stdio.h>
struct MinhaVTable;
struct MinhaClasse
{
    const MinhaVTable* VTable;
    int MinhaPropriedade;
};
struct MinhaVTable
{
    void (*MeuMetodo)(MinhaClasse*);
    void (*MeuOutroMetodo)(MinhaClasse*);
};
void MinhaClasse_MeuMetodo(MinhaClasse* pThis)
{
    pThis->VTable->MeuOutroMetodo(pThis);
}
void MinhaClasse_MeuOutroMetodo(MinhaClasse* pThis)
{
    pThis->MinhaPropriedade = 42;
}
void MinhaClasse_MeuOutroMetodoVersao75(MinhaClasse* pThis)
{
    pThis->MinhaPropriedade = 75;
}
static const MinhaVTable g_minhaVTableOriginal = { MinhaClasse_MeuMetodo, MinhaClasse_MeuOutroMetodo };
static const MinhaVTable g_minhaVTableVersao75 = { MinhaClasse_MeuMetodo, MinhaClasse_MeuOutroMetodoVersao75 };
int main()
{
    MinhaClasse obj = { &g_minhaVTableOriginal };
    MinhaClasse obj2 = { &g_minhaVTableVersao75 };
    obj.VTable->MeuMetodo(&obj);
    obj2.VTable->MeuMetodo(&obj2);
    printf("MinhaPropriedade (obj) = %d\n", obj.MinhaPropriedade);
    printf("MinhaPropriedade (obj2) = %d\n", obj2.MinhaPropriedade);
}

A versão C ainda tem a vantagem de não precisar de uma vtable const (embora seja adequado em situações normais de temperatura e pressão). Os "métodos" poderiam mudar caso algum estado mudasse, alguma exceção fosse disparada, mantendo o mesmo contexto, mas um comportamento (vtable) diferente. Quem utiliza muito essa estratégia é o _kernel_ do Windows, que mexe com estruturas que contém não apenas listas ligadas genéricas, mas funções de _callback_ que não apenas o código da Microsoft precisa chamar, mas os próprios _drivers_ de terceiros que se preocupam com bom comportamento e _guidelines_ que tornam o SO rodando perfeitamente.

O importante deste artigo é demonstrar como conceitos aparentemente complicados ou escondidos de uma linguagem como C++ podem ser compreendidos completamente utilizando apenas linguagem de alto nível no bom e velho C. Essa estratégia de descer camadas de abstração, como verá, funciona para linguagens de mais alto nível, como C# ou Java, pois ambas são implementadas em linguagens como C++. No fundo, engenharia de software é um universo multi-camadas transitando pela última camada que conhecemos -- a física. Pelo menos a última camada que ainda conhecemos.


# Blend Melitta e Café dos Reis

Caloni, 2016-01-13 food [up] [copy]

80% Melitta 20% Café dos Reis. Coloquei bem mais pó, um sabor um pouco forte demais, mas mais rico que o Melitta e menos firulento que o dos Reis; interessante.


# Expresso do Amanhã

Caloni, 2016-01-13 movies [up] [copy]

O quão boa é a mensagem de um filme à medida que ela vai se tornando óbvia demais? Em Expresso do Amanhã, um filme violentamente gráfico e com desvios de caráter para o bem de seu argumento, talvez esse limite seja quando um personagem declara que "o trem é o mundo, nós somos a humanidade", em um momento tão avançado na história que até para aquele espectador que dormiu metade do filme a mensagem já é pura e cristalina como água derretida das calotas polares.

E água pura é o que não falta nesse futuro pós-apocalíptico. Baseado na Graphic Novel coreana Snowpiercer, também o nome do filme -- elegantemente traduzido no Brasil para Expresso do Amanhã -- uma nova Era do Gelo se instaura no planeta e os únicos sobreviventes estão em um trem construído por um empresário megalomaníaco que cruza todo o hemisfério norte eternamente já há 18 anos. Para manter todo esse sistema fechado funcionando, todos os detalhes são planejados e executados na ponta de uma régua. A régua, como não poderia deixar de ser, pertence aos vagões mais à frente. A execução, se você ainda não adivinhou, ocorre nos vagões mais ao fundo.

Mas isso tende a mudar a partir do momento que um dos passageiros da última classe, Curtis (Chris Evans), decide junto com seus companheiros -- o jovem Edgar (Jamie Bell) e o experiente Gilliam (John Hurt) -- iniciar uma nova revolta -- sim, houve anteriores. À medida que os vagões são dominados, vamos conhecendo mais sobre os mecanismos que permitem que o trem -- e seus passageiros -- subsistam por tanto tempo. Não há detalhes o suficiente para entender como, por exemplo, a energia é transformada, mas há passagens inspiradas no filme que conseguem transitar elegantemente -- embora sem sutileza nenhuma -- por essa alegoria da teoria de classes e domínio elitista, seja do corpo -- com o uso das poucas armas disponíveis a bordo -- ou da mente -- através da educação doutrinária desde criança.

Além de que, como citei, é um filme de violência gráfica extrema, e verbal também. O momento mais tenso do filme talvez seja justamente o que não vemos: a descrição de Curtis de sua adolescência e como eram as condições dos passageiros da última classe antes que a ração de proteína fosse desenvolvida para alimentá-los.

Apresentando um Chris Evans completamente possuído no papel de Curtis, os personagens secundários vão aos poucos pintando essa realidade através do seu figurino, talvez até mais do que os diálogos ou ações. As exceções ficam por conta da professora a bordo (Alison Pill) e da irreconhecível Tilda Swinton como Mason, uma megera manipuladora visivelmente descontrolada em seu posto, gritando por ordem e discursando -- e vestindo -- um traje muito mais 1984 do que toda a tripulação junta.

Porém, a grande dobradinha do filme está nas mãos dos conterrâneos do diretor. Ah-sung Ko (O Hospedeiro) é uma jovem que nasceu no trem, viciada na droga à bordo -- convenientemente um refugo industrial -- e cujas visões se tornam parte importante da história no momento final. Seu pai, Kang-ho Song (Lady Vingança, Mr. Vingança) é um especialista em segurança que desenhou os portões que separam os vagões; se mantendo drogado constantemente, seu passado é nebuloso, mas não é difícil entender suas motivações através do seu passado; difícil é conhecer as motivações acerca do futuro.

Além disso, encabeçando o elenco de veteranos, Ed Harris é Wilford, o maluco por trás dessa invenção que transforma não só as engrenagens metálicas, mas toda a humanidade como parte de um sistema complexo que atribui funções bem-definidas a cada compartimento. Harris confia na própria premissa para explicá-la, e é desnecessário criar fantasia em um cenário que já é absurdo demais. Do outro lado -- literalmente -- John Hurt é Gilliam, o ancião dos passageiros do fundo, cujo olhar parece conter muitas histórias que ele parece querer esquecer, embora não consiga. Coincidência ou não, ele é o protagonista de 1984, o romance de George Orwell transformado em filme que mostra um futuro igualmente distópico e autoritário.

Como deve ser fácil imaginar, uma produção coreana cara dessas e com atores de uma conhecida trilogia não poderiam vir de outro lugar. Produzido por Chan-wook Park (Old Boy), o filme é um marco na ficção científica recente desse país, cuja filmografia -- de todos os gêneros -- sempre assombra pela crueldade e pela maneira cínica e pessimista de observar os seres humanos.

O diretor coreano Joon Ho Bong (Memórias de um Assassino) estiliza demais sua ação, e aborda a violência de uma maneira que pode assustar muitos espectadores. Porém, seu jogo de lentes para manter-nos sempre em um tom claustrofóbico, com paredes sempre circundando a realidade à volta, são eficientes do começo ao fim, mas principalmente no início. Quando vemos a primeira fresta de luz no filme, é como se ela fosse a escuridão, e a escuridão fosse a luz natural que a humanidade se acostumou a viver e a se esconder.

Com efeitos visuais que impressionam, mas estão contidos o suficiente para não atrapalhar o andamento da história, O Expresso do Amanhã é um filme que vai em um crescendo, e pode desanimar parte da plateia no começo. Se você ainda não o assistiu, não desanime. Há muitos mais vagões interessantes logo à frente. Se trata apenas de um mecanismo necessário para que a tensão suba até o limite do aceitável.


# Gabaritos

Caloni, 2016-01-13 coding ccpp [up] [copy]

Um __template__ -- ou, como é na tradução da primeira edição de The C++ Programming Language, de Bjarne Stroustrup, aqui no Brasil: __gabarito__ -- é um molde que pode ser usado por diferentes tipos para traduzir o mesmo algoritmo, ou pelo menos a mesma intenção de algoritmo (por pela sobrecarga de operadores é possível que o comportamento de tipos diferentes pode ser diferente).

Em C++, fazer uma função template é muito simples:

#include <iostream>
using namespace std;
template<typename T>
bool Compare(T& var1, T& var2)
{
    return var1 < var2;
}
int main()
{
    int x = 24, y = 42;
    double dx = 100.0, dy = 10.0;
    cout << "x is " << ( Compare(x, y) ? "lesser" : "bigger" ) << " than y\n";
    cout << "dx is " << ( Compare(dx, dy) ? "lesser" : "bigger" ) << " than dy\n";
}

Continuando nosso tema de fazer as mesmas coisas em C, __templates__ não é tão simples, pois não existe de fato na linguagem. Templates são interpretados pelo compilador, que gera um esqueleto de algoritmo que é usado para preencher código de todos os tipos utilizados. Em C isso era feito usando macros. Porém, macros não fazem parte da linguagem C. É apenas uma ferramenta chamada pré-processador que substitui texto antes do programa ser compilado. É através do pré-processador que, por exemplo, os headers são incluídos em um código-fonte. Isso já foi explicado em um artigo bem velhinho, e mais recentemente em uma palestra.

// qual o tipo de x e y? qualquer um que faça comparação
#define MACRO(x, y) x < y

Eu não recomendaria usar macros em C++, assim como não recomendo em C. Porém, em C é a única opção para reciclar algoritmos de maneira estática. Exceto se você usar ponteiros de função, o que adiciona pouco overhead, mas se perde, assim como a técnica de macro, a informação dos tipos. A própria libc contém uma função, __qsort__, que é "genérica" através do uso de ponteiros sem tipo (void*) e ponteiro de função. A função ordena elementos de uma lista, mas para isso depende da função de comparação que é passada por parâmetro. Essa função recebe dois void* que deve comparar. Além disso, o leiaute na memória tem que ser fixo, contínuo, pois é assim que a função consegue mover os elementos. Ou seja, bem limitado.

Dessa forma, não pretendo ensinar a usar "templates" em C, mas a usá-los em C++ com foco em C. Um amigo conhecido de vocês, o Fernando/DriverEntry, utilizou essa técnica com maestria em alguns códigos kernel-mode que ele desenvolveu, e é uma maneira válida de se aproveitar de uma linguagem mais "alto nível" como C++ em ambientes limitados como o código que trabalha com o S.O.. Como a API do kernel lida com abstrações em C, seus objetos necessariamente não são objetos no sentido C++, mas os famigerados "ponteiros opacos".

Mais sobre isso em um próximo post.


# Pegando Fogo

Caloni, 2016-01-14 movies [up] [copy]

Pegando Fogo é um filme de sensações mistas. Em seu roteiro, é simplesinho e clichê. Em sua direção e, principalmente, sua edição, é ágil, dinâmico e tão fluido que quase é possível esquecer sua pouca força na história.

Bradley Cooper é Adam Jones, um chef de cozinha que se tornou notório em Paris há quase dez anos, estragou sua carreira com álcool, drogas e uma obsessão cega pela perfeição (e exclusividade), colecionou inimigos e se isolou em Nova Orleans para uma desintoxicação física e psicológica. O filme começa em seu retorno para a Europa, em Londres, onde pretende reunir uma equipe de sub-chefs baseado mais em critérios técnicos que emocionais, visando entregar para o restaurante do seu amigo o prêmio máximo de uma revista conceituada de críticos gastronômicos.

Essa é toda a premissa que leva John Wells, um produtor/escritor que de vez em quando dirige (Álbum de Família, A Grande Virada), e seu editor, Nick Moore (Uma Manhã Gloriosa , Simplesmente Amor, Um Lugar Chamado Notting Hill), a conquistar o público através de sequências apaixonantes sobre a arte de cozinhar e servir comida. A parte que mais seduz em Pegando Fogo é como a transição entre a cozinha e a ausência de feedbacks diretos dos seus clientes traz uma grande tensão justamente pela responsabilidade total de quem está no comando de fazer os pratos.

Cooper aqui faz seu feijão com arroz já visto em O Lado Bom da Vida, mas que mistura de maneira inteligente com sua performance mais tensa em Sniper Americano. A escolha de seu elenco é uma receita que mistura marketing com bons talentos, embora desperdice a maioria deles (Uma Thurman e Emma Thompson como um time de bastidores?), e transforme alguns mais importantes em clichês pouco interessantes, como a incógnita do personagem de Omar Sy (Intocáveis) e o resto do elenco que não dá para lembrar direito. As exceções ficam por conta de seu par romântico, a mãe solteira Helene, cuja dramaticidade na história Sienna Miller consegue elevar ao mesmo nível de Cooper, apesar do roteiro maniqueísta. Da mesma forma, Riccardo Scamarcio como o rival Max é certeiro em seu temperamento explosivo como o de Adam.

O que não se presta a ficar à altura de seus personagens é o roteiro de Steven Knight, construído em cima da história de Michael Kalesniko. Além de insistir em um joguete bobo envolvendo metáforas divinas, joga palavras nas bocas de seus personagens simplesmente para tornar a história mais palatável (com o perdão do trocadilho) para o público que entrou na sala esperando uma comédia romântica que não necessita de atenção para ser vista; os melhores momentos são surrupiados pela falta de tato de Knight, que revela conclusões óbvias sobre quando há chances dos clientes serem os tais críticos gastronômicos, ou o momento mais "vergonha alheia", quando Max confessa a Adam que sabe que ele é um melhor cozinheiro, sendo que toda a performance de Scamarcio é justamente tornar isso óbvio sem precisar dizê-lo verbalmente.

Ganhando pontos pelos detalhes -- como quando Adam usa azeite para enfeitar um prato, mais de uma hora depois de projeção de quando ele aprendeu isso -- e por não insistir muito no passado misterioso e turbulento do protagonista, apenas pincelando-o sutilmente, Pegando Fogo é um drama tenso que espreme um pouco de humor, mas quando faz isso costuma sair mais suor e lágrimas. Um ótimo passatempo com potencial de ser um pouco mais.


# Templates em C no lugar de macros

Caloni, 2016-01-14 coding [up] [copy]

A grande vantagem dos templates é manter o tipo de seus argumentos. Infelizmente, eles não existem na linguagem C, mas podem ser usados em construções C feitas com a linguagem C++, como ocorre com quem desenvolve device drivers para Windows.

Imagine, por exemplo, a estrutura LIST_ENTRY, que é uma tentativa de generalizar não só o tipo de uma lista ligada, como seu posicionamento:

typedef struct _LIST_ENTRY {
  struct _LIST_ENTRY  *Flink;
  struct _LIST_ENTRY  *Blink;
} LIST_ENTRY, *PLIST_ENTRY;

A lógica por trás de LIST_ENTRY é que esse membro pode ser inserido em qualquer lugar da estrutura que representará um elemento:

Ele pode estar realmente no __meio__ do elemento, pois isso não importa, desde que você saiba voltar para o começo da estrutura. Isso é útil quando um elemento pode fazer parte de diferentes listas.

typedef struct _LIST_ENTRY {
  struct _LIST_ENTRY  *Flink;
  struct _LIST_ENTRY  *Blink;
} LIST_ENTRY, *PLIST_ENTRY;
struct MeuElemento
{
    int x;
    int y;
    LIST_ENTRY entry;
    double d;
    float f;
};
LIST_ENTRY g_head;
int main()
{
    InitializeListHead(&g_head);
}

OK, temos uma lista ligada cujo head está inicializado. Para inserir um novo item, podemos usar as rotinas InsertHeadList, AppendTailList, RemoveEntryList, PushEntryList, PopEntryList, etc. Enfim, uma infinidade de rotinas já cuidam disso para a gente.

O que não temos é como acessar o elemento. Para isso usamos um truque bem peculiar na linguagem C, já disponível também em kernel:

#define CONTAINING_RECORD(address, type, field) \
    ((type *)( \
    (PCHAR)(address) - \
    (ULONG_PTR)(&((type *)0)->field)))

Basicamente a macro obtém a partir do endereço zero o offset do membro que é a entrada da lista ligada e subtrai esse ofsset do endereço do próprio campo, ganhando de brinde o tipo de sua estrutura. Usando a macro com nossa estrutura:

void DoSomething(PLINK_LIST pEntry)
{
    MeuElemento* pElem = CONTAINING_RECORD(pEntry, MeuElemento, entry);
}

Usando template

Note que entry é o nome, literal, do membro na estrutura, e não há maneira possível com templates de obter isso. A solução? Usar um nome padronizado. O resultado final pode ser parecido com este:

template<typename T>
T* ContainingRecord(PLIST_ENTRY pEntry)
{
    return ( reinterpret_cast<T*>( (char*)(pEntry) - (size_t)(&((T*)0)->entry)) );
}

Em ação:

#include <iostream>
using namespace std;
typedef struct _LIST_ENTRY {
  struct _LIST_ENTRY  *Flink;
  struct _LIST_ENTRY  *Blink;
} LIST_ENTRY, *PLIST_ENTRY;
struct MeuElemento
{
    int x;
    int y;
    LIST_ENTRY entry;
    double d;
    float f;
};
LIST_ENTRY g_head;
template<typename T>
T* ContainingRecord(PLIST_ENTRY pEntry)
{
    return ( reinterpret_cast<T*>( (char*)(pEntry) - (size_t)(&((T*)0)->entry)) );
}
int main()
{
    auto newElem = new MeuElemento();
    newElem->x = 42;
    g_head.Flink = &newElem->entry; // inserindo um elemento
    auto elem = ContainingRecord<MeuElemento>(g_head.Flink);
    cout << "X is " << elem->x << endl;
}

"Nossa, tudo isso para substituir uma macro já consagrada no WDK??" Sim, nesse post o objetivo não ficou muito útil. É apenas uma ideia de substituição possível de ser feita em macros em geral. Pode ser bem documentada, usada há 30 anos, mas ainda é uma macro. Meu conselho: se funciona bem, use. Se vai fazer algo novo, tente sempre templates.


# Veludo Azul

Caloni, 2016-01-14 movies [up] [copy]

Esse filme nos deixa a dúvida se ele é doentio ou se apenas reflete a doença no mundo. Não é de hoje que se acredita que violência é um sintoma da necessidade de controle de um indivíduo sobre outro. Muitas vezes isso assume o caráter sexual. E se adicionarmos uma moral nesses ingredientes, religiosa ou não, é óbvio que ela julgará como uma coisa má e perversa.

E há apenas um diretor capaz de falar sobre todas essas coisas e não soar superficial, exagerado ou, pior, desequilibrar a equação entre violência, dominação, sexo, moral e uma certa dose de esoterismo. Esse alguém é David Lynch (Cidade dos Sonhos, O Homem Elefante). Sua narrativa pouco convencional nos entrega uma obra-prima que investiga a fundo a psique humana da curiosidade e explora seus personagens ao máximo.

O herói aqui é Jeffrey Beaumont (Kyle MacLachlan), um inocente e jovem rapaz atraído por sua própria curiosidade mórbida. Após ir visitar seu pai no hospital, encontra por acidente uma orelha humana em um terreno baldio. Ele faz o que deve: entrega à polícia. Porém, a curiosidade vai além e ele tenta obter mais informações do detetive responsável pelo caso (George Dickerson) através de sua doce e ingênua filha Sandy (Laura Dern). São todos moradores do bairro em uma cidade pequena, o que é propício para que casos isolados da polícia aos poucos unam-se em apenas um, que gira em torno de Dorothy Vallens (Isabella Rossellini), uma enigmática cantora que recebe o título de Lady Blue e que está na lista de suspeitos de um assassinato não resolvido.

Logo "Blue Velvet" (Veludo Azul) não só faz parte da inspirada trilha sonora do filme, mas também do repertório e do figurino da cantora. E logo vemos que isso não é coincidência, mas uma relação doentia com uma pessoa violenta. O ritmo do filme é lento e vai sempre revelando mais detalhes, e nos convidando para essa curiosidade mórbida. Mais do que eu falei estragaria as melhores surpresas, mas tenha em mente que o vilão do filme (Dennis Hopper como Frank Booth) é surreal, talvez sobrenatural, e faz parceria de insanidade com Alex de Laranja Mecânica. É como se o vilão de Stanley Kubrick envelhecesse e se tornasse mais explosivo. Não, me corrijo: Frank Booth talvez seja um dos maiores vilões no Cinema, e ele tem um jeito único de te deixar inquieto.

Aqui há um jogo de bem contra o mal, mas também de dominante e dominado, são e insano. Diferente de trabalhos mais abertos do diretor, contudo, este contém uma trama comum e realista, ainda que esse realismo impacte tanto em nossa percepção da realidade que mais lembre um pesadelo. A mão de Lynch é vital para que a estranheza domine. Seus planos possuem uma leveza que não deveria existir, soa errado em nossas cabeças, e quando Lynch passa ao gênero investigativo ele é igualmente exagerado. Utilizando o azul e o vermelho como símbolos em toda a narrativa, o diretor (que também é pintor) realiza trucagens que transportam-nos das cortinas da casa de Dorothy para a casa de shows onde costuma se apresentar. E o veludo, claro, é parte integrante da história.

Amarrando suas pontas de maneira exemplar, temática, narrativa ou até mesmo esotérica, Veludo Azul envelheceu muito bem, e ainda hoje impressiona e choca. Um prato cheio em uma sessão David Lynch. Amo mais ainda esse filme na revisita. A dualidade entre luz e trevas. A estranheza desse universo. As duas músicas que são o tema do bem contra o mal. O elenco envolvido, quase possuído, pelos seus quase arquétipos. É impossível não sentir algo depois que você compra a ideia de mergulhar fundo nos insetos e orelhas dessa vizinhança.


# Perdido em Marte

Caloni, 2016-01-15 movies [up] [copy]

Esse é um filme para nerds e hackers no seu sentido mais puro. Ele envolve pessoas usando todo seu conhecimento para resolver um problema de vida ou morte. Como consequência, é um exemplo do que todo grande cientista faz ao longo de sua carreira, só que espremido em um filme de ação, drama e comédia de pouco mais de duas horas. Ele é intenso e realista; como sci-fi, encontra maneiras criativas de evitar muitos tropeços científicos, e os que comete são pelo bem na narrativa.

Tudo começa em uma tempestade em marte, durante uma missão com humanos. Acreditando que o astronauta Mark Watney (Matt Damon) foi morto em um acidente durante a evacuação do planeta, a tripulação decide abandonar as chances de resgatá-lo. No entanto, Mark está vivo e passa bem, com o detalhe que agora ele possui um mês de suprimentos de sobrevivência, bem menos que os quatro anos de tempo para que uma nova missão tripulada fosse enviada e o salvasse. Matt Damon então mantém seus melhores momentos na primeira meia-hora do filme, mantendo seus registro em vídeo e explicando como decidiu não morrer e irá utilizar todos seus conhecimentos de botânica e ciência para sobreviver o tempo necessário para seu resgate.

Dirigido por Ridley Scott e escrito por Drew Goddard baseado no livro de Andy Weir, Perdido em Marte é um pequeno milagre do gênero. Ao apresentar tantos personagens diferentes interagindo em camadas que partem da mais básica sobrevivência humana (Mark) até os meandros da política internacional (NASA, China) o filme consegue estabelecer a tensão envolvendo pequenas decisões no grande conflito do filme: realizar um resgate de emergência em tempo recorde.

O mais impressionante, contudo, é que nada que acontece no filme é gratuito ou soa forçado. Partindo de sua premissa e desenvolvendo a história em torno, os acontecimentos mais trágicos no dia-a-dia de Mark poderiam muito bem ocorrer, e as decisões de mais alto escalão fazendo sentido do ponto de vista de uma organização que justamente por depender de dinheiro público, precisa ser justificado pela pressão pública. Do ponto de vista dos cientistas, é fascinante acompanhar seus esforços intelectuais em resolver um dos maiores desafios apresentados pela humanidade desde então. Ou pelo menos o desafio com menor tempo para a resposta.

Apresentando-nos uma fotografia absolutamente deslumbrante, o trabalho de Dariusz Wolski (A Travessia) em conjunto com Ridley Scott consegue entregar cenários e transições poéticas do planeta vermelho, o que combinado com a edição de Pietro Scalia se torna um trabalho ambicioso e preciso, unindo dois mundos separados por 750 milhões de quilômetros trabalhando juntos por um objetivo em comum, com um dinamismo e fluidez exemplares.

Conseguindo entregar também um elenco de luxo estabelecendo cada um sua função à sua maneira, Perdido em Marte é um trabalho não apenas tecnicamente perfeito, mas humanamente evocativo. Não se trata de um filme-catástrofe que tenta salvar a Terra de um meteoro que irá atingi-la. É justamente o contrário: toda a humanidade e suas melhores cabeças trabalhando juntos para o resgate de um ser humano perdido em um planeta inóspito. Acho que desde Contato (Zemeckis, 1997) não me sentia tão excitado pela capacidade humana através da ciência.


# Querida, Encolhi as Crianças

Caloni, 2016-01-16 movies [up] [copy]

Os efeitos estão datados, mas nem por isso não funcionam em sua maioria. Rick Moranis está hilário procurando seus filhos com uma lupa sobre seus óculos pendurado no jardim suspenso por uma televisão. Seus vizinhos são malucos em um sentido diferente, mas todos eles possuem um objetivo no roteiro esquemático: juntar novamente a família. O feminismo, quem diria, sempre foi um mote na série.

O primeiro filme, dirigido por Joe Johnston (Capitão América: O Primeiro Vingador, Jumanji) e roteirizado por uma galera, apresenta a família Szalinski. Wayne (Moranis), o pai de família, é um cientista que busca provar que é possível encolher a matéria através de um raio laser, mas enquanto não conseguir a casa estará em um eterno caos. Isso fez com que sua esposa, Amy (Amy O'Neill), tivesse eternos conflitos com ele e seus filhos: o pequeno e adorável Nick (Robert Oliveri), que imita o pai em suas invencionices, e a mais velha, Diane (Marcia Strassman), cuja adolescência já estaria naturalmente complicada não fosse o encolhedor do pai tivesse tornado ela mais complicada ainda.

Os dois filhos da família e os dois filhos do vizinho, que compartilham um drama familiar "pai não respeita os gostos dos filhos", são encolhidos em uma situação turbulenta. A princípio acreditando que eles tenham fugido, mais tarde Wayne descobre a verdade e sai à cata dos pequeninos. Tudo é muito exagerado e exploratório nesse filme que realiza trucagens interessantes, formigas-cachorros e muitos outros conceitos que são uma distração do que até então era uma história padrão.

O fato é que o roteiro escrito a não sei quantas mãos é confuso, deixa diversas pontas abertas e cria situações artificialmente (como os clientes da esposa aparecerem na casa da família para gerar constrangimento). Fora tudo isso, a direção de Johnston entrega um filme divertidinho, simpático e a marca de uma época mais inocente, mas nem tanto: o final dos anos 80.


# Snoopy & Charlie Brown: Peanuts, o Filme

Caloni, 2016-01-17 movies [up] [copy]

O menino tenta empinar sua pipa; sempre sem sucesso; e ele nunca desiste. Passa o tempo. Agora uma pipa empina um homem; que aprendeu que seus maiores valores encontram-se dentro de si mesmo; e ninguém é capaz de tirar isso dele. Entre esses dois estados da natureza de uma pessoa há um filme extraordinariamente depressivo que, ainda assim, pode e deve ser considerado infantil. Ele evoca a criança deprimida e tímida dentro de cada um de nós; sejam ainda crianças ou já crescidas. Incertos a respeito dos outros, de todos os outros que com nós habitam essa realidade, esse mundo sempre será essa eterna sala de aula. Gostaríamos de sermos aceitos para que conseguíssemos ter um pouco de autoestima. Não é pedir muito: "Se pelo menos, uma vez apenas, eu conseguisse empinar essa pipa..."

Esse não é o primeiro longa-metragem com os personagens de Peanuts, ou Snoopy, a criação do cartunista Charles M. Schulz que depois virou desenho animado. No entanto, esse filme tem um toque especial que o difere dos outros. Ele é roteirizado por Craig Schulz, filho de Charles, e Bryan Schulz, seu neto. Ambos capturaram a essência dos personagens e situações criados por seu pai/avô e emolduraram em torno de uma homenagem que a atualiza, engrandece e expande, conseguindo no processo, espero, se tornar referência para essa geração.

Além da história estar em família, outra mudança significativa é que houve uma pequena atualização na versão 2D dos desenhos. A percepção é mista: o "mise-en-scene" (como dispor os personagens e objetos em cena em um filme) continua 2D, mas a textura e a presença de pequenos detalhes são 3D -- como o penteado de Charlie Brown, o protagonista do filme, que muda de lado dependendo do ângulo de seu rosto que estamos vendo. Além do mais, sequências de ação, como os voos de Snoopy, o cão imaginativo de Charlie, possuem ambas as perspectivas e parecem se beneficiar de ambos. Se por um lado a visão bidimensional cria lindos cartões postais do horizonte em que Snoopy sobrevoa, a noção de profundidade melhora nossa visão geográfica.

Porém, as técnicas usadas no filme são interessante, mas estão longe de ser o melhor no filme. Suas maiores virtudes residem, felizmente, em seus personagens, que estão fiéis ao conteúdo original, seja em suas piadas ou em seus dramas. Toda a história gira em torno da eterna história central: a luta de um menino tímido e depressivo em resgatar sua autoestima demonstrando que ele tem talentos que comprovam seu valor. Aliado a isso, temos seu alter-ego, Snoopy (tão bem demonstrado em uma transição onde os rosto de ambos se fundem), cheio de vida e imaginação. A imaginação de Snoopy, no fundo, é o que une todos aqueles personagens, ou pelo menos dá o ar da vida a cada um deles. A interação dos outros personagens com Charlie Brown é o que demonstra seu conflito interno de maneira mais cômica, mas para o drama, o verdadeiro dilema filosófico, escutamos seu eu interior bolar os seus planos mirabolantes que tentam a todo custo elevar seu ego. Isso soa familiar para um adulto?

O roteiro escrito a seis mãos consegue unir os pequenos dramas dos outros personagens em um mosaico que descreve com perfeição uma sala de aula que ambiciona com todas as forças se tornar de adultos. O que divide crianças e adultos no filme é que conseguimos entender as crianças. Os adultos, esse som inaudível, nunca são relevantes. O sonho das crianças é se comportarem e se tornarem adultos, mas enquanto forem crianças sonhadoras o mundo estará a salvo. (É quando a realidade cínica do dia-a-dia bate à porta que tudo se esvai.)

A Garotinha Ruiva (é assim que ela é chamada), responsável pela paixonite de Charlie, e sempre nos cartoons praticamente invisível (nunca a vemos diretamente), aqui recebe o tratamento adequado, e de fato não a vemos por completo quase todo o filme ou sempre de relance, de lado e, o mais comum, apenas seus cabelos, quase que homenageando sua representação original. Porém, aos poucos algo muda nesses personagens, tanto em Charlie quanto nela, e ambos começam a se mover nessa jornada de auto-descoberta que parece nunca mudar. Com isso se tornam mais reais. Charlie arrisca mais, e recebe resultados, queira ou não. Mas isso não interessa. É sua vontade de conseguir e sua persistência inabalável dentro de sua estrutura de garoto desastrado que sintetiza sua realidade. O grande trunfo do roteiro da família Schulz é entender, como nós sempre entendemos, em nosso subconsciente, que o objetivo de Charlie é o da auto-descoberta.

E mesmo que o final seja controverso em flertar com o paradoxo eterno na obra de Schulz, ele já é esperado ao longo da aventura porque no fundo as coisas já mudaram. Não se preocupe, não vou estragar a surpresa, e ela nunca vem como a gente espera. Para Charlie, o caminho percorrido foram dignos de um romance épico, tal como Guerra e Paz. Para a criança que assiste, tudo não passou de diversão embalada em sentimentos que muitos compartilham. Para o adulto com coração de criança, ele entendeu muito bem quando o menino empina a pipa e quanto o homem se deixa levar pela pipa que o leva: tudo que poderia ser feito foi feito. Esse é o limite do homem, e o que define seu caráter é o que já foi feito.


# A resolução do bitcoin

Caloni, 2016-01-18 [up] [copy]

Recentemente está havendo fuxicos sobre o último texto de Mike Hearn, um dos desenvolvedores do projeto "Bitcoin Core", que desenha o comportamento da blockchain e acessórios. Nele Mike, que está sendo já há um tempo crítico das mudanças que tem ocorrido no projeto (incluindo um fork pra lá de controverso), pondera sobre o que pode ser o início do fim do experimento bitcoin, graças perifericamente à mudança mais estúpida já feita talvez no projeto, o RBF (replace by fee), que distorce completamente a visão original do paper do Satoshi, criador do Bitcoin, mas principalmente ao já conhecido controle massivo dos servidores atrás do Grande Firewall da China. O detalhe é que nem um nem outro acontecimento deveria se tornar decisivo para o futuro do Bitcoin, cujo teor é ser descentralizado "by design". Porém, quando as questões técnicas caem no colo dos humanos, eles tendem como primatas a jogar merda para tudo que é bom e moral.

Meus amigos já sabem que considero a criação de moedas digitais um próximo passo prá lá de grande em direção a um mundo mais justo e livre, principalmente das amarras de um sistema jurássico de controle coercitivo de indivíduos chamado Estado ou governo. Falo especificamente do bitcoin, o mais famoso e o mais popular das moedas digitais. Portanto, não deixa de ser um baque entender como esses projetos poderão sucumbir mais cedo ou mais tarde ao mundo real.

De qualquer forma, como costumo dizer, serão anos interessantes no reino das criptomoedas e na economia em geral. Com isso, não quero dizer necessariamente que elas irão dominar o sistema financeiro e em breve veremos o fim do dinheiro estatal. Pode querer dizer isso, o que seria ótimo. No entanto, pode também querer dizer, como estamos presenciando hoje, que teremos dados mais concretos dos motivos por trás de por que moedas digitais são impossíveis de escalar no nível tecnológico atual. O mais provável IMHO é que no futuro vejamos algo no meio entre esses dois extremos. Mas não exatamente no meio =)

Por enquanto, resta seguir se informando sobre como o projeto do bitcoin vai evoluindo, e como as moedas alternativas, criadas ou a ser criadas, vão se adaptando a essas notícias. Uma boa fonte de conhecimento sempre é o Hacker News, que contém os links direto ao ponto e os comentários de pessoas geralmente com algo a acrescentar. Diferente de mim, mero curioso de plantão.


# Lawrence da Arábia

Caloni, 2016-01-18 movies [up] [copy]

Nota: O filme que estou me referindo é a versão restaurada por Robert A. Harris com a supervisão do diretor David Lean, em 1989. Ela exclui alguns diálogos e, se formos considerar o tamanho da versão original, creio que podemos descartar as menores diferenças entre as duas. Além disso, essa versão também recebeu um tratamento de restauração para ser lançada em DVD em 2000 por Martin Scorsese e Steven Spielberg. Scorsese, como se sabe, é um ávido militante pela restauração de obras clássicas do Cinema e mantém um acervo digital inestimável.

Em primeiro lugar, não se assuste com a metragem desse filme. Uma orquestra inicial sem imagens, um intervalo (também com trilha sem imagens) e um final semelhante compõem cerca de 3 horas e três quartos de hora de projeção. Porém, há um imenso hiato no tempo histórico que é demonstrado com perfeição em seu ritmo, sem contar o hiato emocional que o protagonista vive. Por conta disso e das inúmeras cenas de batalhas e discussões militares que vão em um crescendo constante, o resultado final é uma história compacta para momentos importantes demais na história do mundo, um épico se criando em cima de fatos históricos romantizados em torno de um herói tão carismático quanto enigmático.

Peter O'Toole é o ator em total destaque como Thomas Edward Lawrence, um arqueólogo, oficial militar e diplomata britânico, que de fato existiu. Porém, mais importante, Lawrence protagonizou os movimentos que culminaram na Revolta Árabe em plena Primeira Grande Guerra. A performance de O'Toole está no mínimo à altura dos feitos da figura histórica, e sua romantização cria um dos personagens mais fascinantes da história do Cinema.

Além disso, ele é auxiliado por um batalhão de estrelas propícias para o desafio de encarnarem figuras históricas que ajudaram a enriquecer o filme em termos de dramatização: Alec Guinness como Príncipe Feisal, Anthony Quinn como o enérgico e divertido Auda Abu Tayi, líder da tribo dos Howeitat, Jack Hawkins como o polivalente General Allenby, Omar Sharif como o xerife Ali, braço-direito do Príncipe e melhor amigo de Lawrence. Todos contribuem para o crescimento emocional da experiência de estar entre as tribos árabes do primeiro quarto do século 20, lutando contra a supremacia Turca em territórios quase que inabitados, em desertos sem fim.

Porém, mais do que isso, é preciso ressaltar a gigantesca trilha sonora de Maurice Jarre, que repete seu tema infinitamente, e mesmo assim é única de tantas formas distintas. Sub-temas são criados no decorrer da narrativa, e logo percebemos que o conjunto emocional da obra é indissociável dos momentos em que a trilha acompanha cada momento da história. Se torna aos poucos um hino, não só da experiência árabe de Lawrence, mas de toda experiência de guerra e como ela desumaniza o homem.

Também é necessário ressaltar a fotografia de Freddie Young, e cujo resultado atual não deve fazer justiça ao feito da época. A restauração deixa algumas cenas pouco coerentes, mas talvez o resultado hoje tenha se transformado quase em um documentário de uma época remota, e portanto ainda tem seu valor artístico.

Lawrence da Arábia é um filme que trata de emoções humanas dentro da guerra, da história maior que homens, e dentro do jogo sujo político. O filme adentra de maneira universal nos sentimentos, mas está bem localizado no tempo e espaço. Aos poucos entendemos o funcionamento das tribos árabes àquela época, e isso é vital para acompanharmos a evolução da campanha britânica naquele solo desértico, a resistência turca e a função de Lawrence em unir o povo árabe em torno de um objetivo comum, mesmo que para Lawrence, e portanto, para nós, nunca pareça haver um objetivo traçado em sua mente. Ele vai aos poucos se desdobrando, mas nunca conseguimos antever o que acontecerá em seguida, porque o personagem é por demais enigmático, e cada novo desfecho desfere resultados catárticos em sua persona.

Dirigido por David Lean como um épico grandioso, esqueça a digitalização de exércitos impossivelmente grandes, como em Senhor dos Anéis. Aqui tudo é feito como nos velhos tempos, porque estamos nos velhos tempos: dezenas a centenas de extras compõem um cenário de batalha em pleno deserto, montando camelos e cavalos, disparando bombas, erguendo espadas, e vestindo um figurino impecavelmente articulado da época e da região.

Lawrence da Arábia parte de uma história simples que se desenrola em texturas complexas a respeito da essência humana em frente ao horror da guerra. Estabelece seus vilões mais como a situação do momento do que aquelas pessoas confortavelmente alojadas, jogando squash e bilhar, e evitando tomar a responsabilidade de ações que ainda não se desdobraram. É um exemplar raro de roteiro de filme de guerra que consegue trabalhar tanto nos níveis macro quanto nos mais íntimos. É a guerra interna que a humanidade anseia por desenvolver horrivelmente no século 20.


# Uma Cilada para Roger Rabbit

Caloni, 2016-01-19 movies [up] [copy]

Um filme de 1988 que conseguiu unir desenhos com live action de uma maneira que até hoje não parece datado. Sua grande sacada é já fazer um filme de época, a Hollywood da década de 40, e embutir todos os desenhos icônicos em um longa-metragem que é usado apenas para realizar essa façanha, mas que em si possui um roteiro com uma trama inteligente por utilizar a própria fusão do mundo dos desenhos e dos humanos.

Seu herói é Roger Rabbit (Charles Fleischer), um coelho que foi criado para o filme e que atua em um desenho animado em Hollywood. Sim, os desenhos atuam em... desenhos. Quando seu produtor contrata o detetive Eddie Valiant (Bob Hoskins) para descobrir se a mulher de Roger o está traindo, a voluptuosa Jessica Rabbit (cuja modelo de corpo foi Betsy Brantley), uma rede de intrigas se forma quando Marvin Acme (Stubby Kaye), dono dos projetos que envolvem os desenhos, é assassinado. Perseguido como principal suspeito pelo Juiz Final (Christopher Lloyd) e sua gangue de fuinhas, Roger agora precisa provar sua inocência e reaver o suposto testamento que Acme teria escrito, deixando a terra dos desenhos para os próprios desenhos.

Pela premissa do filme já é possível imaginar que o diretor Robert Zemeckis (De Volta para o Futuro) abraçou o projeto de unir desenhos e pessoas de todas as formas possíveis, nunca se furtando em perceber o absurdo daquela realidade. Com isso, torna tudo muito mais crível, em um mundo onde todos consideram a existência de desenhos na vida real um fato consumado. Ao ver as sequências em que desenhos e humanos interagem chega a ser ainda impressionante, e isso 27 anos depois. Você acredita de fato que os desenhos fazem parte daquela realidade fantástica. Boa parte dessa crença também provêm dos próprios personagens humanos, que possuem um ar de desenho em sua forma de agir, o que pode ser explicado pelo próprio convívio com tantos desenhos.

A direção ágil de Zemeckis não nos dá tempo de ficar pensando nos detalhes de logística de como seus efeitos são possíveis. Em vez disso, focando em sua trama e a levando em ritmo acelerado em um clima de eterna urgência, conhecemos o mundo dos desenhos, como eles funcionam, se podem morrer, se podem matar, e, o mais importante, qual é a sua moral. A resposta é simples: fazer rir.

Conseguindo unir figuras tão absurdas e ainda colocar um drama de filme "noir", cujo ótimo Bob Hoskins é protagonista, além de apresentar a estonteante Jéssica Rabbit, um feito e tanto para a época, Uma Cilada Para Roger Rabbit pode ainda ser acusado de ingênuo e infantil, o que é ótimo que o seja. Quer dizer que o projeto de unir adultos e desenhos funcionou em seu máximo.


# Ponte dos Espiões

Caloni, 2016-01-20 movies [up] [copy]

Esse é um filme que carrega um conteúdo emocional graças ao seu diretor, mas uma história que é obviamente 100% sobre política. É sobre tempos mais sombrios do que os de hoje, a Guerra Fria, quando ignorar política poderia te levar à morte, seja ela física ou pública. Ser baseada em uma história real apenas eleva o roteiro a uma das melhores adaptações do ano.

Acompanhamos a captura e o julgamento de Rudolf Abel (Mark Rylance), acusado de ser um espião russo. Para sua defesa foi escolhido James B. Donovan (Tom Hanks), um advogado especializado em seguros. Seu discurso inicial, conversando com outro advogado, é um gancho propício que merece ser discutido. Donovan tenta argumentar que em um acidente envolvendo seu cliente, que atropelou cinco ciclistas, houve apenas um evento, e que o preço do seguro, portanto, é equivalente a um único prêmio. Apesar de, do ponto de vista dos cinco atropelados, cada evento ser independente, a defesa de Donovan é de que, se um furacão leva sua casa inteira, não há seguro sobre cada um de seus móveis dentro dela.

É uma defesa boba, que nos apresenta alguém que enxerga o mundo de maneira técnica, e cujas leis e regras são -- supressa! -- para serem seguidas. Quando ele encontra, portanto, uma massa de ufanistas americanos querendo eletrocutar o réu russo simplesmente por ele ter feito seu trabalho para seu país, sacrificando valores que teoricamente estariam acima de todos, como uma tal Constituição, temos um conflito que não apenas escancara a máscara de ódio contra indivíduos das democracias, como revela como as leis de um país lhe são convenientes apenas conforme estejam dentro dos seus propósitos. No entanto, se olharmos mais de perto, essa situação também nos submete sutilmente a uma referência igualmente pertinente: executar bem o seu trabalho não era a defesa usada pelos soldados nazistas que matavam judeus? Deveria a repulsa à morte de inocentes, e o julgamento de seus responsáveis, ser direcionada apenas aos que puxam o gatilho e os que enviam a ordem abaixo, ou também a figuras mais indiretas, como espiões, cuja informação pode ou não ser usada para o mesmo fim?

Não por acaso, a primeira metade do filme é a melhor, pois apresenta tantos conflitos, cujas soluções estão longe de ser simples, e cujos lados não estão limitados a dois, que ela serve como uma micro-história dentro de algo maior. E o algo maior surge logo depois, quando, depois de uma reviravolta que pode ser chamada de golpe de sorte apenas aos que não analisam probabilidades (ou seja, todos menos Donavan), todos os elementos e personagens construídos até então servem de gancho para uma nova história envolvendo a troca de prisioneiros de uma guerra não-declarada entre três países, dentre eles nada menos que dois estão do outro lado do muro de uma revolução comunista.

Apresentando um Tom Hanks como sempre competente em criar personagens carismáticos e olhos do grande público, é Mark Rylance que rouba em seus relativos poucos momentos a graça do filme, ao expor um espião tão meticuloso que seus menores movimentos que ser espião parece ser algo que já nasceu com ele, em seu DNA, rivalizando com Gary Oldman em O Espião que Sabia Demais, e cujas falas são ditas da maneira mais sóbria e carismática possível. É impossível não se deixar levar por sua história do homem que se mantém de pé.

Steven Spielberg, o diretor, já está acostumado a trabalhar em filmes históricos que evocam grandeza de suas tomadas enquadráveis, claro que com a ajuda de seu fotógrafo-mestre, Janusz Kaminski, que utiliza a contraluz em um momento em uma ponte cheia de neve que cria vultos tão poéticos que rivalizam com a sequência que Donavan conversa com o contato da embaixada russa a respeito de fazerem o que é certo antes que os dois países tomem a última decisão errada.

O trabalho de Spielberg se eleva também com o roteiro de Matt Charman e os irmãos Coen (Um Homem Sério, Fargo), pois cria um filme de ideias ambiciosas com uma narrativa inteligente que une diferentes situações nas duas metades do filme, incluindo as falas ("você não se preocupa?", "isso ajudaria?"), mas, principalmente, as transições. Em um determinado momento no tribunal, quando se pede que as pessoas se sentem, vemos alunos de uma escola se levantarem e fazerem o juramento da bandeira americana. Ao mesmo tempo, o desenrolar em paralelo da história do piloto Francis Gary Powers (Austin Stowell) é inteligente em nunca ameaçar parar em demasiado o processo que acontece com o espião russo, mas ao mesmo tempo contrair o movimento de polarização e autoritarismo que ocorre de ambos os lados.

Concluindo de uma maneira insatisfatória, mas à maneira de Spielberg de contaminar seus filmes com finais felizes, clichês e igualmente ufanistas (com exceção talvez do excepcional Munique), Ponte dos Espiões pode com certeza figurar na cinematografia do diretor como um dos trabalhos sérios que tentam dialogar sobre questões sérias, mas que recebem de brinde o calor que só filmes "Spielberguianos" conseguem gerar. Mesmo que a ação seja em um cenário tão gelado que todos em voltam pegam resfriados a cada cinco minutos.


# Log de chamadas API direto do WinDbg

Caloni, 2016-01-21 coding [up] [copy]

muito tempo atrás eu havia falado sobre como a ferramenta logger.exe, do Debugging Tools for Windows, poderia ser usada para gerar um arquivo de log com centenas de APIs detalhadas em sua chamada, como parâmetros de entrada, retorno e tempo. Bom, testando isso hoje, me veio à lembrança o artigo e também a constatação que o logger é muito instável. Tão instável que não consegui logar as APIs que desejava nas inúmeras tentativas que fiz. Isso em um Windows XP!

Felizmente, as funções do logger também estão em uma DLL estilo plugin do próprio WinDbg, que pode ser chamada facilmente e que -- surpresa! -- internamente ao depurador funciona. Melhor ainda, não é necessário criar um processo para realizar o log, mas pode ser atachado em um processo já em execução, o que facilita bastante seu uso em serviços, por exemplo.

Vamos testar aqui o log da nossa cobaia de plantão, o amigo Notepad (ou Bloco de Notas), exibindo um texto que demonstra com perfeição uma das minhas características mais bizarras: confundir expressões e frases prontas.

_Nota: Lembrando que estaremos testando em Windows XP 32 bits com um WinDbg igualmente 32 bits. Inicialmente comecei a testar a versão 64, mas ela também deu xabu. Aparentemente coisas periféricas do Debugging Tools nunca são muito bem testadas._

O texto ainda não foi salvo em nenhum arquivo. Iremos salvá-lo, mas antes, vamos executar o WinDbg e ver como o Notepad realiza essa operação.

A extensão/plugin que me referia é o Logexts.dll. Você pode instalar o log de API em um momento, habilitá-lo em outro, e até desabilitá-lo depois. Ou seja, é um processo ótimo para realizar inspeção pontual de chamadas API. Caso, claro, ele não exploda em um desses momentos.

(9c4.f04): Break instruction exception - code 80000003 (first chance)
eax=7ffd9000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005
eip=7c90120e esp=003bffcc ebp=003bfff4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for 
C:\WINDOWS\system32\ntdll.dll - 
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:001> !logexts.logi 
Windows API Logging Extensions  v3.01
Parsing the manifest files...
Location: C:\Temp\DbgTools(x86)\winext\manifest\main.h
   Parsing file "main.h" ...
   Parsing file "winerror.h" ...
   Parsing file "kernel32.h" ...
   ...
   Parsing file "dsound.h" ...
Parsing completed.
Logexts injected. Output: "C:\Documents and Settings..."
0:001> g
ModLoad: 50000000 50056000   C:\Temp\DbgTools(x86)\winext\logexts.dll
Parsing the manifest files...
Location: C:\Temp\DbgTools(x86)\winext\manifest\main.h
   Parsing file "main.h" ...
   Parsing file "winerror.h" ...
   Parsing file "kernel32.h" ...
   ...
   Parsing file "dsound.h" ...
Parsing completed.
(9c4.664): Break instruction exception - code 80000003 (first chance)
eax=7ffd9000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005
eip=7c90120e esp=003bffcc ebp=003bfff4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:001> !logexts.loge
Logging already initialized. Output "C:\Documents and Settings\..."
Logging enabled.
0:001> g
ModLoad: 77b40000 77b62000   C:\WINDOWS\system32\appHelp.dll
ModLoad: 76fd0000 7704f000   C:\WINDOWS\system32\CLBCATQ.DLL
...
(9c4.41c): Break instruction exception - code 80000003 (first chance)
eax=7ffd9000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005
eip=7c90120e esp=00f1ffcc ebp=00f1fff4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:004> !logexts.logd
Logging disabled.
0:004> .detach
Detached

Depois de gerarmos o que precisamos, podemos desatachar do processo e analisar o resultado: **um arquivo LGV**. Para abrir esse arquivo existe uma outra ferramenta chamada **logviewer**.

Para evitar procurar em dezenas de milhares de chamadas, há uma opção de filtrar com apenas o que queremos (no caso, CreateFile e WriteFile):

Depois de filtrado, podemos abrir a linha que nos interessa para ver como o programa utilizou a API (quais parâmetros, o retorno, etc).

Note, por exemplo, que houve uma falha antes na abertura do mesmo arquivo, mas isso porque houve uma tentativa de abrir um arquivo que já existe (abertura com direito de apenas leitura). Essa chamada foi feita pela DLL do diálogo comum de abertura/salvamento de arquivo do Windows (**comdlg32.dll**), e não pelo **notepad.exe**.

Como já havia dito no artigo original sobre o logview, você pode criar seu próprio header com as definições das funções de um módulo e o WinDbg graciosamente irá gerar um log de chamadas, incluindo medidas de performance. Esses dados abertos pelo logviewer podem ser exportados também para modo texto. E temos mais uma maneira de perfcounter chulé para eventualidades.


# M, O Vampiro de Dusseldorf

Caloni, 2016-01-21 movies [up] [copy]

Esse é um filme que explora a moral de um assassino de uma maneira tão absurda e dúbia quanto seus momentos cômicos. O expressionismo de Fritz Lang (e o alemão) colaboram para um filme hoje engraçado em alguns momentos, quando uma pessoa segura um fósforo aceso na mão à espera de uma resposta, mas hipertensos em outros, quando os argumentos de um inesperado advogado de defesa revelam uma relativização perigosa da ação e liberdade humanas, e uma discussão sobre direitos igualmente fascinante.

A história é simples: um assassino de crianças está à solta. Toda a população fica em pavorosa, os policiais não fazem outra coisa senão tentar encontrar provas, e até os criminosos se reúnem para resolver esse caso de uma vez por todas e tornar seus "negócios" mais tranquilos, sem a polícia atrapalhando todo dia. Há um momento especialmente inspirado no filme em que uma reunião de uma gangue influente na região e os responsáveis pela segurança da cidade ocorre em paralelo, e é onde a edição de Paul Falkenberg brilha, e onde o argumento moral de Fritz Lang começa a dar seus ecos de que há algo de errado quando a lei e o crime "se unem" para resolver um problema.

Criando quadros que exalam o expressionismo alemão, aquele momento na sétima arte onde a perspectiva dos cenários é exagerada, assim como as expressões dos personagens e o uso cartunista da luz, vemos o comissário do departamento de homicídios de baixo para cima, mais precisamente de baixo da mesa de seu gabinete. Vemos os policiais varrendo as ruas como cerdas de uma vassoura implacável. O uso do som (e da ausência dele) é evidenciada neste que é um dos filmes da safra dos primeiros anos em que filmes falados começavam a se tornar viáveis tecnicamente. Os atores, aparentemente improvisados, são pontuais em suas atuações, o que torna cada fala e momento poderosa em sua função dentro do filme. Até uma pequena fala de um cego vendedor de balões ecoa como uma profecia solene. E dentro das sequências, o que dizer do "resgate" no prédio, um momento vital e intrincado, cuja lógica espacial e temporal é usada para demonstrar como a tensão consegue ser construída pela passagem do tempo em lugares diferentes.

Porém, tudo isso, por mais fascinante que seja, empalidece diante de um tribunal improvisado e falas (ou gritos) que evocam uma relativização dos atos que soa até profético se compararmos a evolução da Alemanha pós-Primeira Guerra e que vai aos poucos erguendo, das cinzas e da humilhação de seu povo, um movimento extremista onde tudo parece ser válido. Uma discussão que coloca no mesmo patamar o assassinato de crianças comparado com o vício em jogos, bebidas e prostituição não poderia ser levado a sério, não estivéssemos ou em uma roda de comunistas discutindo moral ou em um filme de Fritz Lang, que até hoje, leva seus espectadores em um debate mental acirrado a cada novo diálogo.

Mais um dos filmes restaurados por organizações empenhadas em desencavar grandes clássicos das primeiras fases do Cinema, Fritz Lang é um diretor tão inventivo e genial quanto azarado. Tanto seu grande clássico, Metrópolis, que ficou perdido por décadas, quanto este "M", são filmes que não existiriam mais, não fosse a obstinação de cinéfilos preocupados com a sétima arte e seu legado. Graças a essas pessoas temos a chance de presenciar como o Cinema já era grande como arte em tão pouco tempo.


# Hancock

Caloni, 2016-01-22 movies [up] [copy]

Imagine que existe um super-herói que não gosta que lhe chamem de "asshole" (idiota na legenda brasileira, mas em inglês um xingamento que remete ao orifício anal). A maneira mais comum dele ameaçar quem lhe incomoda é enfiar a cabeça de um no orifício anal do outro. Achou engraçado? Se sim, esse é um filme de ação que você não pode perder. Se não, então talvez seja melhor assistir um filme da Marvel menos pretensioso (já viu Guardiões da Galáxia?).

O que poderia muito bem ser um projeto de Adam Sandler (desconfio que ele esteja envolvido de alguma forma) acaba ganhando alguém com um ego maior ainda: Will Smith. Fala sério: você já imaginava que isso iria acontecer, mais cedo ou mais tarde. Smith, acostumado a papéis em que ele se sacrifica pelos outros e possui uma culpa incomensurável (Sete Vidas), agora em sua versão com o sub-gênero mais popular atualmente.

Um herói desajustado que vive bebendo, combate o crime e salva pessoas quase como um efeito da inércia, de tantas pessoas pedirem por isso, Hancock é odiado pela população de Los Angeles, pois suas atuações quase sempre custam muito caro à cidade e aos cofres públicos. Ao salvar uma pessoa presa dentro de um carro no trilho do trem, ele simplesmente vira o carro em cima de outro, parando o trem no processo e descarrilhando todos os vagões. Incompetente? Nem tanto. Parece mais o desleixo de quem não se importa.

Quem também parece que não se importa, agindo na inércia de sua atuação todo o tempo, é Will Smith. Fazendo sempre a mesma expressão de quem anda por outro mundo desiludido (e continua com a mesma expressão mesmo depois que o "arco" de seu personagem tenha concluído), Smith não parece interessado no projeto que lhe dá super-poderes. Talvez porque ele já acredite possuir poderes na vida real, o de, assim como Adam Sandler, lotar as salas de cinema onde passam seus filmes mais desinteressantes (e não tenho em mente As Loucas Aventuras de James West, que chega a ser divertido de tão ruim).

A boa notícia do filme parece ser a presença de Charlize Theron, que comanda uma reviravolta já prevista desde o primeiro momento em que aparece em cena. Sua personagem parece ser a única que possui um fiapo de história para envolver o espectador, já que seu marido no filme, Jason Bateman, faz o papel mais inglório em filme de super-heróis: o do herói do cotidiano, cidadão comum, que tenta vender a ideia para as empresas de que se derem as coisas de graça para os que mais necessitam farão publicidade positiva para seus clientes, salvando o mundo. Awww...

Com um roteiro padrão do sub-gênero de filme de herói (de um tal Vincent Ngo e... Vince Gilligan??), que parece estar de fato criando um filme de origem, com vilão e tudo mais, o diretor Peter Berg se esquece da própria irrelevância do projeto e filma sempre com a câmera na mão um filme que é basicamente uma comédia, dando a impressão que não entendeu a proposta, criando um ar documental em cenas que não possuem qualquer ar realista (ainda mais com os sofríveis efeitos digitais).

Tendo talvez a gota d'água em uma ou duas referências nada sutis a Superman (sim, uma delas é a música-tema), Hancock apenas não afunda ainda mais por ser curto, tornando toda a experiência rápida demais para que o "épico" se concretize. Hancock salva o dia mais uma vez. Will Smith, não.


# Exportando repositórios antigos do Bazaar para Git

Caloni, 2016-01-27 coding [up] [copy]

Enquanto estudava sobre controle de fontes distribuído, experimentei e usei os projetos Mercurial e Bazaar, precursores desse modelo que funcionavam bem em Windows. Havia o Git, mas por conta da sua evolução assimétrica, o ambiente da Microsoft havia ficado para trás.

Hoje com o Git sendo praticamente o _mainstream_ das conversões do SubVersion, e funcionando razoavelmente bem em ambientes Windows (64 ou 32), sobraram apenas os repositórios do Mercurial e do Bazaar. Na verdade, mais do Bazaar, pois eu havia migrado já do Hg pelo Bazaar possuir algo que hoje o Git emula, mas antes era um diferencial no projeto da Canonical: detecção de rename completo (com histórico e tudo). Isso para refatoração era vital, e suporte à refatoração pesada era o que eu precisava no momento.

Agora é hora de manter esse histórico vivo, mas convertido para o que todos usam.

A migração

A primeira coisa a ser feita é converter o repositório. Depois de convertido, como todas as operações estarão no universo Git, há uma de entradas no StackOverflow para nos ajudar a reunir os repositórios em um só, meu objetivo, já que o Git é mais leve e mais versátil nesse quesito.

No Windows, nas últimas versões do Bazaar o comando fast-export não estava mais funcionando. Parado desde 2012, não há previsão de correções. No entanto, para essa operação, a versão 2.4.2 atendeu bem. O comando é um pouco diferente, mas ele é rápido e rodou sem problemas em conjunto com o fast-import do Git.

git init
bzr fast-export --plain . | git fast-import
12:03:59 Calculating the revisions to include ...
12:03:59 Starting export of 2681 revisions ...
12:04:05 Skipping empty dir Tools/Desenv in rev 
12:04:05 Skipping empty dir Tools/Desenv in rev
12:04:45 1000/2681 commits exported at 1308/minute
12:05:12 2000/2681 commits exported at 1642/minute
12:05:59 WARNING: not creating tag u'1.09' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.50' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.51' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.49' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.48' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.45' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.47' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.46' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.40' pointing to non-existent revision 
12:05:59 WARNING: not creating tag u'1.39' pointing to non-existent revision 
12:05:59 Exported 2681 revisions in 0:02:00
C:\PROGRAM FILES (X86)\GIT\libexec\git-core\git-fast-import.exe statistics:
---------------------------------------------------------------------
Alloc'd objects:      35000
Total objects:        33979 (      9714 duplicates                  )
      blobs  :        15604 (      6833 duplicates       7747 deltas of      15389 attempts)
      trees  :        15694 (      2881 duplicates      12881 deltas of      14635 attempts)
      commits:         2681 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:          98 (         1 loads     )
      marks:        1048576 (      2681 unique    )
      atoms:           4549
Memory total:          3567 KiB
       pools:          2200 KiB
     objects:          1367 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =      65536
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =      22324
pack_report: pack_mmap_calls          =      10353
pack_report: pack_open_windows        =          4 /          6
pack_report: pack_mapped              =  101069594 /  163170978
---------------------------------------------------------------------

É óbvio que nem tudo serão mil maravilhas. Eu, por exemplo, encontrei um problema com case-sensitive que me deu algumas dores de cabeça:

fatal: Path Something/Resource.h not in branch
fast-import: dumping crash report to .git/fast_import_crash_676
bzr: broken pipe

O Git gera um arquivo de report onde estão as informações do ocorrido. Uma forma de contornar esse tipo de problema é primeiro exportar para um arquivo e editá-lo (corrigindo o case, por exemplo):

bzr fast-export --plain . > plain-export.txt
gvim fast-export.txt
hack hack hack
type fast-export.txt | git fast-import

_Note que talvez você precise de um editor que suporte arquivos gigantescos (como o Vim) e precise se debruçar sobre merges com arquivos com mesmo nome e diferentes cases. Isso que dá manter projetos com refactoring pesado._

Por fim, faça a conversão para todos os .bzr que tiver e haverá um .git com todo o histórico desses anos usando Bazaar. O próximo passo é montar o histórico de todos eles em apenas um repositório (se assim desejar). Segue uma série de comandos que pode ajudar para usar em uma batch:

@echo off
git remote add -f bzr ..\PathToOldConvertedRepo\%1
git merge bzr/master
git remote remove bzr
mkdir Archive\%1
echo Mova os arquivos importados
pause
git add --all
git ci -m "Archiving old Bazaar repo (%1)."

Você pode chamar um a um em cima de um repo novo:

mkdir NewRepo
cd NewRepo
git init
..\MyMergeBatch.bat OldRepoName
..\MyMergeBatch.bat OldRepoName2
..\MyMergeBatch.bat OldRepoName3

Para conseguir ter acesso ao histórico dos arquivos movidos, basta usar a opção -all do log:

git log --all -- MyRemovedPath

Update

Tive alguns problemas em rastrear o histórico utilizando a estratégia de fazer merge no mesmo branch. A solução que encontrei, embora não exatamente direta, foi realizar os merges em branches apartados primeiro, mover os arquivos (de preferência, usando o git, para que ele detecte o rename), aplicar o commit e realizar o merge com o master. Há uma vantagem nessa estratégia, além do log --follow funcionar melhor: mantenha os branches originais, além do ponteiro para remote. Dessa forma, depois de alguns anos, saberá de onde veio esse merge maluco.

Update2

Depois de um tempo testando essa técnica, descobri que o Git se perde novamente e não encontra mais todos os logs, mesmo com --follow mesmo movendo os arquivos. O meu problema está relacionado com mesmos paths dos arquivos em repositórios diferentes. Paciência.


# Não Atualize seu Sistema

Caloni, 2016-01-28 [up] [copy]

De quem é o interesse que você atualize constantemente seu sistema? Muito provavelmente não é seu. Sistemas -- operacionais ou não -- costumam ser escritos por programadores, que não fogem muito do que você conhece como ciclo de desenvolvimento, o que quer dizer que o sistema que atualiza sempre estará sempre testando suas novas features no seu dispositivo (computador, celular, tablet), verificando as mais nova correções e, claro, lhe fornecendo o que há de mais novo e mais difícil de contornar no que diz respeito a bugs, já que quase não haverá páginas no Stack Overflow te dizendo o que fazer sobre o bug que foi instalado em todas as máquinas do mundo há cinco minutos. Muito menos páginas descrevendo o SEU problema específico, com o SEU driver específico e hardware específico. Sim, Windows, eu estou falando com você.

Porém, quando se trata de atualizações na velocidade do commit, a Microsoft não é um monopólio. Praticamente todos os apps, desktop ou web, precisam atualizar constantemente, freneticamente. Todos eles, sem exceção, nunca perguntam se você gostaria de fazer isso, ou se perguntam continuarão te enchendo o saco por toda a eternidade. Nenhum se preocupa em retornar ao estado anterior quando as coisas vão mal, o que triplicaria o problema de atualização global para eles. A Google nunca sai do beta, e por um bom motivo: no final do Sprint quinzenal, lá está o código novo em folha rodando na máquina do usuário. Um código que passou por milhões de testes unitários, bilhões de testes caixa-preta, menos o seu teste específico, coisa mínima, que irá lhe deixar um software capenga até (talvez) o próximo Update. Você não precisa daquela opção do menu, certo? Basta usar só mais um app adicional para isso.

Não estamos falando de programadores medíocres ou sistemas legados. Todos sabemos que, por mais habilidosa a equipe e por mais bem estruturado o código, o estado natural de um software é a sua complexidade crescente engolir aos poucos seu funcionamento, até o próximo refactory que irá começar tudo de novo. É um ciclo sem fim. Porém, antes havia um tempo de respiro entre uma correção bem sucedida e a próxima bomba. Hoje você vai dormir sem saber se sua máquina vai bootar amanhã. Não há mais o prazer de usar uma nova versão e constatar, de fato, que ela é melhor que a anterior. A mais nova sempre será pior, justamente pela falta de cicatrizes de guerra para o código novo que está nascendo sem passar algum tempo sendo lustrado.

O software não é mais versionado. Pelo menos não para o usuário. Passamos por tantas semi-versões diferentes que mesmo que mude o Major em algum momento, já estamos desgastados por todos os beta tests que fomos obrigados a fazer.

E ainda por cima o novo modelo de precificação acha que está lhe fazendo um favor em entregar uma versão quentinha toda sexta-feira e lhe cobra um valor mensal. Para sempre. E nunca a satisfação de usar um software no "estado da arte". Usuários de apps já se acostumaram a conviver com o estado do caos.


# O Filho de Saul

Caloni, 2016-01-28 cinemaqui movies [up] [copy]

Como não poderia deixar de ser, depois do Oscar dado a Birdman, o plano-sequência -- aquela técnica de filmar que evita cortes a todo momento -- voltou à ativa. E em O Filho de Saul, assim como fez Alejandro González Iñárritu, o diretor estreante László Nemes também está preocupado com a narrativa subjetiva -- aquela que a câmera toma o ponto de vista do personagem. Em ambos os filmes, por um bom motivo. Aqui, porém, soa ainda mais esquizofrênico do que o próprio personagem fantasioso de Michael Keaton.

O que o filme está nos dizendo a todo momento através de sua técnica é: olhe para este homem, o Saul do título (Géza Röhrig). Ele asfixia e incinera seu povo para que ele próprio não morra. Mas ele mesmo já não sente mais nada. Ele já está à mercê do horror do Holocausto. Apenas segue ordens. Até que observa um menino que sobreviveu à câmera de gás sendo asfixiado pelo médico que o examina. Ele decide (não sabemos) que é seu pai, e tenta de todas as formas realizar para ele um enterro judeu, com direito a reza do rabino e, imagino, um lugar reservado no céu.

Ao observar o que ele faz para conseguir seu objetivo é passear no estilo jogo de tiro de primeira pessoa através de diferentes lugares e diferentes funções na máquina de extermínio em massa nazista. É ouvir gritos de ordem de todos os lados (através de uma mixagem de som tridimensional inquieta), de alemães igualmente alheios à loucura, de judeus cooptados pela chance de viver um pouco mais e de russos, preocupados com a única coisa sã que é possível fazer na situação que se encontram: tentar fugir.

As cenas mais horrendas, de corpos nus amontoados e sendo arrastados, são mal vistas, pois estão fora de foco e filmadas em uma tela quase quadrada com uma profundidade de campo rasíssima (o que quer dizer que podemos ver com exatidão praticamente apenas o que está na mesma distância de Saul). Isso faz sentido. Sempre cabisbaixo, seguindo ordens sem fazer muitas perguntas, Saul é a representação de como eram tratados os escravos judeus, que, pertencentes a um Kommando apenas (um grupo de trabalhadores liderados por um soldado alemão), quase nunca enxergavam o todo. Saul nos dá esse privilégio graças ao roteiro maniqueísta, do próprio László e Clara Royer, mas suficiente pela sua história.

Há pelo menos dois momentos brilhantes no longa, tanto pela dificuldade técnica (são dois planos-sequência) quanto pela força da narrativa: 1) quando Saul volta à sala de autópsia e encontra companhia e 2) quando ele encontra seu rabino, em meio ao caos das "horas extras noturnas" (o que talvez indique que estamos próximos da derrota alemã, quando a velocidade do genocídio foi acelerada).

Com um final enigmático pelo seu simbolismo "au passant", muitos sairão do cinema inquietos por uma resolução mal acabada. Porém, estes perderam o fio da meada em seguir a história convencional de "pai que quer salvar filho no além-túmulo". Você pode assistir o filme assim, e ele funciona bem 99% do tempo com essa história (exceto o final). Porém, perceba como, mesmo se admitirmos a versão oficial da história, há algo que merece ser analisado em um homem que se preocupa mais com os mortos do que com a própria vida, e dica: não é heroísmo.

O filme tem muitos momentos "olhe para esse homem", e talvez o mais aterrorizante é que olhamos para ele e não vimos nada, exceto uma obsessão cega pela sua crença. O que pode ser confundido com mais um filme denunciando a crueldade nazista, no fundo quase não a mostra, preferindo focar na loucura de uma religião, que ambígua como ela é, pode manter viva a esperança de algo melhor ao mesmo tempo que sacrifica os vivos que ainda preferem viver o aqui e agora. Acho que qualquer semelhança com críticas ao conflito do Oriente Médio deve ser analisada com cuidado, mesmo não parecendo muito longe da verdade.


# A Casa dos Contos de Fadas

Caloni, 2016-01-30 movies [up] [copy]

Eleanor's Secret é uma animação francesa desenhada como se fossem ilustrações de um livro... de contos de fadas. É um filme relativamente curto sobre uma história que se parece muito também com um conto de fadas. Elementos utilizados no início da história (como um castelo de areia) viram cenários interessantes em uma aventura infantil bem conduzida.

No entanto, seus momentos de tensão são construídos pelo diretor Dominique Monfery apenas através de uma edição que alterna diferentes cenas, se tornando repetitivo e muitas vezes inadequado. Considere, por exemplo, o momento que o herói do filme tem uma visão olhando para um livro e a cena fica constantemente cortando entre ele olhando o livro e sua viagem psicótica. Da mesma maneira, a descida da escada em direção ao bolso de um paletó é bobo, entre tantos outros exemplos que soam batidos e clichês.

Como muitas animações ultimamente, essa irá te ganhar menos pela história, mais pela fofice. A não ser que você nunca tenha ouvido falar ou lido sobre as fábulas do filme.


# Bäcker Pale Ale

Caloni, 2016-01-30 beer [up] [copy]

Balanceada, um ótimo custo/benefício.


# F is for Family

Caloni, 2016-01-30 series [up] [copy]

Juventude Transviada e filmes do John Hughes são exemplos de filmes icônicos que discutem essa distância incômoda e fascinante entre as gerações de pais e filhos. F for Family é a tentativa da Netflix de mostrar isso E a distância que nos separa dos costumes de uma era: os (hoje) controversos anos 70, onde fumar em qualquer lugar era tão lei quanto falar palavrões na frente das crianças (e depois se perguntar onde foi que eles aprenderam a falar assim). E se formos perceber momentos mais reflexivos da série, seus próprios personagens estão propensos a questionarem seus próprios hábitos, sem nem ter muitas dicas do por que disso.

Apesar de ter seis episódios de 20 e poucos minutos cada, a série perde ritmo lá pela metade, se tornando uma tentativa de plágio de outros trabalhos de animação mais jogadas ao absurdo e comédia pastelão. Os melhores momentos de "F" está justamente quando ela foge desse estereótipo televisivo, e seus personagens aprendem com seus erros.

Ganhando pontos pela excelente introdução e por trazer crianças envolvidas em brincadeiras que podem custar a vida (ou alguns ossos quebrados), e perdendo pontos por nunca mostrar violência familiar (desculpado porque o protagonista, para nós, tem que possuir uma moral levemente superior a de sua era), F for Family surpreende em alguns momentos, inova em outros, entedia ao mesmo tempo que relaxa.


# Juventude Transviada

Caloni, 2016-01-30 movies [up] [copy]

James Dean ficou conhecido como o ícone de uma geração. Morreu jovem, o que só ajudou a fortalecer a lenda. Fez no total três filmes para Cinema (esse estreou no ano de sua morte). Em Rebelde sem Causa -- ou Juventude Transviada -- ele faz um jovem mimado da classe média americana que arruma confusão em todos os lugares que passa. O filme começa com todos o paparicando: o delegado de polícia, seus pais, sua avó. Na própria delegacia ele já conhece seu melhor amigo, que tem uma forte carência paternal e instabilidade emocional, e seu par romântico, a "rebelde" Y, que também possui problemas com o pai, que evita beijos na boca de sua filha de 16 anos por considerar inapropriado. Olhando para ela e seus lábios pintados escandalosamente de vermelho, quem poderia culpá-lo?

Ela anda com uma gangue da pesada, que faz atividades como roubo de carros porque... bem, como alguém diz no filme, "você precisa fazer alguma coisa". Dean parece se sentir confortável em seu papel de um jovem quase 10 anos mais jovem que ele e participa de uma briga de facas com o líder da gangue quase insinuando um rito de iniciação. E também por causa do que lhe tem causado problemas: ele odeia ser chamado de covarde, porque isso lhe faz lembrar de seu pai molenga que sempre cede à esposa, pai este que jurou que nunca se tornaria, apesar de ser igualmente doce como ele, embora impulsivo como a mãe.

Essa é uma sociedade doentia, onde não há lado certo. Os personagens são tão bem construídos que fica difícil perceber que se trata de um filme, e não de um documentário da época. Como "todo filme é um documentário de sua época", como dizia a crítica de cinema Pauline Kael, esse filme pode ser considerado um dos melhores dessa década. Não só isso, mas encontraremos forte inspiração nos anos 80 e nos filmes adolescentes de John Hughes (Curtindo a Vida Adoidado, Clube dos Cinco), que, contrariando o senso comum, não trata os adolescentes como idiotas.

PS: Em tempo. A trilha sonora encomendada pela Warner Bros serve os propósitos da época, mas quase que estraga um filme maravilhoso tentando se sobressair ao que vemos na tela. Tente ignorar a música imponente e totalmente deslocada.


# Löwenbräu

Caloni, 2016-01-31 beer [up] [copy]

Um pouco fraca, mas agradável; um pouco espumosa demais.


[2015-12] [2016-02]