Tuesday, May 15, 2012

GtkClutterEmbed the Pythonic Way!

The following is a simple clutter-gtk program in python that has an animatable widget. The script is for Gtk+3.0 not Gtk+2.0.

#!/usr/bin/python


from gi.repository import Gtk, Clutter, GtkClutter


storedWidth = 0
storedHeight = 0


def on_clicked(b, actor):
    global storedWidth, storedHeight
    if actor.get_width() != actor.get_stage().get_width():
        storedWidth = actor.get_width()
        storedHeight = actor.get_height()
        width = actor.get_stage().get_width()
        height = actor.get_stage().get_height()
    else:
        width = storedWidth
        height = storedHeight
        
    actor.animatev(Clutter.AnimationMode.EASE_OUT_BOUNCE,
                   500, ["width", "height"], [width, height])
    
GtkClutter.init([])


bttn = Gtk.Button("Foobar")
txtv = Gtk.TextView()
scwn = Gtk.ScrolledWindow()
scwn.add(txtv)
scwn.show_all()
bact = GtkClutter.Actor(contents = scwn)
embd = GtkClutter.Embed()
stge = embd.get_stage()
col = Clutter.Color()
col.from_string("#000")
stge.set_color(col)
vbox = Gtk.VBox()
wndw = Gtk.Window(width_request = 400, height_request = 300)


stge.add_actor(bact)
vbox.pack_start(embd, True, True, 0)
vbox.pack_start(bttn, False, True, 0)
wndw.add(vbox)


wndw.show_all()


bttn.connect("clicked", on_clicked, bact)
wndw.connect("destroy", lambda w: Gtk.main_quit())


Gtk.main()

Friday, November 11, 2011

Tukar fail imej kepada Data URI dan sebaliknya

Data URI adalah satu teknologi yang bagus pada aku kerana semasa menanya (query) sesebuah laman, kita tidak perlu melihat kedalam folder lain untuk mencari fail imej yang berkaitan. Sebaliknya ia telah sedia ada samada dalam fail html atau css. Aku tidak dapat huraikan sepenuhnya kerana bukan bidangku.

Kembali kepada tajuk, aku akan tunjuk cara tukar fail imej kepada data URI kemudian sebaliknya menggunakan python.

Imej kepada data URI


data = open('failpngku.png', 'rb').read().encode('base64').replace('\n','')


dataUri = "data:image/png;base64,%s" % data


Sekarang anda boleh guna kandungan dataUri sebagai argumen untuk attribut src bagi tag img, seperti berikut:


<img src="<kandungan dataUri>">


Yang berikut akan menghasilkan arca smily:


Kod
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAAC7UlEQVQokQXBW0/bZhgA4PezjR2HJM6BxA4ODFJIgVIqqqG11aaph+0P7KIXvd8fmCZtP2G9rVrtdt160C6g07SBJqRWRSlbS8foCKJNSAMhGNtJbMfxIU7sr8+DsO0D5UP/FFgXjPf/v3nu2Iqi1h23M5oTxydn+GyB5hagz/lOmmTDCHsYCAew+t/mH64tz83l/b6TyOcB+oF2Uq69O5GN7Oj5mdmrQOa9DkLYsgZ+e6P4q5iL5CdEKpIBHO0pWt8zIrlhQHJTrh3VVa1FLl28GePyFIRNpVYZEbjC/AIAaSg6lxSZRJIBGzzV7XkjfI5iKInt1GobC0s0oWvFndLa/PzMaaOlKYPllY3vvv0eUAA0defO3R9u35OOZF3VClMjml7Uld8IWSlNF1KIwoKYTmQyq2t//fzLQ8AAA+/ujz89fVbMjqVCtEOSbT7VM/Udorz7dmp6tt0sAeiuXfYG8hc3rgJNA6DFBTHOgVR/4dj7zcZrPkG0jg8o3/EA9xjSBWhRJDz5/QG44a5atczGo+X7ZnMd4zqFbRT4Cb6w888WgV0fEMNAgG2JGrIM+TUQUiTV5UXfN7Y7WpkYtGMsQv0B0OHAAfKbr78cJoNwMqrJEkuj0DADlNfYf+F0q/RQJ5Fl+92WpughiiOtIavjE2lesLoeMJlkJPvk8Ypc2e3U/hbP0rzQY1jz3dar9dUiy4zHJi/vlk6mZz9B2Hy6sf7nZ9cvWfqh56rV6na7eWRbaiiMTFM7d+68mJtybDoW/eh9xZi7+Cny2+XGyV5b+/fCx6OB3SCSMVA7kB4FsAC8QN0nQhHPi7XU4dNGfPHzrwiCE9PZMwPEPH+2ScQFaFlARNWtPXPv2DqQCFYAVth8WTmSg8VrtwALCAcGIEeVtnX1rVLfy8RDYiYV5kfANbHvlcoHst4bm7iSHb8SjV/AAYV6AxVBb4h0AQxoV2uVN5p8qLWkAPcj8cSZuUWGG4sJSwCCDymjCx8AL+KIzDGViXEAAAAASUVORK5CYII=">


Hasil






data URI kepada imej


dataSection = dataUri[len('data:image/png;base64,'):]
data = []
while (len(data) > 0):
   data.append(dataSection[:76:])
   dataSection = dataSection[76:]


ofile = open('output.png', 'wb')
ofile.write('\n'.join(data).decode('base64'))
ofile.close()


Sebuah fail berformat png dengan nama output.png akan terhasil daripada kod di atas, dengan syarat pemboleh ubah dataUri ditugaskan nilai terlebih dahulu.

Set proxy melalui terminal

Fedoraku rosak, maka aku terpaksa guna Ubuntu untuk perbaikinya. Malang sekali setelah chroot, aku gagal menghubungi proxy. Melalui carian web, akhirnya aku berjaya temui penyelesaiannya.

Untuk tetapkan proxy http:

export http_proxy="http://<ip_proxy>:<port>"

Untuk tetapkan proxy https:

exprort https_proxy="http://<ip_proxy>:<port>"