RSS feed
  • Howto install pyclutter 0.8.2 on Ubuntu

    Ubuntu 8.04 has pyclutter 0.6.2 in the repositories while the current stable version is 0.8.2. Here is how I installed pyclutter 0.8.2 with all of the extra available libraries (gtk, gst, cairo):

    download:

    also make sure you have python-cairo-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev installed. There may be more required, but these were the only ones I didn't already have installed.

    For some reason I had to configure all of these libraries with --prefix /usr to get pycluster to see all of them.

    Also, configure pycluster with --enable-docs if you want any documentation.

    have fun!

  • Search terms as initial delicious bookmark tags

    I've patched my copy of the delicious firefox extension so that when you bookmark a page which you got to from a google/yahoo search, those search terms are automatically included as the first set of tags for the post. This only happens if the search is in your recent history (must be able to get back to the search page with no more than 2 back button clicks from the page you are bookmarking).

    I've posted that patch to the extension's yahoo group, so it will hopefully end up in the official extension (as a non-default option). In the meantime, here is the patch and the modified extension (original version 2.1.018). Note that I didn't change the name of modified extension so that it overwrites your old delicious plugin. However, this also means that this version will be overwritten by any new official versions released. I'll figure out a more clean solution if the patch doesn't get accepted.

    NOTE: This feature must now be enabled via preferences

  • Single Instance Application with command line interface

    I wanted a python gtk application to open a new window on its first execution and then have subsequent executions send their command line arguments to the initial application rather than starting a new one. Here is the template which provides that functionality:

    download singleinstanceapp.py

     
    """
    This will only spawn one gtk application at a time.  If this command is executed
    while an instance is already running, the command line arguments are sent to the
    already running application.
    """
     
    import sys
     
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    import socket
    import threading
    import SocketServer
     
    class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    	def handle(self):
    		data = self.request.recv(1024)
    		cur_thread = threading.currentThread()
     
    		# do something with the request:
    		self.server.app.label.set_label(data)
     
    		# could instead of the length of the input, could return error codes, more
    		# information (if the request was a query), etc.  Using a length function
    		# as a simple example
    		response = 'string length: %d' % len(data)
     
    		print 'responding to',data,'with',response
    		self.request.send(response)
     
    class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    	stopped = False
    	allow_reuse_address = True
     
    	def serve_forever(self):
    		while not self.stopped:
    			self.handle_request()
     
    	def force_stop(self):
    		self.server_close()
    		self.stopped = True
    		self.create_dummy_request()
     
    	def create_dummy_request(self):
    		client(self.server_address[0], self.server_address[1], 'last message for you')
     
    def client(ip, port, message):
    	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    	sock.connect((ip, port))
    	sock.send(message)
    	response = sock.recv(1024)
    	print "Received: %s" % response
    	sock.close()
     
    def start_server(host, port):
     
    	server = ThreadedTCPServer((host, port), ThreadedTCPRequestHandler)
    	ip, port = server.server_address
     
    	# Start a thread with the server -- that thread will then start one
    	# more thread for each request
    	server_thread = threading.Thread(target=server.serve_forever)
    	# Exit the server thread when the main thread terminates
    	server_thread.setDaemon(True)
    	server_thread.start()
     
    	return server
     
    class SingleInstanceApp:
    	def destroy(self, widget, data=None):
    		self.server.force_stop()
    		gtk.main_quit()
    		#exit(1) # I'm sorry but mozembed is making a huge pain in my ass
     
    	def __init__(self, server):
    		self.server = server
     
    		# create a new window
    		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    		self.window.set_default_size(300,30)
    		self.window.connect("destroy", self.destroy)
     
    		self.label = gtk.Label("hello world")
    		self.window.add(self.label)
     
    		self.window.show_all()
     
    		# and the window
    		self.window.show()
     
    	def main(self):
    		gtk.gdk.threads_init()
    		gtk.main()
     
    if __name__ == "__main__":
    	# pick some high port number here.  Should probably put this into a file
    	# somewhere.
    	HOST, PORT = "localhost", 50010
     
    	server = None
    	try :
    		client(HOST, PORT, ' '.join(sys.argv))
    		print 'an insance was already open'
    	except socket.error :
    		exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
    		if exceptionValue[0] == 111 :
    			print 'this is the first instance'
    			server = start_server(HOST, PORT)
    		else :
    			# don't actually know what happened ...
    			raise
     
    		app = SingleInstanceApp(server)
    		server.app = app
    		app.main()
     

    The first execution of this script starts an asynchronous server on a predetermined port. This port is checked each time the script is run to see if another instance has already been started. If it has, the command line arguments are sent to the existing instance which can react to them however you want.

    download singleinstanceapp.py

  • python gtk close on escape key

    I wanted a gtk window to close when the escape key is pressed:

     
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    class CloseOnEscape :
    	def keypress(self, widget, event) :
    		if event.keyval == gtk.keysyms.Escape :
    			gtk.main_quit()
     
    	def __init__(self):
    		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    		self.window.connect("key-press-event", self.keypress)
    		self.window.show()
     
    	def main(self):
    		gtk.main()
     
    if __name__ == "__main__":
    	app = CloseOnEscape()
    	app.main()
     
  • Doing what you Love

    Feeling down about doing what you love?

    watch this

  • JQuery + Greasemonkey

    Had to look around to figure out how to include jquery in greasemonkey. Should have just guessed this first; Just use the @require, and your standard jquery document ready code. Heres my template anyway.

     
    // ==UserScript==
    // @name           JQuery Template
    // @author         Zach Dwiel
    // @description    Provide a basic template for using jquery in greasemonkey
    // @include        *://*
    // @require        http://code.jquery.com/jquery-latest.js
    // ==/UserScript==
     
    $(document).ready( function() {
        // your jquery code here
    }
     
  • Emergence

    simple rules that ants follow create emergant behavior which is the ant colony

    simple rules that people follow create emergant behavior which is the society and culture

    simple rules that the universe follows creates emergant behavior which is ???