Tradicionalmente sempre optei por programar em sistemas mais "livres", livre no quesito liberdade de criação, nunca vi com bons olhos a plataforma .Net da MS (e continuo não vendo hehe). Porém vontade e ideologia não enche barriga, por isso desenvolvo nessa plataforma também.
Aqui vai algumas impressões de um programador Pythoniano, java e C++ eventual, vale lembrar que eu não tenho qualificação, conhecimento e nem pretensão de dizer se alguma linguagem é superior à outra, se em algum momento do texto eu ser tendencioso ou dar a preferência à algum aspecto, o mesmo se baseia unicamente em opiniao e experiência estritamente pessoal.
Antes de iniciar gostaria de definir duas palavrinas para vocês:
fácil: adj. Que se faz sem dificuldade: trabalho fácil. Que se consegue sem grande trabalho. / Claro, inteligível
simples: Que não é composto. ,. Que não é complicado. Sem ornatos nem enfeites. De fácil interpretação.Puro; claro. Singelo; inocente.. Mero; natural.. Ingénuo; crédulo.. Exclusivo.
Eu sempre tive uma pequena ressalva quanto o modo de desenho visual em GTK+ e Qt, os layouts, no Glade por exemplo você tem que criar os layouts e depois colocar os "widgets" (botões, caixas de texto, etc)em containers para organizar a sua interface, fazer isso em um aplicativo gráfico é um tanto tedioso e o Visual Studio, Delphi, Netbeans e afins não precisam usar esse recurso, em Qt (utilizando o Qtdesigner) o desenho é mais flexível que no Glade, porém a aplicação dos layouts é praticamente obrigatória para que a sua interface fique mais bem acabada.
No Visual Studio e no Netbeans conforme você vai adicionando os objetos os mesmos vão apresentando as "linhas guias" e fica fácil fácil alinhar os objetos de iteração.
Só que após um tempo programando no Visual Studio é que percebi as vantagens do Jeito Qt e GTK de ser.
A programação da interface via código é extremamente simples desse modo e o redimensionamento da tela ao maximizar é excelente também, não existem problemas ao aumentar o tamanho da mesma pois os "conteiners layout" se ajustam automaticamente sem causar transtornos. É muito simples trabalhar com Layouts e Containers dessa maneira.
Percebi uma coisa interessante, usar o Visual Studio e o Netbeans é fácil, mas não é simples. É extremamente difícil compreender como funciona a construção da GUI no Netbeans e No Visual Studio é realmente muuito difícil, é muito fácil trabalhar mas não é simples.
Já sobre a programação eu percebi que usando o Visual Studio a mesma é realmente muito fácil, a gente fica só movendo ícones de lá pra cá e boas, muitas delas a gente nem sabe exatamente o que faz mas tem que colocar lá porque senão o programa não funciona, no visual studio para trabalharmos com os bancos de dados precisamos utilzar diversos tipos de variáveis: recordset, dataadapter, comand, conexão e fora as strings.
Para programar em Qt e usar banco de dados a gente precisa apenas de uma variável QSqlQuery uma Database e as strings que eventualmente precisaremos! pronto, o uso é muito simples e inteligível, e se usar uma ide como o netbeans fica muito fácil mesmo.
Outra coisa que eu percebi que o pessoal do trolltech desenvolveu e que é extremamente eficiente são os sinais e slots da Qt depois que você começa a utilizar fica realmente simples o código, ágil e fácil de programar.
Cada linguagem de programação possui seus pontos fortes e fracos, e na maioria das vezes o costume e conhecimento do programador é que define qual é realmente a "melhor", estou gostando muito e achando os recursos do Qt fantásticos e das API gráficas que venho utilizado atualmente é a mais rica em recursos, mais customizável e mais simples de utilizar.
Blog com a finalidade de compartilhar informações, especialmente programação em Python e Qt
quinta-feira, 24 de junho de 2010
terça-feira, 22 de junho de 2010
A "Idiocracia" da Informática
Quando eu comecei a mexer em micros na década de 90 onde para cada vez que se ligava um computador era preciso programar um editor de texto em basic, para automatizar um pouquinho as tarefas era possível salvar os programas em fita cassete, quem não entendesse nada de inglês simplesmente não conseguia usar o micro, era coisa de pessoal super capacitado.
Felizmente as coisa melhoraram muito daquele tempo para cá, só não me entra na cabeça o paradoxo seguinte:
- Na época onde computadores eram menos importantes e não poderiam armazenar a VIDA das pessoas os que o utilizavam tinham total e completo conhecimento sobre o mesmo e eram capazes de resolver os seus próprios problemas e olha que se tivesse algum era muito difícil de encontrar, não tinha o "Oráculo" Google.
- Hoje em dia os computadores armazenam todos os dados importantes da vida da pessoa e muitas outras coisas e o pessoal não tem o mínimo de interesse em aprender nem que seja um pouco a respeito do uso e funcionamento do mesmo, o que vivemos é uma idiocracia da informática, é triste mas vemos usuários fazendo as coisas mais estúpidas, eu concordo que nem todo mundo tem que ser um "expert" em informática e que temos mais o que fazer, mas para quem não sabe, com um mínimo de conhecimento é possível usar o Windows XP sem antivírus e nunca pegar um vírus sequer, e mais ainda, se pegar, identificar que pegou e remover manualmente.
Se for o caso, apenas um antivírus simples como o MS Security essentials e um pequeno conhecimento a pessoa praticamente não tem problemas com o tal.
Infelizmente com a democratização do computador e as ferramentas que facilitam o manuseio do mesmo as pessoas passaram a desprezar o conhecimento e o estudo do mesmo, como disse anteriormente, não é preciso que todo mundo vire geek porém é preciso sim que as pessoas aprendam o mínimo do funcionamento do computador, tem gente que perde trabalhos, horas preciosas e importantes por simplesmente salvar o arquivo no local errado ou por não saber qual extensão de arquivo utilizar.
Felizmente as coisa melhoraram muito daquele tempo para cá, só não me entra na cabeça o paradoxo seguinte:
- Na época onde computadores eram menos importantes e não poderiam armazenar a VIDA das pessoas os que o utilizavam tinham total e completo conhecimento sobre o mesmo e eram capazes de resolver os seus próprios problemas e olha que se tivesse algum era muito difícil de encontrar, não tinha o "Oráculo" Google.
- Hoje em dia os computadores armazenam todos os dados importantes da vida da pessoa e muitas outras coisas e o pessoal não tem o mínimo de interesse em aprender nem que seja um pouco a respeito do uso e funcionamento do mesmo, o que vivemos é uma idiocracia da informática, é triste mas vemos usuários fazendo as coisas mais estúpidas, eu concordo que nem todo mundo tem que ser um "expert" em informática e que temos mais o que fazer, mas para quem não sabe, com um mínimo de conhecimento é possível usar o Windows XP sem antivírus e nunca pegar um vírus sequer, e mais ainda, se pegar, identificar que pegou e remover manualmente.
Se for o caso, apenas um antivírus simples como o MS Security essentials e um pequeno conhecimento a pessoa praticamente não tem problemas com o tal.
Infelizmente com a democratização do computador e as ferramentas que facilitam o manuseio do mesmo as pessoas passaram a desprezar o conhecimento e o estudo do mesmo, como disse anteriormente, não é preciso que todo mundo vire geek porém é preciso sim que as pessoas aprendam o mínimo do funcionamento do computador, tem gente que perde trabalhos, horas preciosas e importantes por simplesmente salvar o arquivo no local errado ou por não saber qual extensão de arquivo utilizar.
quarta-feira, 19 de maio de 2010
Sistema operacional Linux, Distro Linux, Distribuições, mas que raios é isso tudo?
Para um usuário acostumado com windows, a vida é fácil, você escolhe entre Seven, Vista ou XP e pronto!
No caso dos sistemas operacionais baseados em linux a situação é diferente, cada um é como se fosse filho de um mesmo pai e com mães completamente diferentes. Você não pode julgar os sistemas linux apenas com uma Distribuição Linux.
Como isso funciona, o kernel linux (núcleo do sistema) desenvolvido originariamente por Linus Torvalds , é distribuído gratuitamente e de forma livre, dessa forma, qualquer pessoa que queira pode alterar e adaptar o mesmo a seu gosto, apesar de toda a filosofia "livre" em torno dele (livre não quer dizer gratuito) o linux é mantido por empresas que lucram e muito com ele, como isso ocorre?
O seu Roteador, o seu modem, seu celular ou qualquer outro dispositivo eletrônico que necessite de algum sistema controlador, provavelmente funciona com uma versão do kernel linux, por isso, muitas empresas investem no desenvolvimento do mesmo, pois desse modo, eles tem um sistema comprovadamente robusto e funcional com pouco investimento. Na realidade não nada de muito ideológico nisso...
A segunda parte da importância do kernel linux é com relação aos servidores, como o linux pode ser adaptado a qualquer arquitetura de hardware, temos versões para rodarem em servidores e sistemas específicos como o do LHC e demais supercomputadores. Como os processos envolvidos são muito críticos e específicos é necessário um sistema operacional desenhado e preparado para a tarefa específica. Esses clientes em geral tem muito dinheiro, mas como o que está em jogo muitas vezes envolve propriedades intelectuais importantíssimas é melhor que o controle total e absoluto de hardware e software estejam nas mãos deles.
Por fim, temos o linux em smartphones, tablets e dispositivos móveis diversos onde ele vem ganhando muitos adeptos e em sistemas em desktop, os sistemas em desktops possuem infindáveis distribuições, que são versões de sistemas operacionais diferentes baseados no mesmo kernel e aplicativos, mas não se engane, Fedora é diferente de Ubuntu que é diferente do Archlinux. Cada um desses que eu citei são sistemas operacionais diferentes, cada um com sua característica e peculiaridade.
Cada sistema linux diferente pode ser tão diferente um do outro como o Céu e a Terra, imagine com relação ao Windows, tem até um artigo bem interessante: O Linux não é o Windows.
Tem muita gente que questiona o linux e talz, mas na realidade o linux nunca foi e não é um concorrente do Windows, a começar pela finalidade e depois pela maneira que é distribuído, o concorrente do windows mais próximo é o MacOSX, mesmo assim, por rodar em hardware específico podemos dizer que ele é de nicho assim como o linux, na realidade o windows não possui nenhum concorrente, essa é a verdade nua e crua, se ele fosse vendido em caixinhas e tivesse propaganda e a finalidade de substituir o windows ele poderia até ser um concorrente mas não é o que ocorre, até mesmo no ramo de servidor ele em si não é um concorrente, o real concorrente do IIS é o Apache, que roda no próprio windows também.
Portanto, quando falar de "linux" entenda apenas como o kernel do sistema, porque um sistema operacional usável, baseado em kernel linux é Ubuntu, Fedora, Mandriva etc... Espero ter esclarecido as dúvidas de quem ainda não sabia, qualquer coisa, comentem.
No caso dos sistemas operacionais baseados em linux a situação é diferente, cada um é como se fosse filho de um mesmo pai e com mães completamente diferentes. Você não pode julgar os sistemas linux apenas com uma Distribuição Linux.
Como isso funciona, o kernel linux (núcleo do sistema) desenvolvido originariamente por Linus Torvalds , é distribuído gratuitamente e de forma livre, dessa forma, qualquer pessoa que queira pode alterar e adaptar o mesmo a seu gosto, apesar de toda a filosofia "livre" em torno dele (livre não quer dizer gratuito) o linux é mantido por empresas que lucram e muito com ele, como isso ocorre?
O seu Roteador, o seu modem, seu celular ou qualquer outro dispositivo eletrônico que necessite de algum sistema controlador, provavelmente funciona com uma versão do kernel linux, por isso, muitas empresas investem no desenvolvimento do mesmo, pois desse modo, eles tem um sistema comprovadamente robusto e funcional com pouco investimento. Na realidade não nada de muito ideológico nisso...
A segunda parte da importância do kernel linux é com relação aos servidores, como o linux pode ser adaptado a qualquer arquitetura de hardware, temos versões para rodarem em servidores e sistemas específicos como o do LHC e demais supercomputadores. Como os processos envolvidos são muito críticos e específicos é necessário um sistema operacional desenhado e preparado para a tarefa específica. Esses clientes em geral tem muito dinheiro, mas como o que está em jogo muitas vezes envolve propriedades intelectuais importantíssimas é melhor que o controle total e absoluto de hardware e software estejam nas mãos deles.
Por fim, temos o linux em smartphones, tablets e dispositivos móveis diversos onde ele vem ganhando muitos adeptos e em sistemas em desktop, os sistemas em desktops possuem infindáveis distribuições, que são versões de sistemas operacionais diferentes baseados no mesmo kernel e aplicativos, mas não se engane, Fedora é diferente de Ubuntu que é diferente do Archlinux. Cada um desses que eu citei são sistemas operacionais diferentes, cada um com sua característica e peculiaridade.
Cada sistema linux diferente pode ser tão diferente um do outro como o Céu e a Terra, imagine com relação ao Windows, tem até um artigo bem interessante: O Linux não é o Windows.
Tem muita gente que questiona o linux e talz, mas na realidade o linux nunca foi e não é um concorrente do Windows, a começar pela finalidade e depois pela maneira que é distribuído, o concorrente do windows mais próximo é o MacOSX, mesmo assim, por rodar em hardware específico podemos dizer que ele é de nicho assim como o linux, na realidade o windows não possui nenhum concorrente, essa é a verdade nua e crua, se ele fosse vendido em caixinhas e tivesse propaganda e a finalidade de substituir o windows ele poderia até ser um concorrente mas não é o que ocorre, até mesmo no ramo de servidor ele em si não é um concorrente, o real concorrente do IIS é o Apache, que roda no próprio windows também.
Portanto, quando falar de "linux" entenda apenas como o kernel do sistema, porque um sistema operacional usável, baseado em kernel linux é Ubuntu, Fedora, Mandriva etc... Espero ter esclarecido as dúvidas de quem ainda não sabia, qualquer coisa, comentem.
Performance do Ubuntu 10,04 VS Windows Vs MacOSX
Antigamente podíamos sem dúvidas dizer: "A performance do Linux é Superior ao Windows", a realidade não é bem assim.
Com a nova versão do Windows 7 temos um cenário bastante interessante onde os dois sistemas operacionais (Ubuntu 10.04 e Windows 7 ) possuem performances bastante similares, com o Windows ganhando em alguma coisa e o Ubuntu Linux em outras.
Na época do XP (Vista não Conta) o mesmo era e é extremamente antigo e simplesmente não se aproveita do que o hardware tinha a oferecer, como resultado, mesmo tendo drivers inferiores, o linux ganhava em performance por ser mais otimizado em hardware mais recente, o exemplo disso é o SMP (Symmetric Multi-Processing), coisa que no XP ainda engatinha e há muito tempo tem um suporte decente em linux, o mesmo ocorre com a arquitetura de 64bits onde há tempos o linux suporta perfeitamente.
Com as melhorias inseridas no Windows 7, podemos ver os resultados interessantes do Ubuntu 10.04 VS Windows 7 onde os resultados são similares quando os drivers são semelhantemente otimizados. O interessante disso é que: O Ubuntu Linux 10.04 e o Windows 7 possuem performance semelhantes, Se as empresas resolvessem lançar jogos baseados em OpenGL o Ubuntu Linux teria uma performance Similar ao Windows e , em alguns casos , Superior e em outros inferior.
Vale lembrar que os testes foram realizados usando o Ubuntu 10.04 e que existem diversos sistemas operacionais baseados no kernel linux que podem ter uma performance diferente.
Sistema operacional baseado em linux? mas o que é isso? linux é linux não?
Não exatamente, vou explicar no próximo post.
Com a nova versão do Windows 7 temos um cenário bastante interessante onde os dois sistemas operacionais (Ubuntu 10.04 e Windows 7 ) possuem performances bastante similares, com o Windows ganhando em alguma coisa e o Ubuntu Linux em outras.
Na época do XP (Vista não Conta) o mesmo era e é extremamente antigo e simplesmente não se aproveita do que o hardware tinha a oferecer, como resultado, mesmo tendo drivers inferiores, o linux ganhava em performance por ser mais otimizado em hardware mais recente, o exemplo disso é o SMP (Symmetric Multi-Processing), coisa que no XP ainda engatinha e há muito tempo tem um suporte decente em linux, o mesmo ocorre com a arquitetura de 64bits onde há tempos o linux suporta perfeitamente.
Com as melhorias inseridas no Windows 7, podemos ver os resultados interessantes do Ubuntu 10.04 VS Windows 7 onde os resultados são similares quando os drivers são semelhantemente otimizados. O interessante disso é que: O Ubuntu Linux 10.04 e o Windows 7 possuem performance semelhantes, Se as empresas resolvessem lançar jogos baseados em OpenGL o Ubuntu Linux teria uma performance Similar ao Windows e , em alguns casos , Superior e em outros inferior.
Vale lembrar que os testes foram realizados usando o Ubuntu 10.04 e que existem diversos sistemas operacionais baseados no kernel linux que podem ter uma performance diferente.
Sistema operacional baseado em linux? mas o que é isso? linux é linux não?
Não exatamente, vou explicar no próximo post.
quarta-feira, 12 de maio de 2010
Visualização de Impressão Utilizando o QPrintPreviewDialog e PyQt4
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_()
#!/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_()
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
Assinar:
Postagens (Atom)