Vila Maria Zélia

Ontem estive mais uma vez na Vila Maria Zélia. Desta vez, fui pela FotoJornada organizada pelo André Douek e foquei na coleta de material para elaborar panorâmicas 360 graus.

Deste material, só o primeiro photo sphere está pronto, mas não consigo exibí-lo aqui no blog, pois o site do Google que permitia o embeding de photo spheres (o falecido Google Maps Views, que o Saci o tenha) foi tirado do ar e como efeito colateral a mesma funcionalidade foi retirada do Google Maps. Eles prometeram que a funcionalidade volta até o final do ano, então neste meio tempo, o photo sphere deve ser visto direto lá no Google Maps em: https://goo.gl/maps/uB2NNXFgfSk.

Seguem algumas fotografias feitas em visitas anteriores à vila.

Tem Mas Acabou

Hoje foi o último dia do meu período sabático. Amanhã eu volto a trabalhar com desenvolvimento de sistemas.

Há pouco mais de dois anos quando pedi demissão do meu último emprego, a única coisa que eu sabia era que queria passar um tempo viajando, fotografando e fazendo o que mais me desse na telha.

Nos últimos meses volta-e-meia eu me pegava perguntando a mim mesmo: “Afinal… O que foi que eu fiz nesse tempo todo?!?”

Bom… Até pra que eu não esqueça, segue um breve relato (que será ainda mais resumido já que já andei falando sobre algumas dessas coisas aqui no blog):

De agosto de 2013 até janeiro de 2014 eu viajei bastante pelo Brasil (Rio de Janeiro, Minas Gerais, Maranhão, Piauí, Espírito Santo e Bahia) e dei uma esticadinha pro Chile.

Tirando a viagem pra Minas e parte da viagem pra Bahia, o objetivo principal das outras viagens era fotografar. E as viagens renderam.

Essa foto ai embaixo foi feita no Deserto do Atacama no Chile e acabou se tornando a minha primeira venda no sistema royalty-free pelo 500px Prime.

Já a foto abaixo foi feita nos Lençois Maranhenses e foi aceita no 5o Salão Nacional de Arte Fotográfica.   Areia, luz e sombras

 

Diferentes circunstâncias fizeram com que ainda no início de 2014 eu parasse com as viagens e decidisse focar na feitura de imagens sobre a cidade de São Paulo.

Andei muito pela cidade. Fotografei muito. Muita coisa já andei soltando por aí no Facebook, Google+, Instagram, Flickr, etc. Outras coisas continuam inéditas.

Mapa com locais de fotos feitas em São Paulo
Mapa com locais de fotos feitas em São Paulo

Em 2015 continuei, mas diminuí um pouco as andanças pela cidade e comecei a trabalhar nos sites pra dar vazão às imagens feitas. O primeiro a ser “lançado” foi o http://alfredmyers.photography – feito às pressas depois que resolvi tirar lá no 500px.

O site com as fotografias sobre a cidade de São Paulo está tomando muito mais tempo do que eu imaginava inicialmente. O maior motivo pra isto é que conforme a montagem do site foi avançando, eu senti falta de textos que acompanhassem as fotos. Para escrever os textos, eu fui atrás de pesquisar os locais fotografados. Uma coisa leva a outra e quando eu vi, eu estava trabalhando em um outro site – não o que eu tinha idealizado inicialmente.

Pra piorar a situação, eu não estou contente com o desempenho do site. Ele está bem pesado por conta da quantidade de imagens e a forma como o WordPress lida com elas.

Durante o último mês eu mergulhei de cabeça no estudo de JavaScript. Ainda não terminei de ler o livro mencionado no post sobre o assunto, mas estou quase no fim. Na sequência, o plano é ler alguns livros sobre CSS e depois uns livros sobre desempenho voltado pra web.

Com tudo isso e a minha volta ao trabalho, o ritmo de desenvolvimento do site já diminuiu e o plano atual é lança-lo em janeiro de 2016 no aniversário da cidade de São Paulo. Vamos ver… vamos ver…

Wish me luck!

 

Let it flow

A nice Sunday morning read:

http://code.flickr.net/2015/09/01/the-data-freshener/

But it amazes me that, as an industry, we’re still dealing with these kinds of problems (synchronizing data between different layers) after all these years.

I remember first coming across this issue back in 2003/2004 when developing a Windows Forms + ADO.NET front-end connecting do a SQL Server Back-end.

Sure, the technology stack is completely different and Flickr’s scale is way way bigger, but the problems are fundamentally the same.

One would have guessed that after all these years, we would have learned a couple of lessons from the database replication/synchronization field, applied them to the problem at hand and stopped reinventing the wheel.

Maybe we could all learn something from fluid dynamics.

Data should flow between the different layers the same way a shot of vodka flows when poured into a glass of cashew juice. Hic!

Bom Retiro Aluga

Hoje faz um mês da minha primeira visita ao Bom Retiro para ver a situação por lá.
Algumas semanas antes eu tinha visto em algum lugar – não lembro se na TV ou na internet – que o comércio de lá estava em crise.
Depois de ouvir de vários colegas que a imprensa estava trabalhando contra o governo exagerando os efeitos da crise, eu resolvi ir lá ver com os meus próprios olhos.
Fui numa quarta-feira a tarde (22/07/15) levando a minha câmera “pequena” (uma mirrorless) e em 34 minutos eu fiz as 26 imagens nos locais indicados no mapa abaixo:

Clicando em cada marcador no mapa acima, é possível ver a imagem feita naquele local. Para ver o mapa em tela cheia, clique aqui.

Se preferir, pode ver as mesmas imagens no álbum abaixo. Clique nas laterais da imagem para avançar ou retroceder no álbum.

Bom Retiro Aluga

Fiz uma segunda visita ao bairro numa quinta-feira a tarde (13/08) levando novamente a minha câmera “pequena”. A idéia era percorrer as ruas que eu não tinha percorrido durante a primeira visita. Em 1:11 eu fiz 57 fotos de pontos comerciais diferentes. Todos fechados.

Infelizmente, ao chegar em casa, percebi que eu não tinha registrado as coordenadas de GPS – provavelmente por mau-contato entre ele e a câmera. Por conta disto, eu planejei uma terceira visita ao bairro para refazer na medida do possível o trajeto da segunda visita, mas coletando as coordenadas de GPS de cada um dos locais fotografados.

As imagens desta segunda visita estão abaixo, mas sinta-se a vontade pra pular diretamente para as imagens da terceira visita que em grande medida são os mesmos lugares da segunda.

Bom Retiro Aluga II

Na terça-feira passada (18/08) eu fiz a terceira e provavelmente última visita ao bairro com a intenção de coletar material pra esta série. Diferentemente das duas primeiras vezes, eu levei a minha câmera “grande” com uma grande angular. A idéia era captar um ângulo de visão mais aberto onde desse para ver melhor as outras lojas em torno de cada um dos pontos comerciais fechados. O resultado desta última visita foram 104 imagens coletadas nos locais indicados no mapa. Como no mapa anterior, clicando-se no marcador abre-se a foto correspondente. Para ver o mapa em tela cheia, clique aqui. Se preferir, veja as fotos no álbum abaixo: Bom Retiro Aluga III

Por fim, elaborei um slide-show com 130 das imagens coletadas durante a primeira e terceira visitas. O vídeo é meio longo com pouco mais de 14 minutos, mas hey… São 130 fotos cada uma delas com pelo menos uma loja fechada pra alugar.

O mapa consolidando a primeira e terceira visitas pode ser visto em tela cheia aqui.
Alguns detalhes importantes: Eu procurei deixar de fora os pontos comerciais fechados que não tinham uma placa de “Aluga-se”. Também procurei deixar de fora sobre-lojas e residências que tinham placas de “Aluga-se” ou “Vende-se”. Se eu tivesse coletado material destes lugares, o volume de imagens provavelmente teria triplicado.
Embora eu tenha tomado o cuidado de não incluir lugares repetidos, pode ser que um ou outro tenha passado desapercebido. Se você encontrar algum, por favor avise-me.

Aprendendo JavaScript – da perspectiva de um desenvolvedor .Net

Eu venho futucando com JavaScript pelo menos desde 1998 ou 1999. Talvez um pouquinho antes.
Mas a grande verdade é que eu nunca peguei pra aprender a linguagem – e uma plataforma correspondente – com o mesmo empenho e na mesma profundidade que dediquei a outras como, por exemplo, Clipper ’87 e 5; Microsoft Access (Access Basic e depois VBA); Visual Basic e por fim C# e VB.NET.

Sempre que precisei fazer alguma coisa que fosse executado num browser, eu partia de uma base fundamental de conhecimento (boa parte da qual aplicável a outras linguagens) e aprendia o resto sob demanda, muitas vezes na base da tentativa e erro, mexendo aqui e ali até conseguir fazer a coisa funcionar – ou desistir.
Muitas vezes, uma parte do conhecimento adquirido na execução da tarefa acabava se perdendo já que no dia-a-dia, o meu foco estava focado em aplicações front-end nativas (que rodam fora do browser) e sistemas back-end usando outra technology stack.

Bom… Há pouco mais de uma semana eu fiz umas fotos lá no Bom Retiro e vi no material uma boa oportunidade de brincar com uma idéia que que venho querendo implementar já há algum tempo.

A idéia era distribuir num mapa marcadores apontando para os locais onde cada foto foi feita. Clicando ou tocando no marcador, abre-se um painel flutuante com a foto correspondente.

Se a resolução do dispositivo que você está usando for baixa, talvez você prefira ver o mapa rodando em tela cheia fora do blog. Neste caso, siga este link, mas não se esqueça de voltar pra cá!

Durante a prototipação eu encontrei as dificuldades costumeiras para quem detém somente um conhecimento básico de uma das ferramentas que está usando – nesse caso JavaScript – e nenhum conhecimento do restante do ferramental: JSON, JSONP, jQuery (que acabei não usando) e as APIs do Flickr e do Google Maps.

Mas o que me deixou particularmente frustrado foi uma hora em que eu estava tentando fazer o painel flutuante funcionar. Na pressa e não tendo lido a documentação com a atenção necessária – especialmente o trecho

The content of the InfoWindow may contain a string of text, a snippet of HTML, or a DOM element. To set the content, either specify it within the InfoWindowOptions or call setContent() on the InfoWindow explicitly.

, eu passei o olho no trecho abaixo
e traduzí isso usando o meu conhecimento de C# e VB.NET como sendo um construtor com um parâmetro nomeado – parâmetro este que seria atribuído à propriedade content do InfoWindow Como eu estava reaproveitando o InfoWindow pra exibir as diferentes fotos, era necessário alterar seu conteúdo cada vez em que o marcador fosse clicado e para isto, eu atribuía o conteúdo a infoWindow.content em outra parte do código. O problema é que infoWindow.content que na terminologia do JavaScript é uma propriedade está implementado no que seria equivalente no .Net a um campo (public instance field) e não uma propriedade (property) Num campo, o código externo referencia o campo diretamente, enquanto que numa propriedade o acesso se dá pelo que chamamos property accessors que nada mais são que rotinas que são executadas para obter ou atribuir um valor à propriedade. O detalhe é que a rotina pode fazer outras coisas além disto, como por exemplo, atualizar a UI com o valor recebido. Pois bem, InfoWindow.content não tem o código necessário para atualizar a UI. Depois de bater um pouco a cabeça eu acabei descobrindo que deveria usar InfoWindow.setContent() e então o problema foi resolvido. Depois deste episódio e levando em conta que muitas das coisas que estou querendo fazer envolvem JavaScript, resolvi tomar vergonha e estudar o assunto na profundidade que ele merece. Para tanto, comprei o JavaScript: The Definitive Guide.

O livro é um calhamaço com mais de 1000 páginas sendo que destas, umas 700 podem ser lidas sequencialmente. As outras 300 tem o formato referência “guia” de referência para a linguagem e os recursos client-side do JavaScript. Tendo lido um pouco mais que 250 páginas, posso dizer que estou gostando bastante. Os primeiros capítulos foram os mais interessantes, já que foram apresentadas uma série de particularidades e nuances da linguagem – que eu não conhecia – de uma forma que foi possível mapeá-las com facilidade ao meu conhecimento existente na plataforma .Net e suas linguagens. Em vários momentos, eu lembrei dos livros de especificação do C#, VB.NET e do CLR via C# – excelentes títulos para quem quer dominar os conceitos fundamentais de .Net que servem de base para tudo que vem acima: ASP.NET, WPF, WCF, etc… Uma das primeiras coisas que me surpreendeu – e que tomei nota:

Mas tem muito mais: Particularidades sobre escopo de variáveis em funções aninhadas (closures) ou durante a execução de eval(), “herança” via prototypes, sutilezas do strict mode, funcionamento dos objetos nativos do JavaScript, delete, loop for in e por aí vai…

O nível de detalhe com o que o autor trata cada assunto me agradou bastante. Pelo menos enquanto ele trata de tópicos sobre os quais eu tinha nenhum ou pouco conhecimento, mas ficou meio chato em alguns trechos onde o mapeamento do conhecimento de JavaScript para C# é mais direto ou quando ele cria polyfills e outras alternativas para implementar em ECMAScript 3 recursos nativos do ECMAScript 5.

Neste último caso, eu achei que o código apresentado nem sempre tem o mesmo nível de qualidade e atenção a detalhe que o texto que o acompanha. Lendo o texto, em mais de uma ocasião foi possível elaborar o código mais simples e/ou mais robusto que o apresentado no livro.

O primeiro exemplo que me vem à cabeça, são os exemplos de código onde ele define o prototype de um construtor. Vários dos exemplos iniciais criam objetos para prototype do zero descartando no processo, o prototype original – ao invés de construir em cima dele. Embora as duas formas tenham os seus usos e aplicações, me parece que é mais usual ir adicionando os novos membros (propriedades e funções) em cima do prototype existente.

Outro trecho cansativo é o capítulo onde ele tenta emular no JavaScript, caraterísticas de orientação a objetos nativas a linguagens como Java (e C# apesar dele não ter citado este último) como encapsulamento, abstração, etc.

Muita gente deve querer e pedir por este tipo de exemplos, mas a impressão que dá, é que se está tentando forçar a linguagem a ser uma coisa que ela não é. As soluções apresentadas podem apetecer a quem reza unicamente pela cartilha da orientação a objetos, mas me deixaram imaginando se não seria o caso desse pessoal abrir a mente e abraçar outras abordagens, como a programação funcional ou mesmo procedural – não no lugar da, mas em adição à orientação a objetos.

Com ou apesar destas ressalvas, da parte que li até agora, numa escala de 1 a 5 eu daria nota 4 para o livro.

Agora deixa eu voltar pro livro porque eu estou doido pra descobrir quem matou o objeto que apareceu lá no Garbage Collector 😉

Inauguração da Ciclovia da Avenida Paulista

Meu plano original para o último domingo era ir no Fotroca, mas eis que surgiu uma oportunidade que eu não poderia perder: A Av. Paulista seria fechada ao trânsito de veículos para a inauguração da Ciclovia da Av. Paulista.

A oportunidade perfeita para abrir o tripé no meio dos cruzamentos ao longo da avenida e fazer algumas panorâmicas 360 graus – ou como o Google gosta de chamar, photo spheres.

Caso você nunca tenha navegado por um photo sphere, clique na imagem e arraste para os lados ou para cima e para baixo para mudar o ângulo de visão para qualquer direção 360 graus.

Seguem três das que já estão prontas.

 

 

 

Coletei material para fazer outros, mas ainda não terminei de processá-los.

Estes e mais algumas outras dezenas de photo spheres feitas ao redor da cidade de São Paulo podem ser encontrados lá no Google Views.

Vai tomar banho!!!

Tendo nascido em Seattle – um lugar frio, desde sempre eu fui acostumado a tomar banho quente e por isto nunca fui muito fã de água fria.

De uns 15 anos pra cá, isso virou uma certa aversão e chegou num ponto em que muitas vezes eu deixava de curtir pequenos momentos como tomar um banho de rio durante uma trilha ou passar férias na praia e voltar de lá sem ter dado sequer um mergulho no mar.

Mas com certeza, o pior foi em fevereiro de 2012 quando fui para a Antártida, tive a chance de uma vida de fazer polar plunge e não fiz! Tudo para evitar o desconforto de entrar na água gelada…

Ainda no primeiro semestre de 2012, eu fui fazer o Curso Básico de Montanhismo no CAP. Na montanha em geral e no curso em particular, nos colocamos em várias situações de desconforto. Foi durante o curso, que pela primeira vez eu tive contato com a noção de que se submeter a situações de desconforto não é de todo ruim. Pelo contrário, podem haver aspectos positivos na forma de como passamos a enxergar o mundo, aquilo que nos cerca, as situações que nos são colocadas e o mais importante: como reagimos a isso tudo.

Mas vamos deixar o CBM para um próximo post e voltar à questão da água fria por que no final do ano passado, eu cruzei com um vídeo bem interessante sobre a Terapia do Banho Gelado – ou Cold Shower Therapy no original em inglês. Assiste o vídeo. Vale a pena.

Hoje fazem 6 meses que estou tomando banho frio.

Não dá pra dizer que eu virei um trator e saí resolvendo tudo o que eu gostaria e não resolvo pra não enfrentar uma situação de desconforto, mas já tirei várias coisas da minha To Do List que eu que eu vinha protelando por meses. Acredito que seja um bom começo.

 

P.S: Desde 11 de dezembro de 2014, só tomei banho quente em 3 ocasiões – curiosamente, todas no verão. Até agora foi relativamente fácil. Se conseguirei atravessar o inverno fazendo isso, aí já é outra questão 🙂

Nike+ versus RunKeeper Ultimate Smackdown

Terminei o último post falando que iria entrar nos prós e contras dos sistemas Garmin e Nike+, mas alguns problemas neste último fizeram com que eu decidisse testar outros sistemas.

A app (a parte do sistema que roda no celular) do Nike+ é excelente, mas o website não lida muito bem com nada que saia do caminho feliz.

Para ficar só com dois exemplos:

  1. É possível conectar o Garmin Connect ao Nike+. Com isso as corridas registradas num relógio Garmin são importados para dentro do site do Nike+. O problema é que se você tiver estabelecido uma meta/objetivo, ele não é atualizado.
  2. Se por algum motivo você precisar excluir uma corrida, a distância não é subtraída dos totais do período (semana, mês).

Para piorar, se você acionar o suporte da Nike, eles sempre mandam deslogar, limpar os cookies, arquivos temporários, etc e logar novamente. Só que isso nunca resolve o problema. O problema só é resolvido depois que eles mexem em alguma coisa do lado de lá.

Segue um trecho do diálogo de um dia particularmente inspirado…

As coisas chegaram num ponto tal, que eu resolvi buscar alternativas. Durante todo o mês de Maio eu testei o RunKeeper. Entre os meus amigos que estão atualmente logando corridas usando algum sistema, este parece ser o mais utilizado.

O RunKeeper tem uma versão gratuita e outra versão paga que custa 10 doletas por mês ou 40 doletas por ano. Com esse esquema de preços, está claro pra mim, que o que eles querem é te vender a anuidade. A mensalidade está ali só pra fazer você pensar que está fazendo um puta negócio ao comprar um ano inteiro pelo preço de 4 meses. Desconto de 67%? Prefiro acreditar na existência parcelamento no cartão de crédito sem juros. E de gnomos.

Como a idéia era testar o sistema, eu optei, é claro, pela versão gratuita. Durante todo o mês de Maio eu usei o RunKeeper para logar todos os meus treinos e uma prova de 15 milhas.

Durante esse período, eles não perderam absolutamente nenhuma chance de tentar me empurrar a versão paga usando banners no próprio app e uma avalanche de e-mails.

O problema é que a versão gratuita da app e o site são muito fraquinhos… Mas muito! Quando comparado ao ofertado pela Nike (mesmo com o site bugado), a versão gratuita do RunKeeper é de dar dó!

Eu entendo que o RunKeeper precisa fazer dinheiro de algum jeito e que eles não tem toda a musculatura e as outras fontes de receita que a Nike tem, mas essa estratégia de fornecer crippleware pode no longo prazo acabar lhes fazendo mais mal do que bem na medida em que as pessoas tem chance de conhecer outros sistemas que oferecem mais recursos.

Uma trial da versão full provavelmente resolveria o problema. Se é pra ter uma versão gratuita, que ela pelo menos tenha recursos que façam com que eu queira usar o sistema. Uma vez que eu queira usá-lo, pode ser que eu me interesse em ter acesso a outros recursos pelos quais eles poderiam cobrar.

No comparativo entre Nike+ e RunKeeper, mesmo com os bugs no site eu fico com o Nike+.

Neste mês de Junho estou testando a versão gratuita do Strava. Em um post futuro eu conto pra vocês como foi.

Meanwhile, keep running!

Keep Running

Como eu estava dizendo no final do último post, entre o final de 2009 e o começo de 2010 eu estava levando os treinos bastante a sério, então resolvi comprar um relógio com monitor cardíaco. Acabei comprando um Garmin com GPS embutido.

Em junho, eu resolvi pegar um contador de passos pra monitorar cadência e uma balança eletrônica Tanita BC-1000 que além de medir o peso calculava percentual de gordura entre outros indicadores. Mas para poder usar a balança, precisei pegar um relógio compatível, o Forerunner 310XT.

Com tudo isso, o sistema oferecido pela Garmin coletava muito mais indicadores do que o oferecido pela Nike, então a partir de julho eu deixei de logar corridas usando o Nike+.

2010 foi o ano das duas provas mais importantes do meu “currículo”.

Em setembro, juntamos um grupo de pessoas na ITGROUP e montamos algumas equipes de 2, 4 e 8 pessoas para correr a Maratona de Revezamento Pão de Açúcar. Eu acabei correndo em dupla com o Eduardo Gomes. Ele fez o primeiro trecho e eu fiz os quase 20Km finais – até hoje a minha maior distância.

No último dia do ano eu e o Alexandre Tarifa corremos a São Silvestre. Apesar de bem melhor condicionado do que na primeira tentativa dois anos antes, desde pelo menos o finalzinho de outubro eu não vinha treinando bem.

Lembro-me de que pelo menos até a metade da prova eu ainda não sabia se completaria a prova. Eis que aparece uma energia sei lá vinda de onde, a confiança foi aumentando e quando cheguei no pé da Brigadeiro eu só tinha uma certeza: Eu iria completar a prova.

Quando eu virei a esquina com a Paulista eu lembro de ter pensado “É só isso, Brigadeiro?!? Brigadeiro, você é um fanfarrão!!”. Cruzando a linha de chegada veio aquela descarga de endorfina ou sei lá o que e uma puta sensação de euforia. Eu tinha vencido a Brigadeiro! Eu tinha completado a prova!

Na época, apesar do sistema da Garmin ser capaz de coletar muito mais indicadores que o Nike+, ele também tinha lá os seus problemas e por conta disto com o lançamento da app Nike+ que usava o GPS do iPhone, em abril de 2011 eu voltei a logar corridas no Nike+, em adição ao Garmin.

No próximo post, eu vou entrar um pouco mais nos prós e contras de cada um dos sistemas que fizeram que eu optasse por usar ora um, outra outro – quando não os dois ao mesmo tempo – e as implicações disto ao tentar analisar o meu histórico de corridas.