terça-feira, 19 de janeiro de 2010

Acessar Banco de Dados MySQL no ArchLinux

Eu usava o Ubuntu com o netbeans e o mesmo encontrava e acessava o banco de dados local mysql sem problemas, quando instalei o arch e o netbeans, eu não consegui fazer mais isso, procurei em diversos lugares diferentes(menos na Wik oficial do Arch) a solução e ninguém parecia a ter.
Como pouco uso o netbeans eu não me importei muito e me contentei em usar no meu desktop que tem o ubuntu 64 bits, eu já havia configurado as tabelas, os BD's propriamente ditos e o arquivo my.cnf e nada feito.
O problema apareceu quando eu não consegui acessar o MySQL com os meus aplicativos python, e o pior é que eu precisava demonstrar o acesso a um cliente com o programa rodando no micro dele e o mysql rodando como servidor no meu note, e agora?
Novamente a maratona no google e nada feito, então resolvi procurar na Wiki do Arch : , a solução estava lá, era só seguir os passos, e voilá, tudo funcionando, inclusive o netbeans.
Fica aí a dica, se alguém precisar configurar e por acaso cair por esse blog a solução está na wiki do arch.


Enable remote access

The MySQL server does not listen on the TCP port 3306 by default. To allow (remote) TCP connections, comment the following line in /etc/mysql/my.cnf:

skip-networking

Remember to edit /etc/hosts.allow by adding the following lines:

mysqld: ALL : ALLOW
mysqld-max: ALL : ALLOW

terça-feira, 12 de janeiro de 2010

Meu Primeiro Script PyQt

Consegui depois de algum estudo criar o meu primeiro script em Python + Qt, ele é muito simples e fiz com o intuito de resolver um problema de renomear um monte de fotos de uma pasta.
Ele funciona assim, você digita a pasta onde estão os arquivos, por exemplo:

/home/user/arquivos

depois coloca o nome base do arquivo, por exemplo:

fotos2006.jpg

depois ele renomeia as fotos como 1fotos2006.jpg,2fotos2006.jpg e assim por diante. É uma função muito simples, mas vale à pena o aprendizado, tive muitos problemas para ele funcionar com caracteres especiais.

Aqui vai o script (estou sem tempo para inserir comentários depois eu faço isso)



# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
from os import system
import subprocess
class Ui_janelaPrincipal(object):
def setupUi(self, janelaPrincipal):
janelaPrincipal.setObjectName("janelaPrincipal")
janelaPrincipal.resize(419, 226)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../star.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
janelaPrincipal.setWindowIcon(icon)
self.centralwidget = QtGui.QWidget(janelaPrincipal)
self.centralwidget.setObjectName("centralwidget")
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 59, 30))
self.label.setObjectName("label")
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 60, 91, 51))
self.label_2.setObjectName("label_2")
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 120, 59, 18))
self.label_3.setObjectName("label_3")
self.mensagens = QtGui.QLabel(self.centralwidget)
self.mensagens.setGeometry(QtCore.QRect(110, 120, 131, 61))
self.mensagens.setObjectName("mensagens")
self.botaoRenomear = QtGui.QPushButton(self.centralwidget)
self.botaoRenomear.setGeometry(QtCore.QRect(290, 140, 106, 27))
self.botaoRenomear.setObjectName("botaoRenomear")
self.caminho = QtGui.QLineEdit(self.centralwidget)
self.caminho.setGeometry(QtCore.QRect(100, 10, 311, 28))
self.caminho.setObjectName("caminho")
self.novo_arquivo = QtGui.QLineEdit(self.centralwidget)
self.novo_arquivo.setGeometry(QtCore.QRect(100, 70, 113, 31))
self.novo_arquivo.setObjectName("novo_arquivo")
janelaPrincipal.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(janelaPrincipal)
self.menubar.setGeometry(QtCore.QRect(0, 0, 419, 24))
self.menubar.setObjectName("menubar")
janelaPrincipal.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(janelaPrincipal)
self.statusbar.setObjectName("statusbar")
janelaPrincipal.setStatusBar(self.statusbar)
QtCore.QObject.connect(self.botaoRenomear, QtCore.SIGNAL("clicked()"), self.renomear)
self.retranslateUi(janelaPrincipal)
QtCore.QMetaObject.connectSlotsByName(janelaPrincipal)

def renomear(self):
caminho = unicode(self.caminho.text())
arquivo = unicode(self.novo_arquivo.text())
completo = caminho + '/.caminho'
system(u"ls %s > %s/.caminho" % (caminho, caminho))
prepare21 = open(unicode(completo), 'r')
linhas = prepare21.readlines()
contagem = 0
for arquivos in linhas:
contagem += 1
filesX = arquivos[:len(arquivos) - 1]

#print filesX
#try:
#system(u'mv -fv "%s/%s" "%s/%d%s"' % (caminho, filesX, caminho, contagem, arquivo))
# print fileX
subprocess.call(['mv', '-fv', caminho + '/' + unicode(filesX, 'utf-8'), caminho + '/' + str(contagem) + arquivo])
self.mensagens.setText(u"transação efetuada\ncom sucesso")
#except:
#self.mensagens.setText(u"Falha geral\nna transação")



def retranslateUi(self, janelaPrincipal):
janelaPrincipal.setWindowTitle(QtGui.QApplication.translate("janelaPrincipal", "Renomear em massa", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("janelaPrincipal", "Pastas:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("janelaPrincipal", "Nome Base :", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("janelaPrincipal", "Status:", None, QtGui.QApplication.UnicodeUTF8))
self.botaoRenomear.setText(QtGui.QApplication.translate("janelaPrincipal", "Renomear", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
janelaPrincipal = QtGui.QMainWindow()
ui = Ui_janelaPrincipal()
ui.setupUi(janelaPrincipal)
janelaPrincipal.show()
sys.exit(app.exec_())