Archive

Archive for the ‘Linux’ Category

How to switch off Dell XPS 1340′s discrete video card on Linux

June 29, 2010 16 comments

Finally, after months, the discrete video card of my Dell Studio XPS 1340 is switched off on Linux.

The story…

This laptop comes with two video cards and what nvidia calls Hybrid SLI.
The idea is very nice : one video card is integrated to the motherboard and is always switched on.
The other one is a discrete card and is manually switched on by the user when he/she wants more graphical processing power, consuming more power. This sounds interesting for laptop owners, who may want to save the battery as much as possible.
When the discrete card is on, both cards work together combined to provide a more powerful graphical processing device.
Even tough the idea is nice, the implementation is not, and nvidia even gave up moving on with the technology. If I am not mistaken, I read somewhere that they claim the driver implementation to control the devices together is very complicated.
The drivers for Windows Vista and Windows 7 work quite well, and is maintained by the laptop vendors, in this case, Dell.

Now if you use Linux…:
nvidia provides their proprietary driver for Linux, which is very nice, but allows us to use only the integrated card.
At first it was ok for me, as I didn’t have the need to use the power of both cards together on Linux anyway. The problem is: the Linux driver does not switch the discrete card off. Yeap, that’s right, you can’t use the discrete card, but it is always on consuming power. Ironic, uh?! The result is: on Linux my laptop always runs hotter and the battery lasts shorter than on Windows.

I researched for a long time when I bought the laptop, but I couldn’t find a way to get the discrete card off.
One good piece of news is that the project nouveau, an open source driver for nvidia cards, plans to add full support to switching these cards on/off at will. The driver is still under heavy development though… and many features are not yet implemented.

So just a few days I received an update from the sites I have been following related to the subject.
avilella has been running a great blog about switchable graphics on Linux, and quickly updating it on every new details that comes up. The address to his blog is: http://linux-hybrid-graphics.blogspot.com/

There is also a bug report on Launchpad regarding the same problem: https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/312756
On this bug report page they are collecting information about all different laptops with switchable cards, so that they can work on a solution for everyone.
But just yesterday a member from Launchpad named drphd found an ACPI method that can be called on the Dell XPS 1340 to disable the graphic card.

I just made a small modification on the module that avilella posted here, making it specific for the Dell XPS 1340, by using the method indicated by drphd. And, thanks to these guys, we can now switch the discrete card off.

The solution

So, to use it, just download these two files:

Makefile
xps_nv.c

Before compiling the module, run: lspci -v
You should see the information for both cards, including the IRQ and the kernel modules related to them.
Now place those two files inside the same folder, cd to this folder and run:

make
sudo cp xps_nv.ko /lib/modules/`uname -r`/kernel/
sudo depmod
sudo modprobe xps_nv

If you run lspci -v again, you should see the detailed information only for the integrated card. On my machine the output after the module is loaded is:

02:00.0 VGA compatible controller: nVidia Corporation G98 [GeForce 9200M GS] (rev ff) (prog-if ff)
	!!! Unknown header type 7f

03:00.0 VGA compatible controller: nVidia Corporation C79 [GeForce 9400M G] (rev b1)
	Subsystem: Dell Device 0271
	Flags: bus master, fast devsel, latency 0, IRQ 23
	Memory at aa000000 (32-bit, non-prefetchable) [size=16M]
	Memory at b0000000 (64-bit, prefetchable) [size=256M]
	Memory at cc000000 (64-bit, prefetchable) [size=32M]
	I/O ports at 5000 [size=128]
	[virtual] Expansion ROM at c0000000 [disabled] [size=128K]
	Capabilities: 
	Kernel driver in use: nvidia
	Kernel modules: nvidia-current, nvidiafb, nouveau

To make sure that the module is loaded every time you boot your laptop, edit the file /etc/modules and add, in the end, a new line with the text:

xps_nv

As you see, I have the Dell XPS 1340 with a GeForce 9400M G and a GeForce 9200M GS.
But I think that the same solution should also work for people who have the combination GeForce 9400M G + GeForce 210M.

After the module is loaded the laptop runs a bit cooler, it uses around 4W less power and the battery is estimated to last around 30-50 minutes longer.

Remember that every time you install a new kernel you will have to re-compile and re-install the module.

Cheers!

Categories: English, Linux

Vim for the win :)

May 16, 2010 4 comments

I have been using Vim a lot in the last few weeks, to edit CSS and HTML files. It might seem a bit awkward at first but once you get used to it, it becomes great!
What helps a lot too is to configure Vim properly to make it perfect for use.
Vim and Vi configurations are done by setting variables using :set or by editing the file .vimrc in your home folder.
I will share here my Vim configurations and some of the commands I use more often. It also works as a Vim cheat sheet for my own future reference.

So, my ~/.vimirc looks like this:

set tabstop=2 expandtab autoindent smartindent shiftwidth=2 number

 
Here’s what each of them does

Configuration Effect
tabstop=N Sets the tab size to N spaces. The default is 4.
expandtab Tabs are expanded, when you press tab, N characters will be inserted instead of a tab character (where N is the amount of spaces set for tabstop).
autoindent Will keep the same indentation when you press enter in the end of a line.
smartindent Vim will try to automatically detect indentations. For instance, if you go to a new line and enter a ‘}’, Vim will go back one indentation level.
shiftwidth=N The number of spaces used for one indentation level.
number Shows lines numbers.

And here are some of the commands I use more often:

Command What it does..
:N goes to line N
/foo searches for ‘foo’
:%s/foo/bar/g replaces all occurrences of ‘foo’ with ‘bar’ in the current file
:s/foo/bar/g Same as above, but replaces only on the current line
:s/foo/bar/gc Same as above, but prompts for confirmation before replacing each occurrence of ‘foo’. Can also be used with ‘%’ to replace all occurrences in the file
Shif + G goes to the end of the file
v enter select mode
<< moves the current line one indentation level backwards;
>> moves the current line one indentation level forward;
yy copies current line to the buffer
dd removes the current line out and place it on the buffer
p pastes the text from the buffer on the next line

Also remember that many of these commands may be used with a different number of lines.
For instance, pressing 1, 0, d, d will delete he next 10 lines.

Any other cool commands for Vim? Let me know on the comments!

Categories: English, Linux, Programming

Debian Etch oficialmente lançado

April 8, 2007 2 comments

Hoje, dia 8 de abril, foi oficialmente lançado o Debian 4.0, condinome Etch, como a mais nova versão estável dessa distribuição.

A nova versão de testes recebeu o codinome Lenny.

Mias informações sobre o Etch em http://www.us.debian.org/releases/stable/index.pt.html e http://www.us.debian.org/releases/stable/i386/release-notes/index.pt-br.html

Mais informações sobre o Lenny em http://www.debian.org/releases/testing/

Categories: Linux, Portuguese

Instalando o Compiz e/ou Beryl no Debian Etch

March 23, 2007 21 comments

A última moda do mundo Linux: desktop 3D.
Pra quem não conhece ainda, pode ver alguns vídeos demonstrativos no Youtube.

O primeiro a fazer fama foi o Compiz. Depois um fork dele, mais incrementado (e enfrescurado) foi lançado sob o nome de Beryl. Basicamente a diferença entre eles é que o Beryl tem um desenvolvimento mais ágil, portanto apresenta alguns plugins a mais e possui o Emerald, um gerenciador de temas de bordas de janelas, que não existe na versão pura do Compiz.

Depois de algum tempo vendo inúmeras mensagens de dúvidas em fóruns sobre ‘como instalar Compiz/Beryl na distribuição X’, eu me surpreendi com a facilidade de instalação quando finalmente resolvi testar.

Para instalar o Compiz ou Beryl, você precisa ter um computadorzinho razoável. Recomendam um processador de no mínimo 1GHz com uma plaquinha de vídeo. O pessoal do Debian recomenda uma das seguintes placas de vídeo:
- Intel i830 a i945
- ATI Radeon acima da sério X800
- placas NVIDIA que suportam os drivers 9xxx (guia de instalação no Etch aqui)

Na verdade, execute o comando:

glxinfo | grep direct

Se o comando não existir, instale o pacote mesa-utils:

apt-get install mesa-utils

Se a resposta do glxinfo for:

direct rendering: Yes

Pode seguir adiante. Senão…. ops.. acho que seu hardware não suporta um ambiente 3D.

Atenção: todos os comandos abaixo devem ser executados como root.

1) Instalando o Compiz

O tutorial oficial para instalação do Compiz no Etch pode ser visto em http://wiki.debian.org/Compiz

Basicamente, vou traduzí-lo para o português…
Instale os pacotes xorg e compiz, que já devem estar no repositório do Etch (deb http://ftp.debian.org/debian etch main), para isso:

apt-get install xorg compiz

Se não quiser instalar o Beryl, pule para o passo 3.

2) Instalando o Beryl

O Beryl ainda não está nos respositórios do Etch, por isso é preciso adicionar as seguintes linhas no arquivo /etc/apt/sources.list:

deb http://debian.beryl-project.org/ etch main
deb-src http://debian.beryl-project.org/ etch main

Depois, execute

apt-get update

E instale os pacotes do beryl e emerald (o gerenciador de temas do Beryl), e o pacote libxcomposite1 (que provavelmente já estará isntalado):

apt-get install libxcomposite1 beryl emerald

Vários pacotes serão instalados.

3) Configurando o X

Agora vamos editar o arquivo /etc/X11/xorg.conf (lembra dele?) .
Adicione a seção “Extensions”, caso ela ainda não exista:

# Seção "Extensions" (se já não existir, adicione-a)
Section
"Extensions"
Option "Composite" "enable"
EndSection

Procure pela seção “Device”, que contém as informações da sua placa de vídeo, e adicione a seguinte linha dentro dela:

Option "XAANoOffscreenPixmaps" "true"

Se sua placa de vídeo for nvidia, adicione também esta linha na seção “Device”:

Option "AllowGLXWithComposite" "true"

E, ainda se for nvidia, esta linha na seção “Screen”:

Option "AddARGBGLXVisuals" "True"

Reinicie o ambiente gráfico (pressione control+alt+backspace), abra um terminal (ou pressione alt+f2 no gnome) e digite (estes comandos não devem ser executados como root):

Para rodar o compiz:

compiz --replace

Para rodar o beryl:

beryl-manager

Pronto, se deu tudo certo o Compiz ou Beryl estará executando :)

Categories: Linux, Portuguese

Resolução de Tela no Linux

March 21, 2007 15 comments

Tive uns problemas com resolução de tela no Linux (Ubuntu 6.10 Edgy Eft) esses dias, e procurando como solucioná-los, percebi que existe uma quantidade enorme de pessoas com dúvidas nesse assunto. Por isso resolvi escrever esse post com alguns detalhes sobre as configurações do ambiente gráfico no Linux.

Para trocar a resolução no Linux, basta utilizar o aplicativo de troca de resolução do seu ambiente gráfico. No Gnome, este aplicativo é o gnome-display-properties, acessado através do menu Preferências com o nome’Resolução de Tela’.
Acontece que às vezes, este aplicativo não mostra todas as resoluções de tela suportadas. Principalmente aquela que você quer usar.
Para consertar isso, o servidor gráfico deve ser configurado.

Hoje em dia o servidor gráfico encontrado em praticamente todas as distribuições Linux é o xorg, suas configurações ficam num arquivo de texto: /etc/X11/xorg.conf. É esse arquivo que tem os detalhes sobre a sua resolução de tela, taxa de atualização do monitor, mapa de teclado, tipo de mouse, etc.

As configurações do monitor ficam na seção Monitor, para encontrar basta procurar pela linha:

Section "Monitor"

As principais informações aqui são as freqüências horizontal e vertical do monitor, informadas nas opções HorizSync e VertRefresh.
Abaixo um exemplo da seção Monitor do meu xorg.conf (Debian Etch):

Section "Monitor"
Identifier
"SyncMaster 551v"
Option "DPMS"
HorizSync 30-55
VertRefresh 50-120
EndSection

Nesse caso, a freqüência horizontal do meu monitor é 30-55 e a vertical 50-120. Para saber quais são as freqüências do seu monitor, basta olhar no manual. Caso você tenha perdido o manual, olhe o modelo do monitor (geralmente escrito ao lado da tela) e procure no site do fabricante. Ou, google it.
Observem o campo Identifier, definido como’SyncMaster 551v’. Este campo define o identificador deste monitor e será importante a seguir.

Todos esses dados são de extrema importância para que as resoluções de tela e a taxa de atualização que seu monitor suporta sejam aceitas pelo servidor gráfico e mostradas no aplicativo de troca de resolução do seu ambiente preferido.
Portanto, se os dados estiverem incorretos, troque-os para os indicados nas especificações do seu monitor.

A seção Screen contém informações sobre a tela. No meu computador, ela é parecida com:

Section "Screen"
Identifier "Default Screen"
Device "Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device"
Monitor "
SyncMaster 551v"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes
"1024x768" "800x600" "640x480"
EndSubSection
EndSection

Vejam que o campo Monitor é definido com o mesmo nome do campo Identifier da seção Monitor: ‘SyncMaster 551v’. Isto faz com que a tela utilize aquelas informações definidas naquela seção Monitor.
O campo DefaultDepth define o número de bits de cores padrão. Para cada nível de cor, existe uma subseção que define as resoluções suportadas. No meu caso, podem ver que só posso utilizar as resoluções 1024×768, 800×600 e 640×480, ainda que este monitor suporte algumas resoluções maiores.
Adicione aqui as resoluções de tela que você gostaria de utilizar. Se elas forem realmente suportadas pelo monitor (e pela placa de vídeo), serão exibidas no aplicativo de troca de resolução do Gnome (ou KDE, xfce, etc). Como em:

ScreenResolutionOptions

Algumas dicas para a resolução que você deve utilizar:
Em monitores de 15 polegadas, a resolução máxima recomendada é 1024×768. Outras resoluções podem prejudicar a visão por deixar as letras muito pequenas.
Mas, mesmo em monitores maiores, resoluções altas devem ser usadas com cuidado. Alguns monitores suportam altas resoluções porém com baixas taxas de atualização (Refresh rate).
As taxas de atualização costumam variar de 60 a 85 Hz. Taxas muito baixas são prejudiciais à sua visão. As recomendadas variam de 70 a 80 Hz. Embora não seja facilmente perceptível a diferença, após várias horas de uso é fácil perceber o cansaço da vista se utilizar um computador com baixa taxa de atualização da tela.

Por isso, prefira usar 1024×768 @ 70 Hz que 1152×864 @ 60 Hz, por exemplo.

Por enquanto é só.
[]s

Categories: Linux, Portuguese

Instalando driver nVidia no Debian Etch

December 2, 2006 4 comments

Eu sofri pra descobrir como fazer isso.
Tinha conseguido já algum tempo mas comecei a ter problemas com o driver original da nVidia, então utilizei o mais novo e deu certo.

Bem, existem diversas formas de se instalar este driver. Alguns deles utilizam pacotes do próprio Debian para o driver da nVidia, mas o que vou citar aqui utiliza o driver da nVidia, puro.

Primeiramente, você vai precisar dos header do seu kernel.
Para saber qual é seu kernel, digite ‘uname -r’ num terminal.
No meu caso, o kernel é 2.6.17-2-k7, então tenho que instalar os headers desse kernel, assim:

# apt-get install linux-headers-2.6.17-2-k7

Ou, utilize aptitude, Synaptic, ou qualquer outra iterface para o apt.

Depois de instalar os header, pegue o driver do próprio site da nVidia. Preste atenção à versão da sua placa, pois placas mais antigas necessitam de drivers diferente (os chamados legacy).
Por exemplo, neste momento a última versão do driver da nVidia é a 9629, ela suporta essas placas de vídeo. Se sua placa não está na lista, provavelmente precisa do driver legacy, o último é o 7184, que suporta essas placas.

Com o driver em mãos e com os headers do kernel instalados, mude para interface de linha comando (pressionando Ctrl + Alt + F1), e faça os seguintes comandos:

pare a interface gráfica que está executando:
# /etc/init.d/gdm stop
ou
# /etc/init.d/kdm stop
se você usar KDE.

Se seu kernel é 2.6.xx, execute:
# modprobe -q agpgart

Agora instale o driver, indicando o caminho para os módulos da interface gráfica do kernel, no meu caso:
# chmod +x <arquivo do driver>
# ./<arquivo do driver> –x-module-path=/usr/lib/xorg/modules

Logicamente, substitua <arquivo do driver> pelo nome do arquivo que você baixou do site da nVidia. Agora carregue o driver:
# modprobe nvidia

Agora edite o arquivo /etc/X11/xorg.conf
Procure por:
Section “Module”
verifique se dentro dessa seção existem essas linhas e, se existirem, apague-as:
Load “dri”
Load “GLCore”
E adicione a seguinte linha, caso ainda não exista:
Load “glx”

Agora procure por:
Section “Device”
Na linha
Driver “<alguma coisa”>
Substitua <alguma coisa> por nvidia.

Reinicie a interface gráfica com:
# /etc/init.d/gdm restart

Se o logo da nVidia aparecer e tudo ocorrer bem, você instalou o driver com sucesso!
Se não funcionou, pergunte!

Está prometido para este mês, mas essas coisas sempre atrasam. O Debian Etch vai ser oficialmente lançado como Stable, clique aqui para uma screenshot da nova versão Stable do Debian.

Por enquanto é só.
Abraços.

Categories: Linux, Portuguese

Instalando o JDK 6 RC no Linux e Waters no Brasil!

November 23, 2006 9 comments

Opa!

Vi que o blog teve uma quantidade razoável de pessoas procurando por instalação de plugins no Eclipse e utilização do Callisto. Espero que o blog tenha sido útil!
Caso algum desses perdidos que chegam por aqui procurando como solucionar suas dúvidas queiram, podem pedir ajuda, ou pelo blog ou mesmo mandando um e-mail.

Bom, pra quem já ouviu falar em Java, o lançamento da versão 6, Mustang, não é nenhuma novidade. Pois é, o ano tá acabando, mas a versão final deve sair antes de 2007, e por enquanto temos aí a versão RC (Release Candidate), que já está bala.

Entre as principais novidades, do lado do usuário, temos: desempenho melhor do HotSpot (diferença notável!) e, pra quem usa Linux como eu, integração melhor com do Swing com o visual do GTK. Agora o seu tema style Clearlooks-based vai ficar igualzinho mesmo nas aplicações Java.

Pra quem é desenvolvedor, as novidades ficam mais por conta das novas especificações do Java EE 5, que são tantas que nem vou entrar em detalhes.

Mas o objetivo do post é mostrar como instalar o JDK 6 RC no Linux. Vamos lá.

1) Baixe o arquivo self-extracting do JDK.
Para isso, entre em http://java.sun.com/ e clique no link Java SE 6 RC, no menu à sua direita. Escolha a versão que quer baixar, JDK 6 para desenvolvedores, JRE 6 para usuários. Clique no botão download. Aceite a licença e comece o download. O JDK não chega a 60 MB, enquanto o JRE não chega a 20.

2) Extraia o conteúdo do arquivo para a pasta que preferir.
Copie o arquivo baixado para o diretório que quiser extrair o conteúdo e execute-o. No meu caso:
# chmod +x jdk-6-rc-linux-i586.bin
# ./jdk-6-rc-linux-i586.bin
Digite yes para aceitar a licença de uso e será criado após o processo uma pasta com o nome jdk1.6.0

3) Crie links simbólicos para a JVM e para o compilador:
No meu caso, descompactei o conteúdo do arquivo em /opt/java, então:
# ln -sf /opt/java/jdk1.6.0/bin/java /usr/bin/java
Para o compilador (somente JDK):
# ln -sf /opt/java/jdk1.6.0/bin/javac /usr/bin/javac

4) Registre o jdk como opção padrão:
[Não parece, mas tem dois - antes de install e de config]
# update-alternatives –install /usr/bin/java java /opt/java/jdk1.6.0/bin/java 1
# update-alternatives –config java
Escolha a opção do JDK 6 e pronto :)

5) Instale o plugin do JRE para seu navegador:
Simplesmente crie um link simbólico, como a seguir:
# cd /usr/lib/firefox/plugins
# ln -s /opt/java/jdk1.6.0/jre/plugin/i386/ns7/libjavaplugin_oji.so

6) Teste a instalação:
$ java -version
java version “1.6.0-rc”
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) Client VM (build 1.6.0-rc-b104, mixed mode, sharing)

Qualquer dúvida só perguntar!

—————————–

Mudando de assunto…..
Roger Wates no Brasil ano que vem!!!!!!!!!
Será que eu vou ter $$$ pra ir?
Putz se der eu quero ir!!
Vai tocar em São Paulo no dia 23 de Março e no dia 24 no Rio!

Who was dragged down by the stone????

Categories: Java, Linux, Music, Portuguese

Linux, blogs, etc

November 22, 2006 4 comments

Opa!

Então, hoje eu tava fuçando por aí e vi um blog de um rapaz meio triste. Ele diz que gosta de software livre, que usa Firefox, OpenOffice, etc; mas que não conseguia usar Linux. Ele parecia meio chateado por ter tentado instalar o Ubuntu na máquina dele e não ter conseguido se virar sozinho.

Bom, eu uso praticamente só Linux hoje em dia, e estou satisfeito com o que consigo fazer. Mas quando comecei a usar não foi fácil, como vocês já devem imaginar.

Porém… eu me lembro ainda de quando ganhei meu primeiro computador. Eu me lembro de quando formatei o hd e instalei o Windows 98 pela primeira vez. E mais, me lembro dos dias que sofri instalando/desinstalando codecs de vídeo pra assistir Shaolin Soccer no computador.

E olha só, eu usava Windows…
Vejam bem, não estou dizendo que usar Windows é tão difícil quanto usar Linux. Estou dizendo que Windows também não é mole mole quenem gelatina. Dependendo do que quiser fazer, você pode sofrer também…

Olha só o exemplo da Manuela: ela queria ouvir mp3 no Linux, aí não tinha codec: teve que instalar o codec de mp3 (o que ela com certeza não precisou fazer no Windows).
Mas aí ela queria muito muito ouvir umas músicas do The Bangles, (uma banda só de mulheres, de umas décadas atrás, que cantam ‘Eternal Flame’). Aí ela achou várias músicas dessa banda mas, estava em formato ogg :S

Ogg? Alguém já ouviu falar nisso? Se você sempre usou Windows provavelmente nunca ouviu, mas é um formato livre de áudio, que se não me engano atinge taxas de compressão melhores que o próprio mp3. O que aconteceu? Ela só conseguia ouvir as músicas no Linux. No Windows ela teve que correr atrás de codecs, não achou, teve que instalar um player só pra ouvir ogg.

Moral da história: quando você aprendeu a usar Windows, você tinha que correr atrás de como fazer as coisas porque não tinha outra opção. Agora se você tiver que correr atrás de algo pra fazer no Linux, você tem a opção do Windows. Mas não desanima não, po! É fácil [a não ser que você queira instalar um winmodem...], e tem um monte de gente por aí pra ajudar. A comunidade Ubuntu brasileira por exemplo é bem grande, e é uma distro fácil, for human beings.

Tem um bocado de gente ao meu redor dizendo que tão querendo instalar Linux pela primeira vez e não sei o que… Bem, problemas vocês vão ter, claro, é um SO novo, que não imita o Windows, tem suas próprias características, é necessário se acostumar a algumas coisas, mas vale a pena. Vale mesmo? Bem, isso é assunto pra outro post. No meu caso, acho que valeu sim!

Categories: Linux, Portuguese

Java Livre!

November 14, 2006 1 comment

Já era esperado, já tinha sido anunciado, mas mesmo assim muita gente ainda desconfiava…
Seria mesmo a Sun capaz de liberar o código do Java?

Bom, ela foi. O código do JDK, compilador, HotSpot, ME, entre outros, foi aberto. E sob a GPL2, a mesma licença do Linux.

E a Sun, claro, não fez isso porque ela é boazinha e quer virar hippie. Algumas pessoas fazem isso, é verdade, mas são poucas.

 

retirado de http://www.tiobe.com/tpci.htm

É só olhar para três linhas (Java, PHP e Python) e entender [quase] toda a história.

Ah, e realmente faltou creditar o Pacu, que pos o Planeta Comp no ar! Valeu por lembrar, gaúcho!

¬¬ Maldito editor que não me deixa usar o delete….

Categories: Java, Linux, Portuguese
Follow

Get every new post delivered to your Inbox.