Planeta PSL-BA :: pensando o software livre na Bahia

11/05/2012

Serge Rehem

Macarrão com Marshmallow

Eu sei, estou sumido deste blog. Foi proposital. Muitas mudanças acontecendo, em várias dimensões. Estou passando por mais um período sabático, desta vez mais profundo do que o anterior.

Desde o final do ano passado estou com novos desafios profissionais, relacionados a aplicativos móveis para Android e iOS. Temos aprendido muito e agora, mais do que nunca, temos dado valor à prototipação e ao feedback contínuo do cliente. Continuamos usando Agile com bastante sucesso.

Hoje me deparei com esse vídeo sensacional do TED Talk, sobre construção de equipes: "Tom Wujec apresenta uma surpreendente pesquisa sobre o "problema do marshmallow" -- uma dinâmica de grupo simples que envolve espaguete seco, um metro de fita adesiva e um marshmallow. Quem conseguir construir a torre mais alta usando estes ingredientes? E por que um grupo inesperado sempre se sai melhor que a média?"

Divirta-se!



Mais informações em MarshmallowChallenge.com.


May 11, 2012 08:21 PM

10/05/2012

JavaBahia

2º JavaBahia nas Faculdades de 2012





     O evento será um encontro do javabahia, no entanto esse será especial, pois contará com a presença de dois palestrantes internacionais.



Palestrantes:




Patrick Corren – Presidente do comitê JCP - http://jcp.org/ja/press/pmo/pmo_profiles/commFocusPMO-curran




Stephen Chin- JavaFX evangelist, author, speaker, and open-source hacker -http://steveonjava.com/























Local: FIB Rua Xingu 179 – Jardim Atalaia, SALVADOR – 41770-130.
Sala 413 , 4º andar

Inscrições: http://www.jugevents.org/jugevents/event/participants.html?id=45850
Entrada: Gratuita.
Data: 23 de maio, quarta-feira, 18:30.


May 10, 2012 06:26 PM

07/05/2012

Lucas Almeida Rocha

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!

May 07, 2012 05:53 PM

05/05/2012

Guilherme Jr.

Baixando vídeos (youtube, vimeo, blip.tv, etc) via linha de comando do linux

Hoje precisei baixar umas vídeo aulas do youtube e procurei uma programa que fizesse isso para mim de forma simples e rápida. Depois de uma busca no google achei o movgrab.

INSTALAÇÃO

$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install movgrab

USANDO

Para usar o movgrab simplesmente passe a URL do vídeo que você quer baixar.

$ movgrab http://www.youtube.com/watch?v=448gqqilZmU

May 05, 2012 01:24 PM

21/04/2012

Rafael Gomes

Active Check com multiplos servidores no Zabbix

Qualquer administrador de infraestrutura de grandes ambientes ao estudar sobre qualquer solução, seja ela livre ou não, sempre pensa: “Como posso escalar isso?”

E no Zabbix esse interesse sempre existiu, seja na utilização de proxy ou servidores atuando de forma distribuída, porém uma ótima funcionalidade do Zabbix, que é a checagem ativa (Active Check), tinha o limitador de que um agente  podia se comunicar com apenas um predeterminado servidor, ou seja, se você tivesse vários servidores em um ambiente redundante, teria que utilizar softwares externos para prover alta-disponibilidade (tal como heartbeat).

Porém na versão 1.8.12 do Zabbix, será possível utilizar mais do que um servidor para checagens ativas!

No arquivo de configuração do agente, existe um novo parâmetro, que é o ServerActive. Ele funciona da seguinte forma:

Se o parâmetro ServerActive estiver especificado, o parâmetro utilizado anteriormente para informar o servidor (Server) não será usado para checagens ativas, ou seja, apenas para checagens passivas.
Se o parâmetro ServerActive não estiver especificado, a configuração continua como versões anteriores, ou seja, o primeiro host do parâmetro Server será utilizado para checagens ativas.

 

Segue abaixo um exemplo, onde demonstra que pode ser utilizado tanto nome, como endereço IP:

ServerActive=zabbixserver,zabbixproxy1,10.1.13.13

Mas se um dos servidores estiver em uma porta diferente? Apenas coloque a porta após dois pontos, como podemos ver abaixo:

ServerActive=zabbixserver,zabbixproxy1:20051,10.1.13.13

Novamente demonstrando seu interesse pelas tendências, o IPV6 também é suportado, como podemos ver no exemplo abaixo:

ServerActive=zabbixproxy1:20051,[::1]:30051,::1,[::1]

Perceba que como o IPV6 também utiliza dois pontos no seu endereçamento, a utilização de colchetes são necessários para esses casos, ou seja, se não tiver porta a especificar, não precisa necessariamente usar colchete.

Lembrando que caso queira mudar a porta de TODOS os servidores, utilize o parâmetro ServerPort, já presente no seu arquivo de configuração.

Na versão 2.0, que ainda está em beta, existe uma pequena diferença. O parâmetro Server será utilizado APENAS para checagens passivas, ou seja, checagens ativas serão APENAS consideradas no parâmetro ServerActive.

Essa funcionalidade no momento da escrita desse post, ainda estava em teste, sob o nome de 1.8.12rc1.

Por favor, baixe essa versão de teste e reporte possíveis problemas, dessa forma estará ajudando a construir o software que utiliza.

Fonte : Zabbix Blog

April 21, 2012 11:39 PM

19/04/2012

Live Blue News

One week to go until LAkademy 2012

Hi there,

Two years ago the 1st Akademy-BR took place at Praia do Forte (BA), bringing together roughly 30 KDE Brazilian contributors, from coders to promo and translation. In that time, new regional KDE groups in Minas Gerais, Piauí and Rio Grande do Sul had just been formed and fellows like Lamarque, Filipe, and Aracele are still rocking on KDE. Akademy-BR was a nice opportunity to meet those guys in person and try to balance our efforts in pushing KDE and Brazilian community forward. From that time till now things got somehow stabilized (actually put myself as an outlier for that statistics – PhD last year sucks :) ).

An early attempt to have the 2nd Akademy-BR last year in Minas Gerais couldn’t be successfully acomplished but, as a positive side-effect, that fortunately culminated in the 1st LAkademy: Latin-American KDE Summit. From 27th April to 1st May, we shall meet at Porto Alegre to evaluate our current scenario, plan our actions in 2012-2013 (in particular, I advocate we need a second LA boost like the one we had in Brazil in 2009) and, of course, hacking. KDE contributors from Argentina, Peru, and Brazil are confirmed. Many thanks to CamilaRaw and Henrique for taking care of local arrangements and KDE e.V. and Claudia in particular to support LAkademy.

Stay tuned, see you …


April 19, 2012 03:05 PM

14/04/2012

Vicente Aguiar

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é

April 14, 2012 02:06 PM

09/04/2012

JavaBahia

NOSQL-BA: Inscrições abertas!!




Abertas as inscrições para o evento NOSQL-BA:
Para saber mais sobre os mini-cursos e palestras acesse:
 http://nosqlba.com.br/

Seja uma patrocinador: http://nosqlba.com.br/nosql-bahia.pdf


Os banco de Dados NOSQL (not only SQL) foram criados, principalmente, para resolver problemas com aplicações web que precisam operar com gigantescas cargas de dados além de poder escalar com grande facilidade. Esses tipos de banco de dados vem sendo usados com muita frequência em redes sociais como Twitter, Facebook, além de persistência em aplicações nas nuvens. Outro ponto importante a citar é a crescente adoção destas novas tecnologias, inclusive em mercados mais conservadores, tais como instituições financeiras e agências governamentais, seus motivos são diversos normalmente para solucionar problemas com flexibilidade, escalabilidade, latência e performance. Para demonstrar, compartilhar essas tecnologias foi criado o evento NOSQL-BA.


April 09, 2012 01:13 PM

08/04/2012

Live Blue News

Lançado o Qt 5 Alpha

Qt 5 Alpha

Por Lars Knoll em 3 de Abril de 2012

O Qt Project tem o orgulho de anunciar o primeiro lançamento do Qt 5 Alpha. Todos os recursos do Qt 5.0 já estão implementados e agradecemos desde já os possíveis testes e feedbacks a serem realizados pelos usuários mais avançados das bibliotecas Qt. Esta é uma versão disponibilizada apenas em código-fonte – consulte a seção “Instalação” abaixo para informações sobre como gerar binários ou encontrar aqueles publicados pela comunidade.

Todo o esforço está sendo colocado agora na estabilização, melhorias no desempenho e documentação. Esperamos comemorar o lançamento final durante o Qt Contributors Summit [qt-project.org] (de 21 a 23 de Junho em Berlin). Toda a sua ajuda é bem vinda!

Download

A versão alpha pode ser obtida em vários formatos no release archive [releases.qt-project.org]

Visão Geral do Qt 5

O Qt 4 foi lançado há quase sete anos e continua hoje totalmente atualizado e competitivo, na sua versão estável 4.8. A próxima grande iteração, 5, aprofunda quatro aspectos essenciais do Qt:

O que está sendo lançado ?

O Qt 5 Alpha inclui os seguintes módulos:

Versões futuras podem incluir mais módulos. Veja a lista completa de módulos disponíveis em Módulos do Qt Essentials e Módulos do Qt Add-Ons .

Demos e exemplos

Alguns exemplos visuais e ilustrativos para os apressadinhos :)

 

O que há de novo ?

Aqui está só um resumo. A lista completa de funcionalidades pode ser encontrada em Características do Qt 5.

Outros detalhes estão disponíveis em: http://qt.gitorious.org/qt/qtbase/blobs/master/dist/changes-5.0.0

Qt Quick

Qt JS Backend

Qt QML

Qt 3D

Qt WebKit

Qt Core

Qt Gui

Qt Network

Qt Location

Qt Widgets

Problemas conhecidos

Instalação

Esta versão inclui apenas os pacotes fontes, sem binários oficiais. Os desenvolvedores devem construir seus próprios binários – ver Instruções de compilação do Qt 5 Alpha.

Você pode procurar também os binários não oficiais publicados pela comunidade.

Veja também Compilando o Qt 5 a partir do Git [qt-project.org].

Portando código existente

Veja Transição do Qt 4 para Qt 5 [wiki.qt-project.org].

Documentação

A documentação da API para o alpha está disponível em documentação Qt 5.0 [qt-project.org].

Comentários

Os desenvolvedores que usam Qt estão convidados a aderir a lista de discussão para compartilhar impressões e buscar ajuda da comunidade.


April 08, 2012 10:19 PM

Guilherme Jr.

Criando tablespace e usuário no Oracle

Dica rápida de como criar tablespace e usuário no Oracle.

CRIANDO TABLESPACE

# mkdir /Oracle
# chown -R oracle.dba /Oracle/
# sqlplus SYSTEM/
SQL> CREATE TABLESPACE NOME_DA_TABLESPACE LOGGING DATAFILE '/Oracle/NOME_DA_TABLESPACE.dbf' SIZE 100m AUTOEXTEND ON NEXT 100m EXTENT MANAGEMENT LOCAL;

CRIANDO USUÁRIO

SQL> CREATE USER usuario IDENTIFIED BY senha DEFAULT TABLESPACE NOME_DA_TABLESPACE QUOTA UNLIMITED ON NOME_DA_TABLESPACE;
SQL> GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE VIEW, CREATE MATERIALIZED VIEW, CREATE TRIGGER, CREATE SEQUENCE, CREATE ANY DIRECTORY, CREATE TYPE, CREATE SYNONYM TO usuario;

April 08, 2012 06:45 PM

06/04/2012

Guilherme Jr.

Instalando Oracle 10g, apache2.2 e php5 com pdo_oci no Debian squeeze

Na última semana peguei um projeto novo que será desenvolvido em PHP e Oracle. Tive alguma dificuldade em achar material de referencia para instalar o PHP com pdo_oci e o Oracle 10g no Debian, por isso escrevi esse passo a passo para facilitar minha vida se eu precisar fazer isso de novo mais tarde e para ajudar quem precise montar um ambiente desses.

ORACLE 10g

Primeiro adicione no fim do arquivo /etc/apt/source.list

deb http://oss.oracle.com/debian unstable main non-free

Depois siga esses passos:

# wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | apt-key add -
# apt-get update
# apt-get install oracle-xe oracle-xe-client
# /etc/init.d/oracle-xe configure

Após digitar o último comando aparecerá essa mensagem

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Dê ENTER

Specify a port that will be used for the database listener [1521]:

ENTER novamente

Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:

Digite a senha

Confirm the password:

Confirme a senha

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:

y se você quer que o Oracle 10g inicie automaticamente no boot

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"

Pronto, o Oracle 10g está instalado. Na minha instalação tive um problema na hora de rodar o sqlplus por isso tive que rodar esse comando abaixo.

# chmod 6751 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle

LIBERANDO ACESSO REMOTO AO APEX

Se você, como eu, precisar acessar o APEX de outra máquina siga os seguintes passos:

# source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
# sqlplus SYSTEM/senha
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
SQL> exit
# /etc/init.d/oracle-xe restart

APACHE 2.2

Instalando o Apache 2.2

# wget http://apache.mirror.pop-sc.rnp.br/apache//httpd/httpd-2.2.22.tar.bz2
# tar -jxvf httpd-2.2.22.tar.bz2
# cd httpd-2.2.22/
# ./configure --enable-suexec --enable-rewrite --enable-so
# make
# make install

Agora edite o arquivo /usr/local/apache2/conf/httpd.conf e modifique p User e Group para www-data

User www-data
Group www-data

Modifique o dono da pasta /usr/local/apache2/htdocs/ para www-data

# chown www-data.www-data-R /usr/local/apache2/htdocs/

PHP 5.4

Instalando o PHP 5.4

# wget http://br2.php.net/distributions/php-5.4.0.tar.bz2
# tar -jxvf php-5.4.0.tar.bz2
# cd php-5.4.0/
# apt-get install libxml2-dev zlib1g-dev libbz2-dev libjpeg62-dev libpng12-dev libmcrypt-dev
# ./configure --enable-bcmath --enable-calendar --enable-dba --enable-exif --enable-ftp --enable-mbstring --enable-shmop --enable-sigchild --enable-soap --enable-sockets --enable-sqlite-utf8 --enable-sysvmsg --enable-wddx --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs --with-bz2 --with-config-file-path=/usr/local/apache2/conf --with-gd --with-gettext --with-mcrypt --with-oci8=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client --with-pdo-oci=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client --with-xmlrpc --with-zlib
# make
# make install
# cp php.ini-development /usr/local/apache2/conf/php.ini

Crie o arquivo /usr/local/apache2/conf/extra/httpd-php5.conf com o conteúdo abaixo.

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

PHPIniDir "/usr/local/apache2/conf"

Mais uma vez edite o arquivo /usr/local/apache2/conf/httpd.conf

Adicionar no fim

Include conf/extra/httpd-php5.conf

Modificar

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

Pronto :)

April 06, 2012 01:29 PM

05/04/2012

Lucas Almeida Rocha

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.

April 05, 2012 11:24 AM

02/04/2012

Wille Marcel

Mapas Livres e Humanitarismo

Cartaz do evento Mapas Livres e Humanitarismo

Estou organizando um evento no dia 10 de abril na UFRB, em Cachoeira-BA. Contaremos com uma palestra de Séverin Menard, integrante francês do Time Humanitário do OpenStreetMap (HOT) e aproveitaremos para fazer o lançamento do site do projeto MapaRec (Mapeamento Colaborativo do Recôncavo).

Séverin vem atuando no Haiti desde o terremoto acontecido no início de 2010, realizando trabalhos de mapeamento do país e de capacitação da população local para produção e uso de mapas.

April 02, 2012 06:38 PM

24/03/2012

Antonio Terceiro

Chamada de grupos de usuários Debian no Brasil

Um tempo atrás o servidor de listas do CIPSGA, onde ficavam as listas dos grupos de usuários Debian, subiu no telhado.

A partir de hoje vamos recriar as listas dos grupos de usuários na infraestrutura do próprio Debian. Pra isso, vamos utilizar o projeto debian-br no alioth e criar as listas lá dentro.

A lista principal, usada pra articulação dos grupos de usuários regionais (ou seja, a lista antes conhecida como “debian-br”), vai ser a debian-br-geral

O padrão de nomes para as listas regionais vai ser o seguinte: debian-br-gud-$uf, onde $uf é a sigla do estado. Por exemplo, as listas para o Debian-RS e Debian-BA já foram criadas, e são chamadas debian-br-gud-rs debian-br-gud-ba, respectivamente.

Para solicitar a criação de novas listas, favor criar um novo tíquete no projeto debian-br, do tipo “Support Request”.

Infelizmente, não se tem backup sequer da lista de e-mails inscritos; por isso, além de recriar as listas vai ser necessário que todo mundo se inscreva novamente. Depois da criação da lista do seu estado, favor espalhar a notícia!

March 24, 2012 01:17 AM

16/03/2012

Wille Marcel

Ajude o Kdenlive, editor de vídeo livre!

Interface do Kdenlive

Como vocês sabem, sentimos falta de um software livre para edição de vídeo que atenda que seja fácil, ágil e atenda todas as necessidades de um uso profissional. O Kdenlive é atualmente o editor de vídeo livre com a melhor interface gráfica, porém ainda é bastante instável. No entanto, isso pode estar perto de ser resolvido.

Um dos problemas dos softwares livres multimídia é que temos poucos desenvolvedores e estes não conseguem dedicar muito do seu tempo aos softwares, pois precisam trabalhar para se sustentar.

Então os desenvolvedores do Kdenlive lançaram uma campanha de financiamento colaborativo para que um dos desenvolvedores possa passar dois meses se dedicando exclusivamente à refatoração do código fonte do Kdenlive. Isso, além de melhorar a performance e corrigir bugs, vai facilitar a entrada de mais desenvolvedores no projeto e acelerar o crescimento do Kdenlive.

Para doar, acesse: http://www.indiegogo.com/kdenlive-re

Colaborem!

PS. O valor mínimo é US$ 5. Quem tiver alguma dificuldade em fazer a doação, me avise que posso fazer a intermediação.

March 16, 2012 12:43 AM

10/03/2012

Vicente Aguiar

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.

March 10, 2012 04:28 PM

05/03/2012

JavaBahia

Chamada de trabalhos para o NOSQL-BA



   Os banco de Dados NOSQL (not only SQL) foram criados, principalmente, para resolver problemas com aplicações web que precisam operar com gigantescas cargas de dados além de poder escalar com grande facilidade. Esses tipos de banco de dados vem sendo usados com muita frequência em redes sociais como Twiter, Facebook, além de persistência em aplicações nas nuvens. Outro ponto importante a citar é a crescente adoção destas novas tecnologias, inclusive em mercados mais conservadores, tais como instituições financeiras e agências governamentais, seus motivos são diversos normalmente para solucionar problemas com flexibilidade, escalabilidade, latência e performance. Para demonstrar, compartilhar essas tecnologias foi criado o evento NOSQL-BA.
O evento está procurando pessoas que desejam compartilhar experiências, falar de cases de sucessos, apresentar tecnologias etc. relacionado ao tema NOSQL.
O evento está confirmado para dias 8-9 de junho na UNIRB, Patamares.
Chamada de trabalhos: http://goo.gl/7sUj3
Proposta do evento: http://goo.gl/B2ncj
Em breve mais informações em: www.nosqlba.com.br


&lt;p&gt;&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Carregando...&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;gt;&lt;/p&gt;


March 05, 2012 01:00 PM

03/03/2012

JavaBahia

Workshop de Tecnologias que Influenciam o Mundo Bahia 2012



March 03, 2012 01:05 AM

01/03/2012

JavaBahia

1º JavaBahia nas Faculdades de 2012


LocalIBES [Itaigara] Rua Luiz Portela da Silva, 628 - Itaigara -
Data:     31/03/2012
Entrada: Gratuito
Descrição: O que são os métodos ágeis, especialmente o Extreme Programming (XP), e como eles se propõem a resolver os problemas que afligem o desenvolvimento de software.
Descrição: Serão apresentadas e discutidas as principais diferenças entre as técnicas de estimativas ágeis e tradicionais em projetos de desenvolvimento de software, destacando as vantagens de se utilizar técnicas mais modermas e ágeis, como o Planning Poker.
Descrição: Para desenvolver software é necessário envolver pessoas com metodologia e também ferramentas. Os problemas a serem resolvidos com software tem ficado cada vez mais complexos, paralelo a isso o ambiente de desenvolvimento também tem evoluído para facilitar o desenvolvimento. Esta palestra aborda como um ambiente de desenvolvimento softwares usando ferramentas livres que ajudam a criar ou manter o projeto facilitando os testes, a aplicação de boas práticas de codificação, refactoring e design evolutivo.
Descrição: Uma forma dinâmica de palestra, em que todos poderão ser palestrantes.

inscrições: http://www.jugevents.org/jugevents/event/show.html?id=44334


March 01, 2012 10:47 PM

29/02/2012

Gabriel "Pnordico" Menezes

Dica Rápida 01: Modificar OWNER de todas as tabelas simultaneamente no PostgreSQL

Dica: Conheça o resultado de um comando antes de executar. Eu não me responsabilizo pelo resultado nem tiro dúvidas sobre a utilização do mesmo.

O comando deve ser executado no console/shell (bash) do sistema operacional.

Tables:

for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" DATABASE` ; do psql -c "alter table $tbl owner to NEW_OWNER" DATABASE ; done

Sequences:

for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" DATABASE` ; do psql -c "alter table $tbl owner to NEW_OWNER" DATABASE ; done

Views:

for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" DATABASE` ; do psql -c "alter table $tbl owner to NEW_OWNER" DATABASE ; done

Retirado daqui.

Alguma sugestão melhor?

February 29, 2012 09:06 PM

Antonio Terceiro

Thesis submitted

Last Friday, after 5 long years, I have finally submitted my PhD thesis. It was quite a relief, more or less as if an elephant was taken off my back.

An English title for my thesis would be Structural Complexity Characterization in Software Systems. Here is an abstract:

This thesis proposes a theory to characterize structural complexity in software systems. This theory aims to identify (i) the contribution of several factors to the structural complexity variation and (ii) the effects of structural complexity in software projects. Possible factors in the structural complexity variation include: human factors, such as general experience of the developers and their familiarity with the different parts of the system; factors related to the changes performed on the system, such as size variation and change diffusion; and organizational factors, such as the maturity of the software development process and the communication structure of the project. Effects of structural complexity include higher effort, and consequently higher cost, in software comprehension and maintenance activities.

To test the validity of the proposed theory, four empirical studies were performed, mining data from free software project repositories. We analyzed historical data from changes performed in 13 systems from different application domains and written in different programming languages.

The results of these studies indicated that all the factors studied influenced the structural complexity variation significantly in at least one of the projects, but different projects were influenced by different sets of factors. The models obtained were capable of describing up to 93% of the structural complexity variation in the projects analyzed.

Keywords: Structural Complexity, Software Maintainance, Human factors in Software Engineering, Mining Software Repositories, Theories in Software Engineering, Empirical Software Engineering, Free/Open Source Software Projects.

Those who read Portuguese can check out the actual thesis text as a PDF file.

Most of the studies discussed in the thesis are presented in English in papers I have published during the last years.

My defense is going to be on March 23rd. If you happen to be at Salvador at that day, please feel cordially invited.

February 29, 2012 12:44 AM

24/02/2012

JavaBahia

Conheça mais sobre o NOSQL- BA




   Os banco de Dados NOSQL (not only SQL) foram criados, principalmente, para resolver problemas com aplicações web que precisam operar com gigantescas cargas de dados além de poder escalar com grande facilidade. Esses tipos de banco de dados vem sendo usados com muita frequência em redes sociais como Twiter, Facebook, além de persistência em aplicações nas nuvens. Outro ponto importante a citar é a crescente adoção destas novas tecnologias, inclusive em mercados mais conservadores, tais como instituições financeiras e agências governamentais, seus motivos são diversos normalmente para solucionar problemas com flexibilidade, escalabilidade, latência e performance. Para demonstrar, compartilhar essas tecnologias foi criado o evento NOSQL-BA.
O evento terá duração de dois dias:


Na segunda-feira, dia 27 de fevereiro de 2012, será aberto a chamadas de trabalhos para o evento, nesse dia também traremos mais detalhes para caso você tenha interesse em apresentar seu trabalho, compartilhar experiência, falar um case de sucesso. O dias prováveis para esse evento será 8-9 de junho.


Em breve mais informações.


February 24, 2012 11:01 AM

23/02/2012

Live Blue News

Pré-venda do Tablet com KDE Plasma superou as expectativas

A inscrição de Pré-venda para o Tablet ’Spark’ KDE Plasma mal abriu e já encerrou, devido à enorme demanda que superou as expectativas.

“Foram tantos pedidos que nós alcançamos nossa capacidade de produção inicial e tivemos que fechar o programa de pré-venda, por enquanto”, disse o líder do projeto Spark, Aaron Seigo.
O Spark terá uma tela multi-touch capacitiva de 7″, um processador ARM CortexA9, 512MB de RAM e 4GB de armazenamento interno. Um slot de cartão SD, várias portas USB e uma mini-HDMI, e espera-se ser vendido por €200.
“Assim que a efetivação da compra puder ser feita, estaremos enviando e-mails para os inscritos na pré-venda, logo, quem se inscreveu primeiro receberá seu Spark primeiro.”

Mais informações sobre o Spark e sobre as inscrições, podem ser visualizadas no blog do desenvolvedor do Spark: aseigo.blogspot.com


February 23, 2012 06:53 PM

15/02/2012

Wille Marcel

VaiVem – Sistema de empréstimos

screenshot de uma das telas do vaivem

Já faz um tempo que comecei a desenvolver o VaiVem um pequeno sistema de controle de empréstimos pra uso na universidade em que trabalho. Esse sistema é voltado para equipamentos de audiovisual, porém pode ser facilmente adaptado para outros tipos de objetos.

O VaiVem é desenvolvido em Django, um framework web escrito com Python. Esse é o primeiro sistema que eu desenvolvi, então não é nada muito complexo.

Os recursos que o Vaivem possui:

- Geração de comprovantes de empréstimo;
- Busca de empréstimos por equipamento ou por usuário;
- Aplicação de penalidades em caso de atraso na devolução;
- Software Livre (Licença Affero GPLv3).

O código está disponível no gitorious: https://gitorious.org/vaivem

Instruções de instalação: https://gitorious.org/vaivem/pages/Home

February 15, 2012 02:12 AM

09/02/2012

Lucas Almeida Rocha

FOSDEM 2012

Mobillians by Brian King (CC-BY-NC)

This year’s FOSDEM was a special one for me. It was the first time I attended it as a Mozillian! I had already met quite a few European community members at MozCamp Europe last year but this FOSDEM was a great opportunity to meet even more Mozillians face-to-face. I stayed at the Mozilla DevRoom most of the conference but also spent some time catching up with my fellow GNOME hackers.

Chris and I gave a “State of Firefox Mobile” talk on Sunday. I usually don’t share my slides because they tend to be too short in content to be useful. However, we wrote some speaker notes that give enough information and context on what we talked about. So, here’s the deck alternating between slides and speaker notes—I wish Speaker Deck had proper support for speaker notes…

All in all, I had a great time at FOSDEM this year! PS: The weather during the conference was quite special too—in a painful way!

February 09, 2012 04:09 PM

31/01/2012

Leonardo Couto Conrado

Parque tecnológico da Bahia


A Bahia está muito perto de ter seu primeiro Parque Tecnológico. 
Este empreendimento surge para abrigar empresas de base tecnológica, centros de pesquisas, universidades e incubadoras de empresas.

Com alto padrão urbanístico, o empreendimento tem um cuidadoso tratamento paisagístico, preservando parte da cobertura da Mata Atlântica e do seu relevo. Localizado na Avenida Paralela, principal eixo de expansão urbana de Salvador, o Parque Tecnológico da Bahia está próximo ao aeroporto de Salvador, centros de tecnologia, instituições de ensino e conta com conexão de fibra ótica.

O Estado da Bahia dispõe de recursos para apoiar empresas inovadoras que se instalem no parque. São 581.000 m² de área, destinados à geração de conhecimento e de negócios de alto valor agregado.


Entenda como vai funcionar:
http://saudeweb.com.br/video/entenda-como-vai-funcionar-o-parque-tecnologico-da-bahia/

Fonte:
http://www.secti.ba.gov.br/parquetecnologico/

January 31, 2012 01:33 AM

28/01/2012

Antonio Terceiro

A visual cheat sheet for ANSI color codes

Now and then I want to output some ANSI color escape codes from software I write, and I always end up doing some trial-and-error to figure out the exact codes I want. Sometimes it’s overkill to add a dependency on an existing library that already deals with it, or the language I am using does not have one.

There are a lot of listings of the ANSI color codes out there, but I couldn’t find one that matches the actual codes with the resulting effect in a visual way. Even the Wikipedia article has a colored table with the actual colors, but I have to lookup manually which code combination produces which color.

So I spent a few minutes to write a shell script that prints all useful combinations, formatted with themselves. This way I can quickly figure out which exact code I want to achieve the desired effect.

The code for now is very simple:


#!/bin/sh -e

for attr in $(seq 0 1); do
  for fg in $(seq 30 37); do
    for bg in $(seq 40 47); do
      printf "\033[$attr;${bg};${fg}m$attr;$fg;$bg\033[m "
    done
    echo
  done
done

Is there a package in Debian that already does that? Would people find it useful to have this packaged?

update: it turns out you can find some similar stuff on google images. It was a quick and fun hack, though.

update 2: Replacing echo -n with printf makes the script work independently if /bin/sh is bash or dash. Thanks to cocci for pointing that out.

January 28, 2012 01:17 PM

20/01/2012

Leonardo Couto Conrado

Plugin do Nagios para verificar a fila de e-mails do servidor Qmail


OBS.: O plugin é executado através do NRPE na máquina remota, logo, o script deve ser colocado junto aos outros plugins do nagios na máquina cliente, ou seja, no servidor Qmail e não no servidor Nagios.

Este script ajudará a identificar um possível ataque ao seu servidor de e-mails. Onde uma conta de e-mail do seu dominio provavelmente com uma senha frágil esteja sendo utilizada para enviar uma grande massa de e-mails (SPAM) com destino a endereços e-mails da internet, logo, isso acarretará em uma grande quantidade em excesso de mensagens na fila de envio do seu servidor Qmail atrasando o envio de e-mails verdadeiros. O script checará sempre essa quantidade de mensagens na fila e retornará a saída para o Nagios.

 Copie o script abaixo, que irá checar a fila de e-mails, para o diretório de plugins do Nagios no seu servidor Qmail:

# vi /usr/local/nagios/libexec/check_qmail_queue
############################################################### 
# Script checar fila de e-mails do Qmail 
# Por Leonardo Couto Conrado 
# Em 20.01.2012
############################################################### 
#!/bin/sh

OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3

criticalMsgsInQueue=90
warningMsgsInQueue=80

mailQueue=$(/usr/local/bin/qmailctl queue | grep "messages in queue:" | awk -F ":" '{print $2}')

if [ $mailQueue -gt $criticalMsgsInQueue ]; then
        echo "NÚMERO DE MENSAGENS NA FILA ULTRAPASSOU O LIMITE DE CRITICAL, $mailQueue MSGS NA FILA!"
        exit $CRITICAL
fi


if [ $mailQueue -gt $warningMsgsInQueue ]; then
        echo "NÚMERO DE MENSAGENS NA FILA ULTRAPASSOU O LIMITE DE WARNING, $mailQueue MSGS NA FILA!!"
        exit $WARNING

        else
                echo "NÚMERO DE MENSAGENS NA FILA ESTÁ OK, IGUAL A $mailQueue MSGS NA FILA."
                exit $OK
fi

exit $UNKNOWN

# chmod +x /usr/local/nagios/libexec/check_qmail_queue


Para ativar o check, devemos inserir o comando e o serviço no servidor do Nagios. Segue procedimento para ser executado no Nagios:

1 - Crie o comando no arquivo commands.cfg (No ambiente usado para esse "how to" o arquivo encontra-se em /usr/local/nagios/etc/objects/commands/commands.cfg no servidor Nagios:

vi /usr/local/nagios/etc/objects/commands/commands.cfg
#'check_nrpe_qmail_queue' command definition
define command{
        command_name    check_nrpe_qmail_queue
        command_line    $USER2$/check_nrpe -H $HOSTADDRESS$ -c check_msgs_qmail_queue
        }

2 - Crie o serviço para o servidor Qmail:

vi /usr/local/nagios/etc/objects/services/linux-services.cfg
define service{
        use                             non-critical-services         ; Name of service template to use
        host_name                       SRVLMSSAMAIL01
        service_description             EMAILS IN QUEUE
        check_command                   check_nrpe_qmail_queue
      }

3 - Configure o check no NRPE no servidor Qmail:


vi /usr/local/nagios/etc/nrpe.cfg

command[check_msgs_qmail_queue]=/usr/local/nagios/libexec/check_qmail_queue


4 - Reinicie o serviço do Nagios no servidor Nagios e o serviço do NRPE no servidor de e-mail Qmail.

January 20, 2012 05:13 PM

16/01/2012

Vicente Aguiar

#SOPAblackoutBR: Brasil se mobiliza contra projeto de lei nos EUA que ataca a liberdade na Internet

 No dia 18/01/12 diversos sites, blogs e redes sociais irão aderir ao #SOPABlackoutBR e ficar indisponíveis como forma de protesto! Motivo: mostrar às autoridades Brasileiras e as grandes corporações a posição da sociedade brasileira em relação ao "SOPA" nos EUA e demais práticas, normas, medidas judiciais e leis que ameaçam a liberdade na Internet no mundo e no Brasil.

Mas que "SOPA" é essa?

SOPA é a sigla de "Stop Online Piracy Act", que está ligada a um projeto de Lei nos EUA que se diz a favor do "Combate à Pirataria Online". Contudo, na prática, esse projeto estabelece o uso no território Americano de um mecanismo de censura sobre a Internet semelhante ao utilizado em países como a China, Irã e Síria, com a desculpa de coibir a "pirataria online". Isso significa que o projeto pretende combater práticas sociais que historicamente utilizamos para ter acesso à qualquer obra cultural na internet: trocar, compartilhar, emprestar, remixar, etc.

O problema maior é que o SOPA não afetará apenas os Estados Unidos, pois esse país, além de concentrar a maior parte da infra-estrutura da internet, concentra quase todos os serviços e sites que utilizamos diariamente, e que podem ser afetados tais como Youtube, Facebook, WordPress, Google, Gmail, Twiiter, e muitos outros. Temos de lembrar também que muitos sites são hospedados nos EUA, mesmo sem ter TLD americano e outros fora dos EUA com TLD americano como (.com, .net, .org) em ambos os casos o site estará debaixo da legislação Americana.

SOPA também prevê instrumentos para bloquear os serviços de publicidade e pagamento online sob a jurisdição dos EUA, impactando qualquer site no mundo, apenas com base em uma denuncia de suspeita,e sem ordem judicial.

Os problemas não acabam por ai, o SOPA afetará profundamente a liberdade de expressão na Internet, todos os sites se verão obrigados a aplicar mecanismos de auto-censura, e filtrar toda atividade online de seus usuários para evitar serem bloqueados.

 
O que diz a lei (SOPA)?

Quando um site for denunciado, todos os demais sites que tenham “relacionamento” com ele e não queiram sofrer as conseqüências legais terão cinco dias para:


 
Efeitos colaterais


Os provedores de Internet, email, blogs gratuitos, mensageiros instantâneos e redes sociais serão forçados a espionar todo conteúdo publicado por seus usuários em busca de material não autorizado e eventualmente bloqueá-los.

As comunidades online, em especial as comunidades colaborativas que são o fenômeno da Internet que afetam mais profundamente a nossa sociedade, ou seja, desde a esfera cultural, política, social até a econômica. O bloqueio de sites e tecnologias a serviço destas comunidades irá em muitos casos impedida-las de continuar existindo.

Muitas tecnologias (como a rede anônima “TOR”, os DNS alternativos, as redes P2P e os proxys VPN) que permitem a navegação e/ou distribuição de informações anônimas e sem censura, e que são fundamentais para muitos ativistas e organizações políticas em todo o mundo, basicamente se verão ilegais de um dia para outro.

O Brasil e o SOPA

No Brasil estamos ha anos lutando contra o o AI5Digital (PL 84/99) e a favor do Marco Civil da Internet (PL 2126), tem sido uma luta incansável. Todo este esforço pode ser perdido com a aprovação do SOPA, pois junto com a lei Sinde na Espanha e Hadopi na França, ele pode ser um terrível instrumento de pressão para que o Brasil e demais países adotem legislações semelhantes. É importante lembrar que a Lei Sinde que aparentemente havia sido brecada por ativistas Espanhois, foi aprovada logo no inicio do novo mandato sob grande pressão Americana, e que o AI5Digital, que fora congelado em 2008 voltou a tona no inicio deste ano com grande pressão para aprovação. Não podemos descansar nenhum minuto!

Quem está se mobilizando?

Há uma grande reação nos EUA contra o SOPA e o Protect IP Act. O principal articulador da luta contra o bloqueio da Internet é a Electronic Frontier Foundation. Ativistas do mundo inteiro se mobilizam contra essas medidas. Organizações da sociedade civil, tais como a Wikipedia e a Mozilla Foundation se mobilizam igualmente junto com corporações como o Google e o Yahoo. No Brasil, os ativistas da liberdade na Internet que lutam contra o AI-5 Digital se mobilizam desde o ano passado para denunciar o SOPA. Diversos blogueiros também têm denunciado essas investidas que visam censurar e bloquear a rede. Existe até um aplicativo para celulares Android que permite o usuário identificar as empresas que apóiam o SOPA

Saiba mais sobre o assunto nas fontes abaixo.

Fontes: Site do Mega NãoTrezentos, Electronic Frontier Foundation

January 16, 2012 12:59 PM

13/01/2012

Aurelio A. Heckert

18 de janeiro tire seu site do ar contra PIPA e SOPA

Governos gostam de censura, temem a inovação e sempre protegem o statu quo. Isso não é diferente no Brasil e não é diferente nos EUA, por mais que se declarem defensores da liberdade.

No momento temos dois projetos tramitando no governo americano que podem inviabilizar a internet livre em todo o mundo e ainda podem influenciar leis equivalentes em outros governos. São os projetos:

  • PIPA — Protect Intellectual Property Act
  • SOPA — the Stop Online Piracy Act

Muitos blogs já tem publicado ou estampado mensagens anti-PIPA/SOPA, mas agora o movimento pode ficar mais "impactante". O Reddit anunciou que vai bloquear o site por 12 horas em protesto contra esses projetos e Jimmy Wales defende que a Wikipédia faça o mesmo.

Se você concorda com os que defandem a Internet livre:

Bloqueie seu site ou blog no dia 18 de Janeiro por 12 horas.
de 13:00 até 01:00 UTC – ou seja – 10:00 até 22:00 Brasilia

January 13, 2012 04:33 PM

12/01/2012

Leonardo Couto Conrado

Script para atualizar periodicamente blacklists selecionadas do squidGuard



O script abaixo irá baixar os arquivos tar.gz de blacklist dos sites squidguard.mesd.k12.or.us e www.shallalist.de, após isso ele irá descompactar os arquivos e copiar as pastas de blacklists, que estejam listados por você nos arquivos bls_mesd.txt e bls_shalla.txt, para o diretório de blacklists do squidGuard, após isso mudará o dono dos diretórios de blacklists do squidGuard para o usuário squid e por ultimo ele irá recompilar as blacklists transformando-as em arquivo de banco de dados para o squidGuard. O conteúdo da pasta utlizada para baixar e descompactar os tar.gz será limpa no final do processo.

-> PARA AGENDAR A EXECUÇÃO DO SCRIPT UTILIZE O crontab. 


#!/bin/bash
############################################################### 
# Atualizando blacklists selecionadas para o squidGuard
# Por Leonardo Couto Conrado 
# Em 11/01/2012 
############################################################### 
# README:
# Crie o diretorio da variavel dirWork
# Crie o arquivo de log da variavel logUpBlackLists
# Crie o arquivo /usr/local/upblacklists/bls_mesd.txt ele deverá conter as blacklists desejadas da mesd squidguard.mesd.k12.or.us para serem copiadas para as blacklists do squidGuard
# Crie o arquivo /usr/local/upblacklists/bls_shalla.txt ele deverá conter as blacklists desejadas da shalla www.shallalist.de para serem copiadas para as blacklists do squidGuard

clockNow=$(date +%d.%m.%Y-%H:%M)
dirBlackListSquidGuard=/usr/local/squidGuard/db/blacklists/
dirWork=/usr/local/upblacklists/work/
dirUpBlackLists=/usr/local/upblacklists/
squidGuardCreateDBs="/usr/local/squidGuard/bin/squidGuard -C all"
 
urlListMesd=http://squidguard.mesd.k12.or.us/blacklists.tgz
urlListShalla=http://www.shallalist.de/Downloads/shallalist.tar.gz
fileTgzMesd=blacklists.tgz
fileTgzShalla=shallalist.tar.gz
fileBlacklistsMesd=blacklists/
fileBlacklistsShalla=BL/
 
logUpBlackLists=/var/log/updatebacklists.log
 
numBlsMesd=$(cat $dirUpBlackLists"bls_mesd.txt" | wc -l)
numBlsShalla=$(cat $dirUpBlackLists"bls_shalla.txt" | wc -l)
 
counter=1
 
# INICIO
 
cd $dirWork
 
wget -c $urlListMesd
wget -c $urlListShalla
 
if [ $? = 0 ]; then
        tar -xzf $dirWork$fileTgzMesd
        tar -xzf $dirWork$fileTgzShalla
 
        cd $dirWork$fileBlacklistsMesd
              echo $clockNow  " - ANDAMENTO COPIA DAS BLS DA MESD: " >> $logUpBlackLists
                while [ $counter -le $numBlsMesd ]; do
                        blMesd=$(cat $dirUpBlackLists"bls_mesd.txt" | awk -v VAR=$counter 'NR == VAR {print $0}')
                        /bin/cp -fv $dirWork$fileBlacklistsMesd$blMesd/domains $dirBlackListSquidGuard$blMesd >> $logUpBlackLists
                        /bin/cp -fv $dirWork$fileBlacklistsMesd$blMesd/urls $dirBlackListSquidGuard$blMesd >> $logUpBlackLists
                        let counter=counter+1
                done
       counter=1
 
        cd $dirWork$fileBlacklistsShalla
                echo $clockNow  " - ANDAMENTO COPIA DAS BLS DA SHALA: " >> $logUpBlackLists
                while [ $counter -le $numBlsShalla ]; do
                        blShalla=$(cat $dirUpBlackLists"bls_shalla.txt" | awk -v VAR=$counter 'NR == VAR {print $0}')
                        /bin/cp -fv $dirWork$fileBlacklistsShalla$blShalla/domains $dirBlackListSquidGuard$blShalla >> $logUpBlackLists
                        /bin/cp -fv $dirWork$fileBlacklistsShalla$blShalla/urls $dirBlackListSquidGuard$blShalla >> $logUpBlackLists
                        let counter=counter+1
                done
      
       echo $clockNow  " - ANDAMENTO DAS PERMISSOES PARA SQUID NAS BLS DO SQUIDGUARD: " >> $logUpBlackLists
        chown squid -R -v $dirBlackListSquidGuard >> $logUpBlackLists
      
       echo $clockNow  " - RECOMPILANDO AS DBS DO SQUIDGUARD: " >> $logUpBlackLists
       echo `$squidGuardCreateDBs` >> $logUpBlackLists
 
       echo $clockNow  " - LIMPANDO DIRETORIO WORKS: " >> $logUpBlackLists
        cd $dirWork && rm -rf ./
else
   echo $clockNow ' - FALHOU DOWNLOAD DE UMA DAS BLS: ' >> $logUpBlackLists
 
fi
 
exit 0
 



January 12, 2012 01:17 AM

10/01/2012

Leonardo Couto Conrado

Sessão Fix BUG




BUG: NFS mount: failed, reason given by server: Permission denied
Versão NFS utilizada: nfs-utils-1.0.9-50.el5 e nfs-utils-lib-1.0.8-7.6.el5
Sistema utilizado: Red Hat Enterprise Linux Server release 5.3 Beta (Tikanga)

SINTOMA: 

Ao tentar mapear um diretório remoto via NFS no cliente aonde o mesmo possui as devidas permissões para acesso ao diretório no server é apresentada uma mensagem de erro informando:

mount: failed, reason given by server: Permission denied.


PROBLEMA:


Durante a inicialização do cliente o filesystem  que controla o NFSD  não é montado.


SOLUÇÃO:


É necessário montar manualmente o filesystem especial nfsd.

Adicione no arquivo /etc/fstab:

# vi /etc/fstab


#########################################

# FIX - BUG 692968 PERMISSION DENIED NFS

#########################################

none                    /proc/fs/nfsd   nfsd     defaults 0 0


Reler o arquivo /etc/fstab

# mount -a

Agora tente mapear novamente o diretório remoto.

REFERÊNCIA:


https://bugzilla.redhat.com/show_bug.cgi?id=264661
http://juljas.net/lpt/post/nfs-permission-denied#comment-118

January 10, 2012 12:28 PM

09/01/2012

Antonio Terceiro

Life after exec()

From the “not necessarily big news, but still useful” department.

The situation: for Very Good Reasons™1, you want to replace your current process by calling exec, but you still want to have the chance to do something after the process you exec()ed finishes.

This is a simple technique I just came up with: just before replacing the current process by calling exec(), you fork() a process in the background that will wait for the current process id to disappear from the process list, and then does whatever you want to do.

A simple proof-of-concept I wrote is composed of two bash programs: wrapper and real.

real is really simple: it just waits a few seconds and then prints its process id to the console:

#!/bin/bash
  
sleep 5
echo $BASHPID

wrapper is the program that handles the situation we want to exercise: it replaces itself with real, but still has the chance to do something after real finishes. In this case, wrapper notifies the user that real finished.

#!/bin/bash

echo $BASHPID
real_program_pid=$BASHPID
(
  while ps -p "$real_program_pid" >/dev/null; do
    sleep 0.1s
  done
  notify-send 'real program finished'
) &
exec ./real

One nice property that wrapper explores is that when exec() starts real, it really replaces wrapper, and therefore has the same process id (in this case accessible by bash in the $BASHPID variable). Because of this, the background process that wrapper starts just before the exec() call already knows which process it has to watch for.

The actual code for waiting is not optimal, though. I cannot use waitpid() (the wait builtin in bash), since real is not a child process of wrapper. I went with a brute force approach here, and I am pretty sure there is a cheaper way to wait for a random PID without a busy loop (but that wasn’t the point here).

1 update: I am aware of the classic fork()/exec() pattern. My Very Good Reasons™ include the fact that I can’t control the flow: I am writing a plugin for a program that calls its plugins in sequence, and after that, calls exec(), but my plugin is interested in doing some work after exec() finishes.

January 09, 2012 12:43 PM

07/01/2012

Leonardo Couto Conrado

Instalando NRPE no SlackWare


Utilizado os seguintes pacotes do NRPE e Nagios Plugins para serem instalados no Slackware 13.37.0 Kernel 2.6.37.6-smp:

nagios-plugins-1.4.15 http://www.nagios.org/download/plugins
nrpe-2.13 http://sourceforge.net/projects/nagios/files/

Vamos para a instalação:

Descompactando, ajustando, compilando e instalando o nagios plugins:
# tar -xzf nagios-plugins-1.4.15.tar.gz

# cd nagios-plugins-1.4.15>

# ./configure --prefix=/usr/local/nagios

# make

# make install



Adicione manualmente o user e group nagios, caso a instalação não tenha criados:
# adduser nagios

# groupadd nagios

# usermod -G nagios nagios




Descompactando, ajustando, compilando e instalando o NRPE:
# tar -xzf nrpe-2.13.tar.gz

# cd nrpe-2.13/

# ./configure

# make all

# make install


Permissão de proprietário e grupo proprietário nagios no diretório abaixo:
#chown nagios.nagios /usr/local/nagios


Finalizando a instalação do pacote NRPE:
# make install-plugin

# make install-daemon

# make install-daemon-config



Permissão de proprietário e grupo proprietário nagios no diretório abaixo:
# chown -R nagios.nagios /usr/local/nagios/libexec


# vi /etc/services

nrpe 5666/tcp # NRPE


Adicionando o daemon NRPE para ser controlado pelo inetd (tcp wrapper) do Linux:
# vi /etc/inetd.conf

nrpe    stream  tcp     nowait  nagios /usr/sbin/tcpd /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -i


Editar /usr/local/nagios/etc/nrpe.cfg e dar as permissões de quem pode se conectar a esse host:
EXEMPLO:
# vi /usr/local/nagios/etc/nrpe.cfg

allowed_hosts=127.0.0.1,192.168.9.144,192.168.1.69


Especificar também os serviços serão checados na máquina local:
EXEMPLO:
# vi /usr/local/nagios/etc/nrpe.cfg




command[check_proc_qmail_supervise_pop3d]=/usr/local/nagios/libexec/check_procs -w 1:1 -c 1:1 -a "supervise qmail-pop3d"

command[check_proc_qmail_supervise_smtpd]=/usr/local/nagios/libexec/check_procs -w 1:1 -c 1:1 -a "supervise qmail-smtpd"

command[check_proc_qmail_supervise_imapd]=/usr/local/nagios/libexec/check_procs -w 1:1 -c 1:1 -a "supervise qmail-imapd"

command[check_proc_qmail_supervise_qmqpd]=/usr/local/nagios/libexec/check_procs -w 1:1 -c 1:1 -a "supervise qmail-qmqpd"

command[check_proc_qmail_supervise_send]=/usr/local/nagios/libexec/check_procs -w 1:1 -c 1:1 -a "supervise qmail-send"



A maioria dos checks feitos na máquina local exigem privilégios de root, como o daemon NRPE é inicializado com o usuário nagios muitos checks terão saídas negadas pelo SO então utilizar o sudo como  solução de contorno liberando o usuários nagios a executar comandos especificados como root. Para isso:

1 - Editar /usr/local/nagios/etc/nrpe.cfg e tirar o comentário da seguinte linha no arquivo, habilitando o uso do sudo pelo NRPE:
# vi /usr/local/nagios/etc/nrpe.cfg

command_prefix=/usr/bin/sudo



2 - Editar /etc/sudores e colocar os comandos que serão executados pelo usuário nagios como se fossem o root executando-os :
# vi  /etc/sudores

# Nagios

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_qmail_queue

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_procs

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_users

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_load

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_disk

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_swap

nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/check_mem.pl



Reiniciei o NRPE, para isso execute um restart no daemon inetd que controla o daemon do NRPE:
# /etc/rc.d/rc.inetd restart

NO SERVDIDOR DO NAGIOS TESTE A COMUNICAÇÂO COM O HOST REMOTO:

# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.65.100


PARA HABILITAR E VISUALIZAR O DEBUG DO NRPE  UTILIZE O HOW TO ABAIXO:

Editar /usr/local/nagios/etc/nrpe.cfg
# vi  /usr/local/nagios/etc/nrpe.cfg

debug=1



Editar /etc/syslog.conf
# vi /etc/syslog.conf

####################

# LOG PARA O NRPE

####################

daemon.debug                                            /var/log/nrpe



Reiniciei o NRPE:
# /etc/rc.d/rc.inetd restart

Reload do syslog:
# killall -HUP syslogd

January 07, 2012 01:48 PM

06/01/2012

Wille Marcel

OpenStreetMap na revista Tema

Matéria sobre OpenStreetMap na Revista Tema

Em outubro, após a palestra na Latinoware, eu e Djavan Fagundes fomos entrevistados pela jornalista Loyanne Salles, a qual se interessou em fazer uma matéria sobre o OpenStreetMap para a revista Tema.

A matéria foi publicada na edição de dezembro/2011 e ficou muito interessante. Veja a matéria ou acesse a edição completa da revista.

A revista Tema é uma publicação do Serpro, a empresa de TI do governo federal.

January 06, 2012 04:14 AM

23/12/2011

JavaBahia

Refatorando a jvm com o Cleanup day




O Cleanup day é um esforço muito legal da comunidade mundial do java fez para acabar com os avisos na compilação do openjdk, foi iniciado no dia 1 de dezembro de 2011 e tende a acabar no final do ano ou seja, ano novo com java novo e limpinho :)
Existem vários avisos durante a compilação no entanto a maioria deles estão escondidos em arquivos de log. Uma boa dica é adicionar na compilação o javac -Xlint ClasseJava.java para poder ver, em alguns casos e a depender do número de código poderá existir cerca de 10 mil avisos emitidos pelo javac durante a construção.




O javac historicamente não emitia muito avisos. Um certo número de advertências foram por causa da especificação da linguagem Java, mas mesmo eram poucos. No JDK 5, o javac foi modificado para fornecer avisos adicionais.
Além disso, a linguagem de programação Java evoluiu, tornando obsoleto alguma parte do código. Isto ocorreu, por exemplo, quando lançou o JDK 5, com a adição dos generics os código que não tinha sido atualizado ao usar os generics contém diversos "raw type" e "unchecked" como mensagens de aviso durante a compilação. Ainda há um monte de código antigo no JDK (aprendi nesse processo um pouco de história da jvm e o tal do CORBA). De fato, estas duas mensagens de alerta são as principais mensagens de aviso que ocorrem em compilações do JDK.
A maioria desse alertas são, ruído ou sujeira e não representam problemas, no entanto, nos livrando de toda essa sujeira fica mais fácil de ver bugs.
Este é um esforço colaborativo entre os membros da comunidade OpenJDK  para limpar os avisos. Para este primeiro evento, se está focando em avisos de javac emitidos durante a construção do repositório jdk. A ideia é derrubar o maior número possível.

Com isso mostra que o java está em constante movimento além de utilizar técnicas atuais como a refatoração decódigo. Outra coisa muito legal é que o código do JDK 7 tem sonar. Esse certamente é uma das várias outras melhorias que haverá dentro da jvm e que faz o java mover para a frente.






December 23, 2011 09:40 AM

21/12/2011

Wille Marcel

Como copiar vídeos de qualquer site e em qualquer formato para o seu computador

Há muito tempo, postei aqui no blog uma forma bem fácil de copiar vídeos do youtube no GNU/Linux. Bastava esperar o vídeo carregar no navegador e ir lá no /tmp/ e copiar o arquivo pra outra pasta. Eu usava bastante isso. Porém com uma mudança no plugin do Adobe Flash e com o uso de HTML5 no You Tube, essa técnica passou a não funcionar mais.

Há uns meses, Liquuid postou em seu blog como copiar vídeos carregados com o novo plugin Flash, porém descobri uma forma mais fácil e rápida e que funciona também com vídeos em sites que já estão utilizando HTML5.

Primeiro espere o vídeo ser carregado totalmente no Firefox (creio que essas instruções funcionam em outros navegadores também, desde que rodando no GNU/Linux). Quando finalizar o carregamento, execute o comando:

ps aux | grep firefox

O resultado será algo parecido com isso:

wille     1366  9.7 17.9 1511896 547344 ?      Sl   17:42  13:17 firefox
wille     1444  3.8  2.9 592744 90248 ?        Sl   17:42   5:16 /usr/lib/firefox/plugin-container /usr/lib/mozilla/plugins/libflashplayer.so -greomni /usr/lib/firefox/omni.jar 1366 plugin
wille     2648  0.0  0.0   8576  1016 pts/0    S+   19:58   0:00 grep firefox

Preste atenção nos números em negrito. São os números de processo do firefox e do plugin flashplayer, respectivamente.  Daí, basta abrir o diretório /proc/1366/fd/ ou o /proc/1444/fd/ no Gerenciador de Arquivos e, pelo ícone do arquivo, é possível identificar qual é o arquivo do vídeo que está carregado no Firefox. Uma dica: se o vídeo foi carregado com HTML5, geralmente ele está no diretório do processo do firefox, se foi carregado com flashplayer, tá no outro.

nautilus abrindo o diretório citado acima

Porém, não dá pra usar o Nautilus para copiar, pois esse arquivo que aparece na tela é apenas um link para um outro arquivo que já foi deletado, assim utilize o terminal para fazer a cópia (quem não sabe copiar pelo terminal, estude o comando cp).

É bom lembrar que esse tutorial é válido para qualquer site de vídeo, não apenas o You Tube.

UPDATE: Pra identificar o vídeo, é possível também usar o terminal. Basta executar o comando ls -lah nos diretórios citados acima. No caso de sites que usem Flash, é só observar qual o link que aponta para /tmp/Flashxxxx.

December 21, 2011 11:07 PM

08/12/2011

Mônica Paz

Simpósio sobre Interatividade nos Sistemas Computacionais Livres na UFBA

Acontece nos dias 9, 10 e 11 de dezembro o ISCL2011 - II Simpósio Interatividade nos Sistemas Computacionais Livres da UFBA, no PAF IV, campus de Ondina, Salvador-BA.

O ISCL2011 contará com a participação de pesquisadores da UFBA e da UNIFACS envolvidos com a questão do software, da robótica e da arte livres. A programação é composto de oficinas,  performance audiovisual, minicursos e palestras. Destaque para a participação do LabDebug e suas atividades relacionadas à mulher e tecnologia.

As incrições podem ser feitas no site do simpósio e estão atreladas á doação de 1Kg de alimento não-perecívelentregue no local. Para mais informações visite iscl2011.wordpress.com.

 

December 08, 2011 07:30 PM

29/11/2011

JavaBahia

Coding dojo java 7

duke.jpg


Depois de aproximadamente 5 anos de espera finamente chega a nova versão do jdk, o jdk 7. Nessa versão trouxeram algumas novidades para facilitar ainda mais o desenvolvimento da linguagem que hoje é a mais popular do mundo.

Dia: 3 de dezembro, sábado
horário: 10:00
local: Ruy Barbosa, sala 202B
inscrições: http://www.jugevents.org/jugevents/event/show.html?id=42939
Entrada: Gratuíta
programação:


JavaBahia-NovaLogo.pngJUG_Button.giflogo.png


November 29, 2011 10:33 AM

26/11/2011

Mônica Paz

I Encontro Baiano pelo Fim da Violência Contra Mulheres

Acabo de receber o email de divulgação do I Encontro Baiano pelo Fim da Violência Contra Mulheres e achei bem interessante.

A questão da representação da mulher nos pagodes baianos tem gerado muita polêmica em Salvador. Primeiro, porque as letras dessas músicas são, as vezes, inacreditáveis e, segundo, por conta da contovérsia que a Lei Antibaixaria colocou em discussão. No geral, acho correto que dinheiro público não seja investido em ações que aumentem ou estimulem o preconceito, a dicriminação e a violência. E se a TVBA acha lindo incentivar a veiculação dessas letras medonhas no horário de almoço, sinal de que temos que ficar de olho aberto para as "forças" ai envolvidas.

Vejam o conteúdo do email com grifos meus:

I Encontro Baiano pelo
Fim da Violência Contra Mulheres

Data : 6 de dezembro de 2011
Horário:  9 – 17 hs  (Inscrições no local)
Local:  Pavilhão Raul Seixas da FFCH/UFBA
            Estrada de São Lázaro, 187 – Federação

Promoção: OBSERVE/NEIM/UFBA

Programação:

Manhã:
Mesa Redonda: A Violência Simbólica de Gênero e a Lei Antibaixaria na
Bahia em Debate
Participantes: Dep. Luiza Maia,  Profa. Cecilia Sardenberg

Tarde:
Oficina I : Clebemilton Nascimento (coord.) – A representação das
Mulheres no Pagode
Oficina II: Sandra Munhoz (coord.) – A Marcha das Vadias

November 26, 2011 03:55 PM