TV e café da manhã

(originalmente publicado no Facebook na manhã da quinta-feira 09/02 — horários em UTC-8 — estou copiando pra cá pra registrar)

7:32 — Passou uma propaganda de car title loan aqui na TV que pareceu muito aquela propaganda “Refinancie sua casa” do filme “Capitalismo: uma história de amor” do Michael Moore.

7:39 — A pessoa fala um pouco no jornal e termina com: “Coloquei mais informações na minha página no Facebook.” Além dos Twitters dos editores que fazem comentários no rodapé da tela, várias vezes aparecer o letreiro “Acesse nosso Twitter (ou nossa página no Facebook) pra ver as breaking news.” e tal. Bem interessante. A televisão aqui tá muito voltada pras redes sociais.

7:50 — Rá! Descobri (pela internet) como abrir uma caixa de leite. Da próxima vez nem vou precisar de tesoura :)

Empresa

Originalmente publicado no Facebook às 21h45 (UTC-8) da quarta-feira 08/02. Um pouco modificado pra registrar no blog.

Até queria falar do sol e da manhã de carnaval (a canção do Orfeu Negro tocava na Starbucks, com letra em português, quando entrei lá hoje), das crianças que caminhavam pra escola, das moças de bicicleta que pilotavam na direção oposta, do piano de cauda numa casa com porta aberta (eu quase entrei pra tocar, mas fiquei com medo de ser preso), da forma diferente como as pessoas aqui se relacionam, do céu estrelado e dos olhos das ruas às 19h00, mas (maldito jet lag!) são só 21h20 e já estou morrendo de sono pra escrever sobre essas coisas românticas agora (e, além do mais, no Brasil acho que deve estar todo mundo dormindo mesmo, já que aí são 3h20).

Então: Agora que já deixei registrado que essas coisas aconteceram (estou me sentindo mais ou menos como quando cheguei em São Paulo notando essas coisas pequenas), escreverei sobre coisas mais diretas mesmo (também interessantes, na minha opinião) e, mais precisamente, sobre o estágio.

Voltei há pouco do primeiro dia na empresa. Fui muito bem recebido. Há gente de todo lugar. Almocei com um alemão, um búlgaro e um americano. Do meu lado senta um espanhol. Já conhecia daqui um egípcio. Conheci também um canadense. Todos muito simpáticos, aparentemente ótimos programadores, dispostos a conversar e a ensinar o que estão fazendo.

Meu desktop é o maior computador que já vi. A resolução é algo como 2560×1600. É quatro vezes a tela que estou acostumado (o louco é que todo mundo na empresa usa dois monitores desse tamanho!). Roda Ubuntu.

O laptop que me deram é um MacBook Pro (roda Mac).

Passei o dia configurando os computadores; resolvendo a papelada; conhecendo as pessoas; usando, conhecendo e lendo partes do código do imo.im (aliás, a partir de quando arranjar um celular acho que vou passar o dia online em todos os mensageiros instantâneos que uso pelo aplicativo do imo.im pra Android, que achei o máximo).

A empresa tem lanches e refrigerantes de graça. Todos os dias também oferece almoço ou jantar. É bem localizada e é perto de casa, tem várias bolas (de basquete, futebol, vôlei), uma mesa de sinuca, aparelhos de ginástica (falando nisso, me ofereceram academia), gostei bastante do ambiente.

Próximos passos mais burocráticos por lá: social security number, plano de saúde, resolver o complicado formulário W-4 e descobrir quanto vou pagar de imposto.

O mais importante e aí não mais burocrático: descobrir o que vou desenvolver. Me parece que vai ser bem legal.

Terminada a propaganda (acho que sou facilmente impressionável) e mudando de assunto pra algo ainda nerd (na verdade, mais nerd), mas não-tão-relacionado: amanhã às 8h00 (14h00 em São Paulo) tem single round match do TopCoder. Vou fazer antes de ir trabalhar se estiver acordado e disposto. (nota da reedição pro blog: não fui muito bem, mas paritcipei :)) Participem aí, pessoas que tão no acampamento em Campinas e demais maratonistas!

No mais, até me acostumar com a dinâmica da empresa e com o fuso horário, acho que só vou conseguir aproveitar bem o tempo livre do fim de semana.

Quero muito bolar uma estratégia pra me aproximar dos estudantes de Stanford pra ter com quem tomar uma cerveja conversando sobre aleatoriedades e descobrir como é a universidade aqui.

Por falar em Stanford, só hoje lembrei que é a universidade do grande Donald Knuth.

Melhor parar de escrever antes que eu caia em cima do teclado de sono e que o texto fique tão grande que ninguém leia.

Palo Alto

Originalmente publicado no Facebook às 9h15 (UTC-8) da quarta-feira 08/02. Um pouco modificado pra registrar no blog.

Só consegui internet agora. Cheguei bem, estou ótimo. Obrigado pela preocupação a todos que perguntaram. Neste momento, sentado numa Starbucks na University Ave em Palo Alto.

Mudar de fuso é muito confuso (aqui é seis horas mais cedo do que em São Paulo): acordei às 4h00 e não conseguia dormir. Aí assisti três horas de televisão. Superbowl, vitória de Santorum sobre Romney em três estados nas prévias republicanas, muita pressão pros EUA intervirem militarmente na Síria na CNN, muita discussão sobre a crise na Europa e muitas críticas à Grécia no DW, uma mulher no exército dos EUA tem mais chance de ser estuprada por um colega de trabalho do que ser morta pelo inimigo, Occupy Oakland: câmara municipal foi contra resolução que proibiria protestos no porto, California: proibição de casamento gay é considerada ilegal por tribunal… entre outras coisas que chamaram menos atenção.

Palo Alto é uma cidade fantástica, linda. As casas aqui no centrinho perto de Stanford, parecem aquelas casas que a gente vê em filme.

Cheguei às 8h20 na empresa e não havia ninguém (acho que isso é bom, significa que eles não trabalham muito cedo! ;)). Vou dar uma volta por aqui e voltar pra empresa (descobri lendo e-mail que tenho que estar às 10h00 lá — agora são 9h15).

Se sair cedo, vou dar um pulo na Universidade mais tarde. Vi umas coisas interessantes por aqui. A noite, quando já devo ter internet em casa, escrevo algo menos confuso no meu blog. (Nota da edição pro blog: Até escrevi outra notinha, mas acho que nada menos confusa.)

Retrospective: new plugin for WordPress

I’ve just wrote my first WordPress public plugin, that I’m licensing under GPL v3. This post is to make it public. I’m writing in English because the WordPress plugin directory asks me to provide a plugin page to host the files there and I’ll provide the URL of this post. Update: The plugin is now in the WordPress plugin directory: wordpress.org/extend/plugins/retrospective/


The website of the brazilian newspaper O Estado de São Paulo has a nice way to display news in a retrospective-style (check this screenshot or this link — Flash required).

Wouldn’t it be nice if we could display WordPress posts in our pages and categories in the same way just by using a shortcode? The possibilities are many. That’s why I wrote the Retrospective plugin for WordPress.

It has at least two advantages over the version you just saw:

  1. Does not require Flash (its implementation uses only CSS and JavaScript/jQuery)
  2. Has a option to respect the (time-)scale of the posts.

Its use is very simple. Wherever you add the shortcode [retrospective] the plugin will draw that cool retrospective. The shortcode supports several attributes:

  • count — limit the number of posts to be displayed (default = 10; use -1 to display all)
  • cat — display posts with category IDs comma-separated (default = display all posts)
  • width — the width of the timeline in pixels (default = 600)
  • delay — the time of the focus change animation in milisseconds (default = 1000)
  • scale — if set, respect the time scale in the distances between the points in the timeline (default = false)
  • image_width, image_height — the dimensions of the thumbnail images in pixels (default = 300×180)
  • image_border_size — the size of the image’s border in pixels (default = 7)
  • image_border_color — the color of the image’s border in hexa RGB (default = 000000)
  • image_margin — the space between the images (default = 5)
  • date_format — the date format in PHP format (default = d/m/Y)

Some screenshots

Here is a screenshot from juntos.org.br with scale=true (in the link you can see it working):

Screenshot (Retrospective plugin in juntos.org.br)

And here is a screenshot from a fresh WordPress install (TwentyEleven theme without modifications):

Screenshot (Retrospective plugin in TwentyEleven theme

Customizing

Post thumbnails

For better results, I suggest always adding post thumbnails to your posts and using registered image sizes in image_width and image_height attributes.

Styling retrospectives

The generated HTML is very easy to style (but just be careful with margins and paddings, they’re set with !important attribute — I did it to try not to break with any theme). Here is a sample:

<div id="retro-uniquehash" class="retrospective">
  <!-- TIMELINE -->
  <ul class="time">
    <li rel="0">
      <a href="permalink" style="left:0px;"><span>date</span></a>
    </li>
    <li rel="1">
      <a href="permalink" style="left:300px;"><span>date</span></a>
    </li>
    <li rel="2">
      <a href="permalink" style="left:600px;"><span>date</span></a>
    </li>
  </ul>

  <!-- PHOTOS -->
  <div class="photos">
    <ul>
      <li rel="0">
        <a href="permalink" title="title"
          ><img src="file" class="wp-post-image"
        /></a>
      </li>
      <li rel="1">
        <a href="permalink" title="title"
          ><img src="file" class="wp-post-image"
        /></a>
      </li>
      <li rel="2">
        <a href="permalink" title="title"
          ><img src="file" class="wp-post-image"
        /></a>
      </li>
    </ul>
  </div>

  <!-- POSTS -->
  <ul class="posts">
    <li rel="0">
      <a href="permalink" title="title">
        <h2>Title <span>(date)</span></h2>
        <p>Excerpt</p>
      </a>
    </li>
    <li rel="1">
      <a href="permalink" title="title">
        <h2>Title <span>(date)</span></h2>
        <p>Excerpt</p>
      </a>
    </li>
    <li rel="2">
      <a href="permalink" title="title">
        <h2>Title <span>(date)</span></h2>
        <p>Excerpt</p>
      </a>
    </li>
  </ul>
</div>

Styling a specific retrospective

The generated hash takes in consideration all the attributes sent to the shortcode and also how many retrospectives appeared before in the parsing of the actual page. I made it that way to allow users to set up two exactly equal retrospectives in the same page. Because of that, I don’t recommend setting styles for #retro-uniquehash. I think a reasonable solution for this issue is to make add an outer container.

Download

Here is the code for download: retrospective.zip

* Warning: Please consider I’m using a bazaar approach here. Be aware that the plugin probably has a lot of bugs (and please tell me if you catch any).

I hope you enjoy it. Have fun and please let me have your feedback! :)

Userscript para remover usuários de grupos do Facebook

Já faz algum tempo que o Facebook tem um bug nas listas de membros dos grupos. As listas não mostram todos os membros do grupo. Mais: os membros que não aparecem na lista nem mesmo podem ser encontrados pelo formulário de busca de nomes. Quando você é administrador de um grupo, isso pode ser um grande inconveniente, porque na interface padrão do Facebook a lista de membros é o único lugar onde é possível excluir usuários de um grupo. Ou seja, os usuários que não aparecem lá são indeletáveis!

Só ali na lista de membros aparece esses X para excluir os membros do grupo.

Há alguns meses, escrevi um user script para o GreaseMonkey (extensão para o Firefox que permite que você crie esses pequenos scripts para serem rodados em páginas específicas) que busca ajudar os administradores de grupos a removerem esses membros fantasmas.

Não havia publicado até agora por vergonha (o script é bem feio, tanto o código como o resultado). Porém, acho que não pretendo perfumá-lo tão cedo, então resolvi liberá-lo aqui até pra inspirar quem quiser fazer coisas mais bonitas.

O funcionamento dele é muito simples: quando você entra num grupo (sendo ou não administrador — porque nem distingui isso no código), ele cria botões X do lado dos links para os perfis dos usuários que estão nessa página (e só nesses — outra coisa que nem me preocupei no script). Se você for administrador do grupo em questão, quando clica no X o Facebook abre aquela caixa perguntando se você quer mesmo excluir o membro em questão (e se quer baní-lo permanentemente).

Com o script, tem X em todo o lugar! (até onde não deve… hehe)

Sem mais enrolação, eis aqui o código para (des-)apreciação e aprimoramentos (por favor! :)):

// ==UserScript==
// @name Remove users from Facebook groups
// @description Remove usuarios que postam no grupo sem precisar procurar na lista de membros
// @author  Tiago Madeira <madeira@juntos.org.br>
// @include http*://www.facebook.com/groups/*
// @version 1.32
// ==/UserScript==

(function () {
  var as = document.getElementsByTagName("a");
  var gid = "";

  for (var i = 0; i < as.length; i++) {
    var a = as[i];
    var hovercard = a.getAttribute("data-hovercard");
    if (hovercard != null && hovercard != "") {
      uid = hovercard.replace(/.*id=/, "");
      if (gid != "") {
        var button =
          '<a class="mhm auxiliaryButton closeButton uiCloseButton" ' +
          'title="Remove" rel="dialog-post" ' +
          'href="/ajax/groups/members/remove.php?group_id=' +
          gid +
          "&uid=" +
          uid +
          '"></a>';
        a.innerHTML = a.innerHTML + " " + button;
      }
    }
    var pattern = new RegExp("(^| )groupsCleanProfilePic( |$)");
    if (pattern.test(a.className)) {
      gid = a.getAttribute("href").replace(/.*id=/, "");
    }
  }
})();

Ou o link direto para download (ou instalação no GreaseMonkey):

fb.group.remove.user.js (1.08kb)

© 2005–2020 Tiago Madeira