Sunday, October 16, 2011

Out of the Country- An adventure to Canada

Last week I had the chance to go on an adventure during my Fall Break to what other place than Canada! Thanks to the GNOME travel committee, I traveled from Ithaca, NY to what seemed like another realm. While at Quebec, I finally met up with the GNOME team. From graphic designers to the names I've come to really on for my IRC questions, I met so many people from all over the world.

The Summit was truly inspirational for me. It was a chance not only to meet the people I had admired over the interwebs, but also to become involved in the GNOME community. After the trip I wanted to work so much harder on my project (although, balancing the keyboard project with my school work has proved to be difficult) because I saw and heard people who were truly committed to GNOME.
For more on what we discussed at the Summit, check out

I also took some detailed notes on the trip itself for those who'd like to know what the expenses are like.

-$250 for bus round trip (14 hours each way, gross)
-$280 for 3 night hotel stay

+$100 CAD withdrawal
-$3 one way ticket
-$16 three day ticket (this was way more economical & practical, since we were taking the metro a lot)
-$10 Mediterranean food
-$17 Pasta dinner

+$100 CAD withdrawal (-$1.50 fees apply)
-$22 for gifts (great gift shop a few blocks away from hotel)
-$15 salad lunch
-$0 for dinner and drinks thanks to Collabora!

-$22 for goodies for myself :)
-$15 for pierogi lunch
-$0 for flam snack (delicious) thanks to Karen!
-$0 for Iranian dinner thanks to Behdad!
-$20 for bus food

Total spent before trip- $530 and Total spent during trip- $141.50

So, please don't fret if the "before trip" expenses seem like too much. GNOME travel committee is fantastic, and very willing to help those who need it to come to these events. Along with their informational value, events like GNOME Desktop summit and the Montreal/Boston summit are great opportunities to network and build a stronger, tighter community :)

Wednesday, September 28, 2011

To Montréal!

So, this year the GNOME Boston Summit will be happening in Montréal, Canada at the École Polytechnique from October 7-10.
For more information go to

I am terribly excited to meet the GNOME folk there. I'll be posting more about the conference afterwards, so stay tuned! Hmm...I guess in the mean time I'll go brush up on my French.
À bientôt!

Tuesday, September 13, 2011

What's the big deal with women in Computer Science?

As I sit here at my friend's windowsill staring out at Ithaca Commons, I realized that I haven't posted to the blog in quite a while. It's not that I don't have thousands of ideas in my head waiting to be written down, but rather that the past month has been difficult for me to overcome, very difficult. Looking back on it I feel that I just wasted away that time, but now I'm back and I have many plans for the future. First, however, I'd like to address the issue I've raised in this post title: so, what's the big deal about women in CS anyways?

At its inception, Computer Science wasn't the "man" thing to do. In fact there were many prominent women figures in the early days working alongside men. If you don't believe me, check this site out (admittedly, some of the women on this site are more recent additions to our circle, but nonetheless they are amazing). As I continued the unfortunate month slump, I began to wonder why we were so desperate for more women in CS. I'd like to clarify before delving further into the matter: I am not against women in Computer Science or engineering, in fact I am an active member in Association of Computer Science Undergraduates promoting women in these fields.

On that note, I would like to point out that Computer Science consists of problem solving and mathematics, not exclusively but definitely as a basis of understanding. If encouraging women to do CS at an earlier age is such an urgency, then why don't we teach them the basics as well: math, programming, logic, etc? Why is it that we've constrained ourselves to encouraging one subject when there are many parts to a Computer Science education? In my former involvement in college programs like the Society of Women Engineers, I kept hearing that women didn't understand that CS was more than just about programming in a dark corner of the room (though this is also valid). So then, why don't we show instead of tell?

I guess I'm just saying that if getting women into the CS field is a priority, then let's do it the right way, not just the half-hearted attempt we're giving right now. Let's get women (and men) to see what computer science is really about and encourage young people to involve themselves in technological development.

Until another time,

Tuesday, August 16, 2011


After working with GNOME shell for the past few weeks, I feel that I have grown so much as a programmer. From the technical details of algorithmic complexity (which I always tried to take into account when writing the code) to the ability to find code snippets and examples that guide you, I have learned so much. The finished product will be pushed in the next release of GNOME (3.2 release), so as I take this next step in pursuit of improving my programming skills I want to thank you all for the support and I hope you enjoy my contribution to the field.
Remember, if you find any kinks with the work report them to GNOME bugzilla. I'll be posting some more soon on my thoughts about the computer science field, so stay in touch.

Friday, August 5, 2011

So much to do, so little time

Well, my time here with GNOME is coming to a close. This, of course, doesn't mean I won't be contributing to future projects (or maybe even enhancing this one), but it does mean college is on the horizon and my time will be greatly limited by it.
Over the past few weeks, I've been working more on the backbone of the project to write a Gtk module in Vala for the onscreen positioning code. Everyone expects the keyboard to just pop up whenever they click into an input box, and so that's what I've been trying to deliver.
At this point, I've gotten it to where the GdkWindow determines the position of the box and a focus event handler (this one was thanks to Dan) figures out when the focus changes from the entry to a non-entry box. I've also used a global connection within the GNOME shell to tell me when focuses change within the shell.

What does this mean exactly?

Click on the search bar and the keyboard will pop up.

Then just start typing your entry.

Once you're done, click away from the search bar and the keyboard disappears. Well, that's all there is for now.

Until next week,

Tuesday, July 26, 2011

Coming to the End...

Over the past week I have submitted a ton of little patches here and there that are really making the keyboard come to life. I have really been all over the place, from removing warning messages in the GNOME shell output due to the keyboard to redesigning the hide/show feature and message tray. I am amazed to see how much the keyboard has grown over the summer and also to see how much code has been generated (not all of it going into the final design, of course).
Here's another example of the keyboard at use (here I'm chatting with my mom):

Until next time,

Monday, July 18, 2011

A video capture

I have made a video! Sorry for the stumble at the end, I didn't want it to be highlighted. Well, here it is:

And here is positioning:

For a preview video thanks to Ray (halfline) look at:

In order to do a video capture with GNOME shell just press CTRL + ALT + SHIFT + R. A little red button will appear on the bottom of your screen while you're recording. Press CTRL+ALT+SHIFT+R again to stop the recording. A file named shell-[date]-[#] will appear in your home directory in webm format.

If you'd like to upload your own video or link to youtube please feel free to do so and paste the link here for others to see :)

Saturday, July 16, 2011

Test it Out!

For those people that have asked how to test out the keyboard, I have good news for you: the keyboard has been pushed to the GNOME shell master branch! You just have to pull the latest updates and then a11y menu -> Screen Keyboard -> ON. If you want to check out my latest updates, it is available at

Some known issues (from my branch on github) include:
  • Layout positioning (I may add more buttons later)
  • Message tray icon in keyboard not grayed in overview (the design is that it shouldn't be enabled in the overview).
  • Message tray hiding is choppy.  
  • Floating mode is currently broken, should default to stuck-to-bottom keyboard.

To enable Caribou positioning: Do Alt+F2 then in box type "env GTK_IM_MODULE=caribou"

Some of the more recent things I've fixed are the alignment of the keys within the keyboard layout (yes, they are now aligned!), hiding the message tray behind the keyboard, and redesigning the stuck-to-bottom keyboard.

Once I get home I'll see if I can do a video capture to better illustrate the functionality of the keyboard at the moment :) Also, I'd appreciate feedback (ie. bugs in the key/keyboard functions), but please keep in mind that I am not responsible for generating design ideas for the keyboard. This means that if you have design ideas talk to the GNOME shell designers (I can't guarantee they'll trickle down to me though).

I'll be on my flight soon, so see you later!

Wednesday, July 6, 2011

On a week of travel

This is a late update on the keyboard progress. I've been traveling because of fourth of July weekend, but having settled down a bit today I'll report. Last week I fixed the positioning code, so depending where you type on the screen the keyboard will place itself correctly. Unfortunately, it's so good at hiding right now that the minute the focus is removed from the input device to take a screen shot it goes away :(. So, you'll just have to trust me for now that it moves above the input device if on the bottom half of the screen and vice versa for the top.
Since, Dan had to present the keyboard I also spend a good time cleaning up the general look/functionality of the keys. If you press Ctrl/Alt key by accident now, you can just click again to "release" the key. I also fixed the message tray button, so that it properly shows/hides the message tray when clicked (this deactivates the "hot corner"). Other than that I had some Caribou patches rebased and sent, so that everyone can have this functionality. Although today I did some rebasing with Caribou master, since it had been a while since my last update. Updates can be a little overwhelming at times, but thanks to abstractions (yay!) I only need to change a couple more things to get the keyboard back to where it was.
For those of you that pointed out the flaws in the fullscale layout, here is what I have updated to. Still need some work with it, since Caribou made an alignment change, but the buttons are mostly all in the right places now :)

Enjoy the rest of your holiday week!

Monday, June 27, 2011

The Dynamic Duo

This past week has been incredibly eye-opening. From fighting with signal passing one day to analyzing implementation the next, I've been plenty busy. At the beginning of the week Dan asked me to create a full-scale keyboard for people who want more options, but are limited to the virtual keyboard. I have added the Esc, Tab, and F1-12 buttons. In addition to that I implemented the all-too-tricky Ctrl/Alt keys.
The difference with these keys was that when the user presses the Ctrl key there is no immediate effect as in with the other keys. The user has to press a non-modifier (ie. 'a') in order for something to happen (same goes for Alt). So, when the user presses the key a signal is sent to the keyboard telling it that a modifier has been pressed and then putting it in the queue.

Here is the Ctrl key in action (as well as a preview to the full-scale layout).

I still need to do some more work figuring out the right spacing for this layout. As you can see some rows have many more keys than others making awkward gaps.
What I really want to start working on is the positioning code for the keyboard. This code will place the onscreen keyboard underneath any location where there is an input device, and will show the keyboard *only* when the user needs to type something, which will surely make for happy web surfing.

Until later,

Monday, June 20, 2011

Dragging ON

I didn't think I would post anything this week, since most of the changes I have made to the keyboard have been internal and thus there would be nothing fancy to show off. However, I have just (maybe 2 minutes ago?) finished the dragging option for the keyboard. This 'floating' layout allows the user to drag the smaller keyboard to whatever place on the screen they'd like. This is a precursor to the option we will eventually have for the keyboard.
Our future plan is to have the keyboard following the input changes of the user. For now the dragging keyboard is working properly, as far as I can tell :)

In addition to this functionality I have also added the option to have an iPod-like click-wait-drag-release option for subkeys and I have the message tray more or less working on top of the keyboard (GNOME users know that the message tray is usually at the bottom of the screen).
I am still having a bit of trouble getting the layout to look exactly as I wish, but I have figured that I'll first concentrate and ironing out the kinks in the keyboard functionality and then concentrate more on the "looks".
For next week, I'll hopefully have the 'combo' keys added and working on the keyboard (ie. CTRL + ALT + TAB, etc)

Until then,


Monday, June 13, 2011

A Big Success

I am typing from my onscreen keyboard!
Over the past week I have transformed the little black box on the corner of my screen into an improved keyboard. Some things I changed were the CSS style of the keys/keyboard, the ability to hide the keyboard in the message tray, and a formula that fits the keys to your screen no matter what the orientation of the screen.

Dan has suggested that I make the keys look more square, but I'm not sure if that will detract from the keyboard (there will need to be giant paddings horizontally or vertically depending on the screen orientation). Not sure what I'm going to do about that yet.
My favorite accomplishment of the week is the little keyboard button on the bottom right hand of the keyboard. Click it and whoosh!  
The keyboard goes into the message tray and lets me work in full screen mode.
So, it seems that this week will be full of many little things TODO. I will be working on the "floating" layout, extending the subkey functionality (for iPhone users: click, wait, move, release on subkeys), and possibly merging some Caribou code. Today I've only had time to do a ton of little fixes to my code to make it look more like the rest of the GNOME shell, but I'm excited for tomorrow and that which will come.

Until then,

Monday, June 6, 2011

A Keyboard, at last

After many struggles constructing ST entities and digging through pages of GNOME shell code, I am progressing with the keyboard. Just last week the keyboard was merely a shell, a pretty picture, but now I have the key and extended key presses mostly working as well as the sizing of the buttons.

Example of typing with keyboard
With the following piece of code we can take advantage of event signals in order to emit the key press:
button.connect('button-press-event', Lang.bind(this, function () {; }));
There were a ton of little details in this piece of code that challenged my understanding of signal passing, but when I realized that event signals become global events once they are created that made it much easier to concentrate on the procedures that needed to be done once the event was processed.

Example of using extended keys
Uses event.get_source() in order to figure out whether a click has been directed within the extended key box or outside of it. In order to do this, however, you must push the current modal into the global stage. This is a tricky procedure, since when the modal is on the stage the focus is removed from whatever is clicked at the moment. The reason this needs to be done is because there are "holes" on the stage that don't get processed as events.

For the next week I'm going to begin working on the focus and position of the keyboard, so that it matches the rest of GNOME's layout. 

Also, I want to thank Marina for a great little piece of advice for the graphics crashes that I've been having recently on my Fedora 15 system with GNOME shell:
If your system crashes use CTRL+ALT+F2, type "DISPLAY=:0 gnome-shell", and then CTRL+ALT+F1.

Hopefully this issue is resolved soon, but until then this great little trick will save you a lot of trouble.


Monday, May 30, 2011

A week of Gnome

The past week has been slowly building up for me. I started off my Onscreen Keyboard project by writing a simple keyboard generator. This little addition to the bottom of Gnome 3 is a hard-coded draft of what the future keyboard would look like. After reviewing the libcaribou libraries I began to get an idea of what I would need in order to build the layers of the keyboard and get properly working keys.
My biggest challenge for the next week will be integrating libcaribou technology with the simple keyboard generator. I've already started looking into it today and I have found that there are some issues coming up with the frameworks that I'll need to play around with a bit more. I'll keep you updated with the latest.
Until then,

Sunday, May 15, 2011

Summer of Gnome

As the final week of school comes to a close, I can finally post a little something onto this slice of the web. I was pleasantly surprised to find out that I had been accepted to the Gnome project for Google Summer of Code.

I have never had to work on a such a long-term project by myself. I am both terrified and extremely excited at the prospect. I know I have much to learn as an aspiring programmer, but after a year in college I can already feel the seeds of the computer scientist mindset setting into my mind. I cannot wait to start the Onscreen Keyboard project!

In the meantime, as I get ready for the long journey ahead of me, enjoy the comic that inspired the name of my blog.