Quando a microsoft lançou o XboxOne base ele era mais caro e menos potente que o Playstation4 base, a Sony ficou muito tempo jogando isso na cara da Microsoft, e mesmo quando ela lançou o XboxOneS este ainda não conseguiu superar o PS4 base.
Então surgiu a necessidade de mais resolução e a Sony lançou um console um pouco melhor que o PS4 base com o único intuito de suportar resoluções superiores, o preço não é muito diferente que o PS4 regular, este novo console foi chamado de PS4 Pro, e se tornou uma ótima opção de novas compras, especialmente por causa do HD maior de 1TB.
A microsoft que estava ressentida por causa dos problemas que teve com o XboxOne base lançou então um console super poderoso, o XboxOneX.
Este novo console tem mais que o dobro do XboxOne base... e qual o problema?
O problema é que mesmo com o poder adicionar do XboxOneX ele ainda não tem todo o poder para rodar todos os jogos em 4k nativamente, haja vista as configurações extremas que os computadores precisam ter para rodar em 4k, no final das contas, muitos jogos ainda rodam em resolução dinâmica ou em checkerboard assim como o PS4 Pro.
E para piorar, ele precisa ficar preso dentro da compatibilidade com o XboxOne base, jogos não são apenas resolução mas também conteúdo.
Vi um cara no combo infinito alegando que o XboxOneX não é segurado pelo XboxOne base porque quando se cria texturas e modelos 3D sempre são criados em alta qualidade e então são diminuídos para "caber" em locais menores, e eu concordo em partes, mas aqui vão meus argumentos:
1 - Criar texturas e modelos mais detalhados é mais caro: Para criar modelos e texturas com maior qualidade é necessário mais tempo de desenvolvimento, mais atenção nos detalhes, alguns truques que funcionam em certa qualidade e nem tão bem em outra qualidade, se a base instalada de consoles e aparelhos não funcionam em 4k, os desenvolvedores irão optar por criar texturas e modelos medianos (Talvez mirando no PS4 Pro) e então melhora um ou outro detalhe no XboxOneX.
2 - Jogos não são apenas resolução mas conteúdo também: Com o poder adicional do XboxOneX os jogos poderiam ser maiores, ter mais mapas e mecânicas mais complexas, mas como o jogo precisa funcionar no XboxOne base as desenvolvedoras optam por balizar "por baixo" e a única coisa que pode ser diferente são os gráficos e um pouco do framerate. Eu percebi bem isso jogando GTAV no meu notebook, os gráficos em si ficam bons, mas o jogo quase trava quando entra na cidade e tem um montão de gente e carros funcionando.
3 - A base instalada do XboxOneX é pequena: Nesta geração o PS4 reina absoluto no mundo dos consoles, então as produtoras obviamente olham para o mercado, visto que a maioria dos jogos multiplataforma, por motivos óbvios, possuem uma fatia de venda maior no PS4. Seria desperdício de dinheiro a produtora investir em desenvolvimento tendo em vista o XboxOneX que possui uma base pequena até mesmo entre os consoles da Microsoft.
4 - Os consoles estão freando até mesmo o PC: Hoje em dia certamente as produtoras olham com muito carinho o mercado dos consoles simplesmente por causa das vendas, o que ocorre é que jogos de PC sofrem concorrência com a pirataria, coisa que foi banida nesta oitava geração de videogames.
Esse é o meu pensamento, eu acredito que seria mais inteligente por parte da Microsoft que eles lançassem alguma coisa próxima do PS4 pro e focassem no desenvolvimento da próxima geração, por este motivo acredito que o comentário da líder da THQ nórdic é salutar, é uma coisa real.
Para comparação: Lista de especificações XboxOne e PS4
Blog com a finalidade de compartilhar informações, especialmente programação em Python e Qt
quinta-feira, 4 de outubro de 2018
quarta-feira, 14 de dezembro de 2016
Porque cobrar ISS sobre serviços de streaming é totalmente ridículo.
Pagar impostos no Brasil é ridículo de qualquer forma, mas pelo fato de "vivermos em um estado de direito", esse é o preço por isso.
Pelo fato de eu achar a ideologia anarcocapitalista tão utópica quanto o socialismo, eu não posso negar o fato de termos que pagar impostos, infelizmente precisamos do estado em maior ou menor grau.
Ok, então vamos aos impostos, existem diversos deles, impostos sobre bens, sobre produção, sobre transações financeiras, sobre telecomunicações, energia, etc.
Até o próprio imposto de renda, podemos discutir as alíquotas, mas em suma faz uma certa lógica termos que pagar.
O estado fornece a infraestrutura ou as condições para manter o mercado financeiro, as rodovias, licencia as transmissões de radiofrequência (justifica o licenciamento visto que o espectro de transmissão também é limitado), isso tem sentido de ter impostos, claro que novamente podemos questionar as alíquotas, mas o estado precisa regular essas transações e operações para que não vire uma bagunça, obviamente ele tem um custo para fazer essas regulações.
Aí que entro no mérito dos serviços de streaming, o que eles precisam é de internet. O provedor já paga os impostos pela internet, qual a justificativa de ter ISS sobre serviços como Netflix ou Spotify, ainda tem a complicação desse imposto ser municipal e a empresa ser multinacional com sede sei lá onde.
O que vai ter de gente fazendo esquema com VPN e endereço internacional não tá escrito.
Brasil, um país de tolos.
Pelo fato de eu achar a ideologia anarcocapitalista tão utópica quanto o socialismo, eu não posso negar o fato de termos que pagar impostos, infelizmente precisamos do estado em maior ou menor grau.
Ok, então vamos aos impostos, existem diversos deles, impostos sobre bens, sobre produção, sobre transações financeiras, sobre telecomunicações, energia, etc.
Até o próprio imposto de renda, podemos discutir as alíquotas, mas em suma faz uma certa lógica termos que pagar.
O estado fornece a infraestrutura ou as condições para manter o mercado financeiro, as rodovias, licencia as transmissões de radiofrequência (justifica o licenciamento visto que o espectro de transmissão também é limitado), isso tem sentido de ter impostos, claro que novamente podemos questionar as alíquotas, mas o estado precisa regular essas transações e operações para que não vire uma bagunça, obviamente ele tem um custo para fazer essas regulações.
Aí que entro no mérito dos serviços de streaming, o que eles precisam é de internet. O provedor já paga os impostos pela internet, qual a justificativa de ter ISS sobre serviços como Netflix ou Spotify, ainda tem a complicação desse imposto ser municipal e a empresa ser multinacional com sede sei lá onde.
O que vai ter de gente fazendo esquema com VPN e endereço internacional não tá escrito.
Brasil, um país de tolos.
segunda-feira, 18 de abril de 2016
Servidor CENTOS parou de autenticar no Active Directory
Tenho um servidor CENTOS 7.0 que é integrado no active Directory em um windows server 2008R2, ele autentica os usuários do domínio no servidor linux e funcionava muito bem.
O que ocorreu é que depois de algumas atualizações ele parou de autenticar os usuários do domínio na máquina linux, depois de pesquisar bastante vi que só era necessário autenticar novamente a máquina no domínio com o comando:
O que ocorreu é que depois de algumas atualizações ele parou de autenticar os usuários do domínio na máquina linux, depois de pesquisar bastante vi que só era necessário autenticar novamente a máquina no domínio com o comando:
net ads keytab create -U administrator
segunda-feira, 16 de fevereiro de 2015
Sozi, uma excelente solução livre e gratuita para apresentações.
Olá Amigos,
Irei lhes apresentar
agora uma ferramenta que eu achei muito interessante, ela se chama
SOZI e é um plugin para o programa Inkscape.
Com ela podemos
criar apresentações não lineares como o consagrado Prezi, com a
vantagem de ser gratuito e poder funcionar de maneira totalmente
offline.
Para reproduzir a
sua apresentação, a única coisa que você necessita é de um
navegador mais moderno com suporte ao formato .svg como versões não
muito antigas do chrome ou firefox.
Como o programa
funciona em conjunto com o inkscape, você precisa planejar a sua
apresentação em uma tela e então desenhá-la.
Imagine cada
“pedaço” desta tela como uma parte da sua apresentação, para
facilitar, crie grupos com a sua tela e então depois bloquei esse
grupos de modo que você não poderá selecionar os itens com o
mouse.
Após terminar de
criar a sua tela, selecione os pedaços com retângulos e então
preencha o ID do retângulo com um número que indique a ordem de
apresentação de cada quadro da sua apresentação, por exemplo, o
primeiro quadro você coloca o ID “1”, o segundo o ID “2” e
assim por diante.
Após criar todos os
seus quadros, basta selecionar todos e então abrir o diálogo do
sozi, com o diálogo aberto clique no botão + e perceba que a opção
“elemento svg” irá se preencher com o id de 1 em diante, de
acordo com o seu preenchimento
Após isso, salve a
sua apresentação no formato .svg padrão e abra em algum navegador
da sua preferência.
Deixarei uma
apresentação de exemplo para vocês verem e a que eu tirei os
screenshots, o sozi possui inúmeras outras funcionalidades, para o
meu uso que gosto de apresentações mais simples isso basta, o muito
que eu faço é adicionar imagens, mas para quem prefere coisas mais
elaboradas ele é capaz de fazer, usando camadas(layers), etc.
Existem diversos
tutoriais, como o meu objetivo é apenas apresentar a ferramenta e
como eu mesmo não uso coisas muito elaboradas, creio que esse breve
texto cumpriu o seu objetivo.
Download de arquivos de exemplo:
quarta-feira, 5 de março de 2014
Antivírus para android é necessário?
Eu sempre digo que antivírus para o android em função realmente de "antivírus" é praticamente inútil, e as empresas que o produzem sabem disso, é tanto que eles sempre vêm com outras funções que são interessantes e para algumas pessoas vale à pena sacrificar a performance do sistema.
Mas para se proteger de pragas virtuais eles não são eficazes, e porque?
O android usa um tipo de máquina virtual bem semelhante ao java, então todos os aplicativos rodam dentro da caixa de areia java.
Além disso, a cada aplicativo instalado ele cria um usuário (tipo o usuário linux mesmo) limitado de maneira que apenas esse usuário criado possa alterar os arquivos do aplicativo isolando-o dos demais aplicativos e do sistema, agora você entende porque o usuário "root" é desabilitado por padrão né?
E se ainda acha isso pouco, o android ainda usa o SELinux para aumentar a segurança do sistema.
Mas os malwares para android existem e isso é inegável.
Essas pragas virtuais se aproveitam de falhas de aplicativos específicos (por exemplo, uma falha no programa de SMS que permite acesso aos seus contatos indevidamente, por padrão o SMS tem acesso aos seus contatos)
E também de falhas no sistema em si o que ocorre em menor proporção, mas além de ter a falha precisa existir uma maneira de explorar essa falha e uma maneira são os aplicativos piratas e modificados que existem aos montes, alguns deles são instalados de maneira de alterar até mesmo o comportamento da play store e google play services que são programas chave no android.
A outra maneira é a engenharia social, eu navego bastante no android e essa tarefa se tornou um parto, muitos sites que a gente acessa pedem para instalar esse ou outro aplicativo .apk diretamente, as versões mais recentes do android (4.x) possuem um aplicativo que verifica o aplicativo antes de instalá-lo mesmo se for de fora da play store, mas não é garantia que irá funcionar visto que é uma briga de gato e rato e todo dia eles lançam novos aplicativos maliciosos e o verificador busca na lista negra do google na internet.
Uma maneira que encontrei de me prevenir de sites ficarem fazendo downloads de aplicativos .apk foi mudar o "user agent" do firefox mobile, você digita na barra de navegação: about:config e modifica o valor da configuração "general.useragent.override" se ela não existir basta cria-la.
No meu caso eu usei a string do linux porque na do windows o computador ficava me enchendo para instalar plugins do windows (Vírus), e com o user agent do linux eles me limitam a exibir apenas as propagandas chatas mesmo.
Além disso, você jamais deve deixar a opção "fontes desconhecidas" ativas por padrão, instale aplicativos fora da play store somente se você tem certeza absoluta da procedência dos mesmos.
No mais, os aplicativos da play store raramente ultrapassam os R$20,00 poxa gente, se o aplicativo é bom e resolveu o seu problema é justo pagar por ele não?
Android reúne 97% das pragas para dispositivos móveis, mas apenas 0,1% está na play store
Mas para se proteger de pragas virtuais eles não são eficazes, e porque?
O android usa um tipo de máquina virtual bem semelhante ao java, então todos os aplicativos rodam dentro da caixa de areia java.
Além disso, a cada aplicativo instalado ele cria um usuário (tipo o usuário linux mesmo) limitado de maneira que apenas esse usuário criado possa alterar os arquivos do aplicativo isolando-o dos demais aplicativos e do sistema, agora você entende porque o usuário "root" é desabilitado por padrão né?
E se ainda acha isso pouco, o android ainda usa o SELinux para aumentar a segurança do sistema.
Mas os malwares para android existem e isso é inegável.
Essas pragas virtuais se aproveitam de falhas de aplicativos específicos (por exemplo, uma falha no programa de SMS que permite acesso aos seus contatos indevidamente, por padrão o SMS tem acesso aos seus contatos)
E também de falhas no sistema em si o que ocorre em menor proporção, mas além de ter a falha precisa existir uma maneira de explorar essa falha e uma maneira são os aplicativos piratas e modificados que existem aos montes, alguns deles são instalados de maneira de alterar até mesmo o comportamento da play store e google play services que são programas chave no android.
A outra maneira é a engenharia social, eu navego bastante no android e essa tarefa se tornou um parto, muitos sites que a gente acessa pedem para instalar esse ou outro aplicativo .apk diretamente, as versões mais recentes do android (4.x) possuem um aplicativo que verifica o aplicativo antes de instalá-lo mesmo se for de fora da play store, mas não é garantia que irá funcionar visto que é uma briga de gato e rato e todo dia eles lançam novos aplicativos maliciosos e o verificador busca na lista negra do google na internet.
Uma maneira que encontrei de me prevenir de sites ficarem fazendo downloads de aplicativos .apk foi mudar o "user agent" do firefox mobile, você digita na barra de navegação: about:config e modifica o valor da configuração "general.useragent.override" se ela não existir basta cria-la.
No meu caso eu usei a string do linux porque na do windows o computador ficava me enchendo para instalar plugins do windows (Vírus), e com o user agent do linux eles me limitam a exibir apenas as propagandas chatas mesmo.
Além disso, você jamais deve deixar a opção "fontes desconhecidas" ativas por padrão, instale aplicativos fora da play store somente se você tem certeza absoluta da procedência dos mesmos.
No mais, os aplicativos da play store raramente ultrapassam os R$20,00 poxa gente, se o aplicativo é bom e resolveu o seu problema é justo pagar por ele não?
Android reúne 97% das pragas para dispositivos móveis, mas apenas 0,1% está na play store
sexta-feira, 8 de novembro de 2013
Porque Somos Pobres?
Alguém já se perguntou o porquê
que somos pobres? Não digo individualmente mas sim de maneira geral, como
brasileiros, há um tempo atrás não me lembro onde, li um artigo onde uma pessoa
explicava a diferença entre percepção de riquezas entre os brasileiros e os
norte americanos e europeus. Ele dizia que um brasileiro para se considerar bem
sucedido e possuir “Status” na sociedade, precisa possuir bens.
- Casa própria bacana;
- Carro zero de preferência;
- Computador, roupas e celulares top de linha ou de marca.
Note que com exceção da casa própria
todas as outras coisas são bens de consumo, coisas que não deveriam por si só
denotar riqueza ou “status”.
Ao analisarmos nosso mercado
percebemos que isso é a mais pura verdade, temos taxas de empréstimo/crediário
e financiamento altíssimas, as pessoas não pensam duas vezes em comprar
produtos eletrônicos em 12/24/36x mesmo que tais produtos tenham uma taxa de
depreciação de 25% ao ano isso
significa que um produto eletrônico depois de 4 anos perdeu completamente o seu valor de mercado, essa cultura
justifica o alto preço dos carros e produtos em geral, justifica por exemplo,um videogame de R$4.000,00.
Nos Estados Unidos e Europa as
pessoas se preocupam mais com sua auto-suficiência financeira, na maioria das
vezes querem montar algum negócio para poder se sustentar ou então investem em
fundos de aposentadoria/investimentos ou poupança, dessa maneira eles garantem
o seu próprio futuro, dão preferência a compras maiores à vista, isso é
facilmente perceptível nos filmes e séries que assistimos, vemos os
adolescentes ou as pessoas juntando dinheiro para comprar carros e/ou produtos,
aqui no Brasil sempre procuramos financiamentos ou “consórcios” onde pagamos
quase sempre o dobro do preço de um produto que ao final do plano não vale
metade do valor original, em termos práticos, pagamos pelo menos três vezes o
que deveríamos em um carro ou produto, a depreciação de um carro de passeio é
de 20% ao ano, isso significa que a cada um ano o seu carro zero perde 20% do
valor.
Que é o maior beneficiado disso
tudo é o nosso maldito governo, que para se dar bem com os eleitores basta que
incentive o crédito e aqueça a economia para que possamos comprar as
quinquilharias que tanto almejamos, e a nossa qualidade de vida permanece a
mesma, continuamos com a nossa cidade sem infra-estrutura, continuamos sem saúde
e educação de qualidade, mas temos a televisão de 32 polegadas tela
plana 3D na sala com a programação imbecilizante, lavando a nossa mente e alma
e nos tornando escravos da sociedade de consumo, a escravidão nunca acabou de
verdade, apenas se tornou universal e se modernizou e hoje nos escravizamos
para poder sobreviver.
terça-feira, 22 de outubro de 2013
Windows 7 64 bits, erro: "O subsistema necessário para suportar o tipo de imagem não está presente."
Bom, me deparei com esse erro no computador de um cliente recentemente, logo de cara já levei em conta que era vírus, tirei o HD e coloquei em outro micro e ficou uma tarde inteira fazendo a verificação, como resultado removi mais de 30 ameaças do computador.
Depois disso, todo tranquilo fui testar o computador e percebi que ao rodar os programas a seguinte mensagem era exibida:
Fiquei muito intrigado e fui testar diversos programas e então percebi que eram apenas os programas de 32bits que não funcionavam, logo pensei que o vírus teria apagado ou desativado a camada de emulação de 32bits do windows. Após muita pesquisa descobri que só era possível desabilitar o WOW64 em sistemas de servidor, então fiquei ainda mais intrigado e então resolvi usar a ferramenta sfc que verifica os arquivos dll do sistema e os recupera quando necessário.
Me desanimei depois de rodar algumas vezes porque o sistema sempre dava a mensagem de que havia recuperado algumas mas não todas, depois de executá-lo diversas vezes deu resultado, ele recuperou todas as dll's e o sistema voltou a funcionar.
Eram realmente vírus bem destrutivos, o sistema só não parou de funcionar completamente porque por motivos de compatibilidade assim como muitos programas atuais os vírus são feitos para arquiteturas de 32bits, mas o windows 64bits isola os processos de 32 bits em um ambiente virtual emulado e foi por isso que o computador foi revivido e pude recuperá-lo.
Após a recuperação passei o CCLeaner que acusou 1286 erros e instalei o Comodo Antivírus para me assegurar que problemas como esse não mais ocorrerão.
Caso alguém passe por isso, essa é uma das soluções, a outra menos elegante é o famigerado format c:
Depois disso, todo tranquilo fui testar o computador e percebi que ao rodar os programas a seguinte mensagem era exibida:
"O subsistema necessário para suportar o tipo de imagem não está presente."
Fiquei muito intrigado e fui testar diversos programas e então percebi que eram apenas os programas de 32bits que não funcionavam, logo pensei que o vírus teria apagado ou desativado a camada de emulação de 32bits do windows. Após muita pesquisa descobri que só era possível desabilitar o WOW64 em sistemas de servidor, então fiquei ainda mais intrigado e então resolvi usar a ferramenta sfc que verifica os arquivos dll do sistema e os recupera quando necessário.
Me desanimei depois de rodar algumas vezes porque o sistema sempre dava a mensagem de que havia recuperado algumas mas não todas, depois de executá-lo diversas vezes deu resultado, ele recuperou todas as dll's e o sistema voltou a funcionar.
Eram realmente vírus bem destrutivos, o sistema só não parou de funcionar completamente porque por motivos de compatibilidade assim como muitos programas atuais os vírus são feitos para arquiteturas de 32bits, mas o windows 64bits isola os processos de 32 bits em um ambiente virtual emulado e foi por isso que o computador foi revivido e pude recuperá-lo.
Após a recuperação passei o CCLeaner que acusou 1286 erros e instalei o Comodo Antivírus para me assegurar que problemas como esse não mais ocorrerão.
Caso alguém passe por isso, essa é uma das soluções, a outra menos elegante é o famigerado format c:
segunda-feira, 18 de março de 2013
Programas que causam e minam a segurança do windows
Recentemente eu tive uma grande decepção com o programa Alterdata, é um software ERP, de controle financeiro e contábil, um programa muito bom e aclamado pelos usuários em geral, ele é extremamente estável e possui um suporte muito bom, no entanto, fiquei muito insatisfeito com o quesito segurança.
Precisei instalar o programa e perguntei ao suporte se era necessário que o usuário fosse administrador para que ele funcionasse, ele me disse que sim, mas que iria tentar instalar para ver.
Tentamos instalar o software, infelizmente ele nem mesmo instalou como usuário limitado, mesmo digitando a senha de administrador quando solicitado, o fato, é que para que ele seja instalado é necessário que diversos instaladores sejam executados, seria ideal um assistente único onde fossem selecionados os módulos, pouparia tempo e trabalho para a instalação.
Após instalado o suporte desativou o UAC e o firewall do windows para que o programa funcionasse adequadamente, fiquei profundamente decepcionado pois um programa de ponta como é o Alterdata e não possui uma política de segurança eficaz, ao fazer isso, abre o computador do cliente deles a toda a sorte de vírus e problemas, no meu post anterior eu postei as vantagens do UAC, ele previne que programas em geral executem tarefas administrativas sem o conhecimento do usuário, é um recurso excelente que não deveria ser desativado nunca.
Esse problema não é exclusividade do Alterdata, existem diversos programas que possuem esse mesmo problema, o que me deixou surpreso é um programa com a qualidade técnica dele possuir essa falha, ou então, o consultor não é suficientemente treinado para lidar com isso.
Fica aí a minha bronca com o Alterdata, por favor, corrijam o software para que ele funcione adequadamente com usuário limitado e com o firewall do windows e UAC ativados.
Precisei instalar o programa e perguntei ao suporte se era necessário que o usuário fosse administrador para que ele funcionasse, ele me disse que sim, mas que iria tentar instalar para ver.
Tentamos instalar o software, infelizmente ele nem mesmo instalou como usuário limitado, mesmo digitando a senha de administrador quando solicitado, o fato, é que para que ele seja instalado é necessário que diversos instaladores sejam executados, seria ideal um assistente único onde fossem selecionados os módulos, pouparia tempo e trabalho para a instalação.
Após instalado o suporte desativou o UAC e o firewall do windows para que o programa funcionasse adequadamente, fiquei profundamente decepcionado pois um programa de ponta como é o Alterdata e não possui uma política de segurança eficaz, ao fazer isso, abre o computador do cliente deles a toda a sorte de vírus e problemas, no meu post anterior eu postei as vantagens do UAC, ele previne que programas em geral executem tarefas administrativas sem o conhecimento do usuário, é um recurso excelente que não deveria ser desativado nunca.
Esse problema não é exclusividade do Alterdata, existem diversos programas que possuem esse mesmo problema, o que me deixou surpreso é um programa com a qualidade técnica dele possuir essa falha, ou então, o consultor não é suficientemente treinado para lidar com isso.
Fica aí a minha bronca com o Alterdata, por favor, corrijam o software para que ele funcione adequadamente com usuário limitado e com o firewall do windows e UAC ativados.
Porque o Windows Ainda é inseguro?
O windows nasceu e se iniciou no MS-DOS, era um sistema monousuário e monotarefa, sendo assim, era um sistema extremamente inseguro, só existia um usuário e esse usuário poderia fazer qualquer coisa no sistema, o DOS e as primeiras versões do windows amargaram com todo o tipo de vírus, muitas vezes apenas por colocar um disquete você tinha o seu sistema destruído.
Nos primórdios, os vírus serviam apenas para bagunçar a vida das pessoas e nada mais. Com o advento do Windows NT as coisas mudaram, ele foi criado com um núcleo novo e independente do MS-DOS, que era somente emulado por retrocompatibilidade, ele foi feito com foco empresarial, onde é necessário um ambiente multiusuário e multitarefa. Na época foi lançado o Windows 98 com foco doméstico, ele até suportava mais de um usuário, mas esse suporte somente dizia a respeito de configurações e personalizações, não era um ambiente de segurança.
Com o windows XP as coisas mudaram radicalmente e ele passou a ser um sistema multiusuário de verdade, os documentos, arquivos e configurações passaram a ser invioláveis e um usuário não poderia/conseguiria alterar as configurações do outro.
Mesmo assim, o XP tinha diversas falhas de segurança, sem falar que o ambiente comum era monousuário e esse geralmente era administrador, os vírus e malwares em geral reinavam absolutos.
Nessa época, com o advento de criptografia e senhas fortes, os crackers passaram a fornecer programas pagos de maneira ilegal que necessitavam de crack's para funcionar, ao instalar esse crack o computador do usuário é transformado em um nó de processamento ou em um distribuidor de spam's ao ser conectado à internet.
A microsoft então lançou o Windows Vista que foi um marco, o primeiro sistema operacional Microsoft realmente seguro, com o controle de contas de usuário (UAC) infelizmente o recurso não foi bem recebido pelos usuários, acostumados a fazer qualquer coisa no computador sem serem perguntados, no mundo linux, ao realizar qualquer tarefa administrativa (nem sempre tão administrativa) é solicitada a senha do administrador.
Com o desgosto pelo recurso, a microsoft o deixou menos intrusivo no windows 7, mesmo assim, muitas pessoas o desabilitam ou então concedem a permissão sem olhar exatamente o que está sendo feito, o ideal seria que caso a pessoa quisesse ver uma fotografia e ela solicitasse permissões administrativas, a pessoa desistisse de ver e se tocasse que se trata de um vírus, mas não é o que acontece.
Ainda assim, o windows 7 é um sistema muito seguro, mas toda a segurança do windows 7 vai abaixo pois os usuários costumam instalar e usar muitos programas piratas que criam todo o tipo de brecha no sistema.
Se as pessoas usassem o Windows sem usar programas piratas e tivessem atenção ao executar os programas, o sistema seria praticamente tão seguro quanto o linux, mas infelizmente, o uso de programas piratas aliados ao desconhecimento do usuário, ainda tornam o windows um sistema inseguro.
Nos primórdios, os vírus serviam apenas para bagunçar a vida das pessoas e nada mais. Com o advento do Windows NT as coisas mudaram, ele foi criado com um núcleo novo e independente do MS-DOS, que era somente emulado por retrocompatibilidade, ele foi feito com foco empresarial, onde é necessário um ambiente multiusuário e multitarefa. Na época foi lançado o Windows 98 com foco doméstico, ele até suportava mais de um usuário, mas esse suporte somente dizia a respeito de configurações e personalizações, não era um ambiente de segurança.
Com o windows XP as coisas mudaram radicalmente e ele passou a ser um sistema multiusuário de verdade, os documentos, arquivos e configurações passaram a ser invioláveis e um usuário não poderia/conseguiria alterar as configurações do outro.
Mesmo assim, o XP tinha diversas falhas de segurança, sem falar que o ambiente comum era monousuário e esse geralmente era administrador, os vírus e malwares em geral reinavam absolutos.
Nessa época, com o advento de criptografia e senhas fortes, os crackers passaram a fornecer programas pagos de maneira ilegal que necessitavam de crack's para funcionar, ao instalar esse crack o computador do usuário é transformado em um nó de processamento ou em um distribuidor de spam's ao ser conectado à internet.
A microsoft então lançou o Windows Vista que foi um marco, o primeiro sistema operacional Microsoft realmente seguro, com o controle de contas de usuário (UAC) infelizmente o recurso não foi bem recebido pelos usuários, acostumados a fazer qualquer coisa no computador sem serem perguntados, no mundo linux, ao realizar qualquer tarefa administrativa (nem sempre tão administrativa) é solicitada a senha do administrador.
Com o desgosto pelo recurso, a microsoft o deixou menos intrusivo no windows 7, mesmo assim, muitas pessoas o desabilitam ou então concedem a permissão sem olhar exatamente o que está sendo feito, o ideal seria que caso a pessoa quisesse ver uma fotografia e ela solicitasse permissões administrativas, a pessoa desistisse de ver e se tocasse que se trata de um vírus, mas não é o que acontece.
Ainda assim, o windows 7 é um sistema muito seguro, mas toda a segurança do windows 7 vai abaixo pois os usuários costumam instalar e usar muitos programas piratas que criam todo o tipo de brecha no sistema.
Se as pessoas usassem o Windows sem usar programas piratas e tivessem atenção ao executar os programas, o sistema seria praticamente tão seguro quanto o linux, mas infelizmente, o uso de programas piratas aliados ao desconhecimento do usuário, ainda tornam o windows um sistema inseguro.
Porque o linux é seguro?
Bom, estou escrevendo aqui a respeito de um grande problema enfrentado no dia a dia do uso de computadores, que é a respeito da segurança de sistemas e de redes em geral.
Atualmente, o sistema operacional que podemos dizer que é mais seguro são os BSD's em geral, seguidos das distros linux.
Uma pergunta, porque uma distro linux é segura?
Muitas pessoas irão citar um montão de coisas, algumas com fundamento e outras não, mas o fato é que as distribuições linux são muito seguras e por alguns motivos.:
- Sistema de usuários muito forte: O linux nasceu multiusuário e multitarefa, o que isso quer dizer?
Isso significa que cada processo executado é feito dentro de um espaço de usuário específico, por exemplo, um programa iniciado pelo usuário joão não consegue alterar nada no sistema principal e nem nos arquivos e ambiente do usuário josé, o sistema pode inclusive rodar duas "instâncias" do programa, uma com cada usuário.
Então, hipoteticamente, se um usuário conseguisse baixar um vírus que fosse executável no linux, esse suposto vírus não conseguiria acessar o sistema principal.
- Permissão de execução: Se um usuário baixar um arquivo executável da internet ou qualquer outro local, esse arquivo a priori não terá permissão de execução, nesse caso, o usuário terá que baixar o tal arquivo e somente depois ele terá que mudar os atributos do arquivo o tornando executável, isso significa que no linux não é possível um usuário executar um arquivo pensando se tratar de uma fotografia por exemplo, até mesmo porque, sistemas unix em geral não se importam com extensões de arquivos, eles lêem os metadados dos arquivos para reconhecerem o tipo do mesmo. Resta então ao cracker se aproveitar de alguma falha ou brecha no sistema.
- Sistema aberto: As distros linux e o linux em si são sistemas de código aberto, isso significa que qualquer pessoa que queira pode acessar o código fonte dos programas e então detectar defeitos ou falhas, isso significa que os problemas do sistema são conhecidos e qualquer um pode criar a solução, essa solução quando eficaz é muitas vezes publicada e então quem anda sempre atento às publicações pode executar os passos para corrigir, geralmente, o problema é rapidamente resolvido com uma atualização, resta então ao cracker se aproveitar do usuário através de engenharia social, e quanto a isso é muito complicado e é necessário que o usuário tenha conhecimento, a vantagem do linux é que os usuários em geral usam sistemas automatizados de instalação que garantem a segurança do sistema.
- Repositórios de programas: Diferentemente do mundo windows, no linux os programas são instalados através de repositórios de programas que fazem da tarefa de instalar simples e eficaz, as lojas de aplicativos dos smartphones e a própria windows store certamente se inspiraram nesse sistema que existe no linux há muitos anos.
Com esse sistema, é evitado que o usuário instale programas de origem duvidosa que possa comprometer o sistema, atualmente, o android que é um sistema linux possui diversas pragas virtuais que aterrorizam os usuários, mas diferentemente do mundo windows, essas pragas são instaladas pelo próprio usuário, geralmente programas maliciosos na própria play store ou programas instalados fora dela.
Todos esses motivos tornam a plataforma bastante segura, e vale lembrar que é possível ainda configurar as partições que podem executar programas e pastas, no entanto, caso o sistema venha a ganhar um bom número de usuários algum dia, eles podem usar de engenharia social para enganar as pessoas como ocorre no android, e a própria pessoa instalar o vírus semiconscientemente.
Atualmente, o sistema operacional que podemos dizer que é mais seguro são os BSD's em geral, seguidos das distros linux.
Uma pergunta, porque uma distro linux é segura?
Muitas pessoas irão citar um montão de coisas, algumas com fundamento e outras não, mas o fato é que as distribuições linux são muito seguras e por alguns motivos.:
- Sistema de usuários muito forte: O linux nasceu multiusuário e multitarefa, o que isso quer dizer?
Isso significa que cada processo executado é feito dentro de um espaço de usuário específico, por exemplo, um programa iniciado pelo usuário joão não consegue alterar nada no sistema principal e nem nos arquivos e ambiente do usuário josé, o sistema pode inclusive rodar duas "instâncias" do programa, uma com cada usuário.
Então, hipoteticamente, se um usuário conseguisse baixar um vírus que fosse executável no linux, esse suposto vírus não conseguiria acessar o sistema principal.
- Permissão de execução: Se um usuário baixar um arquivo executável da internet ou qualquer outro local, esse arquivo a priori não terá permissão de execução, nesse caso, o usuário terá que baixar o tal arquivo e somente depois ele terá que mudar os atributos do arquivo o tornando executável, isso significa que no linux não é possível um usuário executar um arquivo pensando se tratar de uma fotografia por exemplo, até mesmo porque, sistemas unix em geral não se importam com extensões de arquivos, eles lêem os metadados dos arquivos para reconhecerem o tipo do mesmo. Resta então ao cracker se aproveitar de alguma falha ou brecha no sistema.
- Sistema aberto: As distros linux e o linux em si são sistemas de código aberto, isso significa que qualquer pessoa que queira pode acessar o código fonte dos programas e então detectar defeitos ou falhas, isso significa que os problemas do sistema são conhecidos e qualquer um pode criar a solução, essa solução quando eficaz é muitas vezes publicada e então quem anda sempre atento às publicações pode executar os passos para corrigir, geralmente, o problema é rapidamente resolvido com uma atualização, resta então ao cracker se aproveitar do usuário através de engenharia social, e quanto a isso é muito complicado e é necessário que o usuário tenha conhecimento, a vantagem do linux é que os usuários em geral usam sistemas automatizados de instalação que garantem a segurança do sistema.
- Repositórios de programas: Diferentemente do mundo windows, no linux os programas são instalados através de repositórios de programas que fazem da tarefa de instalar simples e eficaz, as lojas de aplicativos dos smartphones e a própria windows store certamente se inspiraram nesse sistema que existe no linux há muitos anos.
Com esse sistema, é evitado que o usuário instale programas de origem duvidosa que possa comprometer o sistema, atualmente, o android que é um sistema linux possui diversas pragas virtuais que aterrorizam os usuários, mas diferentemente do mundo windows, essas pragas são instaladas pelo próprio usuário, geralmente programas maliciosos na própria play store ou programas instalados fora dela.
Todos esses motivos tornam a plataforma bastante segura, e vale lembrar que é possível ainda configurar as partições que podem executar programas e pastas, no entanto, caso o sistema venha a ganhar um bom número de usuários algum dia, eles podem usar de engenharia social para enganar as pessoas como ocorre no android, e a própria pessoa instalar o vírus semiconscientemente.
quarta-feira, 9 de janeiro de 2013
Sony XPeria U - Não Comprem!!!
Amigos, comprei um XPeria U, e vou postar as minhas impressões:
- É um aparelho com uma tela magnífica, ótima e muitíssimo bem construído.
- A ROM original da Sony é excelente, tão boa que nem existe previsão ou vontade de custom roms pra ele.
- O Aparelho é rápido e responsível, com exceção da câmera no ICS, deve ter algum bug que provavelmente será corrigido no Jelly Bean.
- O Preço é convidativo se você pesquisar.
- Dual Core e uma boa placa aceleradora de vídeo.
- Câmera 5MPx que tira excelentes fotos de dia/claro e razoáveis à noite/escuro.
- Reproduz diversos vídeos usando o MXPlayer ou VLC, eu rodei até .MKV em HD sem nenhum engasgo.
- Roda Liso os jogos compatíveis.
- Multitouch com suporte até 4 toques simultâneos, bom para aplicativos e jogos.
- Câmera Frontal VGA, bússola interna, faltou apenas o NFC que por enquanto tem pouca utilidade.
Olhando assim parece ser uma boa aquisição, mas tem dois pontos que tornam a aquisição dele totalmente inviável.
- Memória RAM 512MB, com o bom gerenciamento do Android a gente não sente tanta falta assim, o problema é quando se está em algum aplicativo e a gente recebe alguma ligação.
- Memória Interna de 8BG, acessível 2GB para aplicativos e 4GB para arquivos do usuário. Bom, aqui é que mora o problema, muitos aplicativos carregam dados na memória interna, por exemplo, instalei o Dead Space que ocupou 400MB da memória para arquivos, que na prática possui somente 3.75GB, depois instalei o GPS OffLine Tom Tom, que comeu inicialmente 700MB mas depois de umas atualizações de mapas ocupou quase 2GB, ele suporta o modo USB Host e dá para adicionar Pendrives e etc no entanto essa solução é complexa e eu estou tendo dificuldades em encontrar o adaptador.
Devido a esse único ponto negativo, compromete toda a beleza do aparelho, portanto, coloco esse post sincero para nortear outras pessoas que possam querer adquirílo.
Planejo o mais breve possível trocar de aparelho e passar esse para outra pessoa.
Até mais!
- É um aparelho com uma tela magnífica, ótima e muitíssimo bem construído.
- A ROM original da Sony é excelente, tão boa que nem existe previsão ou vontade de custom roms pra ele.
- O Aparelho é rápido e responsível, com exceção da câmera no ICS, deve ter algum bug que provavelmente será corrigido no Jelly Bean.
- O Preço é convidativo se você pesquisar.
- Dual Core e uma boa placa aceleradora de vídeo.
- Câmera 5MPx que tira excelentes fotos de dia/claro e razoáveis à noite/escuro.
- Reproduz diversos vídeos usando o MXPlayer ou VLC, eu rodei até .MKV em HD sem nenhum engasgo.
- Roda Liso os jogos compatíveis.
- Multitouch com suporte até 4 toques simultâneos, bom para aplicativos e jogos.
- Câmera Frontal VGA, bússola interna, faltou apenas o NFC que por enquanto tem pouca utilidade.
Olhando assim parece ser uma boa aquisição, mas tem dois pontos que tornam a aquisição dele totalmente inviável.
- Memória RAM 512MB, com o bom gerenciamento do Android a gente não sente tanta falta assim, o problema é quando se está em algum aplicativo e a gente recebe alguma ligação.
- Memória Interna de 8BG, acessível 2GB para aplicativos e 4GB para arquivos do usuário. Bom, aqui é que mora o problema, muitos aplicativos carregam dados na memória interna, por exemplo, instalei o Dead Space que ocupou 400MB da memória para arquivos, que na prática possui somente 3.75GB, depois instalei o GPS OffLine Tom Tom, que comeu inicialmente 700MB mas depois de umas atualizações de mapas ocupou quase 2GB, ele suporta o modo USB Host e dá para adicionar Pendrives e etc no entanto essa solução é complexa e eu estou tendo dificuldades em encontrar o adaptador.
Devido a esse único ponto negativo, compromete toda a beleza do aparelho, portanto, coloco esse post sincero para nortear outras pessoas que possam querer adquirílo.
Planejo o mais breve possível trocar de aparelho e passar esse para outra pessoa.
Até mais!
sábado, 14 de abril de 2012
Receita de Bolo: Relatório em PyQt
Olá, depois de um questionamento, resolvi colocar esse método bem simples, imaginando que a pessoa tenha algum conhecimento em python e Qt.
Esse método recebe uma string que é na forma de HTML, exemplo:
Ele renderiza a string na forma de html usando a engine webkit e a imprime, eis o método aqui:
Qualquer dúvida, postem nos comentários
Esse método recebe uma string que é na forma de HTML, exemplo:
Ele renderiza a string na forma de html usando a engine webkit e a imprime, eis o método aqui:
Qualquer dúvida, postem nos comentários
quinta-feira, 24 de novembro de 2011
Confisco Salarial dos Servidores de Educação em MG
E segue o confisco salarial dos profissionais da educação em minas gerais, daqui a pouco o pobre será obrigado a colocar os seus filhos em escolas particulares devido à baixa qualidade de ensino.
Os baixíssimos salários contribuem para que os profissionais de qualidade migrem para as universidades e serviços particulares.
Os novos percentuais da progressão por escolaridade adicional do governo são ridículos, o professor além de ter que esperar aproximadamente 5 anos após concluir a escolaridade adicional, tem um percentual irrisório de apenas 10% de reajuste a cada título alcançado, isso quer dizer que na prática um professor com curso superior que faça mestrado terá um reajuste de 20% sobre R$1.320,00 e mesmo assim esse reajuste virá apenas depois de cerca 10 anos de feito o mestrado.
Vale lembrar que o percentual anterior era de 22% para cada nível conquistado pelo professor.
A propaganda do governo e a mídia não mostram mas essa é a triste realidade da educação em Minas Gerais.
Sind Ute MG
Os baixíssimos salários contribuem para que os profissionais de qualidade migrem para as universidades e serviços particulares.
Os novos percentuais da progressão por escolaridade adicional do governo são ridículos, o professor além de ter que esperar aproximadamente 5 anos após concluir a escolaridade adicional, tem um percentual irrisório de apenas 10% de reajuste a cada título alcançado, isso quer dizer que na prática um professor com curso superior que faça mestrado terá um reajuste de 20% sobre R$1.320,00 e mesmo assim esse reajuste virá apenas depois de cerca 10 anos de feito o mestrado.
Vale lembrar que o percentual anterior era de 22% para cada nível conquistado pelo professor.
A propaganda do governo e a mídia não mostram mas essa é a triste realidade da educação em Minas Gerais.
Sind Ute MG
segunda-feira, 31 de outubro de 2011
Zhotic, a loja de Perfumes Importados em Montes Claros
Orgulhosamente apresento a vocês a loja Zhotic, ela está localizada em Montes Claros - MG e oferece o que há de melhor em perfumes importados na região.
Acesse o link : www.zhotic.com.br
O melhor preço de perfumes de marca em Montes Claros.
Acesse o link : www.zhotic.com.br
O melhor preço de perfumes de marca em Montes Claros.
segunda-feira, 19 de setembro de 2011
Software de Controle de Estoque - Desenvolvimento de Aplicações Gráficas Com Python e Qt
Olá Pessoal,
Estou desenvolvendo um software de controle de estoque para aprimorar os meus conhecimentos em Python3 e PyQt4, o programa que eu desenvolvi é uma versão em desenvolvimento e portanto não é indicado para uso em produção(caso alguém se interesse favor entrar em contato), serve como aprendizado e guia para quem quiser conhecer a linguagem e o seu potencial.
Download do Instalador Para Windows: Download
Download do Código Fonte: Download
Espero que Sirva para quem gostaria/precisa aprender mais sobre programação Desktop Python.
Eu utilizei o cx_Freeze para criar o instalador e aplicativo .exe para windows.
Download do Instalador Para Windows: Download
Download do Código Fonte: Download
Espero que Sirva para quem gostaria/precisa aprender mais sobre programação Desktop Python.
Eu utilizei o cx_Freeze para criar o instalador e aplicativo .exe para windows.
quinta-feira, 5 de maio de 2011
Usando O Gnome3 sem o Gnome Shell - Modo Clássico
Bom, o Gnome atualizou para a versão 3, pessoalmente estou gostando muito, porém como a interface mudou muito é natural que as pessoas não gostem.
Esse pequeno tutorial irá servir para aqueles que querem deixar o gnome do modo "normal" clássico.
A Primeira coisa a Fazer é acessar o Gnome Tweak Tool e assim ajustar algumas coisas como habilitar os botões de minimizar e maximizar, em seguida, você entra no gnome-control-center, procura sobre as informações do sistema e então você seleciona gráficos, em gráficos selecione o modo reserva, no próximo logon você estará no gnome clássico.
Bom, como uma imagem vale mais que mil palavras, aí vão elas:
Em Configurações do sistema escolha informações do sistema.
depois escolha a opção gráficos.
Selecione o modo reserva...
E Agora o Gnome 3 sem o Gnome Shell, vale lembrar que o compiz não é compatível ainda com ele, eu testei e simplesmente não funcionou, no entanto creio que usarei ele assim simplesmente porque o sistema está ridiculamente leve, deu uma nova vida ao meu notebook de 5 anos de idade.
Espero que gostem desse tutorial...
Esse pequeno tutorial irá servir para aqueles que querem deixar o gnome do modo "normal" clássico.
A Primeira coisa a Fazer é acessar o Gnome Tweak Tool e assim ajustar algumas coisas como habilitar os botões de minimizar e maximizar, em seguida, você entra no gnome-control-center, procura sobre as informações do sistema e então você seleciona gráficos, em gráficos selecione o modo reserva, no próximo logon você estará no gnome clássico.
Bom, como uma imagem vale mais que mil palavras, aí vão elas:
Em Configurações do sistema escolha informações do sistema.
depois escolha a opção gráficos.
Selecione o modo reserva...
E Agora o Gnome 3 sem o Gnome Shell, vale lembrar que o compiz não é compatível ainda com ele, eu testei e simplesmente não funcionou, no entanto creio que usarei ele assim simplesmente porque o sistema está ridiculamente leve, deu uma nova vida ao meu notebook de 5 anos de idade.
Espero que gostem desse tutorial...
segunda-feira, 11 de abril de 2011
Controle de Estoque em Desenvolvimento - Python3 e Qt
Estou fazendo um programinha simples em Python3 e Qt para controle de estoque, principalmente para o meu aprendizado e aperfeiçoamento.
Vejo muitas pessoas perguntando sobre programção Gráfica usando o Python e minha resposta é sempre a mesma: "Python 3 e Qt são as melhores opções".
- O python 3 é uma linguagem fácil e poderosa, ainda mais usando o Unicode por padrão não tem os erros e conversões chatas que tinha na versão 2.x
- O Qt é um framework excelente e poderoso e muito bem documentado.
O download do programa em desenvolvimento pode ser baixado aqui: Download do Programa de Estoque em Desenvolvimento, é necessário ter o interpretador python 3 instalado, download nesse link: Download do Interpretador Python3
E é preciso ter instalado também o PyQt: Downloado do PyQt.
Para usuários windows a situação é fácil, para usuários Arch também, no entanto para quem usa ubuntu terá que procurar meios alternativos de instalar visto que o PyQt para Python3 não está nos repositórios oficiais.
Qualquer dúvida ou sugestão favor postar nos comentários.
OBS.: O banco de dados usado é o SQLite
Favor não reparem os recursos de POG :D
Vejo muitas pessoas perguntando sobre programção Gráfica usando o Python e minha resposta é sempre a mesma: "Python 3 e Qt são as melhores opções".
- O python 3 é uma linguagem fácil e poderosa, ainda mais usando o Unicode por padrão não tem os erros e conversões chatas que tinha na versão 2.x
- O Qt é um framework excelente e poderoso e muito bem documentado.
O download do programa em desenvolvimento pode ser baixado aqui: Download do Programa de Estoque em Desenvolvimento, é necessário ter o interpretador python 3 instalado, download nesse link: Download do Interpretador Python3
E é preciso ter instalado também o PyQt: Downloado do PyQt.
Para usuários windows a situação é fácil, para usuários Arch também, no entanto para quem usa ubuntu terá que procurar meios alternativos de instalar visto que o PyQt para Python3 não está nos repositórios oficiais.
Qualquer dúvida ou sugestão favor postar nos comentários.
OBS.: O banco de dados usado é o SQLite
Favor não reparem os recursos de POG :D
terça-feira, 7 de dezembro de 2010
Uso de Python3 em programação desktop usando PyQt4
O python3 é parcialmente incompatível com o Python2.x, e isso é um grande problema principalmente porque existem milhares de bibliotecas prontas e funcionando bem com o python2 , a realidade é que igualmente ao XP o python2.x vai demorar muito tempo para morrer, principalmente nos frameworks web que possuem uma boa gama de módulos prontinhos e funcionando.
No entanto o Python3 trouxe consigo diversas melhorias com relação à sua versão anterior, e a mais notável com certeza é a de uso de strings unicode, agora é possível criar uma variável com o nome "maçã" por exemplo. Em especial, o PyQt4 também sofreu muitas mudanças, na realidade ele ficou mais simples, uma porcão de objetos que antes existiam no PyQt4 para python2.x não existem mais para o PyQt4 para python3, o que causa problemas ao tentar executar programas em PyQt4 escritos para rodarem no Python2.x, existem algumas "gambiarras" como essa abaixo, no entanto esse método possui algumas falhas graves em relação a uma outra opção que eu coloquei no final do post que é o uso da biblioteca sip do python3, nesse exemplo a QString irá funcionar, no entanto os métodos dela estarão ausente causando dores de cabeça, em seguida eu coloquei um exemplo de uma calculadora simples em PyQt feita por uma amiga que está estudando a linguagem e eu resolvi alterar algumas coisas para colocar como exemplo aqui, é um bom começo para estudo, o código principal pode ser salvo com o nome calculadora.py e o da classe de interface obrigatoriamente tem que ser ui_calculadora.py porque ele é importado para a classe principal.
Agora a Versão em Python3
Agora o arquivo de interface(ui_calculadora.py) ele funciona normal em python2 ou 3, lembrando que ele foi feito usando o pyuic4 através de um arquivo ui do QtDesigner.
QStringList e QString constantemente temos muitos problemas porque no PyQt para python3 os métodos ficarão diferentes por exemplo, o método QString para Strings maiúsculas é .toUpper() e para strings regulares do python é simplesmente .upper().
Dessa forma usando simplesmente a gambiarra que eu citei acima não irá funcionar porque quando invocarmos os métodos do QString eles não estarão presentes, felizmente existe no Python3 uma biblioteca que resolve isso pra nós, a sip, exemplo:
import sip
sip.setapi('QString', 1)
from PyQt4 import QtCore
Esse método funciona bem, no entanto quando temos funções que retornam QString's ou QStringList's do PyQt em Python2.x agora retornam objetos regulares do python e nem esse método e nem o anterior funcionam adequadamente, portanto é preciso realmente reescrever o código...
No entanto o Python3 trouxe consigo diversas melhorias com relação à sua versão anterior, e a mais notável com certeza é a de uso de strings unicode, agora é possível criar uma variável com o nome "maçã" por exemplo. Em especial, o PyQt4 também sofreu muitas mudanças, na realidade ele ficou mais simples, uma porcão de objetos que antes existiam no PyQt4 para python2.x não existem mais para o PyQt4 para python3, o que causa problemas ao tentar executar programas em PyQt4 escritos para rodarem no Python2.x, existem algumas "gambiarras" como essa abaixo, no entanto esse método possui algumas falhas graves em relação a uma outra opção que eu coloquei no final do post que é o uso da biblioteca sip do python3, nesse exemplo a QString irá funcionar, no entanto os métodos dela estarão ausente causando dores de cabeça, em seguida eu coloquei um exemplo de uma calculadora simples em PyQt feita por uma amiga que está estudando a linguagem e eu resolvi alterar algumas coisas para colocar como exemplo aqui, é um bom começo para estudo, o código principal pode ser salvo com o nome calculadora.py e o da classe de interface obrigatoriamente tem que ser ui_calculadora.py porque ele é importado para a classe principal.
try: from PyQt4.QtCore import QString except ImportError: # we are using Python3 so QString is not defined QString = type("")
Eis o Exemplo em Python 2.x
#!/usr/bin/python # -*- coding: utf-8 -*- #importação dos módulos das bibliotecas Qt from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4 import QtCore import ui_calculadora #Importação dos módulos personalizados class Calculadora(QMainWindow, ui_calculadora.Ui_Calculadora): ''' Classe Principal que cria uma agenda eletrônica Simples :D ''' # método init construtor da classe... def __init__(self, parent=None): #os dois comandos abaixo inicializa a classe com as duas das quais ela herdou métodos e atributos #QMainWindow que é uma classe base do Qt framework e ui_calculadora que é a interface criada super(Calculadora, self).__init__(parent) self.setupUi(self) self.edicao = True self.memoria = 0 #conectando os objetos da interface com as funções self.connect(self.btnMemoriaNegativa, SIGNAL("clicked()"), self.memoriaNegativa) self.connect(self.btnMemoriaPositiva, SIGNAL("clicked()"), self.memoriaPositiva) self.connect(self.btnLimparMemoria, SIGNAL("clicked()"), self.limparMemoria) self.connect(self.btnNumeros, SIGNAL("buttonClicked(QAbstractButton*)"), self.botaoClickado) self.connect(self.btnIgual, SIGNAL("clicked()"), self.resultado) def limparMemoria(self): self.memoria = 0 self.lblMensagem.setText("0") self.edicao = False def memoriaNegativa(self): self.memoria -= float(str(self.txtCalculo.text())) self.lblMensagem.setText(str(self.memoria)) self.edicao = False def memoriaPositiva(self): self.memoria += float(str(self.txtCalculo.text())) self.lblMensagem.setText(str(self.memoria)) self.edicao = False def botaoClickado(self, botao): if self.edicao: self.txtCalculo.insert(botao.text().toUpper()) else: self.txtCalculo.setText(botao.text().toUpper()) self.edicao = True def resultado(self): try: resultado = eval(str(self.txtCalculo.text() + ".")) self.txtCalculo.setText(str(resultado)) self.edicao = False except: # o caractere u antes da string indica que a mesma é unicode... QMessageBox.information(self, u"Expressão incorreta", u"Você digitou uma expressão incorreta", buttons=QMessageBox.Ok) self.txtCalculo.clear() #Função que inicializa o aplicativo if __name__ == "__main__": import sys app = QApplication(sys.argv) formulario = Calculadora() formulario.show() app.exec_()
Agora a Versão em Python3
#!/usr/bin/python # -*- coding: utf-8 -*- #importação dos módulos das bibliotecas Qt from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4 import QtCore import ui_calculadora #Importação dos módulos personalizados class Calculadora(QMainWindow, ui_calculadora.Ui_Calculadora): ''' Classe Principal que cria uma agenda eletrônica Simples :D ''' # método init construtor da classe... def __init__(self, parent=None): #os dois comandos abaixo inicializa a classe com as duas das quais ela herdou métodos e atributos #QMainWindow que é uma classe base do Qt framework e ui_calculadora que é a interface criada super(Calculadora, self).__init__(parent) self.setupUi(self) self.edicao = True self.memoria = 0 #conectando os objetos da interface com as funções self.connect(self.btnMemoriaNegativa, SIGNAL("clicked()"), self.memoriaNegativa) self.connect(self.btnMemoriaPositiva, SIGNAL("clicked()"), self.memoriaPositiva) self.connect(self.btnLimparMemoria, SIGNAL("clicked()"), self.limparMemoria) self.connect(self.btnNumeros, SIGNAL("buttonClicked(QAbstractButton*)"), self.botaoClickado) self.connect(self.btnIgual, SIGNAL("clicked()"), self.resultado) def limparMemoria(self): self.memoria = 0 self.lblMensagem.setText("0") self.edicao = False def memoriaNegativa(self): self.memoria -= float(str(self.txtCalculo.text())) self.lblMensagem.setText(str(self.memoria)) self.edicao = False def memoriaPositiva(self): self.memoria += float(str(self.txtCalculo.text())) self.lblMensagem.setText(str(self.memoria)) self.edicao = False def botaoClickado(self, botao): if self.edicao: self.txtCalculo.insert(botao.text()) else: self.txtCalculo.setText(botao.text()) self.edicao = True def resultado(self): try: resultado = eval(str(self.txtCalculo.text() + ".")) self.txtCalculo.setText(str(resultado)) self.edicao = False except: # o caractere u antes da string indica que a mesma é unicode... QMessageBox.information(self, "Expressão incorreta", "Você digitou uma expressão incorreta", buttons=QMessageBox.Ok) self.txtCalculo.clear() #Função que inicializa o aplicativo if __name__ == "__main__": import sys app = QApplication(sys.argv) formulario = Calculadora() formulario.show() app.exec_()
Agora o arquivo de interface(ui_calculadora.py) ele funciona normal em python2 ou 3, lembrando que ele foi feito usando o pyuic4 através de um arquivo ui do QtDesigner.
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'calculadora.ui' # # Created: Tue Nov 30 20:07:38 2010 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_Calculadora(object): def setupUi(self, Calculadora): Calculadora.setObjectName(_fromUtf8("Calculadora")) Calculadora.resize(419, 344) Calculadora.setMinimumSize(QtCore.QSize(419, 290)) self.centralwidget = QtGui.QWidget(Calculadora) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.gridLayout_3 = QtGui.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.txtCalculo = QtGui.QLineEdit(self.centralwidget) self.txtCalculo.setMinimumSize(QtCore.QSize(401, 41)) self.txtCalculo.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.txtCalculo.setObjectName(_fromUtf8("txtCalculo")) self.gridLayout_3.addWidget(self.txtCalculo, 0, 0, 1, 2) self.btnLimpar = QtGui.QPushButton(self.centralwidget) self.btnLimpar.setMinimumSize(QtCore.QSize(61, 41)) self.btnLimpar.setMaximumSize(QtCore.QSize(120, 16777215)) self.btnLimpar.setObjectName(_fromUtf8("btnLimpar")) self.gridLayout_3.addWidget(self.btnLimpar, 2, 0, 1, 1) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.btn7 = QtGui.QPushButton(self.centralwidget) self.btn7.setMinimumSize(QtCore.QSize(61, 41)) self.btn7.setObjectName(_fromUtf8("btn7")) self.btnNumeros = QtGui.QButtonGroup(Calculadora) self.btnNumeros.setObjectName(_fromUtf8("btnNumeros")) self.btnNumeros.addButton(self.btn7) self.gridLayout.addWidget(self.btn7, 0, 0, 1, 1) self.btn8 = QtGui.QPushButton(self.centralwidget) self.btn8.setMinimumSize(QtCore.QSize(61, 41)) self.btn8.setObjectName(_fromUtf8("btn8")) self.btnNumeros.addButton(self.btn8) self.gridLayout.addWidget(self.btn8, 0, 1, 1, 1) self.btn9 = QtGui.QPushButton(self.centralwidget) self.btn9.setMinimumSize(QtCore.QSize(61, 41)) self.btn9.setObjectName(_fromUtf8("btn9")) self.btnNumeros.addButton(self.btn9) self.gridLayout.addWidget(self.btn9, 0, 2, 1, 1) self.btn4 = QtGui.QPushButton(self.centralwidget) self.btn4.setMinimumSize(QtCore.QSize(61, 41)) self.btn4.setObjectName(_fromUtf8("btn4")) self.btnNumeros.addButton(self.btn4) self.gridLayout.addWidget(self.btn4, 1, 0, 1, 1) self.btn5 = QtGui.QPushButton(self.centralwidget) self.btn5.setMinimumSize(QtCore.QSize(61, 41)) self.btn5.setObjectName(_fromUtf8("btn5")) self.btnNumeros.addButton(self.btn5) self.gridLayout.addWidget(self.btn5, 1, 1, 1, 1) self.btn6 = QtGui.QPushButton(self.centralwidget) self.btn6.setMinimumSize(QtCore.QSize(61, 41)) self.btn6.setObjectName(_fromUtf8("btn6")) self.btnNumeros.addButton(self.btn6) self.gridLayout.addWidget(self.btn6, 1, 2, 1, 1) self.btn1 = QtGui.QPushButton(self.centralwidget) self.btn1.setMinimumSize(QtCore.QSize(61, 41)) self.btn1.setObjectName(_fromUtf8("btn1")) self.btnNumeros.addButton(self.btn1) self.gridLayout.addWidget(self.btn1, 2, 0, 1, 1) self.btn2 = QtGui.QPushButton(self.centralwidget) self.btn2.setMinimumSize(QtCore.QSize(61, 41)) self.btn2.setObjectName(_fromUtf8("btn2")) self.btnNumeros.addButton(self.btn2) self.gridLayout.addWidget(self.btn2, 2, 1, 1, 1) self.btn3 = QtGui.QPushButton(self.centralwidget) self.btn3.setMinimumSize(QtCore.QSize(61, 41)) self.btn3.setObjectName(_fromUtf8("btn3")) self.btnNumeros.addButton(self.btn3) self.gridLayout.addWidget(self.btn3, 2, 2, 1, 1) self.btnNegativo = QtGui.QPushButton(self.centralwidget) self.btnNegativo.setMinimumSize(QtCore.QSize(61, 41)) self.btnNegativo.setObjectName(_fromUtf8("btnNegativo")) self.gridLayout.addWidget(self.btnNegativo, 3, 0, 1, 1) self.btn0 = QtGui.QPushButton(self.centralwidget) self.btn0.setMinimumSize(QtCore.QSize(61, 41)) self.btn0.setObjectName(_fromUtf8("btn0")) self.btnNumeros.addButton(self.btn0) self.gridLayout.addWidget(self.btn0, 3, 1, 1, 1) self.btnPonto = QtGui.QPushButton(self.centralwidget) self.btnPonto.setMinimumSize(QtCore.QSize(61, 41)) self.btnPonto.setObjectName(_fromUtf8("btnPonto")) self.btnNumeros.addButton(self.btnPonto) self.gridLayout.addWidget(self.btnPonto, 3, 2, 1, 1) self.gridLayout_3.addLayout(self.gridLayout, 3, 0, 1, 1) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.btnDiv = QtGui.QPushButton(self.centralwidget) self.btnDiv.setMinimumSize(QtCore.QSize(61, 41)) self.btnDiv.setObjectName(_fromUtf8("btnDiv")) self.btnNumeros.addButton(self.btnDiv) self.gridLayout_2.addWidget(self.btnDiv, 0, 0, 1, 1) self.btnMult = QtGui.QPushButton(self.centralwidget) self.btnMult.setMinimumSize(QtCore.QSize(61, 41)) self.btnMult.setObjectName(_fromUtf8("btnMult")) self.btnNumeros.addButton(self.btnMult) self.gridLayout_2.addWidget(self.btnMult, 1, 0, 1, 1) self.btnMenos = QtGui.QPushButton(self.centralwidget) self.btnMenos.setMinimumSize(QtCore.QSize(61, 41)) self.btnMenos.setObjectName(_fromUtf8("btnMenos")) self.btnNumeros.addButton(self.btnMenos) self.gridLayout_2.addWidget(self.btnMenos, 2, 0, 1, 1) self.btnMais = QtGui.QPushButton(self.centralwidget) self.btnMais.setMinimumSize(QtCore.QSize(61, 41)) self.btnMais.setObjectName(_fromUtf8("btnMais")) self.btnNumeros.addButton(self.btnMais) self.gridLayout_2.addWidget(self.btnMais, 3, 0, 1, 1) self.btnIgual = QtGui.QPushButton(self.centralwidget) self.btnIgual.setMinimumSize(QtCore.QSize(61, 41)) self.btnIgual.setObjectName(_fromUtf8("btnIgual")) self.gridLayout_2.addWidget(self.btnIgual, 3, 2, 1, 1) self.btnMemoriaNegativa = QtGui.QPushButton(self.centralwidget) self.btnMemoriaNegativa.setMinimumSize(QtCore.QSize(61, 41)) self.btnMemoriaNegativa.setObjectName(_fromUtf8("btnMemoriaNegativa")) self.gridLayout_2.addWidget(self.btnMemoriaNegativa, 2, 2, 1, 1) self.btnMemoriaPositiva = QtGui.QPushButton(self.centralwidget) self.btnMemoriaPositiva.setMinimumSize(QtCore.QSize(61, 41)) self.btnMemoriaPositiva.setObjectName(_fromUtf8("btnMemoriaPositiva")) self.gridLayout_2.addWidget(self.btnMemoriaPositiva, 1, 2, 1, 1) self.btnLimparMemoria = QtGui.QPushButton(self.centralwidget) self.btnLimparMemoria.setMinimumSize(QtCore.QSize(61, 41)) self.btnLimparMemoria.setObjectName(_fromUtf8("btnLimparMemoria")) self.gridLayout_2.addWidget(self.btnLimparMemoria, 0, 2, 1, 1) self.gridLayout_3.addLayout(self.gridLayout_2, 3, 1, 1, 1) self.lblMensagem = QtGui.QLabel(self.centralwidget) self.lblMensagem.setText(_fromUtf8("")) self.lblMensagem.setObjectName(_fromUtf8("lblMensagem")) self.gridLayout_3.addWidget(self.lblMensagem, 2, 1, 1, 1) Calculadora.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(Calculadora) self.menubar.setGeometry(QtCore.QRect(0, 0, 419, 25)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menu_Arquivo = QtGui.QMenu(self.menubar) self.menu_Arquivo.setObjectName(_fromUtf8("menu_Arquivo")) Calculadora.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(Calculadora) self.statusbar.setObjectName(_fromUtf8("statusbar")) Calculadora.setStatusBar(self.statusbar) self.actionSair = QtGui.QAction(Calculadora) self.actionSair.setObjectName(_fromUtf8("actionSair")) self.menu_Arquivo.addAction(self.actionSair) self.menubar.addAction(self.menu_Arquivo.menuAction()) self.retranslateUi(Calculadora) QtCore.QObject.connect(self.btnLimpar, QtCore.SIGNAL(_fromUtf8("clicked()")), self.txtCalculo.clear) QtCore.QMetaObject.connectSlotsByName(Calculadora) def retranslateUi(self, Calculadora): Calculadora.setWindowTitle(QtGui.QApplication.translate("Calculadora", "Calculadora Simples", None, QtGui.QApplication.UnicodeUTF8)) self.btnLimpar.setText(QtGui.QApplication.translate("Calculadora", "&C", None, QtGui.QApplication.UnicodeUTF8)) self.btn7.setText(QtGui.QApplication.translate("Calculadora", "7", None, QtGui.QApplication.UnicodeUTF8)) self.btn8.setText(QtGui.QApplication.translate("Calculadora", "8", None, QtGui.QApplication.UnicodeUTF8)) self.btn9.setText(QtGui.QApplication.translate("Calculadora", "9", None, QtGui.QApplication.UnicodeUTF8)) self.btn4.setText(QtGui.QApplication.translate("Calculadora", "4", None, QtGui.QApplication.UnicodeUTF8)) self.btn5.setText(QtGui.QApplication.translate("Calculadora", "5", None, QtGui.QApplication.UnicodeUTF8)) self.btn6.setText(QtGui.QApplication.translate("Calculadora", "6", None, QtGui.QApplication.UnicodeUTF8)) self.btn1.setText(QtGui.QApplication.translate("Calculadora", "1", None, QtGui.QApplication.UnicodeUTF8)) self.btn2.setText(QtGui.QApplication.translate("Calculadora", "2", None, QtGui.QApplication.UnicodeUTF8)) self.btn3.setText(QtGui.QApplication.translate("Calculadora", "3", None, QtGui.QApplication.UnicodeUTF8)) self.btnNegativo.setText(QtGui.QApplication.translate("Calculadora", "+/-", None, QtGui.QApplication.UnicodeUTF8)) self.btn0.setText(QtGui.QApplication.translate("Calculadora", "0", None, QtGui.QApplication.UnicodeUTF8)) self.btnPonto.setText(QtGui.QApplication.translate("Calculadora", ".", None, QtGui.QApplication.UnicodeUTF8)) self.btnDiv.setText(QtGui.QApplication.translate("Calculadora", "/", None, QtGui.QApplication.UnicodeUTF8)) self.btnMult.setText(QtGui.QApplication.translate("Calculadora", "*", None, QtGui.QApplication.UnicodeUTF8)) self.btnMenos.setText(QtGui.QApplication.translate("Calculadora", "-", None, QtGui.QApplication.UnicodeUTF8)) self.btnMais.setText(QtGui.QApplication.translate("Calculadora", "+", None, QtGui.QApplication.UnicodeUTF8)) self.btnIgual.setText(QtGui.QApplication.translate("Calculadora", "=", None, QtGui.QApplication.UnicodeUTF8)) self.btnMemoriaNegativa.setText(QtGui.QApplication.translate("Calculadora", "M-", None, QtGui.QApplication.UnicodeUTF8)) self.btnMemoriaPositiva.setText(QtGui.QApplication.translate("Calculadora", "M+", None, QtGui.QApplication.UnicodeUTF8)) self.btnLimparMemoria.setText(QtGui.QApplication.translate("Calculadora", "MC", None, QtGui.QApplication.UnicodeUTF8)) self.menu_Arquivo.setTitle(QtGui.QApplication.translate("Calculadora", "&Arquivo", None, QtGui.QApplication.UnicodeUTF8)) self.actionSair.setText(QtGui.QApplication.translate("Calculadora", "Sair", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Calculadora = QtGui.QMainWindow() ui = Ui_Calculadora() ui.setupUi(Calculadora) Calculadora.show() sys.exit(app.exec_())As diferenças são poucas porque o programa é pequeno, porém em programas maiores onde adicionamos objetos como:
QStringList e QString constantemente temos muitos problemas porque no PyQt para python3 os métodos ficarão diferentes por exemplo, o método QString para Strings maiúsculas é .toUpper() e para strings regulares do python é simplesmente .upper().
Dessa forma usando simplesmente a gambiarra que eu citei acima não irá funcionar porque quando invocarmos os métodos do QString eles não estarão presentes, felizmente existe no Python3 uma biblioteca que resolve isso pra nós, a sip, exemplo:
import sip
sip.setapi('QString', 1)
from PyQt4 import QtCore
Esse método funciona bem, no entanto quando temos funções que retornam QString's ou QStringList's do PyQt em Python2.x agora retornam objetos regulares do python e nem esse método e nem o anterior funcionam adequadamente, portanto é preciso realmente reescrever o código...
Assinar:
Postagens (Atom)






