<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2554411293486727687</id><updated>2012-02-16T19:23:38.648-08:00</updated><category term='keyboard'/><category term='controller'/><category term='libsoy'/><title type='text'>fzzbt's PySoy 2011 GSOC blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-5505685380409723749</id><published>2011-08-15T07:15:00.000-07:00</published><updated>2011-08-15T07:15:40.041-07:00</updated><title type='text'>Final week</title><content type='html'>Today starts the final week of GSOC.&lt;br /&gt;Yesterday was supposed to be a "pencils down" day, so I won't be implementing any new features to 2DSide any more. I will spend the remaining week on porting all my changes in default branch to experimental and hopefully to write python bindings for everything I have done in pysoy side. If time permits, I will try to write a small example program in python for the 2Dside class.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-5505685380409723749?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/5505685380409723749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/08/final-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/5505685380409723749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/5505685380409723749'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/08/final-week.html' title='Final week'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-1394026447635157737</id><published>2011-08-02T11:39:00.000-07:00</published><updated>2011-08-02T11:39:45.305-07:00</updated><title type='text'>fields update</title><content type='html'>quick update about fields: I have now managed to port fields to libsoy almost completely, but not quite. This was quite much larger work than I originally thought as much of the stuff in soy.scenes.Scene required for fields (tags, mass, etc.) weren't ported to libsoy either, so porting those has taken quite much time. I have managed to port the fields stuff now mostly, but I still have some issues actually using them in soy.scenes.Scene as the original code in pysoy seemed to be partially broken as well (it was commented out completely). I'm trying to work up a demo program to test fields now and I hope to get it working soonish as soon as I figure out this little problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-1394026447635157737?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/1394026447635157737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/08/fields-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/1394026447635157737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/1394026447635157737'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/08/fields-update.html' title='fields update'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-7816860814562536086</id><published>2011-07-14T04:34:00.000-07:00</published><updated>2011-07-14T04:34:33.271-07:00</updated><title type='text'>Quick update</title><content type='html'>Managed to fix some bugs in models, atom abuse and ode vapi. Still have not been able implement gravity for 2d bodies. It looks like the solution is not so easy as I thought. Thankfully, Toba&amp;amp;Arc have now suggested me to use, Toba's work, soy.fields to gauge this. Unfortunately, soy.fields have not been ported to libsoy yet, so it looks like I am going to be porting his work to libsoy next.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-7816860814562536086?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/7816860814562536086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/07/quick-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/7816860814562536086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/7816860814562536086'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/07/quick-update.html' title='Quick update'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-8937466106127673896</id><published>2011-07-05T21:08:00.000-07:00</published><updated>2011-07-05T21:08:49.428-07:00</updated><title type='text'>Sphere, box, collisions</title><content type='html'>In the last posting I planned to work on new models (box and sphere) and immovable bodies and gravity settings for TDSide.&lt;br /&gt;&lt;br /&gt;I have now implemented new models box and sphere.&lt;br /&gt;These still need changed to use VBO and added to use textures later on, but anyhow they are usable now.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GzJunv4_nnc/ThPesdZB4FI/AAAAAAAAABw/XrRjWXROZhA/s1600/Screenshot-TDSide+test.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://1.bp.blogspot.com/-GzJunv4_nnc/ThPesdZB4FI/AAAAAAAAABw/XrRjWXROZhA/s400/Screenshot-TDSide+test.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;About immovable bodies, I have figured three ways to create them:&lt;br /&gt;setting new category bits for the body in question (eg.box.shape.geom.SetCategoryBits(&amp;lt;some_unique_integer&amp;gt;), to reverse: box.shape.geom.SetCategoryBits(0)), using a fixed joint to fix the body to the world and just setting the body as null for the geom of the shape of the body (eg. box.shape.geom.SetBody(null), to reverse: box.shape.geom.SetBody(box.body)). The first approach is actually meant for setting "collision categories" for different categories of bodies, so I'm not using that. Fixed joint approach seems to cause some weird slowdowns in my test program so I'm not using that either, but the null body setting approach that is also suggested in the ODE FAQ. Sadly, slowdowns still occur with that too in cases where 2d body with a motor on it to make it move constant velocity collides with an immovable body (eg. player is walking towards a wall). In this case, the body will continue to infinitely collide with the immovable body, thus jamming everything. This needs some kind of special handling that I have not figured out yet.&lt;br /&gt;&lt;br /&gt;About gravity, the Scene class has a method for setting gravity for ALL bodies, but I want to give the 2d object in TDSide their own gravity setting so that they do not interfere with whatever foreground/background (graphical) bodies there might exist. Not sure how to do this easily.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-8937466106127673896?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/8937466106127673896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/07/sphere-box-collisions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8937466106127673896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8937466106127673896'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/07/sphere-box-collisions.html' title='Sphere, box, collisions'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-GzJunv4_nnc/ThPesdZB4FI/AAAAAAAAABw/XrRjWXROZhA/s72-c/Screenshot-TDSide+test.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-2702734024305702926</id><published>2011-06-28T19:37:00.000-07:00</published><updated>2011-06-28T19:38:17.105-07:00</updated><title type='text'>After midsummer &amp; demo</title><content type='html'>Last weekend was midsummer so I didn't get much done over the weekend, but before that worked on the ODE vapi to add param names for stops and motors for joints (namely Plane2D for now). I have now added methods for TDSide to make it easy to move 2D object at constant velocity. I will probably make changes to these, tough.&lt;br /&gt;&lt;br /&gt;There is a small demo program called tdside to test the custom scene.&lt;br /&gt;To run it, follow the normal installation of libsoy:&lt;br /&gt;./waf configure build &amp;amp;&amp;amp; sudo ./waf install&lt;br /&gt;&lt;br /&gt;then run program "tdside" from the command-line (should be on your PATH).&lt;br /&gt;At the moment, you can only collide some boxes to each other on a 2D plane.&lt;br /&gt;&lt;br /&gt;Next, I plan to work on following features:&lt;br /&gt;- Add way to set gravity on 2d bodies on TDSide&lt;br /&gt;- Add way to add immovable bodies on TDSide&lt;br /&gt;- Split TDSide to TDSide and TDOverhead classes (inheriting from TDBase or something)&lt;br /&gt;- Models: Implement soy.models.Sphere and soy.models.Box (like Cube but with customs measurements). (it would be nice to be able to use arbitrary models from, say, blender, but that is really not a priority now)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-2702734024305702926?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/2702734024305702926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/06/after-midsummer-demo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/2702734024305702926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/2702734024305702926'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/06/after-midsummer-demo.html' title='After midsummer &amp; demo'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-2155108090665436580</id><published>2011-06-19T21:45:00.000-07:00</published><updated>2011-06-19T21:45:28.639-07:00</updated><title type='text'>Week 24</title><content type='html'>Decided to stop working the camera idea for now as Arc thinks I should focus on physics now. &lt;br /&gt;&lt;br /&gt;Weekend and beginning of the last&amp;nbsp; week was frustrating. I have been focusing on creating an enhanced scene that would just restrict its bodies movement on 2D plane for now. Doing this with ODE's 2DPlane joint was seemingly easy, but I got strange slowdowns at first because I didn't realize 2D&amp;nbsp; bodies must be aligned to Z axis to prevent "angular drifting". Doing this was fairly easy too, but the ODE bindings we use were bit incomplete when it came to quaternions,&amp;nbsp; so I was stuck for few days until I understood how to fix it.&lt;br /&gt;&lt;br /&gt;Anyhow, I have now scene TDSide&amp;nbsp; which makes it easy&amp;nbsp; to restrict body movement on a 2D plane. For this week, I will focus on physics again, making it easy to move and rotate the 2D bodies too. Also, how&amp;nbsp; to deal with foreground and background graphics needs some thinking too. I have&amp;nbsp; a feeling that I'm going to split this scene class to specializing overhead and sideview scenes later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-2155108090665436580?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/2155108090665436580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/06/week-24.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/2155108090665436580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/2155108090665436580'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/06/week-24.html' title='Week 24'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-8980577346303077215</id><published>2011-06-09T08:07:00.000-07:00</published><updated>2011-06-09T08:08:24.836-07:00</updated><title type='text'>Week 23</title><content type='html'>Mini-update: I'm working on scene(s) to make topdown and sideview type games easier. Have not made much concrete progress yet. Mostly just planning and testing different stuff to understand soy.scenes.Scene and other soy inner workings. Trying to code first easy way to do camera/scrolling setup.&lt;br /&gt;I think there should be at least following camera setups:&lt;br /&gt;- Scrolling camera: camera moves to some direction (in 2D plane) with some speed defined by user. Scrolling direction and speed can be changed after initial creation.&lt;br /&gt;- Centered camera: camera is centered at certain body which movement (in 2D plane) it follows.&lt;br /&gt;- Centered camera with tilting: Same as centered camera, but the camera can tilt, eg. camera could towards movement direction of the player's character.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-8980577346303077215?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/8980577346303077215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/06/week-23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8980577346303077215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8980577346303077215'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/06/week-23.html' title='Week 23'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-4125934295527543443</id><published>2011-05-31T17:03:00.000-07:00</published><updated>2011-05-31T17:03:27.961-07:00</updated><title type='text'>soy controller update 2</title><content type='html'>Here's an update on the controllers I was working on last week.&lt;br /&gt;&lt;br /&gt;On  the libsoy side, keyboard and pointer (mouse, touchpad, etc.) are now  properly implemented so that they do not expose the Gdk API. There are examples in simple.gs and pointerTest.gs where these are used.&amp;nbsp; Some features such as drag-and-drop for pointers are not yet implemented, but they are very easy to add.&lt;br /&gt;&lt;br /&gt;I have not been able to get these to work in pysoy yet, because writing Python/C bindings was very confusing and verbose. After talking with Arc Riley, it would seem that he intends to work on a VM to help porting later on. For now, I will not continue working on pysoy side.&lt;br /&gt;&lt;br /&gt;It  is easy to implement support for new controllers with the event system I  have built. To create new controller one must add new event types to  soy.EventType (eg. JoystickButtonPressed, JoystickButtonReleased),  create event "data class", that will hold the event data (eg.  JoystickButton) and finally create new controller in the controller  folder (eg. controllers/Joystick.gs), that will provide events for the  user to which he can connect to. controllers/Keyboard.gs provides a good  example how to do this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I will focus next on creating framework classes for 2D scenes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-4125934295527543443?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/4125934295527543443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/05/soy-controller-update-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/4125934295527543443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/4125934295527543443'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/05/soy-controller-update-2.html' title='soy controller update 2'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-4981569325396158963</id><published>2011-05-22T04:36:00.000-07:00</published><updated>2011-05-22T04:36:27.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='controller'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='libsoy'/><title type='text'>libsoy keyboard controller</title><content type='html'>I've done and I'm doing some work on the libsoy/pysoy keyboard controllers code based on the earlier work by Mayanks.&lt;br /&gt;&lt;br /&gt;Fellow GSOC student, Mayanks, had earlier implemented controller for detecting key presses. &lt;br /&gt;I've now added ability to detect also key releases and "key downs".&lt;br /&gt;Key downs are like key presses, but they do not repeat when being hold down.&lt;br /&gt;The keyboard controller keeps a &lt;a href="http://people.gnome.org/%7Edvillevalois/libgee/doc/gee-1.0/Gee.HashSet.html"&gt;Gee.HashSet&lt;/a&gt; of the keys being held down which is updated during key presses and releases. Here's an example how the controller is used in simple.gs.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;var key = new soy.controllers.Keyboard(window)&lt;br /&gt;key.sig_key_press += def(t, keyname, key)&lt;br /&gt;    case keyname&lt;br /&gt;        when "Escape"&lt;br /&gt;            Posix.raise(15) // call SIGINT&lt;br /&gt;&lt;br /&gt;key.sig_key_down += def(t, keyname, key)&lt;br /&gt;    case keyname&lt;br /&gt;        when "Up"&lt;br /&gt;            cube.addForce(0.0f, 0.1f, 0.0f)&lt;br /&gt;        when "Down"&lt;br /&gt;            cube.addForce(0.0f, -0.1f, 0.0f)&lt;br /&gt;        when "Left"&lt;br /&gt;            cube.addForce(-0.1f, 0.0f, 0.0f)&lt;br /&gt;        when "Right"&lt;br /&gt;            cube.addForce(0.1f, 0.0f, 0.0f)&lt;br /&gt;&lt;br /&gt;key.sig_key_release += def(t, keyname, key)&lt;br /&gt;    case keyname&lt;br /&gt;        when "Up"&lt;br /&gt;            cube.addForce(0.0f, -0.1f, 0.0f)&lt;br /&gt;        when "Down"&lt;br /&gt;            cube.addForce(0.0f, 0.1f, 0.0f)&lt;br /&gt;        when "Left"&lt;br /&gt;            cube.addForce(0.1f, 0.0f, 0.0f)&lt;br /&gt;        when "Right"&lt;br /&gt;            cube.addForce(-0.1f, 0.0f, 0.0f)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One catch in the above code is detecting modifier keys, such as Ctrl and Alt.&lt;br /&gt;To detect these, one has to examine the key.state modifierType variable.&lt;br /&gt;Also, the above code doesn't make it easy to detect multiple key presses simultaneously as in many keyboard shortcuts.&lt;br /&gt;It might&amp;nbsp; be worth to update this API to gtk like behaviour, where you could detect multiple keys with strings like "&amp;lt;Ctrl&amp;gt;Up" .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-4981569325396158963?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/4981569325396158963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/05/libsoy-keyboard-controller.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/4981569325396158963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/4981569325396158963'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/05/libsoy-keyboard-controller.html' title='libsoy keyboard controller'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-8771849011069330856</id><published>2011-04-25T21:34:00.000-07:00</published><updated>2011-04-25T21:34:08.654-07:00</updated><title type='text'>My app was accepted to GSOC</title><content type='html'>My application to GSOC was accepted last night.&lt;br /&gt;&lt;b&gt;PARTY TIME!!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Next follows a "Community Bonding Period" to get to know the code and people. I'm still bogged down with university work for another 2 weeks, but somehow have to start clearing schedule for this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-8771849011069330856?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/8771849011069330856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/04/my-app-was-accepted-to-gsoc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8771849011069330856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/8771849011069330856'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/04/my-app-was-accepted-to-gsoc.html' title='My app was accepted to GSOC'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-3549301990561731459</id><published>2011-04-08T11:24:00.001-07:00</published><updated>2011-04-08T11:24:54.948-07:00</updated><title type='text'>gsoc update  2</title><content type='html'>Finally sent my application yesterday.&lt;br /&gt;Did some updating on the implementation details in the wiki today.&lt;br /&gt;Will continue later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-3549301990561731459?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/3549301990561731459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/04/gsoc-update-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/3549301990561731459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/3549301990561731459'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/04/gsoc-update-2.html' title='gsoc update  2'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554411293486727687.post-1170970605505911362</id><published>2011-04-01T13:08:00.000-07:00</published><updated>2011-04-01T13:08:36.948-07:00</updated><title type='text'>First post</title><content type='html'>I will be using this blog for PySoy's google's summer of code project.&lt;br /&gt;&lt;br /&gt;Today, I managed to write a quit function to exit properly out of a PySoy app and learned a bit more about PySoy and its inner workings..&lt;br /&gt;The example apps in PySoy don't exit when their window is closed, rather they just remain lingering in the background. I hope to fix this completely later on.&lt;br /&gt;&lt;br /&gt;I will focus next to finalizing my proposal and send it to google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2554411293486727687-1170970605505911362?l=fzzbt.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fzzbt.blogspot.com/feeds/1170970605505911362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fzzbt.blogspot.com/2011/04/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/1170970605505911362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554411293486727687/posts/default/1170970605505911362'/><link rel='alternate' type='text/html' href='http://fzzbt.blogspot.com/2011/04/first-post.html' title='First post'/><author><name>fzzbt</name><uri>http://www.blogger.com/profile/05748607273514669121</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
