13 de May de 2012

Castálio Podcast: Caike Souza - Envy Labs

Nem parece que já passaram duas semanas desde o último episódio, mas mais uma vez tive o prazer de entrevistar uma pessoa prá lá de interessante e divertida: o Caike Souza! Foi durante a minha entrevista com o Henrique Bastos que eu fiquei sabendo sobre ele, mas foi somente esta semana que eu fui saber que ele trabalha na Envy Labs desde 2009 lá em Orlando, na Flórida. A companhia parece ser super bacana e está por trás de vários projetos bacanas, como o Rails for Zombies, Code School e TryRuby.org.

A primeira coisa que fica bem evidente sobre o Caike é que ele realmente curte muito o que faz, tem muito orgulho de onde trabalha, e é super humilde e divertido! Ele fala que programação é uma arte, e esta combinação de paixão pelo que faz e arte fica bem aparente nas coisas que ele faz! Durante nosso bate-papo conversamos sobre como que ele foi parar em Orlando na Envy Labs, quais companhias que usam a usam os serviços deles (e os motivos pelas quais terem escolhido isso), sua participação na conferência RailsConf 2012, sua banda de rock “Heroes Will Fall”, a história por trás do projeto Small Acts Manifesto e até mesmo seu Top 5 de pessoas para seguir no Twitter!!!

Esta semana eu ainda pretendo conversar com ele sobre um brinde para vocês brincarem mais com o Code School, mas enquanto isso, vale a pena conferir o Rails for Zombies e baixar a música da banda se você curte Heavy Metal (a música da entrada do episódio é da banda) ou quer conhecer um pouco mais sobre esta pessoa super interessante que é o Caike!

Escute agora: [MP3] [Ogg] [AAC]

07 de May de 2012

Introducing Pattrn

I’m a COLOURlovers fan. They provide a nice set of simple creative tools that empower a vibrant community to produce awesome design pieces such as patterns, palettes, shapes, colors, etc. It’s a simple yet powerful idea. Inspiring stuff.

I’ve been doing Android-based development for a few months now but I wanted to play a bit more with the platform to get a better grasp on the end-to-end developer experience—from development to distribution. There’s no other way to do that than building an app. This is why I created Pattrn as a weekend project.

Pattrn gives you access to all the patterns created by the COLOURlovers community. You can browse through the latest and most popular patterns and search by keyword or color. You can also keep a list of your favorite patterns and use them as your Android wallpaper. Pattrn is meant to be simple, cute, and snappy.

I’ve just released Pattrn’s first public beta on Google Play. Install it and let me know what you think. I hope you enjoy it!

01 de May de 2012

English: My Red Hat took me and the kids to the NC Museum of Art...



English: My Red Hat took me and the kids to the NC Museum of Art this last Sunday! It was perfect too as we got to see a lot of the exhibits and still managed to find time to eat at Lilly’s. Did you know that the entrance is free and the museum is sponsored by the State of North Carolina for our viewing and learning pleasure? Take that NYC and your extremely expensive entrance fees! :P

Português: Meu Red Hat me levou com minhas filhas até o NC Museum of Art este último domingo! Foi um dia mais que perfeito já que conseguimos ver um monte das exibições e ainda achamos um tempinho para comer na pizzaria Lilly’s. Você sabia que a entrada é completamente free e que o museo é patrocinado pelo Estado da Carolina do Norte para o nosso deleite? Toma NYC e seus preços de entrada exorbitantes! :P

14 de April de 2012

Inscrições abertas para o III BlogProg em Salvador

Coloquem na agenda: o  III Encontro Nacional de Blogueir@s ocorrerá em Salvador, Bahia, nos dias 25, 26 e 27 de maio. O evento reunirá cerca de 500 ativistas digitais de todo o país! A inscrição para encontro vai até o dia 11 de maio e pode ser feita pelo site do Barão de Itararé.

A programação foi definida na reunião da comissão nacional no dia 24 de março. Os contatos já foram feitos, mas nem todos os convidados confirmaram a presença. Segundo a comissão organizadora, o III BlogProg dará maior espaço para as oficinas autogestionadas – os interessados devem apresentar sugestões de temas e de debatedores até 4 de maio e ficam responsáveis pela iniciativa.

Também haverá maior espaço para reuniões em grupo com o objetivo de intercambiar experiências, fazer o balanço das atividades no último período e traçar os próximos passos da blogosfera. Abaixo, a proposta de programação:

 

 

 

Programação

25 de maio, sexta-feira

15 horas – Início do credenciamento;

17 horas – Palestra inaugural: A luta de ideias no mundo contemporâneo

– Convidado: Michel Moore (diretor de cinema e escritor dos Estados Unidos)

19 horas – Ato político em defesa da blogosfera e da liberdade de expressão – Praça Castro Alves

- Convidados: Artistas, lideranças políticas e dos movimentos sociais;

26 de maio – sábado

9 horas – Nas redes e nas ruas pela liberdade de expressão e pela regulação da mídia

Convidados:

- Franklin Martins – ex-secretário da Secretária de Comunicação da Presidência da República;

- Emiliano José – integrante da Frente Parlamentar pelo Direito à Comunicação e pela Liberdade de Expressão;

- Gilberto Gil – ex-ministro da Cultura;

- Barbara Lopes – do movimento blogueiras feministas;

11 horas – A força das redes sociais no mundo

Convidados:

- Ignácio Ramonet – criador do Le Monde Diplomatique e autor do livro “A explosão do jornalismo”;

- Amy Goodman – fundadora do movimento Democracy Now e ativista do Ocupe Wall Street;

- Osvaldo Leon – Diretor da Agência Latino-Americana de Informação (Alai);

15 horas – Oficinas autogestionadas

(Os temas e conferencistas deverão ser propostos até 4 de maio; a organização das oficinas caberá exclusivamente aos seus proponentes);

17 horas – Apresentação e debate da proposta sobre a Associação de Apoio Jurídico à Blogosfera – Rodrigo Vianna e Rodrigo Sérvulo da Cunha;

19 horas – Lançamento oficial do Blogoosfero, Plataforma Livre e Segura para blogosfera e redes sociais

Responsáveis: Fundação Blogoosfero, Colivre, TIE-Brasil e Paraná Blogs

27 de maio – domingo

9 horas – Reuniões em grupo: balanço, troca de experiências e próximos passos da blogosfera;

12 horas – Plenária final: aprovação da Carta de Salvador, definição da sede do IV BlogProg e eleição da nova comissão nacional.

Mobilização e público-alvo

- Meta de 500 participantes de todo o país (300 da Bahia, sendo 100 do interior);

- Público alvo: ativistas digitais, estudantes, acadêmicos e jornalistas.

 

Fonte: Barão de Itararé

08 de April de 2012

Mudança

Prezados leitores e agregadores, este blog está se mudou para http://leofontenelle.wordpress.com. Atualizem seus marcadores/favoritos com urgência, pois o domínio http://leonardof.org em breve deixará de me pertencer.

É uma pena que eu não tenha conseguido o subdomínio leonardof.wordpress.com. Tenho muito carinho por “leonardof” desde que esse se tormou o nome da minha conta no SVN (hoje Git) do GNOME. Só que eu preciso dedicar menos tempo em manutenção de webapps, domínios etc, para ter mais tempo para as atribuições profissionais e pessoais.

Espero ter uma novidade em breve para contar a vocês, então não sumam!


05 de April de 2012

Performance Tips for Android’s ListView

I’ve been messing around with Android-based code for a few months now while hacking on Native Firefox for Android. I noticed that the performance tips for ListViews are a bit scattered in different sources. This post is an attempt to summarize the ones I found most useful.

I’m assuming you’re already familiar with ListViews and understand the framework around AdapterViews. I’ve added some Android source code pointers for the curious readers willing to understand things a bit deeper.

How it works. ListView is designed for scalability and performance. In practice, this essentially means:

  1. It tries to do as few view inflations as possible.
  2. It only paints and lays out children that are (or are about to become) visible on screencode.

The reason for 1 is simple: layout inflations are expensive operationscode. Although layout files are compiled into binary form for more efficient parsingcode, inflations still involve going through a tree of special XML blockscode and instantiating all respective views. ListView solves this problem by recyclingcode non-visible views—called “ScrapViews” in Android’s source code—as you pan around. This means that developers can simply update the contents of recycled viewscode instead of inflating the layout of every single row—more on that later.

In order to implement 2, ListView uses the view recycler to keep adding recycled views below or above the current viewport and moving active views to a recyclable pool as they move off-screencode while scrolling. This way ListView only needs to keep enough views in memory to fill its allocated space in the layout and some additional recyclable views—even when your adapter has hundreds of items. It will fill the space with rows in different ways—from top, from bottom, etc—depending on how the viewport changedcode. The image below visually summarizes what happens when you pan a ListView down.

With this framework in mind, let’s move on to the tips. As you’ve seen above, ListView dynamically inflates and recycles tons of views when scrolling so it’s key to make your adapter’s getView() as lightweight as possible. All tips resolve around making getView() faster in one way or another.

View recycling. Every time ListView needs to show a new row on screen, it will call the getView() method from its adapter. As you know, getView() takes three arguments arguments: the row position, a convertView, and the parent ViewGroup.

The convertView argument is essentially a “ScrapView” as described earlier. It will have a non-null value when ListView is asking you recycle the row layout. So, when convertView is not null, you should simply update its contents instead of inflating a new row layout. The getView() code in your adapter would look a bit like:

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.your_layout, null);
    }

    TextView text = (TextView) convertView.findViewById(R.id.text);
    text.setText("Position " + position);

    return convertView;
}

View Holder pattern. Finding an inner view inside an inflated layout is among the most common operations in Android. This is usually done through a View method called findViewById(). This method will recursively go through the view tree looking for a child with a given IDcode. Using findViewById() on static UI layouts is totally fine but, as you’ve seen, ListView calls the adapter’s getView() very frequently when scrolling. findViewById() might perceivably hit scrolling performance in ListViews—especially if your row layout is non-trivial.

The View Holder pattern is about reducing the number of findViewById() calls in the adapter’s getView(). In practice, the View Holder is a lightweight inner class that holds direct references to all inner views from a row. You store it as a tag in the row’s view after inflating it. This way you’ll only have to use findViewById() when you first create the layout. Here’s the previous code sample with View Holder pattern applied:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.your_layout, null);

        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.text);

        convertView.setTag(holder);
    } else {
        holder = convertView.getTag();
    }

    holder.text.setText("Position " + position);

    return convertView;
}

private static class ViewHolder {
    public TextView text;
}

Async loading. Very often Android apps show richer content in each ListView row such as images. Using drawable resources in your adapter’s getView() is usually fine as Android caches those internallycode. But you might want to show more dynamic content—coming from local disk or internet—such as thumbnails, profile pictures, etc. In that case, you probably don’t want to load them directly in your adapter’s getView() because, well, you should never ever block UI thread with IO. Doing so means that scrolling your ListView would look anything but smooth.

What you want to do is running all per-row IO or any heavy CPU-bound routine asynchronously in a separate thread. The trick here is to do that and still comply with ListView‘s recycling behaviour. For instance, if you run an AsyncTask to load a profile picture in the adapter’s getView(), the view you’re loading the image for might be recycled for another position before the AsyncTask finishes. So, you need a mechanism to know if the view hasn’t been recycled once you’re done with the async operation.

One simple way to achieve this is to attach some piece of information to the view that identifies which row is associated with it. Then you can check if the target row for the view is still the same when the async operation finishes. There are many ways of achieving this. Here is just a simplistic sketch of one way you could do it:

public View getView(int position, View convertView,
        ViewGroup parent) {
    ViewHolder holder;

    ...

    holder.position = position;

    new ThumbnailTask(position, holder)
            .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

    return convertView;
}

private static class ThumbnailTask extends AsyncTask {
    private int mPosition;
    private ViewHolder mHolder;

    public ThumbnailTask(int position, ViewHolder holder) {
        mPosition = position;
        mHolder = holder;
    }

    @Override
    protected Cursor doInBackground(Void... arg0) {
        // Download bitmap here
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (mHolder.position == mPosition) {
            mHolder.thumbnail.setImageBitmap(bitmap);
        }
    }
}

private static class ViewHolder {
    public ImageView thumbnail;
    public int position;
}

Interaction awareness. Asynchronously loading heavier assets for each row is an important step to towards a performant ListView. But if you blindly start an asynchronous operation on every getView() call while scrolling, you’d be wasting a lot of resources as most of the results would be discarded due to rows being recycled very often.

We need to add interaction awareness to your ListView adapter so that it doesn’t trigger any asynchronous operation per row after, say, a fling gesture on the ListView—which means that the scrolling is so fast that it doesn’t make sense to even start any asynchronous operation. Once scrolling stops, or is about to stop, is when you want to start actually showing the heavy content for each row.

I won’t post a code sample for this—as it involves too much code to post here—but the classic Shelves app by Romain Guy has a pretty good example. It basically triggers the async book cover loading once the GridView stops scrolling among other things. You can also balance interaction awareness with an in-memory cache so that you show cached content even while scrolling. You got the idea.

That’s all! I strongly recommend watching Romain Guy and Adam Powell’s talk about ListView as it covers a lot of the stuff I wrote about here. There’s nothing new about the tips in this post but I thought it would be useful to document them all in one place. Hopefully, it will be a useful reference for hackers getting started on Android development.

10 de March de 2012

WebKitGTK+ Debian packaging repository changes

For a while now the git repository used for packaging WebKitGTK+ has been broken. Broken as in nobody was able to clone it. In addition to that, the packaging workflow had been changing over time, from a track-upstream-git/patches applied one to a import-orig-only/patches-not-applied one.

After spending some more time trying to unbreak the repository for the third time I decided it might be a good time for a clean up. I created a new repository, imported all upstream versions for series 1.2.x (which is in squeeze), 1.6.x (unstable), and 1.7.x (experimental). I also imported packaging-related commis for those versions using git format-patch and black magic.

One of the good things about doing this move, and which should make hacking the WebKitGTK+ debian package more pleasant and accessible can be seen here:


kov@goiaba ~/s/debian-webkit> du -sh webkit/.git webkit.old/.git
27M webkit/.git
1.6G webkit.old/.git

If you care about the old repository, it’s on git.debian.org still, named old-webkit.git. Enjoy!

Depois da SOPA, entenda porque o Brasil precisa se emancipar quando o assunto é produção de Tecnologia para Internet

Uma das grandes reflexões que ficaram meio que "ocultas" no debate em torno dos projetos de Lei SOPA e PIPA, apresentados nos EUA, está muito além da questão dos diretos autorais e da publicação de conteúdo digital da internet. Sendo bem direto, uma das oportunidades trazidas pelo debate em tornos desses projetos está associada ao motivo pelo qual a aprovação de uma lei nos EUA impactaria tanto, de forma imediata, aqui no Brasil.  

No dia 17 de fevereiro de 2012, o site do Instituto Humanitas Unisinos – IHU publicou uma entrevista comigo, onde aproveitei a oportunidade para colocar essa questão [1] em pauta:

A SOPA e todas as leis que estão sendo debatidas nos Estados Unidos em relação ao conteúdo na internet acabam mostrando uma fragilidade: o quanto nós, brasileiros, somos dependentes tecnologicamente das soluções que são oferecidas nos Estados Unidos. “Hoje, do ponto de vista da produção tecnológica, existe um nível de desigualdade muito grande, porque a maioria da infraestrutura que garante o funcionamento da internet é dos Estados Unidos.

Então, hoje, tudo o que impacta nos Estados Unidos em termos de internet acaba também impactando para o mundo de uma forma muito intensa. Para se discutir e para se viabilizar uma governança mais ou menos equânime, dentro de uma geopolítica internacional, é necessário que também os países em desenvolvimento, como Brasil, China, Índia e todos os outros, também entrem nesse processo de emancipação tecnológica, ou seja, precisam ser produtores de serviços e de infraestrutura para a internet"

Não sei exatamente o motivo pelo qual a entrevista foi publicada com o título "Pirataria de software: uma estratégia de marketing das grandes multinacionais" - para mim, esse deveria ser o título de outra entrevista - com todo respeito a simpática jornalista que fez a entrevista desse ano, pois ela entende muito mais sobre entrevistas e produção de notícias do que eu. 

Contudo, dentro da liberdade que a internet nos possibilita, eu mudaria o título para algo do do tipo "Depois da 'SOPA', entenda porque o Brasil precisa se emancipar quando o assunto é produção de Tecnologia para internet".

Assim, dando então continuidade nesse ponto do debate, uma blogueira baiana, a Ane Oiticica,  publicou um artigo no Blog "Destravando" que fez uma metáfora bem bacana sobre essa questão:

"Imagine algo que você gosta muito. Chocolate! Conheço pouquíssimas pessoas que resistam a guloseima. Pense que hoje em dia, toda sua vida está atrelada ao chocolate. Sua rotina, seu trabalho, até sua diversão. Só que tem um problema: o único lugar que produz chocolate é uma pequena cidade no interior da Suíça e de repente, uma lei considera a produção da especiaria ilegal, atingindo toda população mundial e deixando todo mundo na vontade. O que você vai fazer?"  

Achei tão legal essa metáfora, que sugerir para ela publicar esse artigo no Blog da Colivre com o seguinte título: "Chocolate, SOPA e Internet: porque o Brasil precisa se emancipar!" :) 

Porém, é incrível como essas questões ainda são marginais quando se fala numa política de desenvolvimento para nosso país, seja dentro das políticas governamentais, seja pelas reivindicações da organizações sociedade civil, do empresariado nacional e, até mesmo, pela nossa comunidade científica.

Infelizmente, em nossa boa terra, ainda predomina-se uma espécie de "síndrome de colônia", histórica, que não nos permite enxergar o potencial criativo (singular!) do povo brasileiro, como uma grande oportunidade (estratégica!) de sermos desenvolvedores de tecnologia seja para internet ou qualquer outra área! Tudo isso, para quem sabe um dia, criarmos condições para falar em "soberania" e autonomia na atual Era da Informação.   

Por outro lado, felizmente, existem muitos tecnólogos e hackers (na essência desse termo) brasileiros que pensam e agem,  na contra-mão dessa "síndrome" conservadora. Não por caso, grande parte desses indivíduos estão ligados as comunidades inovadoras de uso e desenvolvimento de tecnologias Livres e padrões abertos. Entender, portanto, como podemos superar essa situação de dependência tecnológica por meio  desse movimento inovador (pró-tecnologias livres e padrões abertos), singnifica enxergar  a grande oportunidade estratégica que temos para viabilizar uma real política de emancipação tecnológica e desenvolvimento nacional. 

Entretanto, isso é assunto para um próximo post... ;)  

[1] "Programe ou seja Programado" é um livro de Douglas Rushkoff que aborda essa importante temática da autonomia tecnológica.

07 de March de 2012

Foursquare adota OSM

O Foursquare anunciou semana passada que estava adotando o OSM em seu website, deixando o Google Maps de lado. Sim, está valendo somente para o site, os aplicativos mobile continuam usando a API do Google.

Na prática pouca coisa mudou e está se discutindo se o Foursquare irá importar seus POIs para o OSM. Enquanto isso, veja como ficou o cabeçalho do serviço, muito mais bonito =)




Comentários | Link permanente
© Djavan Fagundes, 2010.

13 de February de 2012

Montanha: agora de olho nos vereadores de BH e alguns comentários sobre contribuições

Alguns dos leitores talvez saibam que eu escrevi no meio de 2010 um programa chamado ‘Montanha’. A ideia original do programa era me ajudar a escolher um candidato a deputado estadual me dando uma ideia geral de como os deputados da época gastavam os recursos da verba indenizatória. O site da Assembléia Legislativa de Minas Gerais publica essas informações, mas de uma forma muito inconveniente, tornando absolutamente impossível ter uma idea geral de como os deputados gastam a bufunfa. Obviamente botei o código online e subi uma instância pública para que outras pessoas pudessem fazer o mesmo. Depois disso o grande tevaum se juntou ao time e já adicionamos uma instância para a nova legislatura, que tomou posse em 2011.

Nos últimos dias decidi que com os belorizontinos prestando atenção nos vereadores, dada a polêmica sobre o aumento de salários e o veto pelo prefeito, seria um bom momento para criar o coletor e subir uma instância nova do Montanha, pra observar os gastos dos vereadores. Quem olhar vai notar rapidamente que o projeto ainda está pela metade: ainda faltam informações de partido dos vereadores, os links falam em ‘deputados’ e por aí vai, mas sou fiel ao princípio de release early, release often, então não quis esperar – quando os dados começaram a encher o banco botei o projeto pra fora.

Agora alguns comentários sobre questões que as pessoas me colocam:

Bacana! Se precisar de ajuda tamos aí!

Obrigado! Esse é um projeto de software livre – o código está sob a Affero GPL3 e sua contribuição é bem-vinda. Eu acredito firmemente em outro princípio: talk is cheap; show me the code. Eu não pretendo organizar/coordenar os esforços de outras pessoas, então não espere que eu peça ajuda para algo específico ou pegue na mão, sinta-se à vontade para clonar o projeto, fazer as modificações que achar que devem ser feitas e propô-las, não posso garantir que alguma coisa será incorporada ao meu branch, mas estou disposto a discutir questões de design/planos e responder dúvidas sobre o código – no canal #linux-bh da freenode, principalmente =).

Quais os planos pro futuro?

O meu TODO imediato é (e sinta-se à vontade pra roubar qualquer um e fazer):

  • colocar os dados de partido nos dados da Câmara Municipal de BH
  • mudar a interface do montanha para não falar em ‘deputados’, mas em ‘parlamentares’
  • escrever um coletor para os dados anteriores a março de 2010 da CMBH
  • melhorar a linkabilidade das pesquisas – deixar que você envie um link da visão de todos os gastos, por exemplo, com uma busca já feita
  • escrever alguns posts no Observador Político e no Trezentos chamando a atenção para algumas informações expostas pelo montanha
  • adicionar mais gráficos – gasto sobre tempo, por exemplo
  • melhorar a informação que o sistema dá a respeito do período coberto pelos dados
  • aumentar a quantidade de trivia exibida na página de detalhes de parlamentar
  • criar uma página com detalhes e trivia para fornecedores

Por que você não coloca esse projeto no Transparência Hacker (ou outro grupo)?

A minha resposta para esse tipo de pergunta tem sido ‘por quê eu deveria’? Não é que eu seja um lobo solitário, mas eu acho que só faz sentido participar de um projeto específico se houver alguma razão para tal. Visibilidade não me preocupa muito – a mensagem sempre acaba chegando em quem se interessa e em quem me interessa que ela chegue.

Eu não acredito que participar de um grupo – qualquer grupo – seja garantia de contribuidores, também; como eu disse, talk is cheap e disso eu tenho certeza de que acharia muito num grupo, mas acredito que as pessoas que quiserem contribuir vão contribuir independente de estar dentro de um grupo (como o Estêvão faz). Se um pedaço grande da contribuição vier de pessoas que fazem parte de um grupo e fizer sentido discutir o projeto dentro dele, aí sim eu veria sentido, por exemplo.

Uma última preocupação, essa específica com o thack, é que o foco do grupo me parece muito diferente do meu. Meu objetivo é que a sociedade tenha uma ferramenta para observar seus parlamentares. Para que isso aconteça é preciso que a ferramenta tenha uma vida mais longa e seja mantida. Os dados sobre a legislatura passada da ALMG, por exemplo, já foram retiradas do site da ALMG, mas o Montanha continua lá, a sociedade continua tendo acesso não só a todos dados, como a uma visualização mais razoável deles. Eu não estou prometendo que vou manter pra sempre, claro, principalmente porque faço isso no meu tempo vago (em que eu também trabalho pro Debian, GNOME, como, durmo e me divirto), mas a minha ideia é focar nesse um problema e ter uma boa solução razoavelmente perene.

A maioria das coisas que eu vi do thack são hacks muito bacanas, mas sua vida parece ser muito curta – assim que um hack está pronto outra ideia legal aparece e aquela é deixada para trás; essa bola já foi levantada por outras pessoas, inclusive, como exemplo de por quê grupos como o thack não são a solução definitiva para o problema de dados abertos e de por quê concursos de criação de app não substituem um trabalho sério dentro do governo; não é incomum achar coisas com dados de anos atrás ou que sequer continuam funcionando. Note que eu não tenho nada contra o thack, per se, muito menos contra as pessoas que o compõe – eu os considero colegas e amigos, eu só acho que nós surfamos ondas diferentes e isso me faz achar que eu não agregaria valor ao grupo e vice-versa. Obviamente posso ser convencido do contrário eventualmente =)

19 de January de 2012

inconsistências no free()


Oi gente!


Semana passada tava portando um código compilado em cima da uClibc para glibc. Tudo tranquilo, até que certa parte do programa dava crash. Investigando, vi que a falha acontecia em uma chamada à função free(). Primeira coisa que veio à minha cabeça: porque raios tá dando crash aqui se o mesmo programa, compilado na uClibc roda perfeito? Fiz um programa simples que simula a situação:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  char *field1;
} s_test;

s_test test = {
  .field1 = NULL
};

int main (int argc, char **argv) {
  s_test *t;

  t = &test;
  free (t);
  t = &test;
  t->field1 = "bug";
  printf ("%sn", t->field1);

  return 0;
}



Preste atenção na linha 16. Estou executando um free() num ponteiro que aponta para uma variável estática, ao invés de uma variável que foi alocada com malloc() ou similar. Um crash é esperado aqui, certo? Em partes! Usando a glibc, sim. Já com a uclibc, não! O código acima funciona como [não] esperado! Estranho, não? Tudo o que aprendemos na escola de programação vai por água abaixo aqui hehehe.


Então, o que acontece é que temos um código similar aqui e que sempre funcionou, justamente por ser compilado na uclibc. Já vi essa e outras diferenças de comportamento entre a uclibc e a glibc. A solução? Mudar o código para torná-lo portável, não só para que compile corretamente, mas para que tenha os mesmos resultados, independente da plataforma.


A princípio, achei que isso era um bug na uclibc, mas fui apontado que isso não fere “os padrões”. De fato, os padrões dizem que nesse caso, o comportamento é “indefinido”. Ah, padrões :) … Para evitar surpresas do tipo, fica aqui a lição aprendida: programar da forma certa, mesmo que dê um pouco mais de trabalho. Não se acomodar dizendo: “ah, testei aqui e funciona, deixa assim mesmo!” ;)


Bons códigos!

20 de November de 2011

Pssst

Do you have 3 minutes? I’m running a small user survey about the information architecture of the GNOME website and its services. If you do, here’s the link.

18 de November de 2011

About being late, spending time, delivering GSoC tasks and my final paper

It’s been a long time since Google Summer of Code ended, and I still haven’t posted anything since August. I know I am very late (it’s hard to believe that 2011 is already coming to a close — Desktop Summit seemed like it was yesterday!), but besides being extremely busy with my regular job and lots of others little projects and my final paper, I don’t have an excuse.

I got 5 big tasks in my GSoC TODO list. I knew it was a lot right from the beginning, but I didn’t want to worry about the short timetable I would get in the program. I already was contributing in the web team and keeping working on it after GSoC wouldn’t be an issue. From May to August I got intense days in my university (considering it was winter here) and this delayed me a lot. I need to thank to Federico again for his support as my mentor :) .

As for the 5 tasks I got, I only didn’t work in one (which was about reorganizing the developer area). Two of the tasks are ready to be deployed (the one to add support for translating the GNOME website and the other to have a new applications area), and the other two (the community website — which I must say it could be an entire Summer of Code project — and the template update for subdomains) are half-done.

I’m about to give more details about my nearly finished tasks and on deploying them in another post soon (like the new Damned Lies template above which is completely out of context in this post) basically because I’m catching a bigger fish right now. For the past month I’ve been working in my final paper for university. I’m finishing my bachelors in Design and this is consuming all my free time as I need to get it done in the beginning of December. The good part is that it is an analysis of the information architecture for the GNOME website!

And as part of my final paper study, I’m about to publish a user survey which might give me some data regarding how people use GNOME website and its services. Stay tuned!

Meanwhile, please be patient :) . Thank you!

17 de November de 2011

Novos desafios

[português]

Oi gente, tudo bom?

Este é um post rápido, quero compartilhar uma novidade com vocês: Estou dando um grande passo na minha carreira profissional. Me mudei para São Paulo e estou trabalhando na Vex/OI como desenvolvedor linux embarcado.

Foram pouco mais de 6 anos no meu último emprego, numa usina de açúcar e álcool em Alagoas. Fiz muitos amigos e aprendi bastante lá. Foi uma ótima empresa de se trabalhar. Infelizmente lá eu não trabalhava com o que eu gosto: linux. Por isso estou de mudança.

Espero aprender bastante nesse novo emprego e, no tempo certo, contribuir de volta com a comunidade FLOSS, visto que usamos muita tecnologia livre aqui.

Por enquanto estou só, procurando lugar pra morar. A família vem no final do ano. Quem quiser nos visitar em Sampa, pode entrar em contato, será um prazer receber os amigos!

08 de November de 2011

Belas apresentações com o GNOME Pinpoint

Conheci o GNOME Pinpoint durante uma sessão hacking com o Vinícius na Latinoware e na mesma hora migrei a minha apresentação do LibreOffice Impress para ele. Como o slogan sugere, o Pinpoint é uma ferramenta que permitem que hackers criarem belas apresentações.

Ela funciona via terminal, você cria um arquivo texto com a sintaxe do programa e a executa.

O pinpoint possui recursos interessantes, transições, formatação dos textos, imagens de fundo, alteração em tempo real, dentre outros.

Aqui tem um pequeno vídeo mostrando o funcionamento da ferramenta.

Para quem quiser instalar e já ver "de qual é", tem um exemplo aqui.

Sei que tem pacotes para o Archlinux, outras distribuições eu ainda não pesquisei!

Espero ver nos eventos por ai todos usando! Boas novas apresentações!

Comentários | Link permanente
© Djavan Fagundes, 2010.

03 de November de 2011

O Ubuntu Brasil está de luto… :(

Foi com uma imensa dor que recebi a má notícia sobre o falecimento do meu amigo André Gondim.

Membro ativo desde a sua chegada para a comunidade Ubuntu Brasil, André começou como  tradutor, época em que eu administrava a equipe de tradutores,  e foi logo se destacando! Tornando logo em seguida um Ubuntu Member (Membro oficial do Ubuntu), membro do Conselho e herdando também a administração do time de tradução.

Fábio e Gondim

Sua força e vontade de viver era por mim notada, desde o nosso primeiro encontro no FISL 9.0 (2008), onde juntos palestramos sobre o time de tradutores. De lá pra cá foram mais eventos, conversas pelo IRC e posts pelo Planeta Ubuntu Brasil.

André “Gordinho” (Como eu o chamava) era pau pra toda obra! Ajudava a todos que precisassem de um help, colaborava com muitos artigos no seu blog, traduzia sem parar…  (Um devorador de strings sem tradução… :) ),etc…  Não é a toa que o time de tradutores do Ubuntu Brasil estava nas suas rédias há um bom tempo. Uma pessoa ímpar!

O que fica agora é a saudade… e a certeza que você está num lugar melhor! Em nome do Conselho Ubuntu Brasil e toda a Comunidade Ubuntu Brasil venho aqui agradecer por tudo que você fez por todos nós… Por levar o nome do Ubuntu para todos os cantos de forma indelével! Por ser uma grande pessoa!

Vá em paz… descanse em paz!

 

TwitterFacebookGoogle ReaderLinkedInDeliciousPingBlinklistRedditGoogle GmailFriendFeedTechnorati FavoritesShare

02 de November de 2011

Ubuntu Tweak: Ajustes e configurações num só clique!

Num outro post, falei sobre como deixar o GNOME 3.2 do seu jeito. Sendo assim, pra evitar o ciúme, que tal agora deixar o Ubuntu e Unity com a sua cara? Então entra em ação o Ubuntu Tweak!

Ubuntu Tweak

Com o Ubuntu Tweak, é possível:

- Alterar os temas, fontes e configurações do Ubuntu (Aparência, inicialização, Sistema, etc..);

- Configurar o Unity;

- Efetuar limpeza de arquivos desnecessários no Ubuntu;

- Etc…

Uma gama de utilitários para deixar o seu Ubuntu redondinho!

Para instalar o Ubuntu Tweak, abra o seu terminal e execute:

sudo add-apt-repository http://ppa.launchpad.net/tualatrix/next/ubuntu

Assim que adicionado o ppa ao repositório, atualize o mesmo e instale o Ubuntu Tweak executando:

sudo apt-get update && sudo apt-get install ubuntu-tweak

Pronto… instalado com sucesso!

Até!

 

TwitterFacebookGoogle ReaderLinkedInDeliciousPingBlinklistRedditGoogle GmailFriendFeedTechnorati FavoritesShare

25 de August de 2011

Cinco anos de Blog…

Even through times of high and low with the published post… here we are!! today, is a birthday of my blog, we five years of life!! =]


17 de August de 2011

- Problemas com GCC + __sync_synchronize()

Durante esses dias discutindo com um amigo sobre o acesso a memoria de forma atômica, e durante alguns testes e provas de conceito surgiram alguns problemas devido ao esquema de synchronize ser um recurso dependente da plataforma e compilador.

Como a chamada __sync_synchronize() e nativa no compilador, e dependendo da versão não vai estar disponivel. segue abaixo uma solução:

Contornando o Problema

#include <stdio.h>

#ifdef NO_SYNC_SYNCHRONIZE
#warning "Ops! Don't have native __sync_synchronize(), using the asm hardcode."
#    define __sync_synchronize() __asm__ __volatile__ ( "rep;nop": : :"memory" );
#endif

#define my__sync_synchronize() __sync_synchronize()

int
main ()
{
    int foo = 0;

    printf ("Trecho abaixo será atômico!\n");
    foo = 0xd34db33f;
    my__sync_synchronize ();

    return 0;
}

* Levando em consideração o uso sobre a plataforma x86.

Mais sobre o assunto.


30 de May de 2011

Vixe Maria!!!

.
Pô gente, foi mals...

Quando liguei a opção de "moderar comentários", achei que o blog me enviaria avisos dos comentários que precisavam ser moderados... Hoje, ao entrar aqui no "painel de controle", vi que tem uns 30 comentários aguardando moderação!!! Vixe Maria!!

Vou fazer isso agora. Mas peço desculpas a todos que postaram comentários. Foi malzaço mesmo... :-/

Abraços a todas e a todos!
Carlão

27 de May de 2011

Botão para escolher entre "tree" e "places" no Nautilus Elementary

.
Você instalou o ótimo Nautilus Elementary, mas não gostou de perder aquele botãozinho que trocava entre a visão "tree" e "places", do painel da esquerda?

Nada mais fácil de resolver...

  • abra o terminal;
  • execute o gconf-editor;
  • abra o "diretório" apps;
  • dentro de apps, procure e abra o "diretório" nautilus;
  • dentro dele, clique em "preferences";
  • marque "sidebar_show_places_menu";
  • feche o gconf-editor
  • feche o terminal.... (dããã!)

Se tiver algum nautilus aberto, feche e reabra.

Tão fácil que nem vou colocar screenshots... :-)

Abraços!
Carlão

22 de May de 2011

Meu ambiente de desenvolvimento em 7 itens

Resolvi participar deste meme e, aqui vai, meu ambiente de desenvolvimento em 7 itens:

1) Hardware e Sistema Operacional

Minha principalmente máquina para desenvolvimento é um Macbook Pro de 13 polegadas (modelo 2011), com 8GB de RAM, Intel Core i7 2.7Ghz e 256 GB SSD. Confesso que os 8GB de RAM não estão fazendo tanta diferença (utilizo bem menos que isso), mas o SSD faz milagres. Recomendo a todos que, assim que tiverem a oportunidade, substituam seus HDs por SSDs.

UPDATE: Muita gente me perguntou como consegui o SSD. Eu já comprei o Macbook com ele, na loja da Apple, com desconto para desenvolvedores. Na verdade, minha grande amiga e mac maníaca, Marília Guimarães, quem fez a compra nos EUA e o trouxe para cá. O desconto que a Apple dá para desenvolvedores é bem significativo (coisa de $250), mas exige que você tenha um endereço nos EUA. A vantagem de comprar o Macbook com SSD da própria Apple é que ele já vem com suporte a TRIM, o que melhora a vida útil do mesmo.

No Macbook rodo exclusivamente Mac OS X 10.6.8. Há alguns meses o Linux deixou de ser meu sistema operacional principal, apesar de continuar administrando diversos servidores (mas para isso preciso apenas de um Terminal :).

Quando estou desenvolvendo costumo ligar o macbook a um monitor externo de 22′. Programar com duas telas melhora bastante a produtividade, mesmo quando elas não possuem o mesmo tamanho.

2) Linguagens de Programação

Python é, provavelmente, a linguagem que mais utilizo. Escrevo ferramentas para Unix, utilitários no trabalho e estou portando todos meus scripts em bash para python. Entretanto, a cada dia que passa eu tenho programado mais em Objective C, pois tenho feito bastante coisa para iOS (iPhone e iPad). Acredito que em poucas semanas meus pontos na skill “Objective C” irão superar os da skill “Python”.

Também ainda programo um pouquinho em Bash, mantendo alguns scripts antigos.

3) Editores e IDEs

Minhas linhas de Python e Bash são praticamente todas feitas no Textmate, um fantástico editor para Mac OS X, cheio de atalhos e snippets que colocam sua produtividade lá em cima. Recentemente comecei a experimentar o Coda e o Espresso, pois o Textmate está sem atualizações há algum tempo.

Quando estou programando para iPhone e iPad (Objective C) eu sempre uso o Xcode. Não gosto muito dele, mas ainda é a melhor opção (se não for a única) para quem quer programar para estas plataformas.

4) Controle de Versão

No trabalho costumo usar o Git. Em projetos open source depende bastante do resto da equipe. Em alguns casos também uso o Git, hospedando no GitHub, mas em outros uso o Mercurial, hospedando no Google Code. Gosto muito de ambos.

5) Virtualização

Utilizo o Vmware Fusion para virtualizar outros sistemas operacionais quando preciso. Ele é muito bem integrado com o Mac e, sinceramente, não tenho nada a reclamar. Entretanto, minha necessidade de virtualizar algo está cada dia menor. Hoje tenho apenas uma VM para o Backtrack e outra com Cent OS.

6) Softwares

Os softwares que mais uso são:

  • Chrome: Na minha opinião, o melhor browser da atualidade. Leve, relativamente seguro e cheio de recursos. Faço questão de utilizar o build de desenvolvimento do Chrome que, apesar de ser considerado instável, me atende bem e permite que eu teste muitos recursos antes deles chegarem na versão estável.
  • Keynote: Ótimo para fazer apresentações para eventos, clientes e para a própria equipe. Deixa o PowerPoint no chinelo.
  • Adium: Sempre estou disponível no Gtalk e o Adium é um ótimo cliente para Mac.
  • PivotalTracker: Utilizamos SCRUM no trabalho e o PivotalTracker é um ótimo sistema para gerenciamento de tarefas, que se casa perfeitamente com o SCRUM.
  • Campfire: Quando a equipe toda precisa bater um papo online, nós utilizamos o campfire. Além do bate-papo, o sistema permite anexar arquivos e compartilhar códigos.
  • Git-Tower: uma ótima interface gráfica para gerenciamento de repositórios Git. Bonita, prática e funcional.
  • Ecoute: Não gosto do iTunes, então tive que procurar um bom player para o Mac. O Ecoute foi sugestão de um amigo e a escolha foi mais que certa. Possui os recursos que mais gosto como, por exemplo, lastfm, minimalismo, controle no desktop, capas etc.
  • Sparrow: Sou fanboy do Gmail e, quase sempre, o utilizo pela interface web mesmo. Ultimamente estou tentando utilizá-lo no desktop, para ver se tenho algum ganho de produtividade. Nestas ocasiões, uso o Sparrow Mail, o cliente para Mac que mais se aproxima da experiência real do Gmail.
  • Terminal: Vira e volta preciso fazer algo via linha de comando. Utilizo o próprio Terminal do Mac, mas com alguns recursos adicionais.
  • Things: Ótima ferramenta para gerenciamento de tarefas.
  • 1Password: Não dá para lembrar de todas as senhas, de todos os sites. Por isso, deixo o 1Password fazer o trabalho sujo para mim.

7) Música

Não dá para trabalhar sem música. Na verdade, eu conseguiria colocá-la em quase todos os momentos da minha vida. Prefiro escutar música com fones de ouvido, ao invés de som ambiente.

Só gosto do bom e velho Rock And Roll, Blues e Jazz. Led Zeppelin, Deep Purple, Pink Floyd, Black Sabbath, Beatles, Metallica, AC/DC, Neil Young, Creedence Clearwater Revival, Steve Ray Vaughan, BB King, ZZ Top e por aí vai. Axé, pagode e essas bandinhas emo, tipo NX Zero e Restart, são totalmente proibidas na playlist.

E seu ambiente de desenvolvimento, como é?

Agregador com blogs sobre desenvolvimento para iOS

Recentemente criei um agregador com diversos blogs sobre desenvolvimento para iOS.
 Criei dois, na verdade. Um com blogs em inglês e outro com blogs
 nacionais:

A ideia é agregar os blogs como um todo, sem a censura bitolada que
outros agregadores de blogs usam para filtrar o conteúdo que é
publicado.

Para participar do agregador não precisa falar apenas sobre
desenvolvimento para iOS, mas isto tem que ser o foco principal. Eu 
até aceito outros tipos de posts, já que há outros temas que podem nos
interessar (boas práticas, metodologia etc).

Gostaria de sugestões de blogs que podem ser adicionados ao planeta. Principalmente blogs nacionais.

15 de May de 2011

Minha primeira semana com o Xoom

Mensagens subliminares...

A pouco mais de uma semana estou usando o Xoom da Motorola, o primeiro tablet com o Android Honeycomb, e até o momento as impressões que tive são as melhores possiveis.

Desde de quando começou essa explosão de tablets,  sempre me perguntei duas coisas: para que eu teria um tablet e para que isso serve? A resposta para esses questionamentos estará no fim do post.

Logo que você liga o aparelho você tem uma pequena má surpresa, no modelo 3G ele requer um sim card para que você possa entrar no sistema, passado esse pequeno incomodo, logo você está configurando sua conta Google.

O xoom, como dito anteriormente, vem com o Android 3.0 e para quem está acostumado com o sistema Android logo percebe as diferenças, é uma interface bem diferente e com conceitos diferentes. O dispositivo não tem botões de navegação, ele tem apenas o botão de liga e desliga e os controles de volume, toda a navegação é feita por software na própria tela do Xoom.

Transição de tela

A primeira vista a transição de tela do Xoom é lenta ao se comparar com o Ipad, contudo, depois de muito pensar a respeito eu notei que o ambiente do Xoom é 3D e quando você vai mudar de ambiente ele gira o foco e renderiza os icones. Isso é o mais puro achismo e não tem o mínimo embasamento  técnico. De qualquer forma em qualquer programa a transição de telas no Xoom é rápida e suave.

Cameras

O Xoom tem duas cameras, uma frontal para video chamadas e uma traseira para filmagens e fotos. As duas cameras me impressionaram bastante, mas a camera frontal numa chamada de video do Gtalk me surpreendeu.

Aplicativos

Engraçado como ao ler reviews em alguns sites/blogs de tecnologia algo que sempre é colocado em evidencia, talvez por falta de imparcialidade e paixão pelo concorrente, é o fato de ter poucos aplicativos modificados/desenvolvidos para uma tela de 10.1 polegadas. Quando você começa a usar o xoom e instalar os aplicativos que você está acostumado a usar no seu celular, você não nota grandes diferenças ou impecilhos de uso. Por exemplo, uso o twicca que é um cliente para twitter e ele obviamente não é modificado para o tablet e simplesmente ele só amplia a experiência que eu tinha no celular.

As melhores surpresas no honeycomb são os apps do Gmail e Gtalk. A interface do Gmail para tablet é fantastica, dá até vontade de não usar mais a interface web ;) . O Gtalk como eu já disse, tem a capacidade de chat com video que é algo que sempre senti falta e o melhor, as chamadas podem ser feitas do xoom para qualquer outro device com Gtalk e suporte a video, sem restrições de sistema operacional!

Outro ponto forte, a Motorola antes de lançar o Xoom logo correu e fez diversas parcerias e assim é possivel ter app da Saraiva que te dá direito a 6 livros gratuitos, app da Folha e da Abril, entre outros. Eu não sou um grande fã da leitura digital, eu realmente gosto de ter o livro e le-lo da maneira que eu achar melhor. Lê no Xoom não é ruim, mas não chega a ser a experiencia mais agradavel e isso vale para qualquer tablet, o peso deles dependendo da posição gera um certo desconforto. Para leituras ocasionais acredito que ele se de muito bem.

Navegador

O navegador é uma versão leve do chrome, que na pratica que dizer que você tem um browser normal no seu tablet apesar da maioria dos sites reconhece-lo como um navegador mobile, o que não é tão ruim, pois a leitura nas versões mobiles geralmente são melhores. Outro ponto forte é a possibilidade de sincronizar o chrome do Xoom, desse modo você tem um ambiente de navegação unico em todos os seus devices independente de sistema operacional.

Travamentos

Rá! Nenhuma até o momento, e olha que uso muito e já instalei tudo que é tranqueira nele.

Updates

O xoom americano tem software 100% Google, na pratica isso quer dizer que o Google é responsavel pelos updates. No Brasil, a Motorola usa uma room baseada na americana para atender as redes de telefonia 3G e talvez outras coisas mais. Em partes os donos do Xoom brasileiro precisam da motorola para terem versões atualizadas, na pratica isso pode ser um pouco diferente já que o bootloader do dispositivo é destravado…

Conclusão

A ideia aqui não era dar um review tecnico, as especificações estão por toda a internet, queria mesmo era passar um pouco da experiencia de uso.

Ainda continuo sem saber qual a utilidade de tablet, uma vez que ele faz um pouco de tudo. Acredito que o principal seja ter um ambiente, de certa forma ilimitado, a mão a qualquer momento.

Quer comprar um tablet, o Xoom é uma ótima opção e eu recomendo fortemente. Ótimo hardware e muito bom software fazem do Xoom de longe o melhor tablet que já tive contato.

 

 

07 de April de 2011

12 de March de 2011

Cheese 2.91.91 using Camerabin

In January I started changing Cheese to use Camerabin as its pipeline base. I blogged about it twice, but, in case you missed it or forgot everything about it, let me repeat myself: Camerabin is the high level GStreamer element that basically does what a camera does, that is, take pictures, record video and show preview. Since Cheese does all that and more, it makes sense to use this element instead of re-implementing it all. The news part is that this work is now in Cheese’s master branch and also in release 2.91.91.

There are some other things I haven’t posted about yet:

Event handling: There was a warning in Cheese after the change to Camerabin which said “Internal GStreamer error: clock problem“. Investigating that I discovered that it was a problem in the input-selector that Camerabin uses internally.

Right now Camerabin has a copy of input-selector, because it uses the “select-all” property that was removed from current input-selector. The problem was that the input-selector didn’t handle upstream events (from the sink to the source direction) when the input-selector had the “select-all” property set. Well, input-selector can have many inputs and choose among them, as you can guess from the name. So, when select-all is set you need to send the event to all of those inputs. Other than the warning, this actually has no effect in Cheese’s case, because the event that is not forwarded (a latency event) wouldn’t actually be handled by the elements that don’t get it. Even so, I submitted a patch which was committed to master branch of gst-plugins-bad.

Taking photo without saving: Cheese Camera has a method that takes a photo and then provides the picture as a GDK pixbuf without saving it. The api may not be the best and there were some nice comments on how to improve it, but at least in Cheese without Camerabin this worked and it was used inside of cheese-avatar-chooser. Well, I didn’t realize that before my last blog post about Camerabin, but this was totally broken in my Camerabin branch, in fact, I hadn’t implement it at all.

Camerabin can send a preview message after taking a photo if you set the preview-caps with the desired format for the preview. I thought using the preview message was the best way to implement cheese_camera_take_photo_pixbuf(). The problem is that Camerabin only took photos to save them too, meaning the file name of the photo to be saved had to be set. Right now Cheese works around that by setting the file name to /dev/null, but I also sent a patch to Camerabin to allow taking a picture without saving if preview-caps is set, meaning it won’t encode the image just to save it to /dev/null. I’m keeping the workaround for now, since the change wasn’t released yet, but we will be able to remove it in the future.

Many thanks to Thiago Santos, who held my hand when I met those and other problems in Camerabin and who always encourages me to fix stuff and send patches.

I’m very excited about this change in Cheese. I’m sure there will be bugs, but I think using Camerabin will make some improvements in Cheese easier and we will grow with Camerabin (and maybe Camerabin2 in the future) and also push it to be better.

02 de March de 2011

Terminator no GNOME

Sim, vamos falar de Terminator, e não, não estamos falando do Arnold ;)

O Terminator é um terminal simples e IMHO muito mais produtivo que os terminais mais comuns(gnome-terminal) ou mais alternativos(guake) encontrados para GNOME.

O principal recurso, que o diferencia dos outros, é o fator de poder dividir e sub-dividir a janela em pequenos terminais. Usando um monitor grande, ele é praticamente a ultima coca-cola do deserto!

Quando você abre o terminal a tela dele é comum

Com essa tela aberta você trata-la como um gnome-terminal e abrir abas com um simples Ctrl+t . Mas nossa ideia é aproveitar as funções de divisão de telas. Então com um Ctrl+shift+e você divide a tela verticalmente como mostrado abaixo.

Com essa tela eu geralmente movo o foco para o terminal da esquerda, você pode navegar entre terminais tanto clicando neles ou com ALT+seta direcional, e a divido-a horizontalmente com Ctrl+shift+o.  Essa é a minha tela padrão de trabalho. Uso o terminal comprido para atividades que requerem uma tela mais extensa e as menores para conexões locais e ssh usando screen(falarei mais e mostrarei dicas e meu arquivo de configuração no proximo post).

Em qualquer um dos terminais você pode maximiza-lo para preencher a tela inteira com um simples Ctrl+shift+x.

Esse é o modo em que eu o uso, eu já tentei faze-lo salvar esse estado mas não consegui e pela mais pura preguiça não tentei mais ou mesmo alterei o Terminator para fazer isso. Se você o usa, ou começou a usar agora por causa do post, conte aqui como é a sua configuração ideal de tela.

Você encontra o Terminator nos melhores repositórios da sua distro favorita. :)

Atualização: o Vitor deixou a dica aqui nos comentários de como fazer para salvar as configurações do Terminator, testei aqui e funcionou bem ;)

20 de February de 2011

My GTK3 porting story

It is now possible to run Cheese using GTK+ 3 getting it from Cheese’s branch gtk3.

Cheese has a gtk3 branch for a while, but until very recently it only had one patch changing mostly versions in configure.ac. Then Bastien Nocera made 3 more patches changing code of CheeseWidget, CheeseFlash and um-crop-area. I wanted to use the changes, and silly me, I thought the branch was going to compile when I first tried to run it. It turns out that I spent days on it until it finally compiled and then a little more time before I was able to run it.

Most of the changes were on build system and Cheese’s vala code. I have never programmed in vala before, so this was a learning opportunity with some challenges in the way.

Funny story

Cheese was still using libunique-1.0, but in order to work with gtk3 I would have to switch to libunique-3.0. There was no vala binding for libunique 3, but I also hadn’t found one for clutter-gtk-1.0 and I was using the GObject Instrospection one instead and it seemed to work at the time.

Using gir files didn’t work so well with libunique. Vala was loading the right gir file, but it said the namespace “Unique” did not exist. So, I asked for help on the #vala channel. The first piece of advice was to switch to GApplication instead of using libunique, but I didn’t know how hard that would be and I wanted to understand why I was unable to use libunique-3.0 first. With some more help from someone else in the #vala channel I found out that the Unique-3.0.gir file had the wrong package name on it. As I didn’t know how to fix that and I didn’t even know if it was a problem in libunique or a GObject Introspection parsing problem I asked for help in #introspection.

In the #introspection channel, Emmanuele Bassi (ebassi) was the one that helped me, libunique’s maintainer. Isn’t it nice when that happens? I mean, you’re just asking for anyone less clueless than you to help, but you can actually talk with people that work on what you’re using. Anyway, continuing with the long story, ebassi told me the problem was in libunique, that he wouldn’t work on it soon, but he encouraged me to file a bug for it and I did. It turned out that the bug was easy to fix (for him at least) and something like 15 mins later he had fixed it and pushed it to master already. That was a nice surprise!

But my problems didn’t end there. After I fixed some GObject Introspection annotation in libunique for my code to work, valac started to crash with a segfault. I reported it, but I still don’t know what the exact problem was. The only way I found to fix it was to switch to GtkApplication and stop using libunique. If only I had listened to that first advice! Using clutter-gtk with GObject Introspection did not work in the end either, but turns out I was just missing the recently released vala binding for it.

I learned many things on this quest. I had never looked at gir files or vapi files before and I learned a little trying to debug and fix problems. The non-technical lessons were: it’s really painful to use stuff that is new and not widely used (yet?), you will find problems. But it’s also very nice to be able to fix the problems and work with helpful people.

By the way, to share my love for GNOME I’m organizing a GNOME 3.0 Release party in my town – Belo Horizonte, Brazil. So, if you’re in the area, save April 9th and get in touch if you want to help with organization.

Update: Patricia Santana Cruz had already made a patch to port Cheese to Gtk.Application (which is also way better than mine), so if I was any smarter I wouldn’t have half of the work I did. And now I know she is also one of the responsibles for we having the clutter-gtk-1.0 binding for vala too and she is working on some more bugs in vala and going after the warnings that affects Cheese. In short, she is awesome!

13 de February de 2011

O Nícolas chegou.

Olá pessoal,

O Nícolas chegou :D . Na verdade ele chegou há 22 dias, mas confesso que ainda não tinha achado tempo e inspiração para escrever, foi mais falta de tempo do que inspiração, mas hoje saiu.

Bom, ele chegou com 36 semans, convertendo isso para meses foi no 8º mês que ele nasceu. Veio um pouco prematuro, mas veio saudável.

Ele, apesar de ter nascido com 8 meses, nasceu com bastante saúde. A data do  nascimento dele foi dia 21/01/2011, um dia depois do aniversário da Carol, minha esposa.

Penso que este foi o maior presente dela, e sem dúvida meu também.

Hoje, já com 22 dias, ele é um moleque esperto e sistemático (Sinto algo semelhante com minha pessoa no ar hehe).

Então para quem ainda não o viu, vou colocar a fotinha dele aqui para todos.

Nícolas Volpato Jorge

Nícolas Volpato Jorge

Não tem muito o que falar… quem é pai sabe o que eu to tentando falar neste pequeno post.

Um abraço para todos.

Ps.: Recomendo um filhão para quem ainda não tem :D

Google Bookmarks Technorati Favorites Twitter Facebook Google Buzz LinkedIn FriendFeed Identi.ca Orkut Tumblr Delicious Reddit WordPress Share


29 de January de 2011

05 de November de 2010

Falta de competência ou má-fé?

Quando o meu notebook começou a apresentar uma falha na imagem de acordo com a inclinação da tela, achei que era algum cabo solto. Como isso foi só piorando, e infelizmente a garantia havia expirado há poucos dias, resolvi levá-lo numa loja no prédio onde trabalho aqui em Brasília. Trata-se da loja Só Notebook. O orçamento chegou salgado: R$ 600 ou R$ 650, não me lembro bem. Segundo o técnico, o problema era a tela, que deveria ser trocada e por, coincidência, havia uma lá no estoque. Embora eles tenham demorado a dar o orçamento, prometeram fazer o serviço bem rápido.

Não fiquei convencido e resolvi levar o notebook na loja autorizada da Positivo: a PcLink. Sim, é aquele SIM + 1455. Logo que deixei o notebook lá, o rapaz arriscou: “Deve ser o cabo flat; se for, sai R$ 250.” Após alguns dias veio a confirmação. O notebook agora está funcionando muito bem. O que dizer disso?


Filed under: Variedades

27 de October de 2010

Listadmin: Administrando as filas do mailman de forma rápida e simples

mailman

Além de fazer parte do Sysadmin Team do GNOME também colaboro com o Moderator Team. Esta equipe de 02 pessoas é responsável por moderar todas as 250 listas existentes no Projeto GNOME.

Até pouquissimo tempo este trabalho ultra-chato era feito através do ambiente de gerência Web, só que as coisas estão mudando.

Christer Edwards, atual coordenador dos Sysadmins, recomendou a utilização da ferramenta listadmin. Esta excelente ferramenta facilita a moderação de várias listas de discurssão de forma bastante eficaz através da linha de comando.

Agora vamos ao que interessa:


Instalação

aptitude install listadmin


Configuração

Crie o arquivo .listadmin.ini no diretório home do seu usuário com a seguinte sintaxe:

adminurl – Informe a URL da lista
default – Informe a ação padrão Approve,Reject,Discard,Skip,view Body,Full,jump
log – Informe onde será gravado o arquivo de log

password – Informe a senha da lista
lista@domain.com – Informe o email da lista

Exemplo:

vim ~/.listadmin.ini

adminurl http://mail.gnome.org/mailman/admindb/gnome-love
default discard
log ~/.listadmin.log

password senhalista
gnome-love@gnome.org

Altere as permissões do arquivo

chmod 744 ~/.listadmin.ini

Agora é só correr pro abraço

listadmin

[1/1] ============== gnome-love@gnome.org ==============================
From: skovacs@duaa.duke.edu
Subject: Oct 27/10/2010
Reason: Post by non-member to a members-only list Spam? 2
Approve/Reject/Discard/Skip/view Body/Full/jump #/Undo/Help/Quit [D] ?
Submit changes? [yes]

Desta forma a administração das listas do GNOME ficará simples e rápida.

19 de October de 2010

Linux no Brasil? Só em computador caro

Criticar o movimento do software livre é sempre uma atitude perigosa, mas tem algo que eu realmente não entendo.

O governo brasileiro criou um projeto para baratear computadores chamado “Computador para todos” e incentiva o uso de software livre. Contudo, os computadores mais baratos vendidos pelas lojas são montados com placas SiS e VIA, empresas que notoriamente não investem em drivers para o sistema operacional Linux. O resultado disso é que para esses computadores funcionarem com Linux são necessárias algumas gambiarras. Se a comunidade estimular consumidores a instalarem Linux em suas máquinas populares, estes novos usuários podem enfrentar um grande aborrecimento e confirmar aquela máxima: Linux é difícil.

Os desenvolvedores de fora do Brasil não estão muito preocupados com isso. Pelo menos é o que se observa nos fóruns. Se os próprios desenvolvedores brasileiros não desenvolverem drivers para essas placas, o panorama do Linux continuará a ser irônico: só os usuários que possuem máquinas mais caras, bem montadas, usam o sistema operacional livre. Se a base de usuários é 1%, 2% ou mais… não importa. Ela permanecerá limitada aqui no Brasil ao hardware de boa qualidade.

Sabemos que o usuário Xing Ling ganha espaço e os produtos chineses há tempos já invadem o Brasil (e o resto do mundo). É no camelô que a Microsoft mais faz sucesso. Se o primeiro mundo do Linux seguir ignorando os proprietários de computadores ruins e baratos, a Microsoft agradecerá: continuará tolerando a pirataria nos camelôs e terá no “Computador para todos” um grande meio para desqualificar o software livre. Enfim, como sempre, o Windows vai manter a grande maioria de usuários. Isso não é ideologia, é uma questão de mercado, prática e simples. Simples assim: se o usuário estiver preocupado com a marca, comprará um computador da Apple, cheio de estilo; do contrário, comprará um barato, pensando na memória e no espaço do disco, sem se preocupar com a qualidade da placa.


Filed under: Software livre

09 de October de 2010

Palestras no IV ENSL e participação na H2HC Conference

Em novembro participarei de 02 grandes eventos. Iniciando com o IV ENSL e o VII Fórum Gnome dias 05 e 06 em Natal/RN onde farei 02 palestras.

IV ENSL

No VII Fórum Gnome que ocorrerá no IV ENSL o tema será “Por trás da Infra-estrutura do GNOME: Trabalho para Sysadmins”, nesta apresentação vou mostrar como funciona a infra-estrutura por trás do Projeto Gnome , quem são as pessoas e como se tornar um sysadmin deste grande projeto.

A apresentação aprovada pelos avaliadores foi “Ataques e Contra-medidas – Como proteger seus sistemas na Cyberwar” nela apresentarei a metodologia por trás de um ataque, dicas de como se proteger, e como não poderia deixar de acontecer farei um HandsOn explorando alguns 0days bastantes conhecidos.

H2HC

No final ( 26 a 29 ) estarei no H2HC ( Hackers to Hackers Conference ), evento que reuni a nata dos hackers brasileiros. Os seguintes palestrantes confirmaram presença:

Anchises De Paula – Security Intelligence Analyst, iDefense
Bruno Oliveira – Security Consultant at Trustwave’s Spiderlabs
Carlos Sarraute – Researcher, CoreLabs
Dario Filho – André Grégio – Mestrando e Doutorando – Unicamp
Eric Filiol – Directeur du laboratoire de virologie et de cryptologie opérationnelles – ESIEA Ouest
Fermin Sena – Software Security Engineer, Microsoft
Jeremy Brown – Security Researcher – Tenable
Matthieu Suiche – Founder, MoonSols
Nelson Brito – (Independent Researcher)
Ranieri Romera – Threat Researcher, TrendMicro
Rodrigo Montoro – TrustWave SpiderLabs Researcher
Sergey Bratus – Research Assistant Professor, Computer Science at Dartmouth College
Tony Rodrigues – (Independent Consultant)
Wagner Elias – Research & Development Manager, Conviso IT Security

Com certeza estes eventos trarão muito conhecimento e muiiitttaaa diversão!!!

Agradecimentos:

* A Colivre por patrocinar minha ida ao H2HC Conference.

* A Gnome Foundation e a organização do IV ENSL por permitir minha presença em Natal.

09 de August de 2010

CGI.br: Quem são os brasileiros que usam Linux?

Li recentemente a Pesquisa sobre o Uso das Tecnologias da Informação e da Comunicação no Brasil 2009, publicada pelo Comitê Gestor da Internet no Brasil, e descobri que o documento traz inclusive estatísticas de sistema operacional. Em resumo, 86% das famílias brasileiras têm o Windows instalado em seu computador principal; essa proporção é de 1% para o GNU/Linux, e desprezível para Mac e outros. 13% dos entrevistados não souberam ou não quiseram responder à pergunta.

O relatório prossegue analisando a variação dessas proporções de acordo com o local (área urbana ou rural), a região do país, a renda familiar, e a classe social/econômica. Em quase todos os grupos, o uso de Linux continua em 1%. As exceções ficam para:

  • Área rural: uso desprezível;
  • Região Norte: 2% de participação;
  • Renda familiar maior que R$ 4.650: 3% de participação;
  • Renda familiar entre R$ 931 e R$ 1.395; e entre R$ 2.326 e R$ 4.650: uso desprezível.

Não houve variação por classe econômica.

A fatia da população brasileira que mais usa Linux parece ser a mesma que tem banda larga: os moradores da área urbana (quase não existe banda larga na área rural) e aqueles com renda familiar mensal acima de R$ 4.650. Já vai longe a época em que o modelo de negócios da Conectiva era vender seu sistema operacional numa caixa.

Imagino que trabalhar com tecnologia também ajude, mas isso não foi avaliado na pesquisa.

Já o programa Computador Para Todos parece ter tido um efeito modesto. As famílias com renda mensal menor que R$ 931 usam o sistema operacional mais que os do estrato imediatamente superior, mas ainda assim a proporção ficou em meros 1%.

O que mais me surpreendeu foi a região Norte. Colegas nortistas, será que as comunidades daí são mais ativas?

Outra informação que não entendi foi a proporção não variar de acordo com a classe econômica. Intuitivamente, as pessoas com maior renda estão numa classe econômica superior, mas isso não é verdade, ou ao menos não para os usuários de Linux.

O estudo do CGI.br usou o critério de classe social/econômica da Associação Brasileira de Empresas de Pesquisa. A ABEP também divide as classes econômicas pela renda (como o IBGE), mas disponibiliza uma ferramenta que permite estimar a renda. Essa ferramenta (o Critério de Classificação Econômica Brasil — CCEB) consiste num sistema de pontos atribuídos à posse de bens de consumo e ao grau de instrução do chefe da família.

É possível ganhar muito e ter poucos bens ou pouco estudo, e talvez esse seja o perfil dos usuários de Linux.

O estudo só considerou aquilo que todo o mundo entende por computador, ou seja, dispositivos embarcados ou celulares não contam. A metodologia não considerou os computadores que não o principal, e não consegui encontrar na metodologia a definição operacional de o que seria um computador principal, ou como lidar com o dual boot.

Como já foi dito, em 13% dos domicílios o entrevistado não soube informar o sistema operacional. Essa proporção é ainda maior na região rural, nos domicílios com menor renda familiar, e nas classes D e E. Esses números são uma ordem de grandeza superiores à fatia que usa Linux, causando imprecisão na estimativa.

Reparem que o 1% de usuários Linux é a proporção dentre todos os entrevistados, e não apenas entre os que souberam responder à pergunta. Dessa forma, o número real de domicílios brasileiros com Linux é qualquer coisa entre 1% e 14%.


16 de February de 2010

Últimos acontecimentos

Pois é... faz tempo que não blogo :-( . O final de 2009 e começo de 2010 foi bastante corrido: tive que terminar meu trabalho de conclusão de curso e comecei a trabalhar. Mas agora as coisas já estão mais calmas.

Finalmente me formei. Agora posso me declarar cientista da computação e já estou aprovado no mestrado, que começa mês que vem. Minha colação de grau foi na quarta feira e agora fico no aguardo da colação de gala, na qual irão meus familiares e amigos.

Em dezembro comecei a trabalhar. Estou trabalhando na agência de publicidade Sabbre fazendo o desenvolvimento de aplicações web com Ruby on Rails. Um trabalho que tem me dado motivos para gostar do que faço e que me tem feito aprender muitas coisas.

Infelizmente, tive que abrir mão de algumas coisas, principalmente de software livre. Saí da equipe de desenvolvimento do archlinux Brasil, pois não estava conseguindo tempo para me dedicar. Como não gosto de assumir compromissos que não posso cumprir, eu acabei optando por sair. Desejo boa sorte e muito sucesso a todas as pessoas que continuam por lá. Continuo agora só gerenciando a equipe de tradução do GNOME, que aliás já está em pleno ritmo de tradução para o GNOME 2.30.

 

21 de December de 2009

Barcelona campeão mundial

Parabéns ao Barcelona pelo título conquistado. Eu cheguei a pensar que daria Estudiantes.

Enquanto eles comemoram o primeiro título, lembro que já conquistamos três vezes (inclusive uma delas contra eles).

Um fato que eu não sabia e agora sei é que no mesmo ano da disputa ganhamos outro título (do Torneio Teresa Herrera) contra eles. E de 4 a 1!!! Na época o Barcelona era bem "maior do mundo" do que é hoje.

Saudações tricolores!

31 de October de 2009

Latinoware

Semana passada fui no Latinoware e foi bastante interessante. Lá palestrei sobre nossa equipe de tradução do GNOME e tive algumas experiências interessantes:

  • Foi bacana rever alguns e conhecer boa parte do pessoal do GNOME Brasil. Espero vê-los mais vezes;
  • Também revi o Farid, que trabalha comigo no Archlinux Brasil, ficamos de conversar mais como acabei não podendo ir no último dia devido ao atraso do motorista que ia buscar a gente no Paraguay, não conversamos :-( ;
  • As palestras também foram legais: o Lício falou sobre o GNOME Love, eu falei sobre a equipe de tradução do GNOME para nosso idioma, o Binhara falou sobre o Mono, a Izabel e a Luciana falaram sobre o GNOME Women (eu infelizmente perdi essa palestra :-( ), o Vinicius Depizzol falou sobre a experiência do usuário no GNOME e para finalizar o Tiago falou sobre personalização do GNOME. Um ótimo conjunto de palestras :-) ;
  • Foi legal discutir coisas, tanto técnicas como não técnicas, com as outras pessoas do GNOME e de outros projetos como o Fedora. Aliás esses eventos acabam proporcionando trocas de experiências que contribuem em muito com os projetos de SL. Aliás isso é uma das coisas mais importantes de eventos como esses e tenho que ser bastante grato à Fundação GNOME por me patrocinar e ter a oportunidade de fazer coisas como essa, além de poder participar do evento e conhecer mais pessoas;
  • Depois de assistir uma palestra interessante sobre o Mono com o Binhara e depois de ouvir o Everaldo falar horas e horas disso, fiquei com vontade de aprender a programar nesse ambiente;
  • Conversei com o João Sebastião sobre como podemos fazer a adequação do GNOME para a nova ortografia. Para corrigir algumas coisas nas versões antigas ele fez um script que pode ser bastante útil para agilizar nosso trabalho. Próximos capítulos desta trama serão divulgados aqui neste blog em breve ;-) ;
  • Conheci o Paraguay, e embora este país tenha muitos produtos interessantes a venda ele tem a pior poluição visual que já vi;
  • Não consegui ver as cataratas, aliás faltou tempo para isso :-( ;
  • Minha palestra não teve um grande público, mas acho que deu para passar a mensagem da equipe. O pdf aparecerá em breve por aqui;
  • Foz do Iguaçu é uma cidade bastante esquisita: lá é úmido pra caramba, escurece bem tarde e isso me faz perder a noção do tempo;
  • Não gostei muito de comida Baiana. Tem muita cebola. E eu odeio cebola. Aliás, a coisa que menos comi lá foi comida paranaense;
  • A organização do Latinoware também deixou muito a desejar, já fui em eventos mais bem organizados e acho que o Latinoware também podia ser;
  • Agradeço a fundação GNOME por me patrocinar, ao Leonardo por me indicar para palestrar e a Izabel, que correu atrás de tudo por lá (aliás, depois que organizei junto com amigos a ida do pessoal da minha faculdade pro FISL, aprendi a agradecer as pessoas que fazem acontecer);

É isso aí :-) Que o próximo evento venha logo e que eu tenha a oportunidade de vê-los em breve.

UPDATE:Aqui vão os slides.

 

10 de June de 2007

Violent swerves in life

One day, you’re writing code, packaging and translating it, administering systems and giving talks about free software. The next day, you realise you want to go to Law school.

It does not feel any different from starting all over. Fortunately, it feels like it is soon enough.

23 de September de 2006

Thanks, Murphy!

So yeah… I guess I’ll have to take back what I said about clearing the accounts backlog until the end of the weekend, even though I’ve already gone through more than half of it.

Why? Quite simple. My hard disk finally died, after a couple of months spitting out I/O errors and corrupting filesystems all around.

Oh well…