Dessa vez foi um pouco complicado hehe, eu estava garimpando a internet procurando um exemplo de como utilizar o QPrintPreviewDialog, sem sucesso, depois de muito procurar fiz uma pergunta ao amigo do site sobre Python e Qt e ele gentilmente me respondeu, o resultado pode ser visto aqui:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore
from PyQt4.QtWebKit import QWebView
class ProgramaImpressor(QDialog):
def __init__(self,parent=None):
super(ProgramaImpressor,self).__init__(parent)
rotuloNome=QLabel("Nome: ")
rotuloEndereco=QLabel(u"Endereço: ")
rotuloOutros=QLabel("Diversos: ")
self.impressor=QPrinter()
self.txtnome=QLineEdit()
self.txtendereco=QLineEdit()
self.txtdiversos=QTextEdit()
self.btnimprimir=QPushButton("&Imprimir")
layoutHorizontal=QHBoxLayout()
layoutHorizontal2=QHBoxLayout()
layoutHorizontal3=QHBoxLayout()
layoutVertical=QVBoxLayout()
layoutHorizontal.addWidget(rotuloNome)
layoutHorizontal.addWidget(self.txtnome)
layoutHorizontal2.addWidget(rotuloEndereco)
layoutHorizontal2.addWidget(self.txtendereco)
layoutHorizontal3.addWidget(rotuloOutros)
layoutHorizontal3.addWidget(self.txtdiversos)
layoutVertical.addLayout(layoutHorizontal)
layoutVertical.addLayout(layoutHorizontal2)
layoutVertical.addLayout(layoutHorizontal3)
layoutVertical.addWidget(self.btnimprimir)
self.setLayout(layoutVertical)
self.dialogo=QPrintPreviewDialog()
self.html=u""
self.documento=QWebView()
self.connect(self.dialogo, SIGNAL("paintRequested (QPrinter *)"),self.documento.print_)
self.connect(self.documento,SIGNAL("loadFinished (bool)"),self.previaImpressao)
self.connect(self.btnimprimir, SIGNAL("clicked()"),self.imprimir)
def previaImpressao(self,arg):
self.dialogo.exec_()
def imprimir(self,html=None):
html=u"<font align=center><H1>Relatório de Teste de Impressão</H1></font>\
<br>\
<p>O nome digitado Foi: <font color=blue>%s</font></p>\
<p>O endereço da pessoa é: <font color=blue>%s</font></p>\
<p>Os demais comentários São:\
<br>%s</p>"%(self.txtnome.text(),self.txtendereco.text(),self.txtdiversos.toHtml())
self.documento.setHtml(html)
#self.documento.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
JanelaPrincipal = ProgramaImpressor()
JanelaPrincipal.show()
app.exec_()
Blog com a finalidade de compartilhar informações, especialmente programação em Python e Qt
quarta-feira, 12 de maio de 2010
terça-feira, 6 de abril de 2010
Programação em Python e Qt, exemplo prático e funcional
Estou de volta à atividade no Blog com uma informação bastante legal, Criei um programinha baseado em uma aula de VB.net (Blarg!) que eu tive e criei uma Agenda Eletrônica usando o Banco de Dados MySQL e PyQt, é fácil de instalar, você precisa instalar o Python, eo PyQt, se estiver usando Linux, basta ir no Gerenciador de pacotes que ele está disponível, não se esqueça do QtSQL, se estiver usando Windows basta ir nos links que eu deixei.
As demais explicações sobre o Programa estão no código do mesmo, basta clickar aqui para baixar:
Código Fonte: Download
Instalador Para Ambiente Windows: Download
Eu usei o Eclipse com o plugin Pydev e o Qt designer.
As demais explicações sobre o Programa estão no código do mesmo, basta clickar aqui para baixar:
Código Fonte: Download
Instalador Para Ambiente Windows: Download
Eu usei o Eclipse com o plugin Pydev e o Qt designer.
Marcadores:
banco de dados,
eclipse,
exemplo de aplicativo em python e qt,
exemplo pyqt,
exemplo python,
exemplo qtsql,
linux,
programação,
python,
qt,
qtdesigner,
software livre,
windows
quinta-feira, 25 de março de 2010
Como instalar plugins no Gimp
Recentemente eu precisei instalar alguns plugins no Gimp, em especial o Plugin: GREYCstoration, um plugin fantástico por sinal, ele vem já compilado para o Gimp, sendo assim, como instalar? Simples ;)
Com isso ele fica instalado para o usuário atual, se quiser instalar para todos basta:
Se fosse um arquivo fonte c para ser compilado seria:
É isso, espero que seja útil.
Inté :D
$gimptool --install-bin GREYCstoration_gimp_pc_linux
Com isso ele fica instalado para o usuário atual, se quiser instalar para todos basta:
$gimptool --install-admin-bin GREYCstoration_gimp_pc_linux
Se fosse um arquivo fonte c para ser compilado seria:
$gimptool --install GREYCstoration_gimp_pc_linux.c
É isso, espero que seja útil.
Inté :D
terça-feira, 19 de janeiro de 2010
Acessar Banco de Dados MySQL no ArchLinux
Eu usava o Ubuntu com o netbeans e o mesmo encontrava e acessava o banco de dados local mysql sem problemas, quando instalei o arch e o netbeans, eu não consegui fazer mais isso, procurei em diversos lugares diferentes(menos na Wik oficial do Arch) a solução e ninguém parecia a ter.
Como pouco uso o netbeans eu não me importei muito e me contentei em usar no meu desktop que tem o ubuntu 64 bits, eu já havia configurado as tabelas, os BD's propriamente ditos e o arquivo my.cnf e nada feito.
O problema apareceu quando eu não consegui acessar o MySQL com os meus aplicativos python, e o pior é que eu precisava demonstrar o acesso a um cliente com o programa rodando no micro dele e o mysql rodando como servidor no meu note, e agora?
Novamente a maratona no google e nada feito, então resolvi procurar na Wiki do Arch : , a solução estava lá, era só seguir os passos, e voilá, tudo funcionando, inclusive o netbeans.
Fica aí a dica, se alguém precisar configurar e por acaso cair por esse blog a solução está na wiki do arch.
Como pouco uso o netbeans eu não me importei muito e me contentei em usar no meu desktop que tem o ubuntu 64 bits, eu já havia configurado as tabelas, os BD's propriamente ditos e o arquivo my.cnf e nada feito.
O problema apareceu quando eu não consegui acessar o MySQL com os meus aplicativos python, e o pior é que eu precisava demonstrar o acesso a um cliente com o programa rodando no micro dele e o mysql rodando como servidor no meu note, e agora?
Novamente a maratona no google e nada feito, então resolvi procurar na Wiki do Arch : , a solução estava lá, era só seguir os passos, e voilá, tudo funcionando, inclusive o netbeans.
Fica aí a dica, se alguém precisar configurar e por acaso cair por esse blog a solução está na wiki do arch.
Enable remote access
The MySQL server does not listen on the TCP port 3306 by default. To allow (remote) TCP connections, comment the following line in /etc/mysql/my.cnf:
skip-networking
Remember to edit /etc/hosts.allow by adding the following lines:
mysqld: ALL : ALLOW
mysqld-max: ALL : ALLOW
terça-feira, 12 de janeiro de 2010
Meu Primeiro Script PyQt
Consegui depois de algum estudo criar o meu primeiro script em Python + Qt, ele é muito simples e fiz com o intuito de resolver um problema de renomear um monte de fotos de uma pasta.
Ele funciona assim, você digita a pasta onde estão os arquivos, por exemplo:
/home/user/arquivos
depois coloca o nome base do arquivo, por exemplo:
fotos2006.jpg
depois ele renomeia as fotos como 1fotos2006.jpg,2fotos2006.jpg e assim por diante. É uma função muito simples, mas vale à pena o aprendizado, tive muitos problemas para ele funcionar com caracteres especiais.
Aqui vai o script (estou sem tempo para inserir comentários depois eu faço isso)
Ele funciona assim, você digita a pasta onde estão os arquivos, por exemplo:
/home/user/arquivos
depois coloca o nome base do arquivo, por exemplo:
fotos2006.jpg
depois ele renomeia as fotos como 1fotos2006.jpg,2fotos2006.jpg e assim por diante. É uma função muito simples, mas vale à pena o aprendizado, tive muitos problemas para ele funcionar com caracteres especiais.
Aqui vai o script (estou sem tempo para inserir comentários depois eu faço isso)
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
from os import system
import subprocess
class Ui_janelaPrincipal(object):
def setupUi(self, janelaPrincipal):
janelaPrincipal.setObjectName("janelaPrincipal")
janelaPrincipal.resize(419, 226)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../star.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
janelaPrincipal.setWindowIcon(icon)
self.centralwidget = QtGui.QWidget(janelaPrincipal)
self.centralwidget.setObjectName("centralwidget")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 59, 30))
self.label.setObjectName("label")
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 60, 91, 51))
self.label_2.setObjectName("label_2")
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 120, 59, 18))
self.label_3.setObjectName("label_3")
self.mensagens = QtGui.QLabel(self.centralwidget)
self.mensagens.setGeometry(QtCore.QRect(110, 120, 131, 61))
self.mensagens.setObjectName("mensagens")
self.botaoRenomear = QtGui.QPushButton(self.centralwidget)
self.botaoRenomear.setGeometry(QtCore.QRect(290, 140, 106, 27))
self.botaoRenomear.setObjectName("botaoRenomear")
self.caminho = QtGui.QLineEdit(self.centralwidget)
self.caminho.setGeometry(QtCore.QRect(100, 10, 311, 28))
self.caminho.setObjectName("caminho")
self.novo_arquivo = QtGui.QLineEdit(self.centralwidget)
self.novo_arquivo.setGeometry(QtCore.QRect(100, 70, 113, 31))
self.novo_arquivo.setObjectName("novo_arquivo")
janelaPrincipal.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(janelaPrincipal)
self.menubar.setGeometry(QtCore.QRect(0, 0, 419, 24))
self.menubar.setObjectName("menubar")
janelaPrincipal.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(janelaPrincipal)
self.statusbar.setObjectName("statusbar")
janelaPrincipal.setStatusBar(self.statusbar)
QtCore.QObject.connect(self.botaoRenomear, QtCore.SIGNAL("clicked()"), self.renomear)
self.retranslateUi(janelaPrincipal)
QtCore.QMetaObject.connectSlotsByName(janelaPrincipal)
def renomear(self):
caminho = unicode(self.caminho.text())
arquivo = unicode(self.novo_arquivo.text())
completo = caminho + '/.caminho'
system(u"ls %s > %s/.caminho" % (caminho, caminho))
prepare21 = open(unicode(completo), 'r')
linhas = prepare21.readlines()
contagem = 0
for arquivos in linhas:
contagem += 1
filesX = arquivos[:len(arquivos) - 1]
#print filesX
#try:
#system(u'mv -fv "%s/%s" "%s/%d%s"' % (caminho, filesX, caminho, contagem, arquivo))
# print fileX
subprocess.call(['mv', '-fv', caminho + '/' + unicode(filesX, 'utf-8'), caminho + '/' + str(contagem) + arquivo])
self.mensagens.setText(u"transação efetuada\ncom sucesso")
#except:
#self.mensagens.setText(u"Falha geral\nna transação")
def retranslateUi(self, janelaPrincipal):
janelaPrincipal.setWindowTitle(QtGui.QApplication.translate("janelaPrincipal", "Renomear em massa", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("janelaPrincipal", "Pastas:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("janelaPrincipal", "Nome Base :", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("janelaPrincipal", "Status:", None, QtGui.QApplication.UnicodeUTF8))
self.botaoRenomear.setText(QtGui.QApplication.translate("janelaPrincipal", "Renomear", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
janelaPrincipal = QtGui.QMainWindow()
ui = Ui_janelaPrincipal()
ui.setupUi(janelaPrincipal)
janelaPrincipal.show()
sys.exit(app.exec_())
segunda-feira, 28 de dezembro de 2009
Porque Resolvi Usar PyQt.
Eu estudei bastante PyGTK, e baixei manuais de referência e etc, consigo fazer diversas coisas em GTK e já fiz diversos programinhas legais para uso interno, porém surgiu recentemente um projeto maior e tive problemas com o PyGTK:
- Graves instabilidades com o Glade3.
- Biblioteca nativa GTK com limitações para o meu uso.
- Suporte Muito fraco para o windows.
Resolvi então dar uma olhada nas bibliotecas Qt que devido à minha preferência por Gnome eu nunca havia dado uma olhada nelas para programar, logo de cara uma coisa me agradou que foi a nokia estar por trás do projeto, eu gostei disso porque quando uma empresa está coordenando alguma coisa as suas diretrizes são bem definidas, nada contra outro tipo de modelo ou empresa, mas o fato é que isso me tranquilozou um pouco. Os pontos positivos de usar as bibliotecas Qt e o PyQt4 foram:
- Widgets com recursos úteis nativos, por exemplo, o masked entry faz parte do pacote do Qt Designer.
- Qt designer mais estável do que o Glade3, eu ainda não tinha tido problemas com o Glade e percebi que se o trabalho for pequeno ele não nega fogo, porém quando precisei criar interfaces mais complexas me deparei com travamentos e falhas de segmentação esporádicas que atrasaram e muito o meu trabalho, coisa que ainda não aconteceu com o Qt Designer.
- Ferramenta de geração de código faz parte da suíde de desenvolvimento PyQt- pyuic4. A ferramenta que eu utilizava para gerar o código no python era um script que eu encontrei garimpando a internet chamado gladeloader.py, ele é realmente muito bom, porém foi criado por um cara que não faz parte do desenvolvimento principal e não está ligado a nenhum projeto, o que significa que novidades vindas do glade poderiam gerar incompatibilidades com o script o que me faria ter que começar a minha odisséia novamente, temos o tepache que vem nos repositórios de diversas distros porém nunca me dei bem com ele.
- Suporte Excelente em Windows, Symbian, Maemo etc... Isso creio que não preciso comentar né?
Claro que nem tudo são flores, mas visto os benefícios eu decidi mudar todo o programa que eu esava construindo para as bibliotecas Qt, os problemas que estou encontrando são:
- Documentação do PyQt basicamente apenas em inglês e eu não encontrei material atualizado para download, não que inglês seja um encalço muito grande porém ler um documento técnico em sua lingua nativa é bem melhor e com um desenvolvimento mais rápido.
- Diferenças conceituais no manejo de sinais e eventos. As bibliotecas Qt utilizam um conceito diferente de sinais e métodos, eles usam: Sinal, Emissor, Receptor e Slot's; eu estou tendo um pouco de dificuldades de entender isso apropriadamente.
- Arquivo do Qt designer não é aproveitado como no Glade/GTK. No glade, o arquivo glade é aproveitado e no código fica apenas o código de importação do glade e a lógica do programa fica no arquivo python, no Qt designer o código de criação da Gui fica no arquivo .py e , se for o caso, teria que criar uma classe depois importar para o código da lógica, terei que fazer isso.
Fica aí a dica, se alguém como eu está tendo problemas com o PyGTK o PyQt é uma solução, é claro que temos o projeto kiwi entre outros que podem resolver essa situação, mas no meu caso não era apenas as limitações das widgets que estavam me dando dor de cabeça.
- Biblioteca nativa GTK com limitações para o meu uso.
- Suporte Muito fraco para o windows.
Resolvi então dar uma olhada nas bibliotecas Qt que devido à minha preferência por Gnome eu nunca havia dado uma olhada nelas para programar, logo de cara uma coisa me agradou que foi a nokia estar por trás do projeto, eu gostei disso porque quando uma empresa está coordenando alguma coisa as suas diretrizes são bem definidas, nada contra outro tipo de modelo ou empresa, mas o fato é que isso me tranquilozou um pouco. Os pontos positivos de usar as bibliotecas Qt e o PyQt4 foram:
- Widgets com recursos úteis nativos, por exemplo, o masked entry faz parte do pacote do Qt Designer.
- Qt designer mais estável do que o Glade3, eu ainda não tinha tido problemas com o Glade e percebi que se o trabalho for pequeno ele não nega fogo, porém quando precisei criar interfaces mais complexas me deparei com travamentos e falhas de segmentação esporádicas que atrasaram e muito o meu trabalho, coisa que ainda não aconteceu com o Qt Designer.
- Ferramenta de geração de código faz parte da suíde de desenvolvimento PyQt- pyuic4. A ferramenta que eu utilizava para gerar o código no python era um script que eu encontrei garimpando a internet chamado gladeloader.py, ele é realmente muito bom, porém foi criado por um cara que não faz parte do desenvolvimento principal e não está ligado a nenhum projeto, o que significa que novidades vindas do glade poderiam gerar incompatibilidades com o script o que me faria ter que começar a minha odisséia novamente, temos o tepache que vem nos repositórios de diversas distros porém nunca me dei bem com ele.
- Suporte Excelente em Windows, Symbian, Maemo etc... Isso creio que não preciso comentar né?
Claro que nem tudo são flores, mas visto os benefícios eu decidi mudar todo o programa que eu esava construindo para as bibliotecas Qt, os problemas que estou encontrando são:
- Documentação do PyQt basicamente apenas em inglês e eu não encontrei material atualizado para download, não que inglês seja um encalço muito grande porém ler um documento técnico em sua lingua nativa é bem melhor e com um desenvolvimento mais rápido.
- Diferenças conceituais no manejo de sinais e eventos. As bibliotecas Qt utilizam um conceito diferente de sinais e métodos, eles usam: Sinal, Emissor, Receptor e Slot's; eu estou tendo um pouco de dificuldades de entender isso apropriadamente.
- Arquivo do Qt designer não é aproveitado como no Glade/GTK. No glade, o arquivo glade é aproveitado e no código fica apenas o código de importação do glade e a lógica do programa fica no arquivo python, no Qt designer o código de criação da Gui fica no arquivo .py e , se for o caso, teria que criar uma classe depois importar para o código da lógica, terei que fazer isso.
Fica aí a dica, se alguém como eu está tendo problemas com o PyGTK o PyQt é uma solução, é claro que temos o projeto kiwi entre outros que podem resolver essa situação, mas no meu caso não era apenas as limitações das widgets que estavam me dando dor de cabeça.
sexta-feira, 4 de dezembro de 2009
Sobre Religião, Linux, Windows e informática
Engraçado o tópico do post não? O que tem relação com Religião, Windows, linux ou informática? Eu irei explicar, mas antes vamos fazer uma pequena viagem....
Irã, Iraque, Israel, Palestina... Afeganistão. Esses países sempre estão em zona de guerra e o motivo dessa guerra é preticamente o mesmo: Religião, um quer matar, eliminar o outro por ser um "porco" infiel, e o lado Oposto, os ocidentais "iluminados" querem combater a ameaça fundamentalista e fanática.
Então aparece uma corrente de pessoas que culpam Deus, as religiões e passam a "adorar" e idolatrar um homem que foi o iluminado, aquele que tirou o ópio do povo e mostrou a verdade à luz da ciência. em contrapartida um bocado de gente fala que eles são filhos do capeta e que temos que em nome de Deus eliminar esses porcos do mundo, mais uma guerra, mais um conflito mais um jihad.
Talves por esse motivo o Elton John escreveu a sua célebre "imagine", onde ele imaginou um mundo sem religião e as pessoas dando as mãos. Pobre Elton, não poderia estar mais enganado.
Trabalho no ramo da informática a cerca de 16 anos, desde de 1994 quando eu fiz o meu primeiro curso de computação, e desde então venho participando de listas de discussão e fóruns dos mais diversos assuntos de informática, e durante esse tempo não foram poucos os "flame wars" dos quais eu vi e muitas vezes participei.
Para quem não sabe "flame wars" são discussões acaloradas em lugares na internet com fóruns e afins onde as pessoas perdem o senso racional e partem para as mais diversas discussões, ela perde o foco técnico e passa a ser pessoal, pouco importa se o sistema tem uma falha descarada e trava a todo o momento, o que vale é que eu gosto dele e pronto.
Geralmente vemos as discussões crescerem muito quando se fala de linux e windows por exemplo, um grande grupo defende com todo o amor e devoção um sistema que tem como único objetivo gerar mais riquezas para uma determinada empresa, outro grupo defende com unhas e dentes um sistema por um pseudo ideal que no fim das contas é produzido por um grupo de geeks que querem facilitar a sua vida, ao invés de ficarem reinventando a roda preferem compartilhar as suas conquistas e facilitar a sua vida e a dos outros.
O mesmo ocorre com fabricantes de processadores, placas de vídeo etc.
Isso me leva a crer, que se o sonho do elton John se tornasse realidade e de uma hora pra outra acabassem as religiões as pessoas iriam continuar brigando e lutando entre si, mas dessa vez por causa da marca do carro que a outra gosta ou marca de celular ou sistema operacional do computador.
Independente do motivo o Ser Humano Sempre dá um jeitinho de fazer guerra e brigar.
Recentemente entrei no fórum do GDH e tem uma discussão por lá a respeito de Linux e Windows e vírus no Linux, é interessante, mas eu particularmente uso linux há anos e nunca tive algum problema nessa proporção, mas mesmo assim tem alguns que teimam que existe vírus para linux, pode até ter, mas enquanto eu tiver a minha senha de root ninguém infecta o meu computador.
Irã, Iraque, Israel, Palestina... Afeganistão. Esses países sempre estão em zona de guerra e o motivo dessa guerra é preticamente o mesmo: Religião, um quer matar, eliminar o outro por ser um "porco" infiel, e o lado Oposto, os ocidentais "iluminados" querem combater a ameaça fundamentalista e fanática.
Então aparece uma corrente de pessoas que culpam Deus, as religiões e passam a "adorar" e idolatrar um homem que foi o iluminado, aquele que tirou o ópio do povo e mostrou a verdade à luz da ciência. em contrapartida um bocado de gente fala que eles são filhos do capeta e que temos que em nome de Deus eliminar esses porcos do mundo, mais uma guerra, mais um conflito mais um jihad.
Talves por esse motivo o Elton John escreveu a sua célebre "imagine", onde ele imaginou um mundo sem religião e as pessoas dando as mãos. Pobre Elton, não poderia estar mais enganado.
Trabalho no ramo da informática a cerca de 16 anos, desde de 1994 quando eu fiz o meu primeiro curso de computação, e desde então venho participando de listas de discussão e fóruns dos mais diversos assuntos de informática, e durante esse tempo não foram poucos os "flame wars" dos quais eu vi e muitas vezes participei.
Para quem não sabe "flame wars" são discussões acaloradas em lugares na internet com fóruns e afins onde as pessoas perdem o senso racional e partem para as mais diversas discussões, ela perde o foco técnico e passa a ser pessoal, pouco importa se o sistema tem uma falha descarada e trava a todo o momento, o que vale é que eu gosto dele e pronto.
Geralmente vemos as discussões crescerem muito quando se fala de linux e windows por exemplo, um grande grupo defende com todo o amor e devoção um sistema que tem como único objetivo gerar mais riquezas para uma determinada empresa, outro grupo defende com unhas e dentes um sistema por um pseudo ideal que no fim das contas é produzido por um grupo de geeks que querem facilitar a sua vida, ao invés de ficarem reinventando a roda preferem compartilhar as suas conquistas e facilitar a sua vida e a dos outros.
O mesmo ocorre com fabricantes de processadores, placas de vídeo etc.
Isso me leva a crer, que se o sonho do elton John se tornasse realidade e de uma hora pra outra acabassem as religiões as pessoas iriam continuar brigando e lutando entre si, mas dessa vez por causa da marca do carro que a outra gosta ou marca de celular ou sistema operacional do computador.
Independente do motivo o Ser Humano Sempre dá um jeitinho de fazer guerra e brigar.
Recentemente entrei no fórum do GDH e tem uma discussão por lá a respeito de Linux e Windows e vírus no Linux, é interessante, mas eu particularmente uso linux há anos e nunca tive algum problema nessa proporção, mas mesmo assim tem alguns que teimam que existe vírus para linux, pode até ter, mas enquanto eu tiver a minha senha de root ninguém infecta o meu computador.
Assinar:
Postagens (Atom)